这篇文章给大家分享的是有关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月。

python中的实现

需要输入两个时间序列,结果为data1对data2的超前滞后相关系数的序列

fromscipy.statsimportpearsonrimportnumpyasnp#超前滞后相关defleadlagcor(data1,data2,n):#data1和data2为两个时间序列,n设置做多少个时间步长的超前滞后a=-nb=-ac=b*2+1x=np.arange(-n,n+1,1)r=np.zeros((c,1))p=np.zeros((c,1))foriinrange(c):ifi<(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]])returnr

附赠一个可视化程序

defleadlagcor_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')forbar,heightinzip(b,r):ifheight<0:bar.set(color='blue')print('cor_max:',np.max(r),'','cor_min:',np.min(r))plt.savefig('%s.jpg')plt.show()如何在python中实现特征值滞后一行

#加载库importpandasaspd#创建数据框架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()datesstock_priceprevious_days_stock_price02001-01-011.1NaN12001-01-022.21.122001-01-033.32.232001-01-044.43.342001-01-055.54.4

感谢各位的阅读!关于“Python怎么让特征值滞后一行”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!