【问题标题】:statsmodel ARMA function is incompatiable with Pandas?statsmodel ARMA 函数与 Pandas 不兼容?
【发布时间】:2013-07-08 22:21:01
【问题描述】:

我有一个记录间隔为 30 秒的数据集,我正在尝试使用时间序列模块中的 ARMA 函数进行预测预测。由于数据隐私,我使用了随机数据来重现错误

import numpy as np
from pandas import *
import statsmodels.api as sm
data = np.random.rand(100000)
data_index = date_range('2013-5-26', periods = len(data), freq='30s')
data = np.array(data)
data_series = Series(data, index = data_index)
model = sm.tsa.ARMA(data_series,(1,0)).fit()

我的包版本:
Python 版本 2.7.3
熊猫版本 0.11.0
statsmodels 0.5.0版

主要错误信息如下(我省略了一些):

ValueError        Traceback (most recent call last)
<ipython-input-24-0f57c74f0fc9> in <module>()

6 data = np.array(data)
7 data_series = Series(data, index = data_index)
----> 8 model = sm.tsa.ARMA(data_series,(1,0)).fit()

...........

...........

ValueError: freq 30S not understood

在我看来,ARMA 不支持 pandas 生成的日期格式?如果我删除 date_range 中的 freq 选项,则此命令将再次不适用于大型系列,因为年份将远远超出 pandas 限制。

无论如何要绕过?谢谢

更新: 好的,使用 data_series.values 会起作用,但是接下来,我该如何进行预测?我的 data_index 来自 [2013-05-26 00:00:00, ..., 2013-06-29 17:19:30]

prediction = model.predict('2013-05-26 00:00:00', '2013-06-29 17:19:30', dynamic=False)

还是报错

我知道 prediction = model.predict() 可以通过并生成全序列预测,然后我可以匹配,但总体来说不是那么方便。

【问题讨论】:

标签: python pandas statsmodels


【解决方案1】:

问题在于,由于某种原因,此频率不会返回来自 pandas 的偏移量,我们需要一个偏移量才能将日期用于任何事情。它看起来像一个熊猫错误/对我来说没有实现。

from pandas.tseries.frequencies import get_offset
get_offset('30s')

也许我们可以改进错误消息。

[编辑我们实际上并不需要日期,只是为了方便预测而将它们添加回来,因此您仍然可以使用 data_series.values 来估计模型。]

【讨论】:

  • 好的,使用 data_series.values 会起作用,但是接下来,我该如何进行预测?我的 data_index 来自 [2013-05-26 00:00:00, ..., 2013-06-29 17:19:30] 预测 = model.predict('2013-05-26 00:00:00', '2013-06-29 17:19:30', dynamic=False) 也给我一个错误
  • 是的,如果不给出日期索引,则无法使用日期进行预测。您必须使用索引值,这无疑是令人困惑的。如果您真的只想提前一步进行样本内预测,您可以省略开始和结束model.predict()。这是默认设置。请参阅预测的文档字符串。
猜你喜欢
  • 2018-11-10
  • 2018-06-23
  • 2023-04-05
  • 2020-05-21
  • 2018-09-22
  • 1970-01-01
  • 2023-01-26
  • 2015-01-01
  • 2014-01-16
相关资源
最近更新 更多