我有一个时间序列数据集,我在这个数据集上运行自动ARIMA模型,这个数据集有多个相互独立的列,所以基本上它就像多个自动ARIMA分析。
我目前的代码循环遍历 Dataframe 中的所有列,并将每列的p、d、q的顺序值存储在一个列表中。以逐行地存储 Dataframe 中每列的p、d、q值。
时间序列数据框
date Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9
2022-01-02 10:30:00 24 24 24.8 24.8 25 25 25.5 26.3 26.9
2022-01-02 10:45:00 59 58 60 60.3 59.3 59.2 58.4 56.9 58.0
2022-01-02 11:00:00 43.7 43.9 48 48 48.1 48.9 49 49.5 49.5
编码
##Auto arima
# def arimamodel(series):
autoarima_results=[]
series = df.columns
for col in series:
print("Auto Arima for : ", {col})
ARIMA_model = pm.auto_arima(
df[col],
start_p=1,
start_q=1,
test="adf",
max_p=5,
max_q=5,
d=None,
trace=True,
error_action="ignore",
suppress_warnings=True,
stepwise=True,
)
ARIMA_model.summary()
autoarima_results.append(ARIMA_model.order)
这将返回一个如下所示的列表:【(1,1,0),(2,1,1),(1,1,1)】
例如,auto arima建议的p、d、q顺序为Col1:1、1、0,列2:2、1、1,第3列:1、1、1等等。
最后的输出应该是一个 Dataframe ,如下所示。其中每一行代表一列及其p、d、q值:
Results pdq_values
Col1 (1,1,0)
Col2 (2,1,1)
Col3 (1,1,1)
2条答案
按热度按时间watbbzwu1#
让我们假设:
df
有三列:"Col1", "Col2", "Col3"
autoarima_results == [(1, 1, 0), (2, 1, 1), (1, 1, 1)]
之间的关系那么,这里有一种方法可以做到这一点:
第一个
kkbh8khc2#
从ARIMA模型的输出开始,这里有一个不使用lambda函数的简单方法-
第一个
附加注解:
1.诀窍是把它当作字典(按键、Pandas将其作为一个列来读取,其中每个元组分别是每行的条目。另一种强制执行此行为的方法是将元组列表作为列表
[l]
的列表来传递。这将创建一个具有n
列的 Dataframe ,然后您需要执行转置。'Col' + (df.index.set_names('Results')+1).astype(str)
一次执行4项操作。将索引列的名称更改为Results
,向其添加1,将其转换为字符串,并在其前面添加Col
。这将导致0,1,2..变为Col 1,Col 2,Col 3..