时轮Python3 pandas [英] Time Wheel in python3 pandas

查看:74
本文介绍了时轮Python3 pandas 的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用登录/注销事件时间创建类似于以下内容的时间轮?专门寻找以时间轮方式将平均登录/注销时间与星期几相关联吗?下面的图片是一个示例,但我正在寻找星期几全天候的时间,而现在是图片中的时间.我有可用的python和包括登录时间的数据集.我还想将颜色与用户类型相关联,例如管理员与常规用户或类似性质的用户.关于如何实现这一目标的任何想法都将是很棒的.

How can I create a timewheel similar to below with logon/logoff event times? Specifically looking to correlate mean login/logoff time correlated to the day of the week in a time wheel fashion? The Picture below is an example but I am looking for times going around the clock with days of the week where the times are now in the picture. I have python available to me and data sets that include login times. I would also like to correlate colors to user types such as admins vs regular users or something of that nature. Any thoughts on how to accomplish this would be great.

一些示例数据在熊猫数据框中

Some sample data is below in a pandas dataframe

df:

TimeGenerated        EventID  Username  Message
2012-04-01 00:00:13  4624     Matthew   This guy logged onto the computer for the first time today
2012-04-01 00:00:14  4624     Matthew   This guy authenticated for some stuff 
2012-04-01 00:00:15  4624     Adam      This guy logged onto the computer for the first time today
2012-04-01 00:00:16  4624     James     This guy logged onto the computer for the first time today
2012-04-01 12:00:17  4624     Adam      This guy authenticated for some stuff
2012-04-01 12:00:18  4625     James     This guy logged off the computer for the last time today
2012-04-01 12:00:19  4624     Adam      This guy authenticated for some stuff
2012-04-01 12:00:20  4625     Adam      This guy logged off the computer for the last time today 
2012-04-01 12:00:21  4625     Matthew   This guy logged off the computer for the last time today

推荐答案

基本上,您需要执行2个不相交的任务:

Basically, you need to do 2 disjoint tasks:

  • 创建要可视化的频率表
  • 定义一个函数以可视化给定表

对于第一个任务,我假设您只需要一个具有工作日和工作时间的数据透视表.我生成一个随机的:

For the first task, I assume you need just a pivot table with weekdays and hours. I generate a random one:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.cm as cm
import calendar

# generate the table with timestamps
np.random.seed(1)
times = pd.Series(pd.to_datetime("Nov 1 '16 at 0:42") + pd.to_timedelta(np.random.rand(10000)*60*24*40, unit='m'))
# generate counts of each (weekday, hour)
data = pd.crosstab(times.dt.weekday, times.dt.hour.apply(lambda x: '{:02d}:00'.format(x))).fillna(0)
data.index = [calendar.day_name[i][0:3] for i in data.index]
print(data.T)

看起来像这样.每个号码目前都是登录计数器:

It looks like this. Each number is a counter of logins at this time:

       Mon  Tue  Wed  Thu  Fri  Sat  Sun
col_0                                   
00:00   55   56   67   60   60   62   45
01:00   51   65   70   65   60   59   40
02:00   47   76   67   68   61   63   51
....

现在,让我们为这张桌子画个轮子吧!它将包含多个饼图:

Now, let's draw the wheel for this table! It will consist of multiple pie charts:

# make a heatmap building function 
def pie_heatmap(table, cmap=cm.hot, vmin=None, vmax=None,inner_r=0.25, pie_args={}):
    n, m = table.shape
    vmin= table.min().min() if vmin is None else vmin
    vmax= table.max().max() if vmax is None else vmax

    centre_circle = plt.Circle((0,0),inner_r,edgecolor='black',facecolor='white',fill=True,linewidth=0.25)
    plt.gcf().gca().add_artist(centre_circle)
    norm = mpl.colors.Normalize(vmin=vmin, vmax=vmax)
    cmapper = cm.ScalarMappable(norm=norm, cmap=cmap)
    for i, (row_name, row) in enumerate(table.iterrows()):
        labels = None if i > 0 else table.columns
        wedges = plt.pie([1] * m,radius=inner_r+float(n-i)/n, colors=[cmapper.to_rgba(x) for x in row.values], 
            labels=labels, startangle=90, counterclock=False, wedgeprops={'linewidth':-1}, **pie_args)
        plt.setp(wedges[0], edgecolor='white',linewidth=1.5)
        wedges = plt.pie([1], radius=inner_r+float(n-i-1)/n, colors=['w'], labels=[row_name], startangle=-90, wedgeprops={'linewidth':0})
        plt.setp(wedges[0], edgecolor='white',linewidth=1.5)



plt.figure(figsize=(8,8))
pie_heatmap(data, vmin=-20,vmax=80,inner_r=0.2)

plt.show();

希望对您有帮助.

这篇关于时轮Python3 pandas 的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆