不管是在金融學、經(jīng)濟學的社會學科領域,還是生態(tài)學、系統(tǒng)神經(jīng)的自然學科領域,時間序列數(shù)據(jù)都是一種重要的結(jié)構化數(shù)據(jù)形式。
jupyter notebook在pycharm中的使用
我也是最近無意中才發(fā)現(xiàn),jupyter notebook可以在pycharm中使用的。在寫教學文檔方面,因為jupyter有著像命令行一樣即時輸出的特點,比建立工程運行的方式要方便許多。將這個小功能推薦給大家,也建議大家在學習python的時候多用用jupyter。
基礎

從這個小例子也可以看出jupyter notebook的好處,非常適合新手學習python的時候使用。同時這個例子也是最基礎的時間序列類型。
datetime以毫秒形式存儲日期和時間,兩個日期相減得到所差毫秒數(shù),同時也可以換算成天數(shù)和小時數(shù)。

在日常生活中,時間通常是以字符串的形式保存的,python中也提供了字符串和datetime相互轉(zhuǎn)換的方法。

以下是常用的格式化編碼。
| 代碼 | 說明 |
|---|---|
| %Y | 4位數(shù)的年 |
| %y | 2位數(shù)的年 |
| %m | 2位數(shù)的月 |
| %d | 2位數(shù)的日 |
| %H | 24小時制的時 |
| %I | 12小時制的時 |
| %M | 2位數(shù)的分 |
| %S | 秒[0, 61], 60、61用于閏秒 |
| %w | 用整數(shù)表示的星期幾 |
通過已知格式對日期進行解析當然最準確的做法,但是這種做法過于準確而顯得比較麻煩。這種情況下,可以這樣做。

從上圖可以看出,parse解析器的功能相當強大,很多格式隨意的時間字符串都可以解析成正確的時間。當然,遺憾的是,中文不可以。
下面我們來建立一個時間序列的數(shù)據(jù)集。

然后我們開始學習如何索引、選取、以及構造子集。

一門語言有一門語言的特色,其實pandas、numpy、還有現(xiàn)在學習的時間序列,它們對數(shù)據(jù)的索引選取都是大同小異的。只要掌握其中一個,其他包的索引基本也就都會了。
這一點在不同包的函數(shù)命名上也有所體現(xiàn)。細心的朋友可以發(fā)現(xiàn),我并沒有介紹data_range()這個函數(shù),其實它和numpy中的range()是一樣的,只有一些細節(jié),參數(shù)會有變化。
比如。

freq這個參數(shù)可以決定取樣的類型,BM就代表取每個月的最后一天。怎么說呢,越用越感覺到python的完善與強大。freq這個參數(shù)可以選擇的類型有很多。如下是我經(jīng)常用到總結(jié)下來的。
| 代碼 | 說明 |
|---|---|
| D | 天 |
| B | 工作日 |
| H | 時 |
| T | 分 |
| S | 秒 |
| L | 毫秒 |
| U | 微秒 |
| BM | 每月最后一個工作日 |
移動與滯后數(shù)據(jù)也是一個很常見的操作。

重采樣、頻率轉(zhuǎn)換
上面介紹了一些有關時間序列的基礎操作,接下來介紹一些進階內(nèi)容。
在做實驗的時候,我們最常涉及的就是采樣。



我們發(fā)現(xiàn)這段程序所實現(xiàn)的功能是,每五分鐘采樣,并將該五分鐘內(nèi)的值求和賦給新采樣的頻率。
以上是降采樣,升采樣是一樣的,只不過可能會有一些插值操作,這里不予介紹。