我有一个时间序列信号,想在 Python 中分解,所以我转向 statsmodels.seasonal_decompose()。我的数据频率为 48(每半小时)。我遇到了同样的错误这位提问者 https://stackoverflow.com/questions/34457281/decomposing-trend-seasonal-and-residual-time-series-elements,其中解决方案是将 Int 索引更改为 DatetimeIndex。但我不知道我的数据来自的实际日期/时间。
In 这个 github 线程 https://github.com/statsmodels/statsmodels/issues/3225,statsmodels 贡献者之一说
“在 0.8 中,您应该能够指定 freq 作为关键字参数
覆盖索引。”
但对我来说似乎并非如此。这是说明我的问题的最小代码示例:
import statsmodels.api as sm
dta = pd.Series([x%3 for x in range(100)])
decomposed = sm.tsa.seasonal_decompose(dta, freq=3)
AttributeError: 'RangeIndex' object has no attribute 'inferred_freq'
版本信息:
import statsmodels
print(statsmodels.__version__)
0.8.0
有没有办法以指定的频率分解 statsmodels 中的时间序列,但没有 DatetimeIndex?
如果没有,在 Python 中是否有更好的替代方案?我查看了季节性套餐,但是它的github https://github.com/welch/seasonal列出了 0 次下载/月、一名贡献者和 9 个月前的最后一次提交,所以我不确定我是否想要在我的项目中依赖它。
感谢 josef-pkt 在 github 上回答这个问题。 statsmodels 0.8.0 中存在一个错误,如果传递了 Pandas 对象,它总是尝试根据 DatetimeIndex 计算推断频率。
使用 Pandas 系列时的解决方法是将它们的值传递到 numpy 数组中seasonal_decompose()
。例如:
import statsmodels.api as sm
my_pandas_series = pd.Series([x%3 for x in range(100)])
decomposed = sm.tsa.seasonal_decompose(my_pandas_series.values, freq=3)
(没有错误)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)