2014-10-22 4 views
8

매일 상자가있는 팬더 시계열에 대한 상자 그림을 만들려면 어떻게해야합니까? 한 상자에 24 개 값으로 구성해야 시간별 데이터의팬더의 시계열 상자

샘플 데이터 세트 :

import pandas as pd 
n = 480 
ts = pd.Series(randn(n), 
       index=pd.date_range(start="2014-02-01", 
            periods=n, 
            freq="H")) 
ts.plot() 

내가 하루 동안 여분의 열을 만들 수 있다는 것을 알고 있지만 적절한 x 축 라벨을 가지고 싶습니다 x-limit 기능 (예 : ts.plot())을 사용하면 datetime 인덱스로 작업 할 수있게됩니다.

내가 원하는 것을 명확히하는 데 도움이된다면 R/ggplot2 here과 비슷한 질문이 있습니다.

+1

https://stackoverflow.com/questions/17194581/best-way-to-generate-day-of-week-boxplots-from-a- pandas-timeseries) .Pandas,'.boxplot()'및'.pivot()'함수 만 사용하고 Seaborn은 필요하지 않습니다. – cardamom

답변

6

옵션이 있다면 Matplotlib의 래퍼 인 Seaborn을 사용하는 것이 좋습니다. 자신의 시계에서 그룹을 반복하여 직접 할 수도 있지만 훨씬 많은 작업이 필요합니다. 제공

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

n = 480 
ts = pd.Series(np.random.randn(n), index=pd.date_range(start="2014-02-01", periods=n, freq="H")) 


fig, ax = plt.subplots(figsize=(12,5)) 
seaborn.boxplot(ts.index.dayofyear, ts, ax=ax) 

: 나는 당신의 데이터가이 작동하지 않을 다년간에 걸쳐있는 경우, 시본하는 grouperday of year을 통과하고있어 enter image description here

참고. 당신은 다음과 같이 고려할 수있다 : 당신이 식용으로 사용할 수있는 3 시간 단위에 대한

ts.index.to_series().apply(lambda x: x.strftime('%Y%m%d')) 

편집,하지만 정의 된 분 이하가 없을 경우에만 작동합니다. :

[(dt - datetime.timedelta(hours=int(dt.hour % 3))).strftime('%Y%m%d%H') for dt in ts.index] 
+0

어쨌든 seaborn을 사용하므로 실제로 선택 사항입니다. 감사!/edit : 임의의 시간에 이것을 사용하는 방법이 있습니까? 3 시간 박스 플롯, 7 일 박스 플롯 등? –

+1

예, Seaborns 그루퍼에게 뭐든지 할 수 있습니다. 일련의 지표에서 그룹을 정의하는 것이 문제입니다. 나는 3 시간 단위로 예제를 추가했다. 그런 식으로 임의의 시간 동안 일할 수 있습니다. 유감스럽게도 그다지 읽을 수는 없지만, 아마도 Pandas'Timegrouper '를 사용함으로써 단순화가 가능할 것입니다. Seaborns의 특정 질문을 열면 Seaborn을 많이 사용하는 사람들로부터 도움을 얻을 수 있습니다. –

5

(충분하지 담당자는 그래서 대신 답변을 추가 허용 솔루션에 대해 언급합니다.)

허용 된 코드는 두 개의 작은 오류가 있습니다 : (1) numpy 수입을 추가해야합니다 (2) boxplot 문에서 xy 매개 변수를 바꿀 수 있습니다. 다음은 표시된 플롯을 생성합니다. [여기에서 이러한 가능성에 대한 더 좋은 해결책은 (존재

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

n = 480 
ts = pd.Series(np.random.randn(n), index=pd.date_range(start="2014-02-01", periods=n, freq="H")) 

fig, ax = plt.subplots(figsize=(12,5)) 
seaborn.boxplot(ts.index.dayofyear, ts, ax=ax) 
+0

당신은 최고입니다! – zkytony

+0

좋습니다. 나는 받아 들인 대답을 편집했다. –