Python数据分析与机器学习45- 股票预测

一. 股票数据下载

1.1 AKshare介绍

先简单介绍下AKShare,内容截至官网。

AKShare 是基于 Python 的开源金融数据接口库,目的是实现对股票、期货、期权、基金、债券、外汇等金融产品和另类数据从数据采集,数据清洗到数据下载的工具,满足金融数据科学家、数据科学爱好者在数据获取方面的需求。

它的特点是利用 AKShare 获取的是基于可信任数据源发布的原始数据,广大数据科学家可以利用原始数据进行再加工,从而得出科学的结论。

  1. 代码语法符合 PEP8 规范, 数据接口的命名统一;
  2. 最佳支持 Python 3.7.5 及其以上版本;
  3. 提供最佳的文档支持, 每个数据接口提供详细的说明和示例, 只需要复制粘贴就可以下载数据;
  4. 持续维护由于目标网页变化而导致的部分数据接口运行异常问题;
  5. 持续更新财经数据接口, 同时优化源代码;

1.2 安装AKShare

pip install akshare

1.3 如何使用AKShare?

1.3.1 获取股票实时的交易数据

该数据来源新浪,使用时候注意频率,不然会被封IP

代码:

import akshare as ak

stock_zh_a_spot_df = ak.stock_zh_a_spot()
stock_zh_a_spot_df.to_csv('E:/file/gupiao.csv',encoding="gbk")

测试记录:
image.png

1.3.2 获取股票历史行情数据

date 交易日
open 开盘价
high 最高价
low 最低价
close 收盘价
volume 成交量;单位:股
outstanding_share 流动股本;单位:股
trunover 换手率=成交量/流动股本

代码:

import akshare as ak

stock_zh_a_daily_qfq_df = ak.stock_zh_a_daily(symbol = "sh600497",adjust = '')
stock_zh_a_daily_qfq_df.to_csv('E:/file/sh600497.csv')

测试记录:
image.png

二. 股票数据预测

我们以收盘价为基准来预测

代码:

import pandas as pd
import numpy as np
import datetime as dt
import matplotlib.pylab as plt
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
import statsmodels.api as sm

# 一些配置
style.use('ggplot')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 读取数据源
stockFile = 'E:/file/sh600497.csv'
stock = pd.read_csv(stockFile, index_col=0, parse_dates=[0])

# 查看每周的均价
# 首先需要将dataframe的索引设置为时间列
stock.index = pd.to_datetime(stock['date'])
stock_week = stock['close'].resample('W-MON').mean()
stock_train = stock_week['2020':'2022']

stock_train.plot(figsize=(12,8))
plt.legend(bbox_to_anchor=(1.25, 0.5))
plt.title("Stock Close")
sns.despine()


# 一阶差分
stock_diff = stock_train.diff()
stock_diff = stock_diff.dropna()

plt.figure()
plt.plot(stock_diff)
plt.title('一阶差分')
#plt.show()

# ACF
acf = plot_acf(stock_diff, lags=20)
plt.title("ACF")
#acf.show()

# PACF
pacf = plot_pacf(stock_diff, lags=20)
plt.title("PACF")
#pacf.show()

# 进行预测
stock_train[np.isnan(stock_train)] = 0
stock_train[np.isinf(stock_train)] = 0
model = ARIMA(stock_train, order=(1, 1, 1), freq='W-MON')
result = model.fit()

#pred = result.predict('2022/1/1', '2022/6/1',dynamic=True, typ='levels')
#print (pred)

#print(help(result.predict))
pred = result.predict(start=len(stock_train)-3, end=len(stock_train)+3, dynamic=True, typ='levels')
print(pred)

plt.figure(figsize=(6, 6))
plt.xticks(rotation=45)
plt.plot(pred)
plt.plot(stock_train)

plt.show()

测试记录:
image.png

image.png

image.png

image.png

预测只能预测一个趋势,从下图我们可以看到,预测的股价趋势趋于平稳。
image.png

参考:

  1. https://study.163.com/course/introduction.htm?courseId=1003590004#/courseDetail?tab=1
  2. https://zhuanlan.zhihu.com/p/393083394
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值