溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python做時(shí)間序列的方法

發(fā)布時(shí)間:2020-07-15 10:23:06 來(lái)源:億速云 閱讀:225 作者:清晨 欄目:編程語(yǔ)言

小編給大家分享一下python做時(shí)間序列的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

python做時(shí)間序列的方法:首先導(dǎo)入需要的工具包,輸入“data.plot()”,“plt().show()”命令繪制時(shí)序圖;然后由acf,pacf判斷模型參數(shù)即可。

python做時(shí)間序列的方法

采用python進(jìn)行簡(jiǎn)易的時(shí)間序列預(yù)測(cè)流程

時(shí)間序列可視化——>序列平穩(wěn)——>acf,pacf尋找最優(yōu)參——>建立模型——>模型檢驗(yàn)——>模型預(yù)測(cè)

涉及到的工具包如下:

# -*- coding:utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from random import randrange
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.api import tsa原始數(shù)據(jù)

時(shí)間序列是與時(shí)間相關(guān)的一組數(shù)據(jù),這里的數(shù)據(jù)主要是生成的模擬數(shù)據(jù),僅是為了練習(xí)一下處理【時(shí)間序列】的流程。

def generate_data(start_date, end_date):
    df = pd.DataFrame([300 + i * 30 + randrange(50) for i in range(31)], columns=['income'],
                      index=pd.date_range(start_date, end_date, freq='D'))
 
    return df
 
 
data = generate_data('20170601', '20170701')
# 這里要將數(shù)據(jù)類型轉(zhuǎn)換為‘float64’
data['income'] = data['income'].astype('float64')

數(shù)據(jù)可視化

這里主要是觀察數(shù)據(jù)是否是平穩(wěn)序列,如果不是則要進(jìn)行處理轉(zhuǎn)換為平穩(wěn)序列1

# 繪制時(shí)序圖

data.plot()
plt.show()

# 繪制自相關(guān)圖

plot_acf(data).show()

python做時(shí)間序列的方法

從時(shí)序圖中可以看出這組序列存在明顯的增長(zhǎng)趨勢(shì)。不是平穩(wěn)序列

 python做時(shí)間序列的方法

acf圖呈現(xiàn)出三角對(duì)稱趨勢(shì),進(jìn)一步說(shuō)明這組時(shí)間序列是一組單調(diào)趨勢(shì)的非平穩(wěn)序列。

差分–轉(zhuǎn)換為平穩(wěn)序列

# 差分運(yùn)算

# 默認(rèn)1階差分

data_diff = data.diff()

# 差分后需要排空,

data_diff = data_diff.dropna()

data_diff.plot()
plt.show()

python做時(shí)間序列的方法

可以看到在1階差分后序列已經(jīng)轉(zhuǎn)換為平穩(wěn)序列。

由acf,pacf判斷模型參數(shù)

plot_acf(data_diff).show()
plot_pacf(data_diff).show()

python做時(shí)間序列的方法

python做時(shí)間序列的方法

這里選用ARIMA模型,參數(shù)為(1, 1, 1)

模型訓(xùn)練

arima = ARIMA(data, order=(1, 1, 1))
result = arima.fit(disp=False)
print(result.aic, result.bic, result.hqic)
 
plt.plot(data_diff)
plt.plot(result.fittedvalues, color='red')
plt.title('ARIMA RSS: %.4f' % sum(result.fittedvalues - data_diff['income']) ** 2)
plt.show()

python做時(shí)間序列的方法

模型檢驗(yàn)

這里選擇了 ‘Ljung-Box檢驗(yàn)’,

# ARIMA   Ljung-Box檢驗(yàn) -----模型顯著性檢驗(yàn),Prod> 0.05,說(shuō)明該模型適合樣本

resid = result.resid
r, q, p = tsa.acf(resid.values.squeeze(), qstat=True)
print(len(r), len(q), len(p))
test_data = np.c_[range(1, 30), r[1:], q, p]
table = pd.DataFrame(test_data, columns=['lag', 'AC', 'Q', 'Prob(>Q)'])
print(table.set_index('lag'))

檢驗(yàn)的結(jié)果就是看最后一列前十二行的檢驗(yàn)概率(一般觀察滯后1~12階),如果檢驗(yàn)概率小于給定的顯著性水平,比如0.05、0.10等就拒絕原假設(shè),其原假設(shè)是相關(guān)系數(shù)為零。就結(jié)果來(lái)看,如果取顯著性水平為0.05,那么相關(guān)系數(shù)與零沒(méi)有顯著差異,即為白噪聲序列。

 python做時(shí)間序列的方法

模型預(yù)測(cè)

# 模型預(yù)測(cè)

pred = result.predict('20170701', '20170710', typ='levels')
print(pred)
x = pd.date_range('20170601', '20170705')
plt.plot(x[:31], data['income'])
# lenth = len()
plt.plot(pred)
plt.show()
print('end')

python做時(shí)間序列的方法

python做時(shí)間序列的方法

看完了這篇文章,相信你對(duì)python做時(shí)間序列的方法有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI