在一些科学问题的探究中,往往一个过程的响应并不是实时的,但他们还是具有一定的相关性,这种相关叫超前滞后相关。在遇到这种相关的数据的时候我们需要想办法让python的特征值滞后,那么python如何让特征值滞后一行呢?接下来这篇文章带你了解。
超前滞后相关是什么
想看两个时间序列是否相关,最简单的方法就是求二者的相关系数,但是在大气、海洋等科学问题的研究中,往往一个过程的响应并不是实时的,可能当a过程发生以后一段时间b过程才会发生,这样的关系往往不是同时期的相关系数可以表现的。
超前滞后相关就是为了看两个过程的发生演变是否在时间的先后上有一定的相关性。
举个例子:
有a、b两个时间序列,长度都是十二个月,直接求相关系数就是简单的同期相关。
如果a的1-11月对b的2-12月做相关系数,就是a对b超前1个月的相关;拿a的2-12月对b的1-11月做相关则称之为a对b的滞后1月相关,以此类推,就能求出n个月的超前滞后相关,画图出来就是沿0月(同期)正负各n月。
摘自黄嘉佑的书《气相统计分析与预报方法》,第三版,17页
python中的实现
需要输入两个时间序列,结果为data1对data2的超前滞后相关系数的序列
from scipy.stats import pearsonr
import numpy as np
#超前滞后相关
def leadlagcor(data1,data2,n):
#data1和data2为两个时间序列,n设置做多少个时间步长的超前滞后
a=-n
b=-a
c=b*2+1
x=np.arange(-n,n+1,1)
r=np.zeros((c,1))
p=np.zeros((c,1))
for i in range(c):
if i<(b):
r[n-i],p[n-i]=pearsonr(data1[:(len(data1)-i)], data2[i:])
else:
r[i],p[i]=pearsonr(data1[x[i]:], data2[:len(data1)-x[i]])
return r
附赠一个可视化程序
def leadlagcor_plot(data1,data2,n):
#data1和data2为两个时间序列,n设置做多少个时间步长的超前滞后
r=leadlagcor(data1,data2,n)#调用上面写的函数做超前滞后相关
x=range(-n,n+1,1)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x,r,'k--',linewidth=0.8)
ax.axhline(0, color='k')
b=ax.bar(x,np.squeeze(r),color='red')
for bar,height in zip(b,r):
if height<0:
bar.set(color='blue')
print('cor_max:',np.max(r),'
','cor_min:',np.min(r))
plt.savefig('%s.jpg')
plt.show()
画出来的结果就是这样:
如何在python中实现特征值滞后一行
# 加载库
import pandas as pd
#创建数据框架
dataframe = pd.DataFrame()
# 模拟数据
dataframe["dates"] = pd.date_range("1/1/2001", periods=5, freq="D")
dataframe["stock_price"] = [1.1,2.2,3.3,4.4,5.5]
dataframe.head()
# 让值滞后一行
dataframe["previous_days_stock_price"] = dataframe["stock_price"].shift(1)
dataframe.head()
dates stock_price previous_days_stock_price
0 2001-01-01 1.1 NaN
1 2001-01-02 2.2 1.1
2 2001-01-03 3.3 2.2
3 2001-01-04 4.4 3.3
4 2001-01-05 5.5 4.4
小结
以上就是python如何让特征值滞后一行的全部内容,希望能给大家一个参考,也希望大家多多支持W3Cschool。