2017-01-23 1 views
1

:파이썬 - 내가처럼 보이는 dataframe이 음모를 꾸미고 주 현명한 유통

 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 

싶은 것은 :

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 

히스토그램을 원한다면 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