您可以使用Python rpy2
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
上述功能假定您的系列有日期時間指數也叫R上。它返回一個數據框,其中包含您可以使用您最喜歡的圖形庫進行圖形化的單個組件。
你可以通過參數stl看到here,但改變任何週期爲下劃線,例如上述函數中的位置參數是s_window,但在上面的鏈接中是s.window。另外,我在this存儲庫中發現了上述一些代碼。
引用StatsModels 0.6.0發佈注意:「我們添加了一個天真的季節性分解工具,與R的分解相同。」所以認爲這可能不是生產就緒。 – 2015-02-09 16:08:01
我不認爲分解和基於模型的方法或Loess程序一樣強大,但它確實看起來可以在生產中使用。沒有報告的錯誤,它似乎在我執行的測試中工作。你還看到了什麼讓你說它不是生產準備好的? – AN6U5 2015-02-10 20:22:05
「天真的季節分解」就是這樣,而且,這意味着很少(幼稚貝葉斯,天真,但如果數據符合假設,則工作得很好)。 同時引用代碼中的註釋「這是一個天真的分解,更復雜的方法應該是首選。」所以,如果它適合你,那麼很好,但要記住你正在使用的是什麼。 – 2015-02-12 09:17:53