欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

pandas滑動(dòng)窗口學(xué)習(xí)筆記(shift, diff, pct_change)

 更新時(shí)間:2024年03月20日 11:42:30   作者:風(fēng)雪云俠  
pandas中有3類窗口,分別是滑動(dòng)窗口rolling?、擴(kuò)張窗口expanding以及指數(shù)加權(quán)窗口ewm,下面就來(lái)詳細(xì)的介紹一下這三種的用法,感興趣的可以了解一下

窗口對(duì)象

pandas 中有3類窗口,分別是滑動(dòng)窗口 rolling 、擴(kuò)張窗口 expanding 以及指數(shù)加權(quán)窗口 ewm 。

滑窗對(duì)象

要使用滑窗函數(shù),就必須先要對(duì)一個(gè)序列使用 .rolling 得到滑窗對(duì)象,其最重要的參數(shù)為窗口大小 window 。

In [95]: s = pd.Series([1,2,3,4,5])

In [96]: roller = s.rolling(window = 3)

In [97]: roller
Out[97]: Rolling [window=3,center=False,axis=0]

在得到了滑窗對(duì)象后,能夠使用相應(yīng)的聚合函數(shù)進(jìn)行計(jì)算,需要注意的是窗口包含當(dāng)前行所在的元素,例如在第四個(gè)位置進(jìn)行均值運(yùn)算時(shí),應(yīng)當(dāng)計(jì)算(2+3+4)/3,而不是(1+2+3)/3

In [98]: roller.mean()
Out[98]: 
0    NaN
1    NaN
2    2.0
3    3.0
4    4.0
dtype: float64

In [99]: roller.sum()
Out[99]: 
0     NaN
1     NaN
2     6.0
3     9.0
4    12.0
dtype: float64

對(duì)于滑動(dòng)相關(guān)系數(shù)或滑動(dòng)協(xié)方差的計(jì)算,可以如下寫出:

In [100]: s2 = pd.Series([1,2,6,16,30])

In [101]: roller.cov(s2)
Out[101]: 
0     NaN
1     NaN
2     2.5
3     7.0
4    12.0
dtype: float64

In [102]: roller.corr(s2)
Out[102]: 
0         NaN
1         NaN
2    0.944911
3    0.970725
4    0.995402
dtype: float64

此外,還支持使用 apply 傳入自定義函數(shù),其傳入值是對(duì)應(yīng)窗口的 Series ,例如上述的均值函數(shù)可以等效表示:

In [103]: roller.apply(lambda x:x.mean())
Out[103]: 
0    NaN
1    NaN
2    2.0
3    3.0
4    4.0
dtype: float64

shift, diff, pct_change 是一組類滑窗函數(shù),它們的公共參數(shù)為 periods=n ,默認(rèn)為1,這里的 n 可以為負(fù),表示反方向的類似操作。

函數(shù)說(shuō)明
shift取向前第 n 個(gè)元素的值
diff與向前第 n 個(gè)元素做差(與 Numpy 中不同,后者表示 n 階差分)
pct_change與向前第 n 個(gè)元素相比計(jì)算增長(zhǎng)率
In [104]: s = pd.Series([1,3,6,10,15])

In [105]: s.shift(2)
Out[105]: 
0    NaN
1    NaN
2    1.0
3    3.0
4    6.0
dtype: float64

In [106]: s.diff(3)
Out[106]: 
0     NaN
1     NaN
2     NaN
3     9.0
4    12.0
dtype: float64

In [107]: s.pct_change()
Out[107]: 
0         NaN
1    2.000000
2    1.000000
3    0.666667
4    0.500000
dtype: float64

In [108]: s.shift(-1)
Out[108]: 
0     3.0
1     6.0
2    10.0
3    15.0
4     NaN
dtype: float64

In [109]: s.diff(-2)
Out[109]: 
0   -5.0
1   -7.0
2   -9.0
3    NaN
4    NaN
dtype: float64

將其視作類滑窗函數(shù)的原因是,它們的功能可以用窗口大小為 n+1 的 rolling 方法等價(jià)代替

In [110]: s.rolling(3).apply(lambda x:list(x)[0]) # s.shift(2)
Out[110]: 
0    NaN
1    NaN
2    1.0
3    3.0
4    6.0
dtype: float64

In [111]: s.rolling(4).apply(lambda x:list(x)[-1]-list(x)[0]) # s.diff(3)
Out[111]: 
0     NaN
1     NaN
2     NaN
3     9.0
4    12.0
dtype: float64

In [112]: def my_pct(x):
   .....:     L = list(x)
   .....:     return L[-1]/L[0]-1
   .....: 

In [113]: s.rolling(2).apply(my_pct) # s.pct_change()
Out[113]: 
0         NaN
1    2.000000
2    1.000000
3    0.666667
4    0.500000
dtype: float64

擴(kuò)張窗口

擴(kuò)張窗口又稱累計(jì)窗口,可以理解為一個(gè)動(dòng)態(tài)長(zhǎng)度的窗口,其窗口的大小就是從序列開(kāi)始處到具體操作的對(duì)應(yīng)位置,其使用的聚合函數(shù)會(huì)作用于這些逐步擴(kuò)張的窗口上。具體地說(shuō),設(shè)序列為a1, a2, a3, a4,則其每個(gè)位置對(duì)應(yīng)的窗口即[a1]、[a1, a2]、[a1, a2, a3]、[a1, a2, a3, a4]。

In [114]: s = pd.Series([1, 3, 6, 10])

In [115]: s.expanding().mean()
Out[115]: 
0    1.000000
1    2.000000
2    3.333333
3    5.000000
dtype: float64

cummax, cumsum 函數(shù)是典型的類擴(kuò)張窗口函數(shù),請(qǐng)使用 expanding 對(duì)象依次實(shí)現(xiàn)它們。

s = pd.Series([1, 3, 6, 10])

#cumsum
s.expanding().sum()

0    1.000000
1    2.000000
2    3.333333
3    5.000000
dtype: float64

#cummax
s.expanding().max()

0     1.0
1     3.0
2     6.0
3    10.0
dtype: float64

指數(shù)加權(quán)窗口

作為擴(kuò)張窗口的 ewm 窗口
在擴(kuò)張窗口中,用戶可以使用各類函數(shù)進(jìn)行歷史的累計(jì)指標(biāo)統(tǒng)計(jì),但這些內(nèi)置的統(tǒng)計(jì)函數(shù)往往把窗口中的所有元素賦予了同樣的權(quán)重。事實(shí)上,可以給出不同的權(quán)重來(lái)賦給窗口中的元素,指數(shù)加權(quán)窗口就是這樣一種特殊的擴(kuò)張窗口。
其中,最重要的參數(shù)是 alpha,它決定了默認(rèn)情況下的窗口權(quán)重為
wi?=(1−α)i,i∈{0,1,2,...,t},其中i=t 表示當(dāng)前元素, i=0 表示序列的第一個(gè)元素。

從權(quán)重公式可以看出,離開(kāi)當(dāng)前值越遠(yuǎn)則權(quán)重越小,若記原序列為 x ,更新后的當(dāng)前元素為 yt ,此時(shí)通過(guò)加權(quán)公式歸一化后可知:

對(duì)于 Series 而言,可以用 ewm 對(duì)象如下計(jì)算指數(shù)平滑后的序列:

In [118]: np.random.seed(0)

In [119]: s = pd.Series(np.random.randint(-1,2,30).cumsum())

In [120]: s.head()
Out[120]: 
0   -1
1   -1
2   -2
3   -2
4   -2
dtype: int32

In [121]: s.ewm(alpha=0.2).mean().head()
Out[121]: 
0   -1.000000
1   -1.000000
2   -1.409836
3   -1.609756
4   -1.725845
dtype: float64

到此這篇關(guān)于pandas滑動(dòng)窗口學(xué)習(xí)筆記(shift, diff, pct_change)的文章就介紹到這了,更多相關(guān)pandas滑動(dòng)窗口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Linux下python3.6.1環(huán)境配置教程

    Linux下python3.6.1環(huán)境配置教程

    這篇文章主要為大家詳細(xì)介紹了Linux下python3.6.1環(huán)境配置教程 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python中的異常處理學(xué)習(xí)筆記

    Python中的異常處理學(xué)習(xí)筆記

    這篇文章主要介紹了Python中的異常處理學(xué)習(xí)筆記,本文講解了常見(jiàn)的異常類、自定義異常類、捕獲異常、拋出異常、上下文管理器等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Python 兩個(gè)列表的差集、并集和交集實(shí)現(xiàn)代碼

    Python 兩個(gè)列表的差集、并集和交集實(shí)現(xiàn)代碼

    這篇文章主要介紹了Python 兩個(gè)列表的差集、并集和交集實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-09-09
  • Python如何快速生成本項(xiàng)目的requeirments.txt實(shí)現(xiàn)

    Python如何快速生成本項(xiàng)目的requeirments.txt實(shí)現(xiàn)

    本文主要介紹了Python如何快速生成本項(xiàng)目的requeirments.txt實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python利用腳本輕松實(shí)現(xiàn)ssh免密登陸配置

    python利用腳本輕松實(shí)現(xiàn)ssh免密登陸配置

    這篇文章主要為大家詳細(xì)介紹了python如何利用腳本輕松實(shí)現(xiàn)ssh免密登陸配置,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Django實(shí)現(xiàn)翻頁(yè)的示例代碼

    Django實(shí)現(xiàn)翻頁(yè)的示例代碼

    翻頁(yè)是經(jīng)常使用的功能,Django提供了翻頁(yè)器。用Django的Paginator類實(shí)現(xiàn),有需要了解Paginator類用法的朋友可參考。希望此文章對(duì)各位有所幫助
    2021-05-05
  • Django數(shù)據(jù)庫(kù)類庫(kù)MySQLdb使用詳解

    Django數(shù)據(jù)庫(kù)類庫(kù)MySQLdb使用詳解

    Django項(xiàng)目要操作數(shù)據(jù)庫(kù),首先要和數(shù)據(jù)庫(kù)建立連接,才能讓程序中的數(shù)據(jù)和數(shù)據(jù)庫(kù)關(guān)聯(lián)起來(lái)進(jìn)行數(shù)據(jù)的增刪改查操作。這篇文章主要介紹了Django數(shù)據(jù)庫(kù)類庫(kù)MySQLdb使用詳解,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python?Matplotlib基本用法詳解

    Python?Matplotlib基本用法詳解

    Matplotlib?是Python中類似?MATLAB?的繪圖工具,熟悉?MATLAB?也可以很快的上手?Matplotlib,這篇文章主要介紹了Python?Matplotlib基本用法,需要的朋友可以參考下
    2023-03-03
  • 基于Python輕松實(shí)現(xiàn)PDF轉(zhuǎn)圖片

    基于Python輕松實(shí)現(xiàn)PDF轉(zhuǎn)圖片

    PDF文件是我們?cè)谌粘9ぷ骱蛯W(xué)習(xí)中常用的文檔格式之一,但你知道嗎,你可以將PDF文件轉(zhuǎn)換為圖像,讓文檔變得更加生動(dòng)有趣,下面我們就來(lái)看看具體的實(shí)現(xiàn)方法吧
    2023-08-08
  • python的help函數(shù)如何使用

    python的help函數(shù)如何使用

    在本篇文章里小編給大家整理的是關(guān)于python的help函數(shù)的相關(guān)用法和知識(shí)點(diǎn)總結(jié),需要的朋友們可以學(xué)習(xí)下。
    2020-06-06

最新評(píng)論