seasonal_decompose: 操作数无法与系列中的形状一起广播
seasonal_decompose: operands could not be broadcast together with shapes on a series
我知道有很多关于这个主题的问题,但是 none 帮助我解决了这个问题。我真的坚持这个。
简单系列:
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
我注意到使用较新的 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
...
和pd/sm版本:
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()
希望这也能解决你的问题。
正如@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')
这有效
我知道有很多关于这个主题的问题,但是 none 帮助我解决了这个问题。我真的坚持这个。
简单系列:
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
我注意到使用较新的 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
...
和pd/sm版本:
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()
希望这也能解决你的问题。
正如@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')
这有效