(14)Python初入坑之時間序列重採樣
時間序列的重採樣是指的,從一個頻率到另一個頻率:降採樣,升採樣,採樣時間點變化。降採樣就是比如之前是每天的頻率到每月的頻率,升採樣例如每月的頻率到每天,採樣時間點變化例如之前是每周五採樣,現在需要改成每周三。
重採樣
首先我們定義一個時間序列的Series。
現在的這個時間序列Series是按照天進行採樣的,一共有60天。那如果我們要改成按照月份進行採樣的呢?我們需要使用resample()進行重採樣。
我們分月份進行採樣,然後求月內的均值。事實上重採樣,就相當於groupby,只不過是根據月份這個period進行分組。默認情況下,這樣的分組,右邊是包含的,即 ] 。也就是左開右閉,( ] 。如果我們要寫成左閉右開,添加參數 closed=left 即可。
下面介紹一下OHLC重採樣,這是在金融股票之中常用到的重採樣,包括open開盤價,high最高價,low最低價,close收盤價。
這樣我們可以看到10月份,最開始和結尾的數據,以及最大和最小的數據。
之前我們講到resample其實就是另一種形式的groupby,那下面我們就使用groupby來給時間序列分組,看怎麼操作。
上面是先把x中的month或者week提取出來,再根據其分組,就均值。就會返回一年中第幾個月或者第幾個星期的均值。
升採樣和插值
首先我們定義一個dataframe。2行4列,行索引是時間序列,頻率為周。
下面我們想重採樣為以天為頻率。需要使用resample和asfreq() ,asfreq可以把dataframe中的數據視同為時間序列進行處理。
或者直接使用asfreq來改變其頻率。但是asfreq不如resample的功能和範圍強大。
以上沒有指定數據的部分,都被自動填充為NaN值,那如果我們需要用特定的值來填充呢?例如,使用空值之前的數據進行填充,這個時候就需要用到pad() 。
也可以使用空值後面的值進行填充,這個時候需要使用bfill() 。
讀取為時間序列
如果有一個dateframe,其中有一列是字元型的時間,我們如何把它讀取成時間序列呢?例如我們以空難數據為例。
空難數據中有一列是date,我們要把這列設置為索引,並且解析為時間序列。則使用parse_dates=True。解析成為時間序列。下面我們就可以根據時間,對某些列進行重採樣了。
例如我們想知道每年的遇難總人數,那就根據Fatalities進行重採樣,頻率為年,就是A,然後進行求和。
這節內容到此結束~
推薦閱讀:
※Tableau集成Python機器學習實踐(下)
※猴子第三講實踐筆記—對航班計劃數據的處理
※如何用sklearn機器學習,來預測泰坦尼克號生存概率?
※【案例詳解】連鎖門店如何實現數字化管理?
※不算從零開始的數據分析