Я пытаюсь запустить основную seasonal_decompose на часто используемых авиапассажиров набора данных, который начинается с этих строк:seasonal_decompose вызывает ошибку: TypeError: PeriodIndex. Проверьте freq` атрибут `вместо infer_freq
Month
1949-02 4.770685
1949-03 4.882802
1949-04 4.859812
1949-05 4.795791
1949-06 4.905275
1949-07 4.997212
1949-08 4.997212
1949-09 4.912655
1949-10 4.779123
1949-11 4.644391
1949-12 4.770685
1950-01 4.744932
1950-02 4.836282
1950-03 4.948760
1950-04 4.905275
1950-05 4.828314
1950-06 5.003946
1950-07 5.135798
1950-08 5.135798
Freq: M, Name: Passengers, dtype: float64
Мой тип индекса является:
pandas.tseries.period.PeriodIndex
Я пытаюсь запустить некоторые очень простой код:
from statsmodels.tsa.seasonal import seasonal_decompose
log_passengers.interpolate(inplace = True)
decomposition = seasonal_decompose(log_passengers)
Вот полный вывод ошибки:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-113-bf122d457673> in <module>()
1 from statsmodels.tsa.seasonal import seasonal_decompose
2 log_passengers.interpolate(inplace = True)
----> 3 decomposition = seasonal_decompose(log_passengers)
/Users/ann/anaconda/lib/python3.5/site-packages/statsmodels/tsa/seasonal.py in seasonal_decompose(x, model, filt, freq)
56 statsmodels.tsa.filters.convolution_filter
57 """
---> 58 _pandas_wrapper, pfreq = _maybe_get_pandas_wrapper_freq(x)
59 x = np.asanyarray(x).squeeze()
60 nobs = len(x)
/Users/ann/anaconda/lib/python3.5/site-packages/statsmodels/tsa/filters/_utils.py in _maybe_get_pandas_wrapper_freq(X, trim)
44 index = X.index
45 func = _get_pandas_wrapper(X, trim)
---> 46 freq = index.inferred_freq
47 return func, freq
48 else:
pandas/src/properties.pyx in pandas.lib.cache_readonly.__get__ (pandas/lib.c:44097)()
/Users/ann/anaconda/lib/python3.5/site-packages/pandas/tseries/base.py in inferred_freq(self)
233 """
234 try:
--> 235 return frequencies.infer_freq(self)
236 except ValueError:
237 return None
/Users/ann/anaconda/lib/python3.5/site-packages/pandas/tseries/frequencies.py in infer_freq(index, warn)
854
855 if com.is_period_arraylike(index):
--> 856 raise TypeError("PeriodIndex given. Check the `freq` attribute "
857 "instead of using infer_freq.")
858 elif isinstance(index, pd.TimedeltaIndex):
TypeError: PeriodIndex given. Check the `freq` attribute instead of using infer_freq.
Вот что я пытался:
- Использование
decomposition = seasonal_decompose(log_passengers, infer_freq = True)
, который производит ошибку:TypeError: seasonal_decompose() got an unexpected keyword argument 'infer_freq'
- Использование
decomposition = seasonal_decompose(log_passengers, freq = 'M')
, что приводит к ошибке:TypeError: PeriodIndex given. Check the
FREQattribute instead of using infer_freq.
- Я также проверить, что каждый период индекс в моем индексе индексов периода имеет одинаковую частоту со списком кода:
set([x.freq for x in log_passengers.index])
, который действительно создал набор только одной частоты:{<MonthEnd>}
Я вижу некоторые разговоры об этом по различным вопросам Github (https://github.com/pydata/pandas/issues/6771), но ничто из обсуждаемого не помогает. Любые предложения по устранению этого или того, что я делаю неправильно в этом простом seasona_decompose?
Я думаю, что seasonal_decompose не поддерживает индекс периода должным образом. Я думаю, что он должен корректно работать с DateTimeIndex. statsmodels 0.8.0rc1 позволяет заданной 'freq' переопределять все, что находится в индексе pandas. Я не знаю, работает ли это с индексом периода. Пожалуйста, откройте вопрос о statsmodels github, если вы не получите решение в ответ. (Я мало знаю о pandas DateTime и обработке периода.) – user333700