2017-01-23 9 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

サンプルデータに「week」列がないか、何か不足していますか? –

答えて

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 

は次のとおりです。WLD

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() 

あなたに与える:

 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

データフレーム/ 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 
関連する問題