我有一个记录间隔为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不支持熊猫生成的日期格式?如果我删除date_range中的freq选项,那么这个命令将不再适用于大型系列,因为这一年将超出熊猫限制。
无论如何要到处走走?感谢
更新: 好的,使用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)
仍然给我一个错误
我知道预测= model.predict()可以通过并生成完整的序列预测,然后我可以匹配,但总体而言并不那么方便。
答案 0 :(得分:1)
问题是这个freq由于某种原因没有从pandas返回一个偏移量,我们需要一个偏移量才能使用任何日期的日期。它看起来像是一只熊猫bug /没有实现给我。
from pandas.tseries.frequencies import get_offset
get_offset('30s')
也许我们可以改进错误信息。
[编辑除了为了方便预测而添加日期之外,我们并不需要日期,因此您仍然可以使用data_series.values估算模型。]