【机器学习实战入门】使用LSTM机器学习预测股票价格

在这里插入图片描述
在这里插入图片描述
机器学习在股票价格预测中有重要的应用。在这个机器学习项目中,我们将讨论如何预测股票的收益。这是一个非常复杂的任务,充满了不确定性。我们将会把这个项目分成两部分进行开发:

首先,我们将学习如何使用 LSTM 神经网络预测股票价格。
然后,我们将使用 Plotly Dash 构建一个用于股票分析的仪表板。
在这里插入图片描述

股票价格预测项目仪表板

股票价格预测项目
数据集
为了构建股票价格预测模型,我们将使用“印度国家证券交易所(NSE)TATA GLOBAL”数据集。这是来自印度国家证券交易所的 Tata 全球饮料有限公司的 Tata 饮料数据集:
为了构建股票分析的仪表板,我们将使用另一个包含多个股票(如苹果、微软、脸书)的数据集:
源代码
下载地址:链接: 源代码 及 Tata 饮料数据集 多个股票(如苹果、微软、脸书)的数据集

使用 LSTM 预测股票价格

  1. 导入:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib.pylab import rcParams
rcParams['figure.figsize']=20,10
from keras.models import Sequential
from keras.layers import LSTM,Dropout,Dense
from sklearn.preprocessing import MinMaxScaler
  1. 读取数据集:
df=pd.read_csv("NSE-TATA.csv")
df.head()

读取股票数据
在这里插入图片描述

  1. 从数据框中分析收盘价:
df["Date"]=pd.to_datetime(df.Date,format="%Y-%m-%d")
df.index=df['Date']
plt.figure(figsize=(16,8))
plt.plot(df["Close"],label='Close Price history')

分析股票价格
在这里插入图片描述

  1. 按日期时间排序并筛选“Date”和“Close”列:
data=df.sort_index(ascending=True,axis=0)
new_dataset=pd.DataFrame(index=range(0,len(df)),columns=['Date','Close'])
for i in range(0,len(data)):new_dataset["Date"][i]=data['Date'][i]new_dataset["Close"][i]=data["Close"][i]
  1. 对新的筛选数据集进行归一化:
scaler=MinMaxScaler(feature_range=(0,1))
final_dataset=new_dataset.values
train_data=final_dataset[0:987,:]
valid_data=final_dataset[987:,:]
new_dataset.index=new_dataset.Date
new_dataset.drop("Date",axis=1,inplace=True)
scaler=MinMaxScaler(feature_range=(0,1))
scaled_data=scaler.fit_transform(final_dataset)
x_train_data,y_train_data=[],[]
for i in range(60,len(train_data)):x_train_data.append(scaled_data[i-60:i,0])y_train_data.append(scaled_data[i,0])x_train_data,y_train_data=np.array(x_train_data),np.array(y_train_data)
x_train_data=np.reshape(x_train_data,(x_train_data.shape[0],x_train_data.shape[1],1))
  1. 构建和训练 LSTM 模型:
lstm_model=Sequential()
lstm_model.add(LSTM(units=50,return_sequences=True,input_shape=(x_train_data.shape[1],1)))
lstm_model.add(LSTM(units=50))
lstm_model.add(Dense(1))
inputs_data=new_dataset[len(new_dataset)-len(valid_data)-60:].values
inputs_data=inputs_data.reshape(-1,1)
inputs_data=scaler.transform(inputs_data)
lstm_model.compile(loss='mean_squared_error',optimizer='adam')
lstm_model.fit(x_train_data,y_train_data,epochs=1,batch_size=1,verbose=2)
  1. 从数据集中抽取样本,利用 LSTM 模型进行股票价格预测:
X_test=[]
for i in range(60,inputs_data.shape[0]):X_test.append(inputs_data[i-60:i,0])
X_test=np.array(X_test)
X_test=np.reshape(X_test,(X_test.shape[0],X_test.shape[1],1))
predicted_closing_price=lstm_model.predict(X_test)
predicted_closing_price=scaler.inverse_transform(predicted_closing_price)
  1. 保存 LSTM 模型:
lstm_model.save("saved_model.h5")
  1. 真实股票成本与预测股票成本对比可视化:
train_data=new_dataset[:987]
valid_data=new_dataset[987:]
valid_data['Predictions']=predicted_closing_price
plt.plot(train_data["Close"])
plt.plot(valid_data[['Close',"Predictions"]])

可以看到,LSTM 模型预测的股票价格与实际股票价格相当接近。
在这里插入图片描述

使用 Plotly Dash 构建仪表板
在本节中,我们将构建一个仪表板用于分析股票。Dash 是一个 Python 框架,它在 Flask 和 React.js 之上提供了一层抽象,用于构建分析型 Web 应用程序。
在继续之前,你需要安装 Dash。在终端运行以下命令。

pip3 install dash
pip3 install dash-html-components
pip3 install dash-core-components

现在创建一个新的 Python 文件 stock_app.py 并粘贴以下脚本:

import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import plotly.graph_objs as go
from dash.dependencies import Input, Output
from keras.models import load_model
from sklearn.preprocessing import MinMaxScaler
import numpy as npapp = dash.Dash()
server = app.server
scaler = MinMaxScaler(feature_range=(0,1))
df_nse = pd.read_csv("./NSE-TATA.csv")
df_nse["Date"] = pd.to_datetime(df_nse.Date, format="%Y-%m-%d")
df_nse.index = df_nse['Date']
data = df_nse.sort_index(ascending=True, axis=0)
new_data = pd.DataFrame(index=range(0, len(df_nse)), columns=['Date', 'Close'])
for i in range(0, len(data)):new_data["Date"][i] = data['Date'][i]new_data["Close"][i] = data["Close"][i]
new_data.index = new_data.Date
new_data.drop("Date", axis=1, inplace=True)
dataset = new_data.values
train = dataset[0:987, :]
valid = dataset[987:, :]
scaler = MinMaxScaler(feature_range=(0,1))
scaled_data = scaler.fit_transform(dataset)
x_train, y_train = [], []
for i in range(60, len(train)):x_train.append(scaled_data[i-60:i, 0])y_train.append(scaled_data[i, 0])x_train, y_train = np.array(x_train), np.array(y_train)
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
model = load_model("saved_model.h5")
inputs = new_data[len(new_data)-len(valid)-60:].values
inputs = inputs.reshape(-1, 1)
inputs = scaler.transform(inputs)
X_test = []
for i in range(60, inputs.shape[0]):X_test.append(inputs[i-60:i, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
closing_price = model.predict(X_test)
closing_price = scaler.inverse_transform(closing_price)
train = new_data[:987]
valid = new_data[987:]
valid['Predictions'] = closing_price
df = pd.read_csv("./stock_data.csv")app.layout = html.Div([html.H1("股票价格分析仪表板", style={"textAlign": "center"}),dcc.Tabs(id="tabs", children=[dcc.Tab(label='NSE-TATAGLOBAL 股票数据', children=[html.Div([html.H2("实际收盘价", style={"textAlign": "center"}),dcc.Graph(id="Actual Data",figure={"data": [go.Scatter(x=train.index,y=valid["Close"],mode='markers')],"layout": go.Layout(title='散点图',xaxis={'title': '日期'},yaxis={'title': '收盘价'})}),html.H2("LSTM 预测收盘价", style={"textAlign": "center"}),dcc.Graph(id="Predicted Data",figure={"data": [go.Scatter(x=valid.index,y=valid["Predictions"],mode='markers')],"layout": go.Layout(title='散点图',xaxis={'title': '日期'},yaxis={'title': '收盘价'})})                ])                ]),dcc.Tab(label='脸书股票数据', children=[html.Div([html.H1("脸书最高价与最低价对比", style={'textAlign': 'center'}),dcc.Dropdown(id='my-dropdown',options=[{'label': '特斯拉', 'value': 'TSLA'},{'label': '苹果', 'value': 'AAPL'}, {'label': '脸书', 'value': 'FB'}, {'label': '微软', 'value': 'MSFT'}], multi=True, value=['FB'],style={"display": "block", "margin-left": "auto", "margin-right": "auto", "width": "60%"}),dcc.Graph(id='highlow'),html.H1("脸书市场交易量", style={'textAlign': 'center'}),dcc.Dropdown(id='my-dropdown2',options=[{'label': '特斯拉', 'value': 'TSLA'},{'label': '苹果', 'value': 'AAPL'}, {'label': '脸书', 'value': 'FB'},{'label': '微软', 'value': 'MSFT'}], multi=True, value=['FB'],style={"display": "block", "margin-left": "auto", "margin-right": "auto", "width": "60%"}),dcc.Graph(id='volume')], className="container"),])])
])@app.callback(Output('highlow', 'figure'),[Input('my-dropdown', 'value')])
def update_graph(selected_dropdown):dropdown = {"TSLA": "特斯拉", "AAPL": "苹果", "FB": "脸书", "MSFT": "微软"}trace1 = []trace2 = []for stock in selected_dropdown:trace1.append(go.Scatter(x=df[df["Stock"] == stock]["Date"],y=df[df["Stock"] == stock]["High"],mode='lines', opacity=0.7, name=f'高 {dropdown[stock]}', textposition='bottom center'))trace2.append(go.Scatter(x=df[df["Stock"] == stock]["Date"],y=df[df["Stock"] == stock]["Low"],mode='lines', opacity=0.6,name=f'低 {dropdown[stock]}', textposition='bottom center'))traces = [trace1, trace2]data = [val for sublist in traces for val in sublist]figure = {'data': data,'layout': go.Layout(colorway=["#5E0DAC", '#FF4F00', '#375CB1', '#FF7400', '#FFF400', '#FF0056'],height=600,title=f"随时间变化的高低价:{', '.join(str(dropdown[i]) for i in selected_dropdown)}",xaxis={"title": "日期",'rangeselector': {'buttons': list([{'count': 1, 'label': '1M', 'step': 'month', 'stepmode': 'backward'},{'count': 6, 'label': '6M', 'step': 'month', 'stepmode': 'backward'},{'step': 'all'}])},'rangeslider': {'visible': True}, 'type': 'date'},yaxis={"title": "价格(美元)"}}}return figure@app.callback(Output('volume', 'figure'),[Input('my-dropdown2', 'value')])
def update_graph(selected_dropdown_value):dropdown = {"TSLA": "特斯拉", "AAPL": "苹果", "FB": "脸书", "MSFT": "微软"}trace1 = []for stock in selected_dropdown_value:trace1.append(go.Scatter(x=df[df["Stock"] == stock]["Date"],y=df[df["Stock"] == stock]["Volume"],mode='lines', opacity=0.7,name=f'交易量 {dropdown[stock]}', textposition='bottom center'))traces = [trace1]data = [val for sublist in traces for val in sublist]figure = {'data': data, 'layout': go.Layout(colorway=["#5E0DAC", '#FF4F00', '#375CB1', '#FF7400', '#FFF400', '#FF0056'],height=600,title=f"随时间变化的市场交易量:{', '.join(str(dropdown[i]) for i in selected_dropdown_value)}",xaxis={"title": "日期",'rangeselector': {'buttons': list([{'count': 1, 'label': '1M', 'step': 'month', 'stepmode': 'backward'},{'count': 6, 'label': '6M','step': 'month', 'stepmode': 'backward'},{'step': 'all'}])},'rangeslider': {'visible': True}, 'type': 'date'},yaxis={"title": "交易量"}}}return figureif __name__ == '__main__':app.run_server(debug=True)

现在运行此文件并打开浏览器中的应用:

python3 stock_app.py

股票价格预测项目仪表板
在这里插入图片描述

摘要
股票价格预测是一个适合机器学习初学者的项目;在本教程中,我们学习了如何开发股票价格预测模型以及如何构建用于股票分析的交互式仪表板。我们实现了基于 LSTM 模型的股市预测。另一方面,我们使用了 Python 的 Plotly Dash 框架来构建仪表板。

参考文献及资料链接

参考资料链接
股票价格预测基础https://example.com/ml-basics
LSTM 神经网络教程https://example.com/lstm-tutorial
TensorFlow 官方文档https://tensorflow.org/docs
Keras 官方文档https://keras.io/zh/
Scikit-learn 文档https://scikit-learn.org/stable/
NSE TATA GLOBAL 数据集https://example.com/tata-global-dataset
股票数据集https://example.com/stocks-dataset
运行 Flask 扩展https://flask.palletsprojects.com/en/2.3.x/extensions/
Plotly 官方网站https://plotly.com/python/
Plotly 冲浪式图表 (Dash) 官方文档https://dash.plotly.com/
Pandas 官方文档https://pandas.pydata.org/pandas-docs/stable/
Numpy 官方文档https://numpy.org/doc/stable/
LSTM 股票预测实践https://medium.com/@example_lstm_pred
Dash 股票分析仪表板案例https://blog.plotly.com/dash-stock-examples/
源代码与数据集介绍

股票价格预测项目

在这个机器学习项目中,我们将开发一个基于神经网络的股票预测模型,用于预测股票收益。

学习如何开发股票价格预测模型,并构建一个用于股票分析的交互式仪表板。我们使用 LSTM 模型实现股票市场预测,并使用 Plotly Dash Python 框架构建仪表板。

类别:机器学习、深度学习
编程语言:Python
工具与库:Plotly Dash、LSTM
IDE:Jupyter
前端:Plotly Dash(用于可视化)
后端:无
先决条件:Python、机器学习、深度学习、神经网络
目标受众:教育、开发人员、数据工程师、数据科学家

股票价格数据

该数据集包含关于塔塔全球饮料有限公司(Tata Global Beverages Limited)的股票价格记录。数据集中还包含按日期排列的股票价格,包括开盘价、收盘价、最高价和最低价,以及当天的交易量和成交额。

对于想要尝试数据可视化、数据分析以及多种形式的数据处理技术的人来说,这是一个极好的数据库。

示例数据
NSE 塔塔全球饮料有限公司

数据格式

  • Date:日期
  • Open:开盘价
  • High:最高价
  • Low:最低价
  • Last:最新价
  • Close:收盘价
  • Total Trade Quantity:总交易量
  • Turnover (Lacs):成交额(单位:十万卢比)
    在这里插入图片描述

股票价格数据

该历史数据集包含关于苹果(Apple)、微软(Microsoft)、脸书(Facebook)等多家公司股票价格的记录。数据集中还包含按日期排列的股票价格,包括开盘价、收盘价、最高价和最低价,以及当天的交易量。

对于想要尝试数据可视化、数据分析以及多种形式的数据处理技术的人来说,这是一个极好的数据库。

示例数据
股票数据集

数据格式

  • Date:日期
  • Open:开盘价
  • High:最高价
  • Low:最低价
  • Close:收盘价
  • Volume:交易量
  • OpenInt:未平仓合约(适用于期货和期权)
  • Stock:股票名称或代码

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/66402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【编程语言】C/C++语言常见标准和规范

C/C 是两种功能强大且广泛使用的编程语言。尽管它们没有像 Java 那样强制性的命名规则,但为了提高代码的可读性和可维护性,遵循一些普遍认同的编程规范和标准仍然是非常重要的。本文将探讨 C/C 编程中的一些命名规范及标准,以帮助开发者编写更…

使用C语言实现栈的插入、删除和排序操作

栈是一种后进先出(LIFO, Last In First Out)的数据结构,这意味着最后插入的元素最先被删除。在C语言中,我们可以通过数组或链表来实现栈。本文将使用数组来实现一个简单的栈,并提供插入(push)、删除(pop)以及排序(这里采用一种简单的排序方法,例如冒泡排序)的操作示…

08、如何预防SQL注入

目录 1、分析及其存在哪些危险 2、预防SQL注入 1、分析及其存在哪些危险 原理: SQL 注入是一种常见的网络攻击手段,攻击者通过在用户输入中插入恶意的 SQL 语句,利用程序对用户输入处理不当的漏洞,使恶意 SQL 语句被数据库服务器执行。 通常发生在应用程序将用户输入直接拼…

【爬虫】使用 Scrapy 框架爬取豆瓣电影 Top 250 数据的完整教程

前言 在大数据和网络爬虫领域,Scrapy 是一个功能强大且广泛使用的开源爬虫框架。它能够帮助我们快速地构建爬虫项目,并高效地从各种网站中提取数据。在本篇文章中,我将带大家从零开始使用 Scrapy 框架,构建一个简单的爬虫项目&am…

1.11 思维树(Tree-of-Thoughts, ToT):续写佳话

思维树(Tree-of-Thoughts, ToT):续写佳话 人工智能在推理和决策方面的突破,越来越依赖于模型能够以更高效、更灵活的方式进行推理。与传统的顺序性推理方法不同,**思维树(Tree-of-Thoughts,ToT)**提供了一种基于树状结构的推理方式,鼓励模型从多个角度进行探索,并在…

NVIDIA 下 基于Ubuntun20.04下 使用脚本安装 ros2-foxy 和 使用docker安装 ros2-foxy

一、前提介绍: 本文主要采用两种方式在NVIDIA 下基于 Ubuntun20.04安装 ros2-foxy。 使用环境: NVIDIA 为 Jetson 系列下 Jetson Xavier NX; Ubuntun版本:20.04 二、安装方法: 1、使用脚本编译方式: 使…

wx030基于springboot+vue+uniapp的养老院系统小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

【人工智能】Python中的自动化机器学习(AutoML):如何使用TPOT优化模型选择

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着机器学习在各行业的广泛应用,模型选择和优化成为了数据科学家面临的主要挑战之一。自动化机器学习&am…

计算机网络常见协议

目录 OSPF(Open Shortest Path First) NAT(Network Address Translation) ICMP (Internet Control Message Protocol) HTTPS(SSL/TLS加密) HTTPS协议 1. 对称加密 2. 非对称加密 3. 证书验证 4. 回顾https协议传输流程 HTTP TCP UDP 1. TCP&a…

1.7 ChatGPT:引领AI对话革命的致胜之道

ChatGPT:引领AI对话革命的致胜之道 随着人工智能(AI)技术的迅猛发展,特别是在自然语言处理(NLP)领域,OpenAI 的 ChatGPT 已经成为了举世瞩目的技术突破。从普通的自动化客服到深入的创作与协作,ChatGPT 通过其卓越的语言理解和生成能力,改变了人们与计算机交互的方式…

静态综合路由实验

实验拓扑 实验要求 1.除R5的环回地址外,整个其他所有网段基于192.168.1.0/24进行合理的IP地址划分 2.R1-R4每个路由器存在两个环回接口,用于模拟pc网段;地址也在192.168.1.0/24这个网络范围内 3.R1-R4上不能直接编写到达5.5.5.0/24的静态路由…

脚本工具:PYTHON

Python 是一种高级编程语言,以其简洁清晰的语法和强大的功能被广泛应用于各种领域,包括自动化脚本编写、数据分析、机器学习、Web开发等。以下是一些关于使用 Python 编写脚本工具的基本介绍、常用库以及一些实用技巧总结。 这里写目录标题 基础知识安装…

左神算法基础提升--4

文章目录 树形dp问题Morris遍历 树形dp问题 求解这个问题需要用到我们在基础班上学到的从节点的左子树和右子树上拿信息的方法。 求最大距离主要分为两种情况:1.当前节点参与最大距离的求解;2.当前节点不参与最大距离的求解; 1.当前节点参与最…

nuiapp在APP中的.nvue页面中使用webview展示空白的问题

在打包的APP中发现webview打开显示空白 最后发现是高度问题 最后给style设置动态高度&#xff1a; <web-view ref"webview" :style"viewStyle" allow :fullscreen"true" :webview-styles"webviewStyles" :src"UrlLink"…

[计算机网络]一. 计算机网络概论第一部分

作者申明&#xff1a;作者所有文章借助了各个渠道的图片视频以及资料&#xff0c;在此致谢。作者所有文章不用于盈利&#xff0c;只是用于个人学习。 1.0推荐动画 【网络】半小时看懂<计算机网络>_哔哩哔哩_bilibili 1.1计算机网络在信息时代的作用 在当今信息时代&…

神经网络常见操作(卷积)输入输出

卷积 dimd的tensor可以进行torch.nn.Convnd(in_channels,out_channels),其中nd-1,d-2对于torch.nn.Convnd(in_channels,out_channels)&#xff0c;改变的是tensor的倒数n1维的大小 全连接 使用torch.nn.Linear(in_features,out_features,bias)实现YXWT b,其中X 的形状为 (ba…

【C++】如何从源代码编译红色警戒2地图编辑器

【C】如何从源代码编译红色警戒2地图编辑器 操作视频视频中的代码不需要下载三方库&#xff0c;已经包含三方库。 一、运行效果&#xff1a;二、源代码来源及编程语言&#xff1a;三、环境搭建&#xff1a;安装红警2安装VS2022下载代码&#xff0c;源代码其实不太多&#xff0c…

SSM课设-酒店管理系统功能设计

【课设者】SSM课设-酒店管理系统 分为用户端管理员端 技术栈: 后端: Spring Spring MVC MyBatis Mysql JSP 前端: HtmlCssJavaScriptAjax 功能: 用户端主要功能包括&#xff1a; 登录注册 客房预订 客房评论 首页 管理员端主要功能包括&#xff1a; 会员信息管理 客房信息…

Redis 数据存储类型

Redis 支持多种类型的数据存储&#xff0c;每种类型都可以用于不同的场景和需求。下面是 Redis 支持的主要数据存储类型&#xff1a; 1. String&#xff08;字符串&#xff09; 类型简介&#xff1a;字符串是 Redis 中最简单的数据类型&#xff0c;可以包含任何数据&#xff…

游戏引擎学习第80天

Blackboard&#xff1a;增强碰撞循环&#xff0c;循环遍历两种类型的 t 值 计划对现有的碰撞检测循环进行修改&#xff0c;以便实现一些新的功能。具体来说&#xff0c;是希望处理在游戏中定义可行走区域和地面的一些实体。尽管这是一个2D游戏&#xff0c;目标是构建一些更丰富…