Python实现数组列表转可读表格及ARIMA中Ljung-Box结果保存
解决Ljung-Box检验结果可读性差并保存为文本表格的问题
我完全懂你的困扰!statsmodels返回的Ljung-Box检验结果默认是一堆数组元组,直接看简直像天书。别担心,咱们用pandas把它转换成规整的表格,再保存到文本文件就搞定了。
步骤1:先搞懂检验结果的结构
当你设置boxpierce=True时,acorr_ljungbox会返回一个包含4个数组的元组,对应:
- 第1个数组:Ljung-Box统计量(每个滞后阶数对应一个值)
- 第2个数组:Ljung-Box统计量对应的p值
- 第3个数组:Box-Pierce统计量
- 第4个数组:Box-Pierce统计量对应的p值
步骤2:用Pandas把数组转成可读表格
Pandas的DataFrame是处理这类结构化数据的神器,直接把数组打包成表格就行。完整代码示例如下:
import pandas as pd from statsmodels.stats import diagnostic as dst # 假设db['FTSEMIB']是你的时间序列数据 # 运行Ljung-Box检验,包含Box-Pierce结果 ljung_results = dst.acorr_ljungbox(db['FTSEMIB'], lags=10, boxpierce=True) # 拆分结果元组到单独变量,方便后续处理 lb_stat, lb_pval, bp_stat, bp_pval = ljung_results # 生成滞后阶数列表(对应1到10阶) lags_list = list(range(1, 11)) # 创建DataFrame,构建清晰的表格结构 results_table = pd.DataFrame({ '滞后阶数': lags_list, 'Ljung-Box统计量': lb_stat.round(4), # 保留4位小数,让表格更整洁 'Ljung-Box p值': lb_pval.round(4), 'Box-Pierce统计量': bp_stat.round(4), 'Box-Pierce p值': bp_pval.round(4) }) # 把滞后阶数设为索引,表格看起来更直观 results_table.set_index('滞后阶数', inplace=True) # 打印看看整理后的效果 print("整理后的Ljung-Box检验结果:") print(results_table)
运行这段代码后,你会看到类似这样的清晰表格:
Ljung-Box统计量 Ljung-Box p值 Box-Pierce统计量 Box-Pierce p值 滞后阶数 1 0.2345 0.6278 0.2312 0.6301 2 1.1234 0.5702 1.1109 0.5728 ... ... ... ... ... 10 5.6789 0.8321 5.6123 0.8367
步骤3:把表格保存到文本文件
用to_string()方法可以把DataFrame转换成纯文本格式的表格,然后写入文件:
# 保存到文本文件,指定utf-8编码避免乱码 with open('ljung_box_test_results.txt', 'w', encoding='utf-8') as file: file.write("Ljung-Box & Box-Pierce 检验结果\n") file.write("="*60 + "\n") file.write(results_table.to_string())
打开生成的ljung_box_test_results.txt文件,就能看到和控制台打印一样清晰的表格啦!
额外小提示
如果你不需要Box-Pierce结果,只需要把boxpierce=True改成boxpierce=False,然后调整DataFrame的列即可,代码逻辑是完全一样的。
内容的提问来源于stack exchange,提问作者Apeiron
相关产品推荐
相关产品推荐

