Сезонная декомпозиция временных рядов лессом с Python
Я пытаюсь сделать с Python то, что я функция STL на R.
команды R являются
fit <- stl(elecequip, s.window=5)
plot(fit)
Как это сделать в Python? Я исследовал, что statmodels.tsa имеет некоторые функции анализа временных рядов, но я мог бы специально найти "сезонную декомпозицию временных рядов лессом" в документации. Аналогично Python.org существует библиотека timeseries 0.5.0, но у нее нет документации, и домашний сайт смотрит вниз. Я знаю, что есть опция с rpy2 с использованием обертки, но я не знаю, как использовать обертку.
спасибо.
3 ответов
у меня была похожая проблема и я пытаюсь найти лучший путь вперед.
вот РЕПО GitHub для декомпозиции STL на основе процедуры Лесса. Он основан на оригинальном коде fortran, который был доступен с этой статье. Это действительно просто оболочка python вокруг исходного кода Fortran, поэтому вы знаете, что он, вероятно, работает хорошо и не глючит.
Если вы хотите что-то более ориентированное на Python и готовы пойти немного проще обычной разложения, StatsModels один:
попробуйте переместить данные в панды DataFrame, а затем вызов StatsModels tsa.seasonal_decompose
. Вижу пример:
import statsmodels.api as sm
dta = sm.datasets.co2.load_pandas().data
# deal with missing values. see issue
dta.co2.interpolate(inplace=True)
res = sm.tsa.seasonal_decompose(dta.co2)
resplot = res.plot()
затем вы можете восстановить отдельные компоненты декомпозиции из:
res.resid
res.seasonal
res.trend
надеюсь, это поможет!
вы также можете вызвать R из 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
вышеуказанная функция предполагает, что ваш ряд имеет индекс datetime. Он возвращает фрейм данных с отдельными компонентами, которые затем можно отобразить с помощью любимой библиотеки графиков.
вы можете передать параметры для STL seen здесь, но измените любой период, чтобы подчеркнуть, например, позиционный аргумент в приведенной выше функции s_window, но в приведенной выше ссылке Это s.окно. Кроме Того, Я нашел некоторые из вышеперечисленных кодов на этой репозитория.