13161216443

您所在位置: 首頁> 學習課程> 20個Python教程,掌握時間序列的特征分析

20個Python教程,掌握時間序列的特征分析

發布百知教育 來源:學習課程 2019-08-20

【導語】時間序列是指以固定時間為間隔的序列值。本篇教程將教大家用 Python 對時間序列進行特征分析。

 

1、什么是時間序列?


時間序列是指以固定時間為間隔的、由所觀察的值組成的序列。根據觀測值的不同頻率,可將時間序列分成小時、天、星期、月份、季度和年等時間形式的序列。有時候,你也可以將秒鐘和分鐘作為時間序列的間隔,如每分鐘的點擊次數和訪客數等等。

 

為什么我們要對時間序列進行分析呢?

 

因為當你想對一個序列進行預測時,首先要完成分析這個步驟。除此之外,時間序列的預測也具有極大商業價值,如企業的供求量、網站的訪客量以及股票價格等,都是極其重要的時間序列數據。

 

那么,時間序列分析都包括哪些內容呢?

 

要做好時間序列分析,必須要理解序列的內在屬性,這樣才能做出更有意義且精準的預測。


2、如何在 Python 中引入時間序列?


關于時間序列的數據大都存儲在 csv 文件或其他形式的表格文件里,且都包含兩個列:日期和觀測值。

 

首先我們來看 panda 包里面的 read_csv() 函數,它可以將時間序列數據集(關于澳大利亞藥物銷售的 csv 文件)讀取為 pandas 數據框。增加一個 parse_dates=['date'] 字段,可以把包含日期的數據列解析為日期字段。


1.png



2.png


時間序列數據框

 

此外,你也可以將文件讀取為 pandas 序列,把日期作為索引列,只需在 pd.read_csv() 中指定 index_col 參數。


3.png


pandas 序列

pandas 序列

 

注意,在 pandas 序列中,'value' 列的位置高于 'date' 列,這表明它是一個 pandas 序列而非數據框。

 

3、什么是面板數據?


面板數據同樣是基于時間的數據集。

 

不同之處是,除了時間序列,面板數據還包括一個或多個相關變量,這些變量也是在同個時間段內測得的。

 

面板數據中的列包括有助于預測 y 值的解釋變量,這些特征列可用于之后的預測。以下是關于面板數據的例子:



4、時間序列可視化


接下來,我們用 matplotlib 對序列進行可視化。


5.png


6.png


時間序列可視化

 

由于所有的值都為正數,無論使用 y 軸的哪一側都可以看到增長的趨勢。


python學習


飛機乘客數據 - 雙邊序列

 

由于這是一個月份的時間序列,每年的走勢都遵循著特定重復的模式,你可以在同一個圖中畫出單獨每年的折線。這樣有助于對這幾年的趨勢走向進行平行對比。

 

季節性時間序列的可視化:


9.png


10.png


藥品銷售的季節性時間序列圖

 

每年的二月份,藥品銷售會有一次大幅度下跌,三月份會回漲,四月份再次下跌,以此規律循環。很明顯,該模式以年為單位,每年循環往復。

 

不過,隨著年份的變化,藥品銷售總體呈上升趨勢。你可以選擇使用箱型圖將這一趨勢進行可視化,可以方便看出每一年的變化。同樣地,你也可以按月份繪制箱型圖,來觀察每個月的變化。

 

按月份(季節)和年份繪制箱型圖:你可以將數據處理成以季節為時間間隔,然后觀察特定年份內值的分布,也可以將全部時間的數據進行對比。



年份序列和月份序列的箱型圖

 

上面的箱型圖可以使年份和月份的序列更易于觀察。同樣,在月份的箱線圖中,十二月和一月的藥品銷售額明顯更高,這是因為處于假期折扣季。

 

到目前為止,我們了解了通過相似性來觀察時間序列的模式,接下來,如何發現這些常見模式中的差異呢?

 

5、時間序列的模式


任何一個時間序列都可以被分解成以下幾個部分:基準 + 趨勢成分 + 季節成分 + 殘差成分。

 

趨勢是指時間序列中上升或下降的傾斜程度。但季節成分是由于受季節因素影響而產生的周期性模式循環,也可能受每年內不同月份、每月內不同日期、工作日或周末,甚至每天內不同時間的影響。

 

然而,不一定所有的時間序列都具備趨勢或季節性。一個時間序列也可能不存在趨勢,但具有季節性。反之亦然。

 

因此,一個時間序列可以被想象成趨勢、季節性和殘差項的組合。


13.png


時間序列的模式

 

另一個需要考慮的方面是周期性模式。當序列中的上升和下降,不是按日歷中的特定時間間隔發生時,就會出現這種情況。注意不要把“周期”作用和“季節”作用混淆。

 

那么,如何區分“周期”和“季節”呢?

 

如果序列中的模式不是以日歷中特定間隔循環出現的,那么就是周期。因為與季節性不同,周期作用通常受到商業或社會經濟等因素的影響。

 

6、加法與乘法時間序列


根據趨勢和季節的固有屬性,一個時間序列可以被建模為加法模型或乘法模型,也就是說,序列中的值可以用各個成分的加和或乘積來表示:

 

加法時間序列:

值 = 基準 + 趨勢 + 季節 + 殘差

 

乘法時間序列:

值 = 基準 x 趨勢 x 季節 x 殘差

 

7、如何將時間序列的成分分解出來?


通過將一個時間序列視為基準、趨勢、季節指數及殘差的加法或乘法組合,你可以對時間序列進行經典分解。


14.png


15.png


加法和乘法分解

 

設置 extrapolate_trend='freq' 有助于處理序列首部趨勢和殘差中的空值。

 

如果你仔細觀察加法分解中的殘差項,會發現其中仍保留了一些模式。然而,乘法分解中的殘差項看起來更具有隨機性。因此,對于這一特定序列來說,采用乘法分解更合適。

 

趨勢、季節和殘差成分的數值輸出均存儲在 result_mul 里,下面我們對其進行提取,并放入數據框中:


16.png


仔細觀察,會發現 seas、trend 和 resid 三列的乘積正好等于 actual_values。


8、平穩和非平穩時間序列


平穩是時間序列的屬性之一。平穩序列中的值不是時間的函數。

 

也就是說,平穩序列的平均值、方差和自相關性等統計特征始終為常數。序列的自相關性是指該序列與之前的值間的相關性。

 

平穩的時間序列也不包括季節因素的影響。那么如何分辨一個序列是否平穩呢?讓我們來看幾個例子:


19.png


上圖來自 R 語言的 TSTutorial 教程。

 

為什么說序列平穩很重要呢?

 

我會對此稍微做一些解釋,但要清楚一點,通過采用合適的變換,我們近乎可以將任何時間序列變得平穩。大多數統計預測方法最初都是為平穩時間序列而設計的。預測過程的第一步是通過一些變換,來將非平穩序列變成平穩序列。


作者 | Selva Prabhakaran 

譯者 | Tianyu

編輯 | Jane

來源 | AI科技大本營(ID: rgznai100)


上一篇:Python的數據科學實踐 | Numpy

下一篇:應屆生去公司找個Java程序員的職位需要什么技能?

相關推薦

www.akpsimsu.com

有位老師想和您聊一聊

關閉

立即申請