一. 時間序列基礎知識
社會經濟現象總是隨著時間的推移而變遷,呈現動態性。一個或一組變量x(t)進行觀測,將在一系列時刻t1、t2、...、tn得到離散數字組成的序列集合,稱之為時間序列。通過時間序列算法,我們對事物進行動態的研究。
時間序列表示按時間先后順序排列的數列,通常X軸為時間要素,Y軸為數據要素,比如1986-2000年的人均GDP為y1、y2、...、yn,再如下圖所示太陽黑子運動規律。

指標通常包括時期指標(年度、月度)和時點指標(時刻)。時間序列分為以下三類:
1.隨機性時間序列:各指標變動受隨機因素影響
2.平穩時間序列:基本穩定在某個水平附近波動
3.非平穩時間序列:存在某種規律性變動,比如趨勢性、季節性
時間序列常用的特征統計量如下所示:

二. 金融時間序列-Pandas庫
該部分是作者學習《Python金融大數據分析》書籍第6章的內容,僅供大家學習:
金融學中最重要的數據類型之一是金融時間序列,以日期時間作為索引的數據,例如股票、GDP、匯率等。Python處理時間序列主要使用Pandas庫,其DataFrame和Series等基本類靈感來源于R語言。Pandas庫允許從Web上讀取數據,比如雅虎財經、谷歌財經等,也可以讀取csv文件(逗號分割)。下面詳細介紹Pandas庫的用法:
1.DataFrame類
首先我們通過DataFrame定義數據,包括數據、標簽和索引三部分,其中數據包括列表、元組、字典、ndarray等類型,索引包括數值、字符串和時間等。示例代碼如下:

輸出結果如下所示,包括輸出索引、標簽值,獲取“c”對應數值等,通過df.sum()對數據進行求和、df.mean()求平均值、df.Apply(lambda x:x**2)實現數值平方計算。

DataFrame對象總體上比較方便、高效,相比ndarray對象更專業化。下面代碼是進維度擴增,增加了一個float類型。

輸出結果如下所示:

接下來再增加一個維度,通過索引進行對應。代碼如下:

輸出結果如下:

2.DatetimeIndex類
接下來我們講解DatetimeIndex類,通過它定義時間。首先調用numpy.random函數 生成一個9*4的標準正態分布偽隨機數,然后定義列標簽,代碼如下:

輸出結果如下,如果需要進行訪問則調用df['No2'][3]實現。

為高效處理金融事件序列數據,必須很好地處理時間索引,接下來通過date_range()函數對9行數據對應上時間,從2015-1-1開始,代碼如下:

輸出結果如下所示,可以看到每行數據對應一個年份,其中freq參數表示頻率參數,常見的值包括:
B-交易日 D-日 W-每周 M-每月底 MS-月初 BM-每月最后一個交易日 A-每年底 H-每小時

3.繪圖操作接著我們進行繪圖操作,Pandas提供了Matplotlib的一個封裝器,專門為Dataframe對象設計。代碼如下:

主要調用plot方法,參數包括x、y、title、grid(表格線)、ax、legend、kind(圖形類型,kde/line/bar/barh)、logx、yticks(刻度)、xlim(界限)、rot(旋轉度)等,繪制圖形如下所示:

4.Series類從DataFrame對象中選擇一列時,則得到一個Series對象,代碼如下:

輸出結果如下:

僅僅獲取了"No1"數據并繪制如下圖所示圖形:

5.Groupby操作Pandas具有靈活分組功能,工作方式類似于SQL中分組和Excel透視表,為進行分組,我們添加一組索引對應季度表,代碼如下:

輸出結果如下所示:

三. 時間序列算法-ARIMA
作者本來想通過下面代碼導入雅虎財經數據,但是沒有成功,最終選擇自定義數據進行ARIMA算法實驗。
時間序列是通過曲線擬合和參數估計來建立 數學模型的理論方法,基本步驟如下:
(1).獲取被觀測系統時間序列數據;
(2).對數據繪圖觀測是否為平穩時間序列、非平穩d階差分;
(3).得平穩時間序列,求其自相關系數ACF和偏自相關系數PACF,通過自相關和偏相關圖分析,得到最佳階層p和結束q;
(4).由d、q、p得到ARIMA模型,然后進行檢驗。
1.獲取數據導入庫

代碼從2001年到2090年共有90組數據,然后按照年份進行時間序列統計(freq='A'年份),輸出結果如下所示:

繪制圖形如下:

2.時間序列差分d
ARIMA模型要求是平穩型,如果是非平穩型的時間序列需要先做時間序列的差分,得到一個平穩的時間序列。如果時間序列做d次差分才能得到一個平穩序列,則可使用ARIMA(p,d,q)模型,其中d表示差分次數。代碼如下:
主要調用df.diff(1)實現一階差分的效果,此數據一階和二階差分的結果類似,均值和方差基本問題,這里的差分d值就取1。

得到的平穩圖形如下圖所示:

3.合適的q和p值
得到一個平穩的時間序列后,需要選擇合適的ARIMA模型,即ARIMA模型中的p和q值。
注意:這里需要調用"pip install statsmodels"安裝統計數學分析的包,有時您的版本過低會導致錯誤(尤其是Anaconda 2.7版本),則需要調用"pip install --upgrade statsmodels"升級包至0.8版本。
代碼如下:

輸出結果如下所示,主要 調用plot_acf和plot_pacf函數。

四. 時間序列預測分析
最后給出選擇ARIMA(8,0)模型對未來10年數據進行的代碼。代碼如下:


輸出相關ARIMA(8,0)系數和預測的2090-2100年結果如下所示:

輸出圖形如下所示,可以看到后面綠色部分為預測值,根據前面的波動規律近似得到。
