視窗物件
- 視窗函式簡介
- 視窗
- 為何要引入視窗函式
- 基本使用方法
- 滑動視窗 rolling
- 擴張視窗 expanding
- 指數加權視窗 ewm
參考文章:( Pandas 視窗函式)
以下內容是總結記憶版:(個人理解, 如有偏差,請多指教)
視窗函式簡介
視窗
中文釋義: = 窗戶,可以通過它對某一個區域進行觀測和眺望,
英文釋義 = window ,
計算機釋義 = 視窗,視窗:
an area within a frame on a computer screen, in which a particular program is operating or in which information of a particular type is shown
(解釋:一個框架的區域,在這個區域中一些特殊的程式和資訊進行被執性、顯示、處理)
為何要引入視窗函式
因為有些特殊的時序資料難以直接進行操作,
視窗函式方便處理時序資料,解決了滯后性和資料分布的不穩定性,
主要用于通過平滑曲線來以圖形方式查找資料內的趨勢,
基本使用方法
1. 讀取或輸入時序資料(序列資料)
2. 將資料換成 pd 格式
3. 定義視窗的方式及大小
4. 在指定視窗下執行需要的統計函式
下面將通過這些步驟依次進行展開:
滑動視窗 rolling
話不多說,先上代碼,然后帶著問題去讀解釋,
代碼段1:
import pandas as pd
s = pd.Series([1,2,3,4,5])
roller = s.rolling(window=3)
print(roller.mean())
運行結果:
0 NaN
1 NaN
2 2.0
3 3.0
4 4.0
為什么是這樣:
這是因為引數 window 設定的原因:
(是 .rolling() 中的必備引數)
window = 數值型int --> 計算統計量的觀測值的數量,及從第0個元素開始,
向前數window個,然后在使用后面定義的函式
window = offset時間偏移量 --> 表示時間窗的大小
程式解釋:
s = pd.Series([1,2,3,4,5]) --> [1,2,3,4,5]
經過:s.rolling(window=3) -->
從第0個下標,往前數3個,[空,空 ,1]
從第1個下標,往前數3個,[空,1 , 2]
從第2個下標,往前數3個,[1, 2, 3]
從第3個下標,往前數3個,[2, 3, 4]
從第4個下標,往前數3個,[3, 4, 5]
然后得到的元素,在經過統計函式,mean()進行計算,
第n個元素的值將是n,n-1和n-2元素的平均值
便形成了:
0 NaN
1 NaN
2 2.0
3 3.0
4 4.0
代碼段2:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2020', periods=10),
columns = ['A', 'B', 'C', 'D'])
print(df)
print (df.rolling(window=3).mean())
自行輸入體會
擴張視窗 expanding
.expanding()又叫擴展視窗函式,
不是固定視窗長度,其長度是不斷的擴大的,所以才叫expanding (ing現在進行時,expand擴展)–>(時刻在擴展)
rolling(window = 自定義輸入)
expanding(min_periods = 自定義輸入)
第n個元素的值將是n,n-1,n-2…’1’這n個元素的平均值
類似的函式還有:
sum() 函式 與 consum() 函式 的區別
cummax, cumsum, cumprod 函式是典型的類擴張視窗函式,
代碼段1:
import pandas as pd
s = pd.Series([1,2,3,4,5])
expanding = s.expanding(min_periods=3)
print(expanding.mean())
運行結果:
0 NaN
1 NaN
2 2.0
3 2.5
4 3.0
dtype: float64
代碼段2:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2018', periods=10),
columns = ['A', 'B', 'C', 'D'])
print (df.expanding(min_periods=3).mean())
指數加權視窗 ewm
指數 exp()
權重 weight
移動 move
因此組成 ewm() = 指數權重移動起來 = 指數加權移動視窗 (個人理解)
官方詳細檔案點擊查看
常用的設定引數:
com,span,halflife,alpha (最重要的引數)

| ewm型別函式 | 作用 |
|---|---|
| ewma | 指數加權移動平均 |
| ewmvar | 指數加權移動方差 |
| ewmstd | 指數加權移動標準差 |
| ewmcorr | 指數加權移動相關系數 |
| ewmcov | 指數加權移動協方差 |
代碼段:
import pandas as pd
import numpy as np
df = pd.DataFrame({'T': [0, 1, 2, np.nan, 4]})
print(df)
df1 = df.ewm(com=0.5).mean()
print(df1)
#Specifying times with a timedelta halflife when computing mean
times = pd.date_range(start='2020-12-19', periods=5)
df2 = df.ewm(halflife='4 days', times=pd.DatetimeIndex(times)).mean()
print(df2)
運行結果
T
0 0.0
1 1.0
2 2.0
3 NaN
4 4.0
T
0 0.000000
1 0.750000
2 1.615385
3 1.615385
4 3.670213
T
0 0.000000
1 0.543214
2 1.114950
3 1.114950
4 2.144696
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/237652.html
標籤:python
上一篇:Python小白入門
