seasonal_decompose:操作数无法与系列中的形状一起广播

时间:2017-02-21 10:34:44

标签: pandas numpy time-series statsmodels decomposition

我知道这个话题有很多问题,但没有一个能帮助我解决这个问题。我真的很困惑。

用一个简单的系列:

cv_results_

我一直在: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()

我已经尝试了很多东西,只传递了logdf.values,传递了非日志系列。它不起作用。 Numpy和statsmodel版本:

ValueError: operands could not be broadcast together with shapes (12,) (14,)

2 个答案:

答案 0 :(得分: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或小于12的任何其他int,例如

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

这是有效的

答案 1 :(得分:0)

我注意到,对于较新的熊猫和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()

enter image description here

我希望这也可以解决你的问题。