2017-07-28 27 views
2

我必须分析在给定期间使用应用程序的用户的活动,期间是开始和结束时间戳。我尝试了一个条形图,但我不知道如何在间隔中包含小时。 例:与UID = 2使用在[18,19,20,21]熊猫:如何用开始和结束时间戳分析数据?

应用程序用户

我的数据帧是这样的:

uid   sex   start     end 
1    0  2000-01-28 16:47:00 2000-01-28 17:47:00 
2    1  2000-01-28 18:07:00 2000-01-28 21:47:00 
3    1  2000-01-28 18:47:00 2000-01-28 20:17:00 
4    0  2000-01-28 08:00:00 2000-01-28 10:00:00 
5    1  2000-01-28 02:05:00 2000-01-28 02:30:00 
6    0  2000-01-28 15:10:00 2000-01-28 18:04:00 
7    0  2000-01-28 01:50:00 2000-01-28 03:00:00 


df['hour_s'] = pd.to_datetime(df['start']).apply(lambda x: x.hour) 
df['hour_e'] = pd.to_datetime(df['end']).apply(lambda x: x.hour) 

uid   sex   start     end    hour_s  hour_e 
1    0  2000-01-28 16:47:00 2000-01-28 17:47:00 16   17 
2    1  2000-01-28 18:07:00 2000-01-28 21:47:00 18   21 
3    1  2000-01-28 18:47:00 2000-01-28 20:17:00 18   20 
4    0  2000-01-28 08:00:00 2000-01-28 10:00:00 08   10 
5    1  2000-01-28 02:05:00 2000-01-28 02:30:00 02   02 
6    0  2000-01-28 15:10:00 2000-01-28 18:04:00 15   18 
7    0  2000-01-28 01:50:00 2000-01-28 03:00:00 01   03 

我必须找到在specifc小时用户数量

+0

[本博文](http://www.clowersresearch.com/main/gantt-charts-in-matplotlib/)给出了你想要的详细例子,请看看 –

+0

甚至更​​好,[这里](https ://stackoverflow.com/questions/43367690/how-to-get-gantt-p lot-using-matplotlib) –

回答

1

我不确定您是否在寻找甘特图。如果是这样,@ViníciusAguiar的提示在评论中。

从你的最后一行

我必须找到一个specifc小时

看来你需要一张以一天中每小时摆动用户量(freqeuncy)直方图的用户数。 如果是这样的话,你可以这样做:

#! /usr/bin/python3 

import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 

# Read the data 
df=pd.read_csv("data.csv") 

# Get all hours per user (per observation) 
def sum_hours(obs): 
    return(list(range(obs['hour_s'],obs['hour_e']+1,1))) 

# Get all existing activity hours (No matter which user) 
Hours2D=list(df.apply(sum_hours,axis=1)) 
# Get all existing hours 
HoursFlat=[hour for sublist in Hours2D for hour in sublist] 

plt.hist(HoursFlat,rwidth=0.5,range=(0,24)) 
plt.xticks(np.arange(0,24, 1.0)) 
plt.xlabel('Hour of day') 
plt.ylabel('Users') 
plt.show() 

哪里data.csv为您提供的样本:

uid, sex,start,end,hour_s,hour_e 
1,0,2000-01-28 16:47:00,2000-01-28 17:47:00,16,17 
2,1,2000-01-28 18:07:00,2000-01-28 21:47:00,18,21 
3,1,2000-01-28 18:47:00,2000-01-28 20:17:00,18,20 
4,0,2000-01-28 08:00:00,2000-01-28 10:00:00,08,10 
5,1,2000-01-28 02:05:00,2000-01-28 02:30:00,02,02 
6,0,2000-01-28 15:10:00,2000-01-28 18:04:00,15,18 
7,0,2000-01-28 01:50:00,2000-01-28 03:00:00,01,03 

你应该得到下图: Data pivoted showing user amounts by hour

+0

您还可以使用Hours2D和HoursFlat变量并运行其他分析,而不仅仅是可视化。 (异常值,按日间聚类等) – AChervony

+0

请注意,这仅仅是一个定向示例,并且仅适用于您的观察结果每个用户每天都是唯一的,因为它们与样本数据集中的观察值相同。 – AChervony

+0

谢谢你解决我的问题 –

相关问题