Season_decompose: операнды нельзя было транслировать вместе с фигурами в серии.

Я знаю, что есть много вопросов по этой теме, но ни один из них не помог мне решить эту проблему. Я действительно застрял на этом.

С простой серией:

0
2016-01-31  266
2016-02-29  235
2016-03-31  347
2016-04-30  514
2016-05-31  374
2016-06-30  250
2016-07-31  441
2016-08-31  422
2016-09-30  323
2016-10-31  168
2016-11-30  496
2016-12-31  303

import statsmodels.api as sm
logdf = np.log(df[0])
decompose = sm.tsa.seasonal_decompose(logdf,freq=12, model='additive')
decomplot = decompose.plot()

я продолжаю получать: ValueError: operands could not be broadcast together with shapes (12,) (14,)

Я пробовал почти все, передавая только logdf.values, передавая нелогарифмические серии. Это не работает. Версии Numpy и statsmodel:

print(statsmodels.__version__)
print(pd.__version__)
print(np.__version__)
0.6.1
0.18.1
1.11.3

person Marco Goldin    schedule 21.02.2017    source источник
comment
Что такое ноль перед вашим рядом данных? Кроме того, мы не можем оценить сезонный эффект, если существует только один сезон. Невозможно отличить сезон от тенденции или других эффектов.   -  person Josef    schedule 21.02.2017
comment
Я думаю, что 0 над датами просто означает, что у него есть серия панд, проиндексированная по этим датам.   -  person Max Power    schedule 22.02.2017
comment
Макс прав, серия панд проиндексирована по этим датам. Почему мы не можем оценить сезонный эффект только по одному сезону? В любом случае, это всего лишь серия образцов, я получил больший набор данных, сгруппированный по датам (фактически пересчитанный), и все же я получил эту ошибку (должно быть связано с numpy, я думаю)   -  person Marco Goldin    schedule 23.02.2017
comment
Вы когда-нибудь узнавали проблему с этим? Я тоже сталкиваюсь с этой очень раздражающей ошибкой.   -  person xv70    schedule 08.06.2017
comment
Здесь тоже такая же проблема   -  person yoav_aaa    schedule 26.09.2017
comment
Я думаю, что параметр freq должен быть меньше длины временного ряда. Проблема не в версии.   -  person yoonforh    schedule 20.04.2018


Ответы (2)


Как указал @yoonforh, в моем случае это было исправлено путем установки для параметра freq значения меньше длины временного ряда. Например. если ваш временной ряд ts выглядит так:

2014-01-01    0.0
2014-02-01    0.0
2014-03-01    1.0
2014-04-01    1.0
2014-05-01    0.0
2014-06-01    1.0
2014-07-01    1.0
2014-08-01    0.0
2014-09-01    0.0
2014-10-01    1.0
2014-11-01    0.0
2014-12-01    0.0

форма

(12,)

так что это даст ошибку, как указано выше:

seasonal_decompose(ts, freq=12, model='additive')

но если я попробую freq=11 или любой другой int меньше 12, например.

seasonal_decompose(ts, freq=11, model='additive')

это работает

person tsando    schedule 15.05.2018

я заметил, что с более новыми версиями pandas и statsmodel это работает.

Дан ряд:

2016-01-03    8.326275
2016-01-10    8.898229
2016-01-17    8.754792
2016-01-24    8.658172
2016-01-31    8.731659
2016-02-07    9.047233
2016-02-14    8.799662
2016-02-21    8.783549
2016-02-28    8.782783
2016-03-06    9.081825
2016-03-13    8.737934
2016-03-20    8.658693
2016-03-27    8.666475
2016-04-03    9.029178
2016-04-10    8.781555
2016-04-17    8.720787
2016-04-24    8.633909
2016-05-01    8.937744
2016-05-08    8.804925
2016-05-15    8.766862
2016-05-22    8.651899
2016-05-29    8.653645
...

И пд/см версия:

statsmodels.__version__ 0.8.0
pandas.__version__ 0.20.1

Вот результат:

import statsmodels.api as sm
logdf = np.log(df_series)
decompose = sm.tsa.seasonal_decompose(logdf, model='additive', filt=None, freq=1, two_sided=True)
decompose.plot()

введите здесь описание изображения

Я надеюсь, что это может решить и вашу проблему.

person Marco Goldin    schedule 02.10.2017
comment
разве установка freq=1 не подрывает смысл разложения? Если я правильно понимаю, сезонные и остаточные компоненты всегда будут пустыми - person IzZy; 15.04.2021