股票分析,利用线性回归实时预测股价,只需要提供股票代码即可爬取相应股票数据并建模

2023-11-03

这里参考了别人的代码,并引用了tushare模块中定义的接口自动获取了依据 股票代码来获取数据
此篇文章提供了
1.一个简单通过接口爬取csv数据的方法
2.一个处理csv数据的简单方法
3.依据数据进行特征提取建立简单的股价预测模型

如下:
使用的话只需要修改对应的股票代码即可
我这里使用的是 300015 爱尔眼科的股票代码


import numpy as np
import pandas as pd  # 数据处理, 读取 CSV 文件
import matplotlib.pyplot as plt
import tushare as ts
from plotly.offline import init_notebook_mode, iplot, iplot_mpl
import plotly.graph_objs as go
from sklearn.linear_model import LinearRegression
from sklearn import preprocessing
import sklearn
# 000001 为平安银行
# 获取股票的数据
# 如果你还没有安装, 可以使用 pip install tushare 安装tushare python包

Stock_Code = 300015  #爱尔眼科


df = ts.get_hist_data(f'{Stock_Code}')

df.to_csv(f'{Stock_Code}.csv')
df = pd.read_csv(f'./{Stock_Code}.csv')

print(np.shape(df))
print(df[0:10])
df.head()

'''股票数据的特征
*date:日期
*open:开盘价
*high:最高价
*close:收盘价
*low:最低价
*volume:成交量
*price_change:价格变动
*p_change:涨跌幅
*ma5:5
日均价
*ma10:10
日均价
*ma20: 20
日均价
*v_ma5: 5
日均量
*v_ma10: 10
日均量
*v_ma20: 20
日均量
'''
本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/document/2
(600, 15)
         date   open   high  close    low      volume  price_change  p_change  \
0  2022-03-25  30.51  31.22  29.66  29.50   556807.50         -0.85     -2.79   
1  2022-03-24  29.37  31.00  30.51  29.17   734351.69          0.78      2.62   
2  2022-03-23  28.28  29.95  29.73  28.04   712581.62          1.70      6.07   
3  2022-03-22  28.20  28.64  28.03  27.95   327752.81         -0.46     -1.61   
4  2022-03-21  28.83  28.90  28.49  28.11   400047.69         -0.12     -0.42   
5  2022-03-18  29.01  29.19  28.61  27.91   782520.00         -0.84     -2.85   
6  2022-03-17  28.00  30.44  29.45  28.00  1401702.38          2.18      7.99   
7  2022-03-16  26.84  27.38  27.27  25.28  1626294.12          0.33      1.23   
8  2022-03-15  30.00  30.70  26.94  25.02  1815843.62         -3.47    -11.41   
9  2022-03-14  31.87  32.20  30.41  30.10   518120.59         -2.09     -6.43   

      ma5    ma10    ma20       v_ma5     v_ma10     v_ma20  turnover  
0  29.284  28.910  31.459   546308.26  887602.20  633485.26      1.25  
1  29.074  29.194  31.745   591450.76  863570.32  639080.99      1.65  
2  28.862  29.347  31.892   724920.90  827310.41  621764.07      1.60  
3  28.370  29.530  32.132   907663.40  806734.83  599018.34      0.74  
4  28.152  30.028  32.434  1205281.56  814264.94  595898.22      0.90  
5  28.536  30.444  32.735  1228896.14  827720.85  589260.22      1.76  
6  29.314  31.081  33.057  1135689.89  774035.25  559168.78      3.14  
7  29.832  31.657  33.334   929699.92  656945.54  501548.91      3.65  
8  30.690  32.486  33.718   705806.27  518786.47  437122.81      4.07  
9  31.904  33.423  34.131   423248.32  367355.32  385054.37      1.16  





'股票数据的特征\n*date:日期\n*open:开盘价\n*high:最高价\n*close:收盘价\n*low:最低价\n*volume:成交量\n*price_change:价格变动\n*p_change:涨跌幅\n*ma5:5\n日均价\n*ma10:10\n日均价\n*ma20: 20\n日均价\n*v_ma5: 5\n日均量\n*v_ma10: 10\n日均量\n*v_ma20: 20\n日均量\n'

将日期的键值的类型从字符串转为日期

df['date'] = pd.to_datetime(df['date'])
categories = {'volume','v_ma5','v_ma10','v_ma20'}
'''数值大小尽量统一化'''
for cate in categories:
    df[cate] = df[cate]/10000


df = df.set_index('date')
# 按照时间升序排列
df.sort_values(by=['date'], inplace=True, ascending=True )
df.tail()
open high close low volume price_change p_change ma5 ma10 ma20 v_ma5 v_ma10 v_ma20 turnover
date
2022-03-21 28.83 28.90 28.49 28.11 40.004769 -0.12 -0.42 28.152 30.028 32.434 120.528156 81.426494 59.589822 0.90
2022-03-22 28.20 28.64 28.03 27.95 32.775281 -0.46 -1.61 28.370 29.530 32.132 90.766340 80.673483 59.901834 0.74
2022-03-23 28.28 29.95 29.73 28.04 71.258162 1.70 6.07 28.862 29.347 31.892 72.492090 82.731041 62.176407 1.60
2022-03-24 29.37 31.00 30.51 29.17 73.435169 0.78 2.62 29.074 29.194 31.745 59.145076 86.357032 63.908099 1.65
2022-03-25 30.51 31.22 29.66 29.50 55.680750 -0.85 -2.79 29.284 28.910 31.459 54.630826 88.760220 63.348526 1.25

检测是否有缺失数据 NaNs

df.dropna(axis=0, inplace=True)#
df.isna().sum(),df.shape
(open            0
 high            0
 close           0
 low             0
 volume          0
 price_change    0
 p_change        0
 ma5             0
 ma10            0
 ma20            0
 v_ma5           0
 v_ma10          0
 v_ma20          0
 turnover        0
 dtype: int64,
 (600, 14))

K线图

Min_date = df.index.min()
Max_date = df.index.max()
print("First date is", Min_date)
print("Last date is", Max_date)
print(Max_date - Min_date)
# %%

init_notebook_mode()


trace = go.Ohlc(x=df.index, open=df['open'], high=df['high'], low=df['low'], close=df['close'])
data = [trace]


iplot(data, filename='simple_ohlc')

运行出来的这个其实是个demo 并不是图片,可以点击查看具体数据
这里为了显示正常只是截图使用
在这里插入图片描述

线性回归


# 创建新的列, 包含预测值, 根据当前的数据预测5天以后的收盘价

date = "2022-03-15'"
num = 30  # 预测date  num天后的情况

df['label'] = df['close']# 预测值  每天的最终股票价格


丢弃 ‘label’, ‘price_change’, ‘p_change’, 不需要它们做预测

Data = df.drop(['label', 'price_change', 'p_change'], axis=1)
print(Data.tail() )
X = Data.values
X = preprocessing.scale(X)

df.dropna(inplace=True)
Target = df.label
y = Target.values


print(np.shape(X), np.shape(y))
'''x 特征,y 股价'''
             open   high  close    low     volume     ma5    ma10    ma20  \
date                                                                        
2022-03-21  28.83  28.90  28.49  28.11  40.004769  28.152  30.028  32.434   
2022-03-22  28.20  28.64  28.03  27.95  32.775281  28.370  29.530  32.132   
2022-03-23  28.28  29.95  29.73  28.04  71.258162  28.862  29.347  31.892   
2022-03-24  29.37  31.00  30.51  29.17  73.435169  29.074  29.194  31.745   
2022-03-25  30.51  31.22  29.66  29.50  55.680750  29.284  28.910  31.459   

                 v_ma5     v_ma10     v_ma20  turnover  
date                                                    
2022-03-21  120.528156  81.426494  59.589822      0.90  
2022-03-22   90.766340  80.673483  59.901834      0.74  
2022-03-23   72.492090  82.731041  62.176407      1.60  
2022-03-24   59.145076  86.357032  63.908099      1.65  
2022-03-25   54.630826  88.760220  63.348526      1.25  
(600, 12) (600,)





'x 特征,y 股价'
# 将数据分为训练数据和测试数据
X_train, X_test,  y_train ,y_test= sklearn.model_selection.train_test_split(X,y,test_size=0.1,random_state=42)
# %%
lr = LinearRegression()
lr.fit(X_train, y_train)

lr.score(X_train,y_train),lr.score(X_test, y_test) # 使用绝对系数 R^2 评估模型
(1.0, 1.0)

做预测

此处使用的特征是最近num天的特征,而目前使用的数据是之前的特征量,由于归一化,
实际上若真要预测,首先要预测这些特征的值随时间变化的概率

X_Predict = X[-num:]
Forecast = lr.predict(X_Predict)
print(Forecast.shape)
print(y[-num:].shape)
print(X_Predict.shape)
(30,)
(30,)
(30, 12)
### 画预测结果

# 预测
trange = pd.date_range(f'{date}', periods=num, freq='d')
print(trange)

# 产生预测值dataframe
Predict_df = pd.DataFrame(Forecast, index=trange)
Predict_df.columns = ['forecast']
Predict_df

# 将预测值添加到原始dataframe
df = pd.read_csv(f'./{Stock_Code}.csv')
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')

# 按照时间升序排列
df.sort_values(by=['date'], inplace=True, ascending=True)
df_concat = pd.concat([df, Predict_df], axis=1)

df_concat = df_concat[df_concat.index.isin(Predict_df.index)]
df_concat.shape
DatetimeIndex(['2022-03-15', '2022-03-16', '2022-03-17', '2022-03-18',
               '2022-03-19', '2022-03-20', '2022-03-21', '2022-03-22',
               '2022-03-23', '2022-03-24', '2022-03-25', '2022-03-26',
               '2022-03-27', '2022-03-28', '2022-03-29', '2022-03-30',
               '2022-03-31', '2022-04-01', '2022-04-02', '2022-04-03',
               '2022-04-04', '2022-04-05', '2022-04-06', '2022-04-07',
               '2022-04-08', '2022-04-09', '2022-04-10', '2022-04-11',
               '2022-04-12', '2022-04-13'],
              dtype='datetime64[ns]', freq='D')





(30, 15)

画预测值和实际值

df_concat['close'].plot(color='green', linewidth=1)
df_concat['forecast'].plot(color='orange', linewidth=3)
plt.xlabel('Time')
plt.ylabel('Price')
plt.legend()
plt.show()
这个图片之所以不连续,,因为周六,周日,股市不开业

在这里插入图片描述

问题:
预测的特征是按照最近几天的特征来写的
未深入分析会影响到股价的特征

可能的改进措施:
建立13个特征随时间变化的回归模型
再依据由13个模型预测的数值统筹为特征量再预测。
引入股票分析,金融分析的其他方法到机器学习特征中来。
未深入研究了,点到为止。。。

其他文章
Glcm 灰度共生矩阵,保姆级别教程,带源码
SVM支持向量机自动调优,带源码
HOG特征+SVM 进行行人检测,带源码,异常处理
Sober算子边缘检测与Harris角点检测1

参考文献
线性回归-股票预测

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

股票分析,利用线性回归实时预测股价,只需要提供股票代码即可爬取相应股票数据并建模 的相关文章

  • python中热图的层次聚类

    我有一个 NxM 矩阵 其值范围为 0 到 20 我可以使用 Matplotlib 和 pcolor 轻松获得热图 现在我想使用 scipy 应用层次聚类和树状图 我想重新排序每个维度 行和列 以显示哪些元素相似 根据聚类结果 如果矩阵是方
  • Python 小数.InvalidOperation 错误

    当我运行这样的东西时 我总是收到此错误 from decimal import getcontext prec 30 b 2 3 Decimal b Error Traceback most recent call last File Te
  • 如何在 Django 管理中以表格格式显示添加模型?

    我刚刚开始使用 Django 编写我的第一个应用程序 为我的家庭设计的家务图表管理器 在本教程中 它向您展示了如何添加相关对象 http docs djangoproject com en dev intro tutorial02 cust
  • 将 matplotlib png 转换为 base64 以在 html 模板中查看

    背景 你好 我正在尝试制作一个简单的网络应用程序 按照教程计算阻尼振动方程 并将结果的 png 返回到 html 页面 然后将其转换为 Base64 字符串 Problem 该应用程序运行正常 只是在计算结果时返回损坏的图像图标 可能是因为
  • 使用opencv计算深度视差图

    我无法使用 opencv 从视差图计算深度 我知道两个立体图像中的距离是用以下公式计算的z baseline focal disparity p 但我不知道如何使用地图计算视差 我使用的代码如下 为我提供了两个图像的视差图 import n
  • 属性错误:类型对象“图像”没有属性“打开”

    Exception in Tkinter callback Traceback most recent call last File C Python34 lib tkinter init py line 1482 in call retu
  • 提交表格并上传带有请求的文件

    我正在努力提交特定的表格蟒蛇请求 http www python requests org 我想使用它的网站上的其他表单工作正常 我可以提交登录表单等 这只是我遇到问题的文件上传 显然 提交表单效果很好 因为我从网站收到一条消息 说 请返回
  • 如何在matplotlib中基于x轴更改直方图颜色

    我有根据 pandas 数据框计算出的直方图 我想根据 x 轴值更改颜色 例如 If the value is 0 the color should be green If the value is gt 0 the color shoul
  • Python 垃圾收集有时在 Jupyter Notebook 中不起作用

    我的一些 Jupyter 笔记本经常出现 RAM 不足的情况 而且我似乎无法释放不再需要的内存 这是一个例子 import gc thing Thing result thing do something thing None gc col
  • PyQt - 如何检查 QDialog 是否可见?

    我有个问题 我有这个代码 balls Ball for i in range 1 10 因此 当我说 Ball 时 这将在 QDialog 上绘制一个球 然后当这完成后 我正在移动球QDialog无限循环中 我想说类似的话while QDi
  • 使用 Flask-SQLAlchemy 进行多对多多数据库连接

    我正在尝试使这个多对多联接与 Flask SQLAlchemy 和两个 MySQL 数据库一起工作 并且它非常接近 只是它为联接表使用了错误的数据库 这是基础知识 我有main db and vendor db 表格设置为main db u
  • 从 Python 中编译的正则表达式中提取命名组正则表达式模式

    我有一个 Python 正则表达式 其中包含多个命名组 但是 如果先前的组已匹配 则可能会错过与一组匹配的模式 因为似乎不允许重叠 举个例子 import re myText sgasgAAAaoasgosaegnsBBBausgisego
  • 从 C 线程调用 Python 代码

    我对从 C 或 C 线程调用 Python 代码时如何确保线程安全感到非常困惑 The Python 文档 http docs python org c api init html non python created threads似乎是
  • Jupyter Notebook 中的多处理与线程

    我试图测试这个例子here https ipywidgets readthedocs io en stable examples Widget 20Asynchronous html将其从线程更改为多处理 在 jupyter Noteboo
  • 在 Tensorflow 2.0 中的简单 LSTM 层之上添加 Attention

    我有一个由一个 LSTM 和两个 Dense 层组成的简单网络 如下所示 model tf keras Sequential model add layers LSTM 20 input shape train X shape 1 trai
  • Jinja2中获取请求参数

    如何检索请求参数a在 Jinja2 模板中 http foo bar a 1 我这个答案有点晚了 但其他解决方案并没有真正考虑到您对 Flask 的使用 事实上 您将 Flask 与 Jinja2 一起使用 这使得您的情况与其他框架有点不同
  • 如何让你的精灵在pygame中跳跃

    目前我已经制作了一个平台游戏 可以左右移动我的角色 他从地上开始 关于如何让他跳的任何想法 因为我不明白 目前 如果我按住向上键 我的玩家精灵将连续向上移动 或者如果我按下它 我的玩家精灵将向上移动并保持向上 我想找个办法远离他 让我重新跌
  • 如何使用 Python 将我的 GoPro Hero 4 相机直播连接到 openCV?

    我在尝试从我的新 GoPro Hero 4 相机捕获实时流并使用 openCV 对其进行一些图像处理时遇到麻烦 这是我的试用 创建的窗口上没有显示任何内容 import cv2 import argparse import time imp
  • python中匹配3个或更多相同的字符

    我正在尝试使用正则表达式在字符串中查找三个或更多相同的字符 例如 你好 不匹配 噢 会的 我尝试过做类似的事情 re compile 1 3 a zA Z re compile w 1 5 但似乎都不起作用 w 1 2 是您正在寻找的正则表
  • Shap - 颜色条不显示在摘要图中

    显示summary plot时 不显示颜色条 shap summary plot shap values X train 我尝试过改变plot size 当绘图较高时 会出现颜色条 但它非常小 看起来不应该 shap summary plo

随机推荐

  • oracle单实例客户端连接的failover功能

    今天测试了一下单实例数据库客户端连接的failover功能 操作系统为red hat 5 5 root localhost cat etc issue Red Hat Enterprise Linux Server release 5 5
  • vue项目树状图的实现

    1 实现背景 项目需要直观的展示元素之间的关系 需要实现一个树状图 数据可视化可以用Echarts HighCharts 但是相关树状图的示例不够直观 且不美观 几种工具之间比较 选择了蚂蚁金服的G6来实现 在开发期间有树状图的示例 之后再
  • 快速排序基本思想及代码实现-史上最通俗易懂的

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 1236 1 算法思想 快速排序是C R A Hoare于1962年提出的一种划分交换排序 它采用了一种分治的策略 通常称其为分治法 Divi
  • MQTT遗愿(last will) paho.mqtt实现

    一 MQTT遗嘱 MQTT 可以设置遗嘱 客户端在连接Broker的时候将遗嘱内容 也是topic payload形式 遗嘱也有一个主题 发送给Broker并保存在Broker中 当客户端因为非正常原因断开与Broker的连接时 Broke
  • 进程的相概念(linux系统编程)

    什么是程序 什么是进程 有什么区别 程序是静态的概念 gcc xx x o pro 磁盘中生成的pro就是程序 进程是程序的一次运行活动 通俗的讲就是程序跑起来了 系统中就多了一个进程 在Linux里面怎么查看系统中有哪些进程 使用ps指令
  • linux的超级管理用户

    超级管理用户 也称为root用户 是Linux系统中最高权限用户 root用户具有完全控制系统的权限 可以执行任何操作 包括管理文件 修改配置 安装软件等 下面是root用户的用法大全 切换到root用户 在终端中输入以下命令 su roo
  • 青龙面板使用教程,以及安装

    1 青龙面板使用教程 以及安装 首先青龙面板是在docker里面的 我们要安装一个docker 我这里只有debian 11 安装的教程 如何在debian11上安装docker 知乎 这个文章不错了 按命令执行就好了 其他操作系统的 去网
  • K8S-11--prometheus--(监控基础/prometheus基础/grafana/promQL/exporter/cadvisor)

    一 监控基础 一 监控简介 监控模型 端监控 业务层监控 应用层监控 中间件监控 系统层监控 1 监控概述 web监控 打开速度 URL打开状态码 API接口可用性 业务监控 订单交易量 活跃用户量 支付量 中间件监控 数据库 redis
  • 跳出ping++退款的坑

    近期在项目的开发过程中 需要用到ping 的退款功能 由于使用的版本比官方提供的要低2个小版本 因此问题并不是很大 但是由于官方文档有些内容写的比较含蓄 因此遇到了一些问题 我们可以通过如下的方式来获取SDK的版本 gt gt gt imp
  • STM32开发环境配置相关问题记录

    1 编译时出现 error 35 error directive Please select first the target STM32F10x device used 解决方案 点选options for target 选择C C 在d
  • K8S deployment挂载

    Deployment部署文件 apiVersion apps v1 kind Deployment metadata annotations deployment kubernetes io revision 1 kubectl kuber
  • Spring Security认证成功后回跳(解决前后端分离下OAuth2认证成功回跳)

    前言 Spring Security 后面简称SS 用了很长时间了 但之前一直没注意到一个有趣的特性 直到最近弄前后端分离 在OAuth2提供者 github 认证后 需要跳回前端页面 前端页面和服务端不在同个域下 然后突然一般情况下 同域
  • 鸿蒙系统做服务器,鸿蒙升级第一夜服务器崩了,有人等到凌晨3点,称升级后内存变大...

    编 赵艳秋 6月2日晚间 华为宣布推出HarmonyOS 2 华为 百 款设备将陆续启动HarmonyOS 2升级 不少华为用户则经历了艰难的一夜 最大规模升级第一夜服务器崩了 有如五一小长假期间的在线购票系统12306 6月2日晚 因为太
  • 半径为r的均匀带电球体_放于真空中半径为R,带电量为q的均匀带电球体,求球内外各点电势分布...

    展开全部 当半径r 一个均匀带电的球壳 带电量为q 则e68a84e8a2ad62616964757a686964616f31333431353338对壳外部产生的场强为E q 4 r 内部场强为零 则以上均匀带电的球内半径为r处 电场强度
  • C语言删除字符串中某一指定字符

    include
  • Python数据挖掘和解析算法

    机器学习是计算机科学的一个分支 它利用过去的经验来学习并利用其知识来做出未来的决策 机器学习是计算机科学 工程和统计学的交叉点 机器学习的目标是概括一个可检测的模式或从给定的例子中创建一个未知的规则 机器学习领域的概述如下 监督学习 这是教
  • 11.3外汇黄金价格投资策略、期货原油最新价格布局及指导

    黄金消息面与技术面解析 消息面 周二 11月2日 国际金价持稳 在通胀压力不断增加以及对经济增长放缓的担忧之际 市场参与者等待美联储本周政策会议结果 美国物价和薪资涨幅正处于数十年来的高位 本周可能让美联储官员面临挑战 分析师预计 在央行收
  • STM32串口烧写程序

    STM32烧写注意 1 必须使用串口1烧写 2 烧写 BOOT0置1 BOOT1置0 运行 BOOT0置0 BOOT1置任意 3 使用FLYMCU烧写软件 4 NRST引脚电路设计成悬空 按键按下 拉低 步骤 1 买一根 TTL串口线分别把
  • 全国各省、市、区(sql语句)

    文章目录 一 省份 数据表 二 市 数据表 注意 因为到县sql语句太多文章限字数上传不全 所以一半放到了另外的一篇文章上 三 上部分区 县 数据表 四 中部分区 县 数据表 五 下部分区 县 数据表 六 在在下部分区 县 数据表 返回项目
  • 股票分析,利用线性回归实时预测股价,只需要提供股票代码即可爬取相应股票数据并建模

    这里参考了别人的代码 并引用了tushare模块中定义的接口自动获取了依据 股票代码来获取数据 此篇文章提供了 1 一个简单通过接口爬取csv数据的方法 2 一个处理csv数据的简单方法 3 依据数据进行特征提取建立简单的股价预测模型 如下