Pandas —— 移動視窗函式
阿新 • • 發佈:2019-01-31
移動視窗概念引入
為了提升資料的準確性,將某個點的取值擴大到包含這個點的一段區間,用區間來進行判斷,這個區間就是視窗。移動視窗就是視窗向一端滑行,預設是從右往左,每次滑行並不是區間整塊的滑行,而是一個單位一個單位的滑行。
舉例:
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
指數加權的移動視窗函式
- ,其中表示t時刻指數加權的預測值,表示t時刻的觀測值,是平滑常數。
- 指數加權函式會賦予近期的觀測值更大的權數,因此,它能適應更快的變化
- ewm(),若根據跨度指定衰減,即,則需要指定引數;若根據質心指定衰減,即,則需要指定引數;若根據半衰期指定衰減,即,則需要指定引數。
- 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))