美文网首页
Python数据分析与机器学习45- 股票预测

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

作者: 只是甲 | 来源:发表于2022-08-03 09:39 被阅读0次

    一. 股票数据下载

    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

    相关文章

      网友评论

          本文标题:Python数据分析与机器学习45- 股票预测

          本文链接:https://www.haomeiwen.com/subject/vdigirtx.html