如何简化statsmodels中生成正确滞后阶数互相关图的代码
基础示例代码
import pandas as pd import numpy as np import statsmodels.tsa.stattools as smt import matplotlib.pyplot as plt np.random.seed(123) test = pd.DataFrame(np.random.randint(0,25,size=(79, 2)), columns=list('AB'))
代码可大幅简化,简化后版本如下:
# 计算正反向CCF值,和原有逻辑一致 backwards = smt.ccf(test['A'][::-1], test['B'][::-1], adjusted=False)[::-1] forwards = smt.ccf(test['A'], test['B'], adjusted=False) # 直接拼接CCF值,生成对应滞后阶数序列 full_ccf = np.concatenate([backwards, forwards[1:]]) lags = np.arange(-len(backwards)+1, len(forwards)) # 一步生成目标DataFrame full = pd.DataFrame({'lag': lags, 'value': full_ccf}) # 绘图逻辑不变 full.set_index('lag').value.plot()
简化逻辑说明
- 省去了创建两个临时DataFrame再合并的冗余操作,直接用
np.concatenate拼接正反向CCF计算结果 - 用
np.arange直接生成从负向最大到正向最大的连续滞后阶数,无需手动生成负向lag、再排序的步骤 - 代码逻辑完全匹配「拼接两个列表得到完整互相关序列」的核心概念,代码量减少近一半,可读性更高

内容的提问来源于stack exchange,提问作者ℕʘʘḆḽḘ
相关产品推荐
相关产品推荐

