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畫超前滯後先關圖

想要獲取更多Python學習資料,瞭解更多關於Python的知識,可以加Q群630390733踴躍發言,大傢一起來學習討論吧!

超前滯後相關是什麼

想看兩個時間序列是否相關,最簡單的方法就是求二者的相關系數,但是在大氣、海洋等科學問題的研究中,往往一個過程的響應並不是實時的,可能當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),'\n','cor_min:',np.min(r)) 
    plt.savefig('%s.jpg')
    plt.show()

畫出來的結果就是這樣啦,有更好的寫法和例圖也歡迎分享~

祝大傢科研順利,身心健康!

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: