1. 程式人生 > >pandas時間序列滑窗

pandas時間序列滑窗

print 4.0 als 圖片 技術分享 驗證 mage num range

時間序列數據統計—滑動窗口

窗口函數

import pandas as pd
import numpy as np

ser_obj = pd.Series(np.random.randn(1000), 
                    index=pd.date_range('20180101', periods=1000))
ser_obj = ser_obj.cumsum()
print(ser_obj.head())
2018-01-01    0.797334
2018-01-02    0.451286
2018-01-03    1.329133
2018-01-04    0.416577
2018-01-05    0.610993
Freq: D, dtype: float64
r_obj = ser_obj.rolling(window=5)
r_obj2 = ser_obj.rolling(window=5, center=True)
print(r_obj)
Rolling [window=5,center=False,axis=0]
print(r_obj2.mean())

# 驗證:
# 前5個數據的均值
# print(ser_obj[0:5].mean())

# 1-6個數據的均值
# print(ser_obj[1:6].mean())
2018-01-01          NaN
2018-01-02          NaN
2018-01-03     0.721065
2018-01-04     0.829352
2018-01-05     0.694121
2018-01-06     0.275495
2018-01-07     0.149214
2018-01-08     0.417734
2018-01-09     0.520458
2018-01-10     1.034506
2018-01-11     1.812417
2018-01-12     2.457410
2018-01-13     2.809996
2018-01-14     3.046443
2018-01-15     2.838209
2018-01-16     2.457822
2018-01-17     2.148508
2018-01-18     1.647887
2018-01-19     1.083220
2018-01-20     1.013525
2018-01-21     0.941850
2018-01-22     0.765751
2018-01-23     0.703581
2018-01-24     0.744616
2018-01-25     0.301710
2018-01-26    -0.168597
2018-01-27    -0.851726
2018-01-28    -1.621299
2018-01-29    -2.538815
2018-01-30    -3.251647
                ...    
2020-08-28   -50.581143
2020-08-29   -51.826380
2020-08-30   -52.950275
2020-08-31   -53.412339
2020-09-01   -53.824206
2020-09-02   -54.099840
2020-09-03   -54.140219
2020-09-04   -54.215937
2020-09-05   -54.242818
2020-09-06   -53.908675
2020-09-07   -53.493851
2020-09-08   -53.209943
2020-09-09   -52.942718
2020-09-10   -53.038547
2020-09-11   -53.188028
2020-09-12   -53.731145
2020-09-13   -54.091879
2020-09-14   -54.867172
2020-09-15   -55.202294
2020-09-16   -55.440556
2020-09-17   -54.926439
2020-09-18   -54.619663
2020-09-19   -54.128376
2020-09-20   -54.274526
2020-09-21   -54.527463
2020-09-22   -55.382880
2020-09-23   -56.309192
2020-09-24   -57.422908
2020-09-25          NaN
2020-09-26          NaN
Freq: D, Length: 1000, dtype: float64
print(r_obj2.mean())
2018-01-01          NaN
2018-01-02          NaN
2018-01-03     0.721065
2018-01-04     0.829352
2018-01-05     0.694121
2018-01-06     0.275495
2018-01-07     0.149214
2018-01-08     0.417734
2018-01-09     0.520458
2018-01-10     1.034506
2018-01-11     1.812417
2018-01-12     2.457410
2018-01-13     2.809996
2018-01-14     3.046443
2018-01-15     2.838209
2018-01-16     2.457822
2018-01-17     2.148508
2018-01-18     1.647887
2018-01-19     1.083220
2018-01-20     1.013525
2018-01-21     0.941850
2018-01-22     0.765751
2018-01-23     0.703581
2018-01-24     0.744616
2018-01-25     0.301710
2018-01-26    -0.168597
2018-01-27    -0.851726
2018-01-28    -1.621299
2018-01-29    -2.538815
2018-01-30    -3.251647
                ...    
2020-08-28   -50.581143
2020-08-29   -51.826380
2020-08-30   -52.950275
2020-08-31   -53.412339
2020-09-01   -53.824206
2020-09-02   -54.099840
2020-09-03   -54.140219
2020-09-04   -54.215937
2020-09-05   -54.242818
2020-09-06   -53.908675
2020-09-07   -53.493851
2020-09-08   -53.209943
2020-09-09   -52.942718
2020-09-10   -53.038547
2020-09-11   -53.188028
2020-09-12   -53.731145
2020-09-13   -54.091879
2020-09-14   -54.867172
2020-09-15   -55.202294
2020-09-16   -55.440556
2020-09-17   -54.926439
2020-09-18   -54.619663
2020-09-19   -54.128376
2020-09-20   -54.274526
2020-09-21   -54.527463
2020-09-22   -55.382880
2020-09-23   -56.309192
2020-09-24   -57.422908
2020-09-25          NaN
2020-09-26          NaN
Freq: D, Length: 1000, dtype: float64
# 畫圖查看
import matplotlib.pyplot as plt
%matplotlib inline

plt.figure(figsize=(15, 5))

ser_obj.plot(style='r--')
ser_obj.rolling(window=10, center=False).mean().plot(style='g')
ser_obj.rolling(window=10, center=True).mean().plot(style='b')

技術分享圖片

pandas時間序列滑窗