使用时间序列实现股票预测--ARIMA模型实战

导入数据集

import pandas as pd
import numpy as np
import matplotlib.pylab as plt
import datetime
import seaborn as sns
from matplotlib.pylab import style
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf,plot_pacf
data=pd.read_excel(r'D:\股票数据1.xls',index_col=0,parse_dates=[0])
data.tail(10)

股票代码 名称 收盘价 最高价 最低价 开盘价
日期
2020-07-17 '601988 中国银行 3.41 3.42 3.39 3.41
2020-07-16 '601988 中国银行 3.40 3.46 3.39 3.43
2020-07-15 '601988 XD中国银 3.43 3.51 3.42 3.50
2020-07-14 '601988 中国银行 3.67 3.71 3.66 3.69
2020-07-13 '601988 中国银行 3.69 3.74 3.65 3.66
2020-07-10 '601988 中国银行 3.67 3.77 3.65 3.77
2020-07-09 '601988 中国银行 3.77 3.82 3.75 3.81
2020-07-08 '601988 中国银行 3.82 3.87 3.79 3.82
2020-07-07 '601988 中国银行 3.82 3.96 3.81 3.90
2020-07-06 '601988 中国银行 3.87 3.89 3.64 3.64

由于预测收盘价,故对开盘价进行数据重采样聚合,按照每周一的维度显示

#使用数据重采样,使用每周一的时间显示求平均值维度进行聚合
data_week=data['开盘价'].resample('W-MON').mean()

日期
2020-07-06 3.640
2020-07-13 3.792
2020-07-20 3.490
2020-07-27 3.416

2021-02-01 3.168
2021-02-08 3.180
2021-02-15 3.180
Freq: W-MON, Name: 开盘价, dtype: float64
选取训练集

data_train=data_week['2020-08':'2021-02']
data_train
data_train.plot()
plt.title('股票每日开盘价')
plt.plt()

使用时间序列实现股票预测--ARIMA模型实战_第1张图片
对数据进行差分

date_diff=data_train.diff()
date_diff=date_diff.dropna()
plt.figure()
plt.plot(date_diff)
plt.title('一阶差分')
plt.show()

使用时间序列实现股票预测--ARIMA模型实战_第2张图片
获取P值

acf=plot_acf(date_diff,lags=20)
acf

使用时间序列实现股票预测--ARIMA模型实战_第3张图片
获取q值

pacf=plot_pacf(date_diff,lags=10)
pacf

使用时间序列实现股票预测--ARIMA模型实战_第4张图片
运用ARIMA模型对’2021/02/01’,'2021/04/20’的开盘价进行预测
注:起止日期必须包含在已有数据集中

from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(data_train,order=(1,1,1),freq='W-MON')
arima = model.fit()
pre_data = arima.predict('2021/02/01','2021/04/20',dynamic=True,typ='levels')
pre_data

2021-02-01 3.177041
2021-02-08 3.180793
2021-02-15 3.168823
2021-02-22 3.167737
2021-03-01 3.159115
2021-03-08 3.155711
2021-03-15 3.148695
2021-03-22 3.144179
2021-03-29 3.137932
2021-04-05 3.132884
2021-04-12 3.127006
2021-04-19 3.121702
2021-04-26 3.116001
Freq: W-MON, dtype: float64

plt.plot(pre_data )

使用时间序列实现股票预测--ARIMA模型实战_第5张图片

#可视化对比
stock_con = pd.concat([data_train,pre_data],axis=1,keys=['ori','pre'])
stock_con.plot()
plt.title('预测情况')
plt.show()

使用时间序列实现股票预测--ARIMA模型实战_第6张图片

你可能感兴趣的:(ARIMA模型,python)