2010-01-14 1 views
7

Я ищу сезонные корректировки ежемесячных данных с помощью Python. Как видно из этих серий: www.emconfidential.com, для данных имеется высокий сезонный компонент. Я бы хотел приспособиться к этому, чтобы я мог лучше понять, растет ли тенденция или падение серии. Кто-нибудь знает, как сделать это легко, используя scipy или другую библиотеку Python?Сезонная корректировка в Python и Scipy

ответ

3

Нет волшебной библиотеки питонов, которая будет выполнять сезонные корректировки для вас. Приложения, которые делают такие вещи, как правило, составляют rather large.

Вам нужно будет разработать математику yourself, а затем использовать scipy, чтобы рассчитать остальное для вас.

+0

Спасибо, я думаю, вы правы, что я просто запрограммирую его сам. Ваш PDF - хороший источник. Однако не совсем верно, что нет библиотек-питонов, которые делают это: http://hydroclimpy.sourceforge.net/generated/scikits.hydroclimpy.core.ts_addons.deseasonalize.html#scikits.hydroclimpy.core.ts_addons.deseasonalize Проблема выше - это не тот алгоритм, который я хочу. Я ищу реализацию X12 Arima. –

+2

К сожалению, ссылка на pdf кажется сломанной, или файл удален. Как получить его копию? – FaCoffee

0

Не уверен в аспекте программирования этого, но я бы серьезно подумал о скользящих средних, чтобы решить эту проблему.

+2

Это работает в течение 12 периода скользящей средней, единственная проблема заключается в том, что если я хочу, чтобы экстраполировать от последние 3 или 6 месяцев данных, чтобы начать получать представление о тенденции развития? Тогда мне нужна правильная сезонная корректировка. –

3

Statsmodels могут это сделать. У них есть основное сезонное разложение, а также обертка для перестройки X13. Вы также можете использовать rpy2 для доступа к некоторым из превосходных библиотек SA R. Вот 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, разработанный командой data science at Facebook. Он имеет API Python + R и используется для прогнозирования временных рядов, хотя вы можете использовать его только для разложения вашей серии в свои компоненты (тренд против сезонности). Вы можете легко настроить и визуализировать разложение:

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