天天看點

用python進行時間序列分析(一)一、用python生成時間序列二、資料重采樣三、pandas滑動視窗四、資料平穩性與差分法五、ARIMA模型

時間序列分析相關概念

  • 一、用python生成時間序列
    • 1.幾種常見的時間序列
    • 2.data_range()函數—建立時間序列
    • 3.truncate()過濾函數
    • 4.時間戳可以轉化為時間周期
  • 二、資料重采樣
  • 三、pandas滑動視窗
    • 1.制作pandas滑動視窗
    • 2.資料可視化
  • 四、資料平穩性與差分法
    • 1.平穩性
    • 2.差分法
  • 五、ARIMA模型
    • 1.ARIMA(p,d,q)模型
    • 2.ARIMA(p,d,q)階數确定
    • 3.ARIMA模組化流程

一、用python生成時間序列

首先,需要導入pandas和numpy庫

import pandas as pd
import numpy as np
           

1.幾種常見的時間序列

  1. 時間戳 (timestamp);
  2. 固定周期 (period);
  3. 時間間隔 (interval);

2.data_range()函數—建立時間序列

函數參數:pd.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False,name=None, closed=None, **kwargs)

其中freq變量常見的類型有:D(天)、W(周)、M(月)

用python進行時間序列分析(一)一、用python生成時間序列二、資料重采樣三、pandas滑動視窗四、資料平穩性與差分法五、ARIMA模型

date_range()函數也可用于Dataframe中建立索引,示例如下:

用python進行時間序列分析(一)一、用python生成時間序列二、資料重采樣三、pandas滑動視窗四、資料平穩性與差分法五、ARIMA模型

3.truncate()過濾函數

使用方法:DataFrame.truncate(before=None, after=None, axis=None, copy=True)[source]

用python進行時間序列分析(一)一、用python生成時間序列二、資料重采樣三、pandas滑動視窗四、資料平穩性與差分法五、ARIMA模型

4.時間戳可以轉化為時間周期

可以使用DatetimeArray.to_period(freq=None)函數

連結: 示例參考來源.

用python進行時間序列分析(一)一、用python生成時間序列二、資料重采樣三、pandas滑動視窗四、資料平穩性與差分法五、ARIMA模型

二、資料重采樣

定義:時間資料由一個頻率(年,月,周,日,分,秒)轉換到另一個頻率(年,月,周,日,分,秒)

  • 降采樣:由周轉化為月
  • 升采樣:由月轉化為周
  • 使用Series.resample()方法
    用python進行時間序列分析(一)一、用python生成時間序列二、資料重采樣三、pandas滑動視窗四、資料平穩性與差分法五、ARIMA模型
    時間序列降采樣
    用python進行時間序列分析(一)一、用python生成時間序列二、資料重采樣三、pandas滑動視窗四、資料平穩性與差分法五、ARIMA模型
    時間序列升采樣
    用python進行時間序列分析(一)一、用python生成時間序列二、資料重采樣三、pandas滑動視窗四、資料平穩性與差分法五、ARIMA模型
    時間序列升采樣過程中需要對NaN空值采用某種插值方法,可采用以下三種:
    • ffill空值取前面的值
    • bfill空值取後面的值
    • interpolate線性取值
      用python進行時間序列分析(一)一、用python生成時間序列二、資料重采樣三、pandas滑動視窗四、資料平穩性與差分法五、ARIMA模型

三、pandas滑動視窗

1.制作pandas滑動視窗

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
df=pd.Series(np.random.randn(600), index=pd.date_range('7/1/2016', freq='D', periods=600))
df.head()
r=df.rolling(windows=10)
print(r.mean())
           

2.資料可視化

plt.figure(figsize=(15,5))
df.plot(style='r--')
df.rolling(windows=10).mean().plot(style='g')
           

四、資料平穩性與差分法

1.平穩性

  • 平穩性:平穩性就是要求經由時間序列所得到的拟合曲線在未來一段時間内仍能順着現有的形态“慣性”地延續下去。
  • 平穩性要求序列的均值和方差不發生明顯變化
  • 嚴平穩與弱平穩
  • 嚴平穩:分布不随時間的改變而改變,如白噪聲(正态),無論怎樣取值,均值為0,方差為1。
  • 弱平穩:期望與相關系數不變,未來某時刻t的值Xt就要依賴于它過去的資訊,需要依賴性。

2.差分法

  • 定義:時間序列在t與t-1時刻的內插補點
  • 一階差分:s = pd.Series([1, 1, 2, 3, 5, 8]).diff(1)
  • 二階差分:s = pd.Series([1, 1, 2, 3, 5, 8]).diff(2)

五、ARIMA模型

1.ARIMA(p,d,q)模型

全稱為差分自回歸移動平均模型(Autoregressive Integrated Moving Average Model,ARIMA),其中AR-自回歸,p-自回歸項,,MA-移動平均,q-移動平均數,d-時間序列成為平穩時所做的差分次數

  • 原理:将非平穩的時間序列轉化為平穩的時間序列然後将因變量僅對他的滞後值以及随機誤差項的現值和滞後值進行回歸所建立的模型。
  • 構成:由AR模型(自回歸模型)和MA模型(移動平均模型)組成
  • 參數:需要确定p,d,q的最優取值

2.ARIMA(p,d,q)階數确定

  • AR(p)由PACF确定
  • MA(q)由ACF确定
  • 截尾:落在置信區間内(95%的點都符合該規則)
    用python進行時間序列分析(一)一、用python生成時間序列二、資料重采樣三、pandas滑動視窗四、資料平穩性與差分法五、ARIMA模型

3.ARIMA模組化流程

  • 序列平穩化(差分法确定d)
  • p和q階數确定:ACF和PACF
  • ARIMA(p,d,q)