2010-01-14 125 views
7

我正在尋找季節性調整每月數據,使用Python。正如你可以從這些系列中看到的那樣:www.emconfidential.com,這個數據有很高的季節性分量。我想對此進行調整,以便在系列趨勢正在上升或下降時我能夠更好地衡量。任何人都知道如何輕鬆地使用scipy或其他Python庫來做到這一點?Python和Scipy的季節性調整

回答

3

沒有神奇的python庫會爲你做季節性調整。做這種事情的應用程序往往是rather large

您需要計算出數學yourself,然後使用scipy爲您計算其餘的值。

+0

謝謝,我認爲你是對的,我只是自己編程。您的PDF是一個很好的來源。然而,並不是真的,沒有這樣做的python庫:http://hydroclimpy.sourceforge.net/generated/scikits.hydroclimpy.core.ts_addons.deseasonalize.html#scikits.hydroclimpy.core.ts_addons.deseasonalize 問題以上是不是我想要的算法。我正在尋找X12 Arima的實施。 – 2010-01-14 21:34:02

+2

不幸的是,PDF鏈接似乎被打破,或文件已被刪除。無論如何,如何獲得它的副本? – FaCoffee 2017-03-13 20:04:52

0

不確定在編程方面,但我會認真考慮移動平均數來解決這個問題。

+2

,對於一個12週期均線的作品,唯一的問題是,如果我想從外推什麼最近3或6個月的數據,開始瞭解發展趨勢?那我需要適當的季節性調整。 – 2010-01-14 20:17:03

3

Statsmodels可以做到這一點。他們有一個基本的季節性分解,也是人口普查X13調整的一個包裝。你也可以使用rpy2來訪問一些R的優秀SA庫。這裏是statsmodels季節性分解:

import pandas as pd 
import statsmodels.api as sm 
import matplotlib.pyplot as plt 
pd.options.display.mpl_style = 'default' 
%matplotlib inline 

dta = sm.datasets.co2.load_pandas().data.resample("M").fillna(method="ffill") 

res = sm.tsa.seasonal_decompose(dta) 

fig = res.plot() 
fig.set_size_inches(10, 5) 
plt.tight_layout() 

http://statsmodels.sourceforge.net/0.6.0/release/version0.6.html

1

現在有這似乎正是你正在尋找一個包!查看seasonal包,這裏是link。我個人認爲它非常有用,想知道別人怎麼想。

1

我建議Prophet由Facebook的數據科學團隊開發。它具有Python + R API,可用於時間序列預測,儘管您可以將其用於將系列分解爲其組件(趨勢與季節性)。您可以輕鬆地調整和可視化分解:

from fbprophet import Prophet 
import numpy as np 
import pandas as pd 

# Create series 
np.random.seed(0) 
x = np.arange(0, 10, .285) 
y_periodic = np.sin(x*np.pi) 
y_random = np.random.normal(size=len(x)) 
y_trend = x/10. 
df = pd.DataFrame({'ds': pd.date_range('01-01-2017', periods=len(x)), 
        'y': y_periodic}) 
df.head() # has to be a DataFrame with columns "ds" and "y" 
df.set_index('ds').plot(style='-*') 

Series with noise

# Estimate the model 
m = Prophet() 
m.fit(df); 
forecast = m.predict(df) 
m.plot_components(forecast); 

Trend and seasonality decomposition