這篇文章給大家分享的是有關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月。
需要輸入兩個時間序列,結果為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()
# 加載庫
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怎么讓特征值滯后一行”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。