2013-12-19 17 views
34

시계열 분해는 시계열 데이터 집합을 3 개 (또는 그 이상의) 구성 요소로 분리하는 방법입니다. 예를 들어 R에서Python의 시계열 분해 함수

t is the time coordinate 
x is the data 
s is the seasonal component 
e is the random error term 
m is the trend 

내가 기능 decomposestl 할 것

x(t) = s(t) + m(t) + e(t) 

. 어떻게하면 파이썬에서이 작업을 수행 할 수 있습니까?

답변

-1

scipy 님은 아직 소개하지 않으셨습니까? 내가 몇 PDF 파일/사이트

Here

Here

에서 무엇을 본 적이에서 그것은 해 드리겠습니다. 그러나 구체적인 예를 보지 않고 누군가가 여러분에게 코드 예제를 보여주기가 어려울 것입니다. Scipy는 내 연구 자료에서 사용하는 것이 대단합니다.

+2

예 현재 저는 statsmodel, pandas 및 numpy를 포함한 Scipy를 사용하고 있습니다. 내가 찾을 수있는 가장 가까운 것은 팬더의'resample'을 사용하는 것이지만 그것은 당신이 timeseries를 deseason하는 것을 허락하지 않습니다. – user3084006

5

당신과 함께 주사위를 사용하여 RPY2를 설치 rpy2 를 사용하여 파이썬에서 R의 함수를 호출 할 수 있습니다 : RPY2 를 설치 PIP 그런 다음이 래퍼 사용 : R에서 제공하는 STL의 기능을 호출하는 https://gist.github.com/andreas-h/7808564을 나는 비슷한 문제가 발생했습니다

44

최선의 길을 찾으려고 노력하고 있습니다. 데이터를 Pandas DataFrame으로 이동 한 다음 StatsModelstsa.seasonal_decompose을 호출하십시오. 참조 following example :이 도움이되기를 바랍니다

res.resid 
res.seasonal 
res.trend 

:

import statsmodels.api as sm 

dta = sm.datasets.co2.load_pandas().data 
# deal with missing values. see issue 
dta.co2.interpolate(inplace=True) 

res = sm.tsa.seasonal_decompose(dta.co2) 
resplot = res.plot() 

Three plots produced from above input

그런 다음에서 분해의 개별 구성 요소를 복구 할 수 있습니다!

+0

구성 요소에서 원래의 시계열을 어떻게 재구성합니까? – vgoklani

+0

뺄셈 또는 나누기를 통해 해체할지 여부를 선택할 수 있습니다. 추가가 일반적인 방법이며,이 경우 구성 요소를 다시 추가하면됩니다. – AN6U5

+0

코드 스 니펫에서 어떤 변수가 입력 데이터를 보유하고 있습니까? – davneet

2

이미이 질문에 대한 답변은 here이지만, rpy2를 사용하여이 작업을 수행하는 방법에 대한 빠른 기능은 아래에 나와 있습니다. 이것은 황토로 R의 강력한 통계적 분해를 사용할 수있게하지만, 파이썬에서는 가능합니다!

from rpy2.robjects import r 
def decompose(series, frequency, s_window, **kwargs): 
    df = pd.DataFrame() 
    df['date'] = series.index 
    s = [x for x in series.values] 
    length = len(series) 
    s = r.ts(s, frequency=frequency) 
    decomposed = [x for x in r.stl(s, s_window, **kwargs).rx2('time.series')] 
    df['observed'] = series.values 
    df['trend'] = decomposed[length:2*length] 
    df['seasonal'] = decomposed[0:length] 
    df['residual'] = decomposed[2*length:3*length] 
    return df 

위 함수는 계열에 datetime 인덱스가 있다고 가정합니다. 개별 구성 요소가있는 데이터 프레임을 반환하며,이를 사용자가 선호하는 그래프 라이브러리로 그래프로 나타낼 수 있습니다.

here으로 표시된 stl에 대한 매개 변수를 전달할 수 있지만 모든 기간을 밑줄로 변경하십시오. 예를 들어 위 함수의 위치 인수는 s_window이지만 위 링크에서는 s.window입니다. 또한 위 코드 중 일부는 this repository에 있습니다.