1、项目介绍技术栈采用 Python 语言开发基于 Flask 框架搭建后端服务通过 requests 爬虫从雪球网采集股票数据运用 LSTM 预测算法结合 Keras 深度学习神经网络进行股价预测前端使用 Echarts 实现数据可视化并结合 HTML 构建页面。功能模块· 股票数据可视化分析股价前10、成交额前20、股价区间占比分析· 股票数据可视化分析股价和成交量散点图· 股票数据中心· 股票价格预测LSTM预测算法· 后台数据管理· 股价历史数据管理· 注册登录项目介绍本系统基于 Flask 框架构建股票数据可视化分析与预测平台通过爬虫采集雪球网股票数据。系统提供股价前十与成交额前二十的柱状图、股价区间占比环形图、股价与成交量散点图等可视化分析功能帮助用户直观了解股票市场分布特征。股票数据中心以表格形式展示股票代码、价格、涨跌幅、成交量、市值等指标并支持搜索。基于 LSTM 深度学习模型对历史股价数据进行训练预测未来价格走势并以折线图展示。后台支持股票数据与历史数据的管理维护包含注册登录功能。2、项目界面1股票数据可视化分析—股价前10、成交额前20、股价区间占比分析该页面是股票可视化分析界面通过柱状图展示股价前十股票折线图呈现成交额前二十股票数据同时用环形图统计股价区间占比为用户提供多维度的股票数据直观对比与分布分析。2股票数据可视化分析—股价和成交量散点图该股票可视化分析页面通过环形图展示不同股价区间的商品数量占比同时用散点图直观呈现股票价格与成交量的分布关系帮助用户分析两者间的关联与数据趋势。3股票数据中心该股票数据管理页面以表格形式集中展示股票的名称、代码、价格、涨跌幅、成交量、成交额、市盈率、市值等多维度指标并提供搜索功能方便用户快速查询和查看股票的详细信息。4股票价格预测—LSTM预测算法该页面为股价预测功能模块用户可通过下拉菜单选择股票提交后以表格形式展示对应日期的预测股价并通过折线图直观呈现股价的预测变化趋势。5后台数据管理该后台管理系统页面提供股票数据管理功能可查看、搜索股票信息支持数据的创建、编辑与删除操作同时通过左侧导航栏切换用户管理、权限管理等模块。6股价历史数据管理19万数据该后台股价历史数据管理页面以表格形式展示股票名称、代码、价格与时间信息支持数据的搜索、创建、编辑和删除操作可高效管理与维护股票历史价格数据。7注册登录这是系统的登录页面提供账号和密码输入框及登录按钮支持用户输入凭证进行身份验证登录后可访问系统功能界面简洁直观保障系统数据安全与用户权限管理。3、项目说明一、技术栈简要说明本系统采用 Python 语言开发基于 Flask 框架搭建后端服务通过 requests 爬虫从雪球网采集股票数据运用 LSTM 预测算法结合 Keras 深度学习神经网络进行股价预测前端使用 Echarts 实现数据可视化并结合 HTML 构建页面。二、功能模块详细介绍· 股票数据可视化分析股价前10、成交额前20、股价区间占比分析该页面通过柱状图展示股价前十股票折线图呈现成交额前二十股票数据同时用环形图统计股价区间占比为用户提供多维度的股票数据直观对比与分布分析帮助快速识别高价股与高成交额股票。· 股票数据可视化分析股价和成交量散点图该页面通过环形图展示不同股价区间的股票数量占比同时用散点图直观呈现股票价格与成交量的分布关系帮助用户分析两者间的关联与数据趋势辅助判断量价配合情况。· 股票数据中心该页面以表格形式集中展示股票的名称、代码、价格、涨跌幅、成交量、成交额、市盈率、市值等多维度指标并提供搜索功能方便用户快速查询和查看股票的详细信息实现股票数据的集中管理与检索。· 股票价格预测LSTM预测算法该页面为股价预测功能模块用户可通过下拉菜单选择股票系统基于 LSTM 深度学习模型对历史股价数据进行训练提交后以表格形式展示对应日期的预测股价并通过折线图直观呈现股价的预测变化趋势为用户提供投资决策参考。· 后台数据管理该后台管理系统页面提供股票数据管理功能可查看、搜索股票信息支持数据的创建、编辑与删除操作同时通过左侧导航栏可切换用户管理、权限管理等模块实现股票基础信息的系统化维护。· 股价历史数据管理19万数据该后台页面以表格形式展示股票名称、代码、价格与时间信息支持对大规模历史数据19万条进行搜索、创建、编辑和删除操作可高效管理与维护股票历史价格数据保障数据完整性与查询效率。· 注册登录该页面为系统登录页面提供账号和密码输入框及登录按钮支持用户输入凭证进行身份验证登录后可访问系统功能界面简洁直观保障系统数据安全与用户权限管理。三、项目总结本系统基于 Flask 框架构建股票数据可视化分析与预测平台通过爬虫采集雪球网股票数据。系统提供股价前十与成交额前二十的柱状图、股价区间占比环形图、股价与成交量散点图等可视化分析功能帮助用户直观了解股票市场分布特征与量价关系。股票数据中心以表格形式展示股票代码、价格、涨跌幅、成交量、市值等指标并支持搜索方便数据查询。基于 LSTM 深度学习模型对历史股价数据进行训练预测未来价格走势并以折线图展示为用户提供智能化预测服务。后台支持股票基础信息与19万条历史数据的管理维护包含数据增删改查功能。系统还包含注册登录模块保障访问安全为股票投资者提供了数据分析和决策支持工具。4、核心代码#!/usr/bin/env python# coding: utf-8importnumpyasnp# 导入库numpy用于数据格式化操作importpandasaspd# 导入数据分析库pandasimportmodelsimportdatetimedefyuce(name美腾科技):# 1.1读取源数据dfmodels.GuPian.query.filter(models.GuPian.name美腾科技).order_by(models.GuPian.datetime).all()# 2.训练模型前的准备数据预处理# 2.1格式转换为pandas的DataFramelist1[]current0new_datapd.DataFrame(indexrange(0,len(df)10),columns[Date,Close])foriinrange(0,len(df)):new_data[Date][i]df[i].datetime.strftime(%Y-%m-%d)new_data[Close][i]df[i].current start_datedf[i].datetime currentdf[i].current count1foriinrange(len(df),len(df)10):new_data[Date][i](start_datedatetime.timedelta(dayscount)).strftime(%Y-%m-%d)new_data[Close][i]current list1.append((start_datedatetime.timedelta(dayscount)).strftime(%Y-%m-%d))count1print(new_data)# 2.2为其设置索引new_data.indexnew_data.Date# 2.3删除Date数据(只使用Close数据)new_data.drop(Date,axis1,inplaceTrue)# 2.4创建训练和验证集(数据集的划分)datasetnew_data.values traindataset[0:len(df),:]# 将最开始的数据作为训练集validdataset[len(df):,:]# 之后的所有数据设置为验证集# 2.5使用MinMaxScaler将数据的范围压缩至0到1之间这么做的目的是为了防止数值爆炸# (LSTM模型的计算中时间步长越大结果所迭代的次数就越多如1.1的100次方为13 780.61233982所以使用scaler()函数是必要的)fromsklearn.preprocessingimportMinMaxScaler# 从sklearn.preprocessing库中导入MinMaxScalerscalerMinMaxScaler(feature_range(0,1))scaled_datascaler.fit_transform(dataset)# 传入dataset将其用scaler()函数正则化后命名为scaled_data#2.6 用数组表现数据的时间序列特性步长设置为60x_train,y_train[],[]# 创建x_train, y_trainforiinrange(60,len(train)):# 循环结构i的值分别为60,61……直至train的长度(1500)x_train.append(scaled_data[i-60:i,0])# 将scaled_data中的数据传递到x_train中(60个为一组)y_train.append(scaled_data[i,0])# 将scaled_data中的数据传递到y_train中(从第60开始每1个数据为一组)x_train,y_trainnp.array(x_train),np.array(y_train)# 使用numpy库中的array()函数将列表x_train和y_train格式化为数组(可以理解为矩阵)x_trainnp.reshape(x_train,(x_train.shape[0],x_train.shape[1],1))# 使用numpy库中的reshape()函数改变数组x_train的形状# 上述的步骤将训练集的格式从列表(list)变成时间步长为60的时间序列(表现为数组)# 3.模型的参数设置# 3.1导入神经网络需要的包fromkeras.modelsimportSequential# 从keras.models库中导入时间序列模型Sequentialfromkeras.layersimportDense,LSTM# 从keras.layers库中导入Dense, Dropout, LSTM用于构建神经网络# 3.2创建LSTM神经网络modelSequential()# 第一层网络设置model.add(LSTM(units50,return_sequencesTrue,input_shape(x_train.shape[1],1)))# unit 决定了一层里面 LSTM 单元的数量。这些单元是并列的一个时间步长里输入这个层的信号会被所有 unit 同时并行处理形成若干个 unit 个输出。这个设置50个单元# return_sequence参数表示是否返回LSTM的中间状态这里设置为TRUE返回的状态是最后计算后的状态# input_shape参数包含两个元素的第一个代表每个输入的样本序列长度这里是x_train.shape[1]表示x_train数组中每一个元素的长度即时间步长这里先前设置为了60# 第二个元素代表每个序列里面的1个元素具有多少个输入数据(这里是1表示只有1个数据时间)# 第二层神经网络设置50个LSTM单元model.add(LSTM(units50))# 第三层为全连接层model.add(Dense(1))# 4.模型训练model.compile(lossmean_squared_error,optimizeradam)# 设置损失函数compile()参数# loss参数指标使用MSE(均方根误差) optimizer参数设置优化器为AdamOptimizer(自适应矩估计梯度下降的一种变形)model.fit(x_train,y_train,epochs1,batch_size1,verbose2)# 传入数据开始训练模型# 5.预测#用过去的每60个数据预测接下来的数据(时间步长为60)#5.1获取测试集数据该步骤思路一样这里不再赘述inputsnew_data[len(new_data)-len(valid)-60:].values inputsinputs.reshape(-1,1)inputsscaler.transform(inputs)X_test[]foriinrange(60,inputs.shape[0]):X_test.append(inputs[i-60:i,0])X_testnp.array(X_test)X_testnp.reshape(X_test,(X_test.shape[0],X_test.shape[1],1))#5.2获取模型给出的预测值closing_pricemodel.predict(X_test)# 用scaler.inverse()函数将数据重新放大(因为之前使用了scaler()函数对数据进行了压缩)closing_pricescaler.inverse_transform(closing_price)# print(closing_price)dicts[]fori,resuinenumerate(closing_price):dicts1{}dicts1[riqi]list1[i]dicts1[shuju]resu[0]dicts.append(dicts1)returndicts# print(yuce())5、项目列表