能够熟练运用时间序列分析和ARIMA模型对数据进行分析。
股票收盘价分析:本实验以“五粮液”股票数据为例,结合时间序列及ARIMA模型对股票收盘价进行分析;使用2003至2018年的股票数据,其中2014-2017年的数据为训练数据,通过对这些数据的训练,实现对2018年1月至3月的收盘价进行预测,并将预测的结果与爬到的真实股价进行绘制对比。
代码:
import pandas as pd
import datetime
import matplotlib.pylab as plt
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf,plot_pacf
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data_path=open(r'D:\test.csv')
shares_info = pd.read_csv(data_path)
shares_info
截图:
代码:
dates = pd.to_datetime(shares_info['交易日期'].values,format='%Y%m%d')
shares_info = shares_info.set_index(dates)
shares_info
截图:
代码:
plt.plot(shares_info['收盘价'])
plt.title('股票每日收盘价')
plt.show()
截图:
代码:
shares_info_week = shares_info['收盘价'].resample('W-MON').mean()
train_data = shares_info_week['2014': '2017']
plt.plot(train_data)
plt.title('股票周收盘均值')
plt.show()
截图:
代码:
acf = plot_acf(train_data,lags=20)
plt.title('股票指数的ACF')
plt.show()
截图:
代码:
pacf = plot_pacf(train_data,lags=20)
plt.title('股票指数的PACF')
plt.show()
截图:
代码:
train_diff=train_data.diff()
diff = train_diff.dropna()
plt.figure()
plt.plot(diff)
plt.title('一阶差分')
plt.show()
截图:
代码:
acf_diff = plot_acf(diff,lags=20)
plt.title('一阶差分的ACF')
plt.show()
截图:
代码:
pacf_diff = plot_pacf(diff,lags=20)
plt.title('一阶差分的PACF')
plt.show()
截图:
代码:
model = ARIMA(train_data, order =(1,1,1),freq = 'W-MON')
arima_result = model.fit()
arima_result.summary()
截图:
代码:
pred_vals = arima_result.predict('2018-01-01','2018-02-26',dynamic=True,typ='levels')
stock_forcast=pd.concat([shares_info_week,pred_vals],axis=1,keys=['original','predicted'])
plt.figure()
plt.plot(stock_forcast)
plt.title('真实值 vs 预测值')
plt.show()
截图:
通过本次实验,我能够熟练运用时间序列分析和ARIMA模型对数据进行分析。在实验过程中遇到了很多硬件或者是软件上的问题,请教老师,询问同学,上网查资料,都是解决这些问题的途径。最终将遇到的问题一一解决最终完成实验。
注意事项:
1、有疑问前,知识学习前,先用搜索。
2、熟读写基础知识,学得会不如学得牢。
3、选择交流平台,如QQ群,网站论坛等。
4、尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。