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

文章目录

  • 一. 股票数据下载
    • 1.1 AKshare介绍
    • 1.2 安装AKShare
    • 1.3 如何使用AKShare?
      • 1.3.1 获取股票实时的交易数据
      • 1.3.2 获取股票历史行情数据
  • 二. 股票数据预测
  • 参考:

一. 股票数据下载

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")

测试记录:
Python数据分析与机器学习45- 股票预测_第1张图片

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')

测试记录:
Python数据分析与机器学习45- 股票预测_第2张图片

二. 股票数据预测

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

代码:

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()

测试记录:
Python数据分析与机器学习45- 股票预测_第3张图片

Python数据分析与机器学习45- 股票预测_第4张图片

Python数据分析与机器学习45- 股票预测_第5张图片

Python数据分析与机器学习45- 股票预测_第6张图片

预测只能预测一个趋势,从下图我们可以看到,预测的股价趋势趋于平稳。
Python数据分析与机器学习45- 股票预测_第7张图片

参考:

  1. https://study.163.com/course/introduction.htm?courseId=1003590004#/courseDetail?tab=1
  2. https://zhuanlan.zhihu.com/p/393083394

你可能感兴趣的:(数据分析,+,机器学习,Python,#,Python数据分析与机器学习,python,数据分析,机器学习)