python - pandas时间序列索引和statsmodel中的频率
问题描述
y
我有一个不能很好地与statsmodel
函数配合使用的熊猫时间序列。
import statsmodels.api as sm
y.tail(10)
2019-09-20 7.854
2019-10-01 44.559
2019-10-10 46.910
2019-10-20 49.053
2019-11-01 24.881
2019-11-10 52.882
2019-11-20 84.779
2019-12-01 56.215
2019-12-10 23.347
2019-12-20 31.051
Name: mean_rainfall, dtype: float64
我验证它确实是一个时间序列
type(y)
pandas.core.series.Series
type(y.index)
pandas.core.indexes.datetimes.DatetimeIndex
从这里,我可以毫无问题地通过自相关函数传递时间序列,从而产生预期的输出
plot_acf(y, lags=72, alpha=0.05)
但是,当我尝试将这个完全相同的对象传递y
给 SARIMA
mod = sm.tsa.statespace.SARIMAX(y.mean_rainfall, order=pdq, seasonal_order=seasonal_pdq)
results = mod.fit()
我收到以下错误:
已提供日期索引,但它没有相关的频率信息,因此在预测时将被忽略。
问题是我的时间序列的频率不规则(它是每个月的 1 号、10 号和 20 号),所以我无法设置freq='m'
或 freq='D'
例如。在这种情况下,解决方法是什么?
我是使用时间序列的新手,任何关于如何在预测期间不忽略我的索引的建议都会有所帮助。这可以防止任何预测成为可能
解决方案
正如我所看到的,包使用频率作为一切的前提,因为它是一个时间序列问题。因此,您将无法将其与不同频率的数据一起使用。事实上,您必须为您的分析做出一个假设,以使您的数据充足以供使用。一些选项是:
1) 考虑 3 种不同的分析(分别为第 1 天、第 10 天、第 20 天)并使用 30 天的频率。
2)由于您有约 10d 等分数据,您可以考虑使用某种插值,然后下采样到 1d 的频率。当然,此选项仅根据问题的性质和数据更改的速度才有意义。
无论哪种方式,我只想指出,在处理时间序列和一般数据科学时,如何建模问题和数据是关键。以我作为数据科学家的经验,我可以说是在域(数据来自哪里)进行分析,您可以感觉到哪种方法会更好。
推荐阅读
- c++ - Why calendar week number updates on Monday at 3 a.m., but not at midnight?
- jquery - Socket.io 没有改变 HTML
- angular - 基础工具提示:elem.getAttribute 不是函数
- django - 使用 flaggit 定义 Django Rest Framework 视图
- python - 如何在plotly3(不是plotly4)中并排绘制表格和散点图
- operating-system - python程序的内核数与cpu数
- vue.js - v-btn 'to' 属性添加到基本 url (localhost) 的路径,我怎样才能定向到另一个网站?
- python - 将 Python 文件转换为 .exe,包括库
- powerbi - Need to limit the date in a slicer by today's date in Power BI
- vue.js - 提交表单并收到状态 200 后如何导航