1. 程式人生 > >Pandas —— 移動視窗函式

Pandas —— 移動視窗函式

移動視窗概念引入

為了提升資料的準確性,將某個點的取值擴大到包含這個點的一段區間,用區間來進行判斷,這個區間就是視窗。移動視窗就是視窗向一端滑行,預設是從右往左,每次滑行並不是區間整塊的滑行,而是一個單位一個單位的滑行。

舉例:

import pandas as pd
s = [1,2,3,5,6,10,12,14,12,30]
pd.Series(s).rolling(window=3).mean()

此時的pd.Series(s)
這裡寫圖片描述

此時的pd.Series(s).rolling(window=3).mean()

如:index2=(index0+index1+index2 )/3
這裡寫圖片描述

簡單的移動視窗函式

  • rolling(),引數window指定視窗的大小,引數min_periods指定最小的觀察數值個數
  • rolling()後,可以接mean、count、sum、median、std等聚合函式,相當於rolling_mean()、rolling_count()、rolling_sum()、rolling_median()、rolling_std()
close_px['AAPL'].plot(figsize=(10,3))
close_px['AAPL'].rolling(window=250).mean().plot()#方法1
close_px['AAPL'
].rolling_mean().(window=250).plot()#方法2

這裡寫圖片描述

指數加權的移動視窗函式

  • yt+1^=αyt+(1α)yt^N,其中yt^表示t時刻指數加權的預測值,yt表示t時刻的觀測值,α是平滑常數。
  • 指數加權函式會賦予近期的觀測值更大的權數,因此,它能適應更快的變化
  • ewm(),若根據跨度指定衰減,即α=2span+1,則需要指定引數span;若根據質心指定衰減,即α=1com+1,則需要指定引數com;若根據半衰期指定衰減,即α=1explog(0.5)halflife, for halflife>0,則需要指定引數halflife
  • ewm()後,可以接mean、corr、std等聚合函式,相當於ewma()、ewmcorr()、ewmstd(),但count、sum等聚合函式沒有對應的特定函式
  • -
aapl_px = close_px.AAPL['2005':'2009']
aapl_px.ewm(span=60).mean().plot() # 方法1
aapl_px.ewm_mean(span=60).plot() # 方法2

這裡寫圖片描述

二元移動視窗函式

一些統計計算符,比如相關性和協方差,需要在兩個時間序列上進行計算。例如,經濟分析通常喜歡比較一隻股票與基礎指數標普500之間的相關性。我們先計算一下時間序列的百分比變化:

spx_px = close_px_all['SPX']
spx_rets = spx_px.pct_change()  # 相鄰兩數百分比
returns = close_px.pct_change()

在我們呼叫rolling後,corr聚合函式會去計算spx_rets的滾動相關性(rolling correlation)

corr = returns.AAPL.rolling(125, min_periods=100).corr(spx_rets)
corr.plot(figsize=(15, 8))

這裡寫圖片描述

使用者自定義的移動視窗函式

  • 通過rolling().apply()方法,可以在移動視窗上使用自己定義的函式。唯一需要滿足的是,在陣列的每一個片段上,函式必須產生單個值。
from scipy.stats import percentileofscore
score_at_2percent = lambda x: percentileofscore(x, 0.02)
result = returns.AAPL.rolling(250).apply(score_at_2percent)
result.plot(figsize=(15, 8))

這裡寫圖片描述