Я ищу сезонные корректировки ежемесячных данных с помощью Python. Как видно из этих серий: www.emconfidential.com, для данных имеется высокий сезонный компонент. Я бы хотел приспособиться к этому, чтобы я мог лучше понять, растет ли тенденция или падение серии. Кто-нибудь знает, как сделать это легко, используя scipy или другую библиотеку Python?Сезонная корректировка в Python и Scipy
ответ
Нет волшебной библиотеки питонов, которая будет выполнять сезонные корректировки для вас. Приложения, которые делают такие вещи, как правило, составляют rather large.
Вам нужно будет разработать математику yourself, а затем использовать scipy, чтобы рассчитать остальное для вас.
Не уверен в аспекте программирования этого, но я бы серьезно подумал о скользящих средних, чтобы решить эту проблему.
Это работает в течение 12 периода скользящей средней, единственная проблема заключается в том, что если я хочу, чтобы экстраполировать от последние 3 или 6 месяцев данных, чтобы начать получать представление о тенденции развития? Тогда мне нужна правильная сезонная корректировка. –
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
Существует в настоящее время пакет, который, как представляется, именно то, что вы ищете! Посмотрите пакет seasonal
, вот link. Я лично считаю, что это очень полезно, интересно, что думают другие.
Я бы предложил 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='-*')
# Estimate the model
m = Prophet()
m.fit(df);
forecast = m.predict(df)
m.plot_components(forecast);
Спасибо, я думаю, вы правы, что я просто запрограммирую его сам. Ваш PDF - хороший источник. Однако не совсем верно, что нет библиотек-питонов, которые делают это: http://hydroclimpy.sourceforge.net/generated/scikits.hydroclimpy.core.ts_addons.deseasonalize.html#scikits.hydroclimpy.core.ts_addons.deseasonalize Проблема выше - это не тот алгоритм, который я хочу. Я ищу реализацию X12 Arima. –
К сожалению, ссылка на pdf кажется сломанной, или файл удален. Как получить его копию? – FaCoffee