(13)Python初入坑之時間序列基礎內容
本節介紹python的關於時間序列的基礎內容。
一、時間序列的基礎內容
在金融和經濟學領域python已經承擔起了很多任務,這得益於pandas對於時間序列的良好支持。現在在金融和數據分析的重要性正在強勁增長,金融和經濟領域中實時分析也逐漸興起,無論是出於監管還是投資決策還是金融產品的定價等等,這一切都離不開對於時間序列的分析。
pandas可以高效的處理非常大的時間序列。
首先我們熟悉一下python標準庫中處理日期和時間的datetime模塊。
datatime包中有很多模塊,有date模塊,time模塊,datetime模塊等等,我們從中引入datetime模塊。datetime.now() 是返回當前的時間。2018年4月20日,20點,3分,54秒,339461微秒。
那我們也可以取出now的年月日。
如果我們想要知道兩個日期之間的相隔時間,可以直接用兩個時間相減。例如:
使用datetime將兩個時間相減,2018年4月20日,減去2018年3月20日10點,得到一個timedelta數值,也就是時長數值,30天,50400秒。我們還能用days,seconds將天數和秒數單獨取出來。
如果我們要給現有的時間加減某一個時長,需要再引入timedelta模塊。
給2017年8月24日加上30天,得出的時間就是9月23日。
有的時候,日期是被保存成字元串的,關於日期在字元串和數值之間的轉換,我們來探究一下。
把一個datetime型數據改變成字元串,可以採用以下幾種方法:
通過str方法,把theday改變從一個精確到秒的字元串,這樣可以統一輸出成這種格式。
或者使用strftime函數進行變換。後面需要定義輸出的格式,可以自由安排年月日的位置,大寫Y則表示4位數格式的年份,小寫y則只輸出2位數。
那怎麼把一個時間樣式的字元串改變成時間的數值類型呢?使用strptime函數。
但是如果在pandas中,時間的解析就非常智能了。pandas可以使用to_datetime解析時間。
輸出一個時間,則會識別成時間戳的格式。
如果輸入一個列表,則會輸出成一個index類型。數據類型是datetime64[ns]納秒,是numpy類型。freq是指的時間間隔,我們後面會講。
可以看出,to_datetime默認是按照月,日,年的格式識別。那如果我們要識別成2017年10月1日呢?也就是識別的時候需要按照日,月,年的格式識別。我們需要添加限定參數,dayfirst=True。
同時,中間的符號可以多樣,/ - . 都可以,to_datetime都可以識別。
如何生成datetimeindex。
如何生成時間序列呢,我們下面做一個示範。
使用date_range() 可以生成連續的時間序列,填入起始時間和結束時間,以天為間隔。
我們也可以只輸入起始時間或者結束時間,然後使用periods確定時間的時長。起始時間使用start表明。freq=D就是指,間隔為天。
當然我們也可以使用結束時間end= 來表示結束之前多少天。
freq不設置的話,就會默認是D,即天。我們也可以單獨設置freq的格式。
BM是指的每個月的最後一個工作日,則2017.01.01-2017.12.01就按照每個月的最後一個工作日隔開。「BM」代表business end of month。例如H是hour,M是month,D是day,A是year,也可以使用其他的值。
如果我們要以每個月的倒數第三個工作日進行分隔,可以像下面這樣加上timedelta進行限定。定義好了index之後,減去timedelta(2)即可。
timedelta默認是天數,然後是秒數,如timedelta(2,10)是2天10秒,timedelta(2,36000)是2天10個小時。
上面的data_range都是默認某一天的0點0分,我們也可以細化到小時,分鐘和秒。
這樣時間就會細化到秒,那如果我們要忽略掉小時分鐘和秒,只保留年月日呢,可以用normalize=True。
下面我們生成一個以時間序列作為索引的Series。
序列是時間序列,在計算的時候,也會自動對齊。
例如ts,和ts每兩個取一個進行相加,匹配到了則求和,未匹配到則返回空值。關於[::2]是取Series中,每兩個取一個,即隔一個取一個,切片的知識可以查看廖雪峰慕課網python入門的8-1節進行回顧。
對list進行切片,Python入門教程-慕課網時間序列的切片和索引
我們先創建一個時間序列索引的Series。然後進行取值。
然後可以用不同的格式取值,pandas可以自動識別。
比如我們還可以取2017年的所有數據,或者2017年某個月的數據。
也可以用和list切片的方法一樣,取某階段的值。
以上我們都是截取時間戳,即時間點,我們也可以截取一個時長,比如一年,這個時候就需要用period來進行分隔。例如下面,我們就截取2017年,分隔頻率為每年的12月份,A為年,DEC為12月,所以p+2就是2019年的12月了。
那我們除了用daterange()來生成時間序列,也可以用period_range來生成時期序列。如下:
生成了時期序列,用月份隔開,每個都是單獨的一個月,不是一個時間點。我們可以對比一些date_range。date_range則生成的是時間點。
推薦閱讀:
※探索電影大數據
※Kaggle數據分析——Titanic
※當excel不夠用時,如何利用Access進行數據分析?
※自動駕駛免費數據資源分享