自相关图是什么?

自相关图(ACF)是用于检查给定数据集中随机性的常用工具。它主要用于进行时间序列分析和预测。它用于在时间序列中总结关系的强度,并在以前的时间步长中进行观察。

Python自相关应用:

  • 模式识别
  • 估计音高
  • 信号检测
  • 股票技术分析
  • 信号处理

自相关图的特征:

  • 从 +1 到 -1 不等。
  • +1:如果时间序列 1 的值增加,则时间序列 2 也会增加
  • -1:如果时间序列 1 的值增加,则时间序列 2 减小

语法:

matplotlib.pyplot.acorr(x, *, data=None, **kwargs)

参数:

  • x:标量序列。
  • detrend:可选参数。
  • 默认值:mlab.detrend_none
  • normed:具有布尔值的可选参数。
  • 默认值: 真。
  • usevlines:具有布尔值的可选参数。
  • 默认值: 真。
  • maxlags:具有整数值的可选参数。
  • 默认值:10
  • linestyle:当 usevlines 为 False 时,用于绘制数据点的可选参数。
  • marker:具有字符串值的可选参数。
  • 默认值:'o'

示例1

在Python中,可以使用matplotlib库来绘制自相关图。

以下是一个使用statsmodels库中的plot_acf函数绘制自相关图的例子:

import pandas as pd  
import statsmodels.api as sm  
from statsmodels.graphics.tsaplots import plot_acf  
import matplotlib.pyplot as plt  # 导入matplotlib.pyplot模块  
  
# 假设df是一个包含时间序列数据的DataFrame  
df = pd.DataFrame({  
    'data': [0.776, 0.818, 0.819, 0.815, 0.805, 0.793, 0.786, 0.777, 0.767, 0.759]  
})  
  
# 使用plot_acf绘制自相关图  
plot_acf(df['data'], use_vlines=True, lags=40)  
plt.subplots_adjust(hspace=0.35)  # 调整子图之间的空间,但在这个上下文中可能不是必需的  
plt.show()  # 显示图形

在这个例子中,df是包含时间序列数据的DataFrame。plot_acf函数绘制了数据的自相关图,use_vlines=True表示使用垂直线表示95%置信区间,lags参数设置了需要计算的延迟次数。最后使用show()显示图形。

示例2

import matplotlib.pyplot as plt 
import numpy as np 
  
data = np.array([1.0,20,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0]) 
  
plt.title("Autocorrelation Plot") 
plt.xlabel("Lags") 
plt.acorr(data, maxlags = 10) 
 
plt.show()

输出:

【Python】自相关性(序列相关性)及示例代码_可选参数

在此示例中,我们首先使用 Python 的 NumPy 模块将数据创建为元素数组。然后,我们指定了图表的标题和标签。最后,我们使用 matplotlib 模块的 acorr() 方法绘制定义数据的 Python 自相关图。

import matplotlib.pyplot as plt 
import numpy as np 
 
np.random.seed(30) 
  
data = np.random.randn(20) 
plt.title("Autocorrelation Plot") 
plt.xlabel("Lags") 
plt.acorr(data, maxlags = 10) 
 
plt.show() 

输出:

【Python】自相关性(序列相关性)及示例代码_默认值_02

在这个例子中,我们使用随机函数来获取数据,并使用该数据在 Python 中绘制我们的自相关图。

时间序列的自相关:

from pandas import read_csv
from matplotlib import pyplot
data = read_csv('data.csv', header=0, index_col=0)
data.plot()
pyplot.show()

data.csv

"Date","Temp"
"1981-01-01",20.7
"1981-01-02",17.9
"1981-01-03",18.8
"1981-01-04",14.6
"1981-01-05",15.8
"1981-01-06",15.8
"1981-01-07",15.8
"1981-01-08",17.4
"1981-01-09",21.8
"1981-01-10",20.0
"1981-01-11",16.2
"1981-01-12",13.3
"1981-01-13",16.7
"1981-01-14",21.5
"1981-01-15",25.0
"1981-01-16",20.7
"1981-01-17",20.6
"1981-01-18",24.8
"1981-01-19",17.7
"1981-01-20",15.5
"1981-01-21",18.2
"1981-01-22",12.1
"1981-01-23",14.4
"1981-01-24",16.0
"1981-01-25",16.5
"1981-01-26",18.7
"1981-01-27",19.4
"1981-01-28",17.2
"1981-01-29",15.5
"1981-01-30",15.1
"1981-01-31",15.4
"1981-02-01",15.3
"1981-02-02",18.8
"1981-02-03",21.9
"1981-02-04",19.9
"1981-02-05",16.6
"1981-02-06",16.8
"1981-02-07",14.6
"1981-02-08",17.1
"1981-02-09",25.0
"1981-02-10",15.0
"1981-02-11",13.7
"1981-02-12",13.9
"1981-02-13",18.3
"1981-02-14",22.0
"1981-02-15",22.1
"1981-02-16",21.2
"1981-02-17",18.4
"1981-02-18",16.6
"1981-02-19",16.1
"1981-02-20",15.7
"1981-02-21",16.6
"1981-02-22",16.5
"1981-02-23",14.4
"1981-02-24",14.4
"1981-02-25",18.5
"1981-02-26",16.9
"1981-02-27",17.5
"1981-02-28",21.2
"1981-03-01",17.8
"1981-03-02",18.6
"1981-03-03",17.0
"1981-03-04",16.0
"1981-03-05",13.3
"1981-03-06",14.3

【Python】自相关性(序列相关性)及示例代码_可选参数_03

当我们执行上述代码时,它会创建一个时间序列的折线图。

现在,我们将使用 plot_acf() 来计算和绘制最低日温度的自相关图。

from statsmodels.graphics.tsaplots import plot_acf
plot_acf(data)
pyplot.show()

【Python】自相关性(序列相关性)及示例代码_时间序列_04

执行上述代码将创建一个 2D 图,显示沿 x 轴的滞后值以及 y 轴上 -1 和 1 之间的相关性。

自相关大型数组的最快方法:

numpy.correlate() 可用于确定两个 1D 序列之间的互相关。

语法:

numpy.correlate(a, v, mode = ‘valid’)

参数:

  • a,v: 输入序列
  • 模式:卷积文档字符串

返回值:

a 和 v 的离散互相关

import numpy as np
 
a = [1,2,3] 
v = [4,5,6] 
 
print(np.correlate(a, v, "same"))

输出:

[17 32 23]

在这个例子中,我们使用了 correlate() 方法来计算相关性,它通常在信号处理文本中定义: c_{av}[k] = sum_n a[n+k] * conj(v[n])