我已經回答了這個問題here,但是下面是關於如何用rpy2做到這一點的快速功能。這使您可以使用R的穩健統計分解與黃土,但在Python!
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
上述函數假定您的系列具有日期時間索引。它返回一個數據框,其中包含您可以使用您最喜歡的圖形庫進行圖形化的單個組件。
你可以通過參數stl看到here,但改變任何週期爲下劃線,例如上述函數中的位置參數是s_window,但在上面的鏈接中是s.window。另外,我在this repository上發現了一些上述代碼。
是的我目前正在使用Scipy,包括statsmodel,pandas和numpy。我能找到的最接近的東西是使用來自熊貓的「resample」,但是這不允許你對時間序列進行解碼。 – user3084006