2017-01-23 28 views
1

我有一個數據幀,它看起來像:Python的 - 繪製一週明智分佈

 date 
1  2008-10-05 
10  2007-03-30 
100 2008-07-05 
1000 2007-03-30 
1001 2014-08-14 
1002 2007-09-30 
1003 2007-06-14 
1004 2006-01-13 
1005 2006-08-04 
1006 2007-06-14 
1007 2008-11-30 

我想要做的就是情節的柱狀圖,顯示的日期分佈縮減到一個星期。 例如, 該索引是一個圖片ID,我想深入瞭解2006年10月第一週拍攝的照片數量。換句話說,我需要每週的直方圖。

df['week'].iplot(kind='histogram')只給出了週數,但我想將其與年份相關聯。

如果有人能夠幫助我使用plot.ly來繪製直方圖,那將會很棒。 matplotlib圖也可以。

感謝您的幫助。

編輯:下面是最終解決我的問題:

df_new = df.groupby(['year','week']).count()['date'] 
df_dict = df_new.to_dict() 
df_tups = [(' wk#'.join(map(str,key)), df_dict[key]) for key in df_dict.keys()] 
df_tups = sorted(df_tups, key=lambda x : (x[0], x[1])) 
x = ["'"+tup[0][2:] for tup in df_tups] 
y = [tup[1] for tup in df_tups] 
trace1 = go.Bar(
      x = x, 
      y = y 
     ) 

data = [trace1] 
layout = go.Layout(
    xaxis=dict(tickangle=45) 
) 
fig = dict(data=data, layout=layout) 
py.iplot(fig) 
+0

你能列名添加到您的數據幀? –

+0

當然,絕對。 @MaximilianPeters –

+0

在您的示例數據中沒有「星期」欄或我錯過了什麼? –

回答

1

讓你的DF是:

df = date 
7 2012-06-11 
3 2012-09-28 
19 2012-10-01 
2 2012-10-03 
6 2012-12-22 
1 2013-02-19 
9 2013-02-28 
12 2013-03-12 
4 2013-04-04 
17 2013-04-18 
11 2013-05-17 
5 2013-07-07 
14 2013-10-22 
13 2014-01-16 
15 2014-02-25 
18 2014-03-19 
0 2014-03-31 
16 2014-04-01 
8 2014-04-27 
10 2014-09-20 

你想要做的是:

df['week'] = df['date'].map(lambda x: x.isocalendar()[1]) 
df['year'] = df['date'].map(lambda x: x.isocalendar()[0]) 
data = df.groupby(['year','week']).count() 

是WLD給你:

 date 
year week count  
2012 24  1 
     39  1 
     40  2 
     51  1 
2013 8  1 
     9  1 
     11  1 
     14  1 
     16  1 
     20  1 
     27  1 
     43  1 
2014 3  1 
     9  1 
     12  1 
     14  2 
     17  1 
     38  1 

現在,如果你想直方圖,你可以做每年,或者你可以做整個期間。但是你必須每年增加52周,每年每年高於你設置的年份中的第一年,否則它會混合不同年份的週數

0

當一個數據幀/ a系列類型爲datetime,您有一個特殊的訪問器dt來應用向量化日期時間函數(與字符串系列的str特殊訪問器的方法相同)。使用此功能,以獲得您所期望的分組:

df.groupby([df.date.dt.year, df.date.dt.week]).size() 
Out[16]: 
date date 
2006 2  1 
     31  1 
2007 13  2 
     24  2 
     39  1 
2008 27  1 
     40  1 
     48  1 
2014 33  1 
dtype: int64