2017-07-28 86 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

謝謝你解決我的問題 –