暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

原创 只是甲 2022-08-04
1350

Table of Contents

一. 股票数据下载

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
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论