毕设设计|计算机毕业设计|大数据深度学习|flask基于大数据的股票分析及走势预测系统(lstm)

毕业设计题目:flask基于大数据的股票分析及走势预测系统(lstm)
毕业设计文档介绍:
2.2 Python 编程语言概述
Python 是一种高级、解释型、面向对象的编程语言,以其简洁、易读的语法和丰富的库而备受青睐。在 Netflix 用户信息可视化系统开发中,Python 发挥着重要作用。
Python 拥有大量用于数据处理和分析的库,如 Pandas、NumPy 等。Pandas 提供了快速、灵活、明确的数据结构,方便对用户数据进行清洗、转换和分析。使用 Pandas 可以轻松处理 Netflix 用户数据中的缺失值、重复值等问题,将数据整理成适合分析的格式。NumPy 则专注于数值计算,提供了高效的多维数组对象和各种数学函数,在数据分析和机器学习算法实现中不可或缺。Python 还广泛应用于机器学习领域,许多机器学习框架如 Scikit - learn、TensorFlow 等都支持 Python。在 Netflix 用户信息可视化系统中,利用 Python 和相关机器学习库可以实现随机森林算法,用于用户行为预测和分析。
2.3 MySQL 数据库介绍
MySQL 是一个全球流行的开源关系型数据库管理系统。在 DB - Engines 的数据库排名中,MySQL 长期位居前列 。Netflix 等众多大型互联网应用都选择 MySQL 来存储数据。
MySQL 将数据存储在多个相互关联的表中,通过结构化查询语言(SQL)进行数据的查询、插入、更新和删除操作。在 Netflix 用户信息可视化系统中,MySQL 用于存储经过 Python 初步处理后的关键用户数据,如用户的基本信息、观看偏好统计等。它支持多种主流开发语言,包括 Python,这使得在基于 Python 开发的系统中能够方便地与 MySQL 进行交互。MySQL 具有简单易用、可靠性高、可扩展性强等优势。开发人员可以快速上手,在数分钟内完成 MySQL 的安装和基本配置。经过多年的发展和实践检验,MySQL 在处理大规模数据和高并发访问时表现出色,能够满足 Netflix 对数据存储和管理的严格要求。
2.4 Django 框架
Django 是一种基于 Python 的 Web 应用程序框架,遵循模型 - 模板 - 视图(MTV)设计模式。它最初是为维护新闻站点而开发,如今已在数据科学社区被广泛采用。
在 Netflix 用户信息可视化系统中,Django 作为后端框架,负责搭建 Web 服务。在模型层,它通过对象关系映射(ORM),以 Python 类的形式定义数据模型,方便与 MySQL 数据库进行交互,实现数据的存储和读取。在视图层,Django 处理业务逻辑,根据用户请求从数据库获取数据,并将数据传递给模板。在模板层,Django 使用强大而可扩展的模板语言,将数据渲染成 HTML 页面,返回给前端。Django 强调代码复用和快速开发,拥有许多功能强大的第三方插件,大大提高了开发效率。它还提供了自动化的管理界面,方便对系统数据进行管理和维护。
2.5 随机森林算法
随机森林算法是一种基于决策树的集成学习算法。它通过构建多个决策树,并将这些决策树的预测结果进行综合,来提高模型的准确性和泛化能力。
在 Netflix 用户信息可视化系统中,随机森林算法用于用户行为分析和预测。通过分析用户的观看历史、评分数据、设备使用情况等特征,随机森林模型可以预测用户对不同类型节目的喜好程度。利用随机森林算法可以预测用户是否会对新推出的节目感兴趣,从而为 Netflix 的内容推荐提供依据。该算法具有较好的抗噪声能力,对缺失值和异常值不敏感,能够处理高维度数据,适用于 Netflix 复杂的用户数据场景。
Echarts 是一个基于 JavaScript 的开源可视化库,提供了丰富的图表类型和强大的交互功能。在 Netflix 用户信息可视化系统中,Echarts 是实现数据可视化的核心工具。
Echarts 支持柱状图、折线图、饼图、地图等多种图表类型,能够满足不同维度用户数据的可视化需求。通过柱状图可以直观展示不同地区的用户数量分布;折线图可以呈现用户观看时长随时间的变化趋势;饼图可以展示用户设备使用比例等。Echarts 具有高度的交互性,用户可以通过鼠标缩放、平移、点击等操作,深入探索数据。用户可以点击柱状图上的柱子,查看该地区更详细的用户信息;通过缩放操作,可以查看不同时间粒度的用户观看数据。Echarts 还支持数据动态更新,能够实时展示数据的变化,为 Netflix 的数据分析和决策提供直观、及时的支持。
2.4 爬虫技术简介
网络爬虫,又称为网页蜘蛛,网络机器人,更官方的名字叫数据采集,英文一般称作Spider[6]。它是一种按照一定的规则,自动地抓取网络信息的程序或者脚本。
(1) 首先对目标站点URL进行解析,构造出新的种子URL。
(2) 向待抓取URL队列中放入刚构造好的种子URL。
(3) 为了得到主机IP,从待抓取URL中对DNS进行解析,将其从队列中移出,向网页库中储存URL对应的采集网页信息。以上操作完毕后,将URL移至已抓取队列。
(4) 分析捕获的URL队列中的URL,解析别的URL,将这种URL放进待捕获的URL队列中,开始新的循环。
网络爬虫的基本工作原理如图2-3所示。

图2-3 网络爬虫基本工作原理
4.3 数据库设计
4.3.1数据库设计原则
在构建基于Python的东方财富网股票数据分析与可视化数据库时,遵循了一系列设计原则,以确保数据库的可靠性、高效性和可扩展性。首先,坚持数据一致性和完整性原则,确保所有入库数据遵循统一的规范,避免数据冗余和矛盾。
4.3.2数据库E-R图设计
图4-4实体E-R图
4.3.3数据库表结构设计
1、auth_group[--]
|
序号 |
字段名 |
类型 |
长度 |
是否为空 |
默认值 |
小数位 |
注释 |
|
1 |
id |
int(11) |
-- |
NO |
-- |
0 |
-- |
|
2 |
name |
varchar(150) |
150 |
NO |
-- |
-- |
-- |
2、auth_group_permissions[--]
|
序号 |
字段名 |
类型 |
长度 |
是否为空 |
默认值 |
小数位 |
注释 |
|
1 |
id |
bigint(20) |
-- |
NO |
-- |
0 |
-- |
|
2 |
group_id |
int(11) |
-- |
NO |
-- |
0 |
-- |
|
3 |
permission_id |
int(11) |
-- |
NO |
-- |
0 |
-- |
3、auth_permission[--]
|
序号 |
字段名 |
类型 |
长度 |
是否为空 |
默认值 |
小数位 |
注释 |
|
1 |
id |
int(11) |
-- |
NO |
-- |
0 |
-- |
|
2 |
name |
varchar(255) |
255 |
NO |
-- |
-- |
-- |
|
3 |
content_type_id |
int(11) |
-- |
NO |
-- |
0 |
-- |
|
4 |
codename |
varchar(100) |
100 |
NO |
-- |
-- |
-- |
4、auth_user[--]
|
序号 |
字段名 |
类型 |
长度 |
是否为空 |
默认值 |
小数位 |
注释 |
|
1 |
id |
int(11) |
-- |
NO |
-- |
0 |
-- |
|
2 |
password |
varchar(128) |
128 |
NO |
-- |
-- |
-- |
|
3 |
last_login |
datetime(6) |
-- |
YES |
-- |
-- |
-- |
|
4 |
is_superuser |
tinyint(1) |
-- |
NO |
-- |
0 |
-- |
|
5 |
username |
varchar(150) |
150 |
NO |
-- |
-- |
-- |
|
6 |
first_name |
varchar(150) |
150 |
NO |
-- |
-- |
-- |
|
7 |
last_name |
varchar(150) |
150 |
NO |
-- |
-- |
-- |
|
8 |
|
varchar(254) |
254 |
NO |
-- |
-- |
-- |
|
9 |
is_staff |
tinyint(1) |
-- |
NO |
-- |
0 |
-- |
|
10 |
is_active |
tinyint(1) |
-- |
NO |
-- |
0 |
-- |
|
11 |
date_joined |
datetime(6) |
-- |
NO |
-- |
-- |
-- |
5、auth_user_groups[--]
|
序号 |
字段名 |
类型 |
长度 |
是否为空 |
默认值 |
小数位 |
注释 |
|
1 |
id |
bigint(20) |
-- |
NO |
-- |
0 |
-- |
|
2 |
user_id |
int(11) |
-- |
NO |
-- |
0 |
-- |
|
3 |
group_id |
int(11) |
-- |
NO |
-- |
0 |
-- |
6、auth_user_user_permissions[--]
|
序号 |
字段名 |
类型 |
长度 |
是否为空 |
默认值 |
小数位 |
注释 |
|
1 |
id |
bigint(20) |
-- |
NO |
-- |
0 |
-- |
|
2 |
user_id |
int(11) |
-- |
NO |
-- |
0 |
-- |
|
3 |
permission_id |
int(11) |
-- |
NO |
-- |
0 |
-- |
7、django_admin_log[--]
|
序号 |
字段名 |
类型 |
长度 |
是否为空 |
默认值 |
小数位 |
注释 |
|
1 |
id |
int(11) |
-- |
NO |
-- |
0 |
-- |
|
2 |
action_time |
datetime(6) |
-- |
NO |
-- |
-- |
-- |
|
3 |
object_id |
longtext |
4294967295 |
YES |
-- |
-- |
-- |
|
4 |
object_repr |
varchar(200) |
200 |
NO |
-- |
-- |
-- |
|
5 |
action_flag |
smallint(5) unsigned |
-- |
NO |
-- |
0 |
-- |
|
6 |
change_message |
longtext |
4294967295 |
NO |
-- |
-- |
-- |
|
7 |
content_type_id |
int(11) |
-- |
YES |
-- |
0 |
-- |
|
8 |
user_id |
int(11) |
-- |
NO |
-- |
0 |
-- |
8、django_content_type[--]
|
序号 |
字段名 |
类型 |
长度 |
是否为空 |
默认值 |
小数位 |
注释 |
|
1 |
id |
int(11) |
-- |
NO |
-- |
0 |
-- |
|
2 |
app_label |
varchar(100) |
100 |
NO |
-- |
-- |
-- |
|
3 |
model |
varchar(100) |
100 |
NO |
-- |
-- |
-- |
9、django_migrations[--]
|
序号 |
字段名 |
类型 |
长度 |
是否为空 |
默认值 |
小数位 |
注释 |
|
1 |
id |
bigint(20) |
-- |
NO |
-- |
0 |
-- |
|
2 |
app |
varchar(255) |
255 |
NO |
-- |
-- |
-- |
|
3 |
name |
varchar(255) |
255 |
NO |
-- |
-- |
-- |
|
4 |
applied |
datetime(6) |
-- |
NO |
-- |
-- |
-- |
10、django_session[--]
|
序号 |
字段名 |
类型 |
长度 |
是否为空 |
默认值 |
小数位 |
注释 |
|
1 |
session_key |
varchar(40) |
40 |
NO |
-- |
-- |
-- |
|
2 |
session_data |
longtext |
4294967295 |
NO |
-- |
-- |
-- |
|
3 |
expire_date |
datetime(6) |
-- |
NO |
-- |
-- |
-- |
11、stock_stockdata[--]
|
序号 |
字段名 |
类型 |
长度 |
是否为空 |
默认值 |
小数位 |
注释 |
|
1 |
id |
bigint(20) |
-- |
NO |
-- |
0 |
-- |
|
2 |
index |
int(11) |
-- |
NO |
-- |
0 |
-- |
|
3 |
code |
varchar(10) |
10 |
NO |
-- |
-- |
-- |
|
4 |
name |
varchar(50) |
50 |
NO |
-- |
-- |
-- |
|
5 |
latest_price |
decimal(10,2) |
-- |
NO |
-- |
2 |
-- |
|
6 |
change_percent |
decimal(6,2) |
-- |
NO |
-- |
2 |
-- |
|
7 |
main_net_inflow |
decimal(12,2) |
-- |
NO |
-- |
2 |
-- |
|
8 |
main_net_ratio |
decimal(6,2) |
-- |
NO |
-- |
2 |
-- |
|
9 |
super_large_net_inflow |
decimal(12,2) |
-- |
NO |
-- |
2 |
-- |
|
10 |
super_large_net_ratio |
decimal(6,2) |
-- |
NO |
-- |
2 |
-- |
|
11 |
large_net_inflow |
decimal(12,2) |
-- |
NO |
-- |
2 |
-- |
|
12 |
large_net_ratio |
decimal(6,2) |
-- |
NO |
-- |
2 |
-- |
|
13 |
medium_net_inflow |
decimal(12,2) |
-- |
NO |
-- |
2 |
-- |
|
14 |
medium_net_ratio |
decimal(6,2) |
-- |
NO |
-- |
2 |
-- |
|
15 |
small_net_inflow |
decimal(12,2) |
-- |
NO |
-- |
2 |
-- |
|
16 |
small_net_ratio |
decimal(6,2) |
-- |
NO |
-- |
2 |
-- |
|
17 |
created_at |
datetime(6) |
-- |
NO |
-- |
-- |
-- |
系统数据爬取流程设计如下图5-1所示。
图5-1 数据爬取流程

5.2 数据分析的设计与实现
5.2.1 数据分析流程设计
系统数据分析流程设计如下图5-2所示。
图5-2 数据分析流程
数据分析的设计与实现是整个流程的核心部分。首先,通过PyPython远程启动Python集群,这为大规模数据处理提供了强大的计算能力。然后,系统开始读取股票信息数据,这部分数据可能是来自多个来源的大批量数据,需要进行有效的整合和处理。接下来,系统会对数据进行清洗和预处理,去除其中的噪声和不一致的数据,以提高数据的质量和可靠性。最后,经过处理的数据将被输出为Json格式的数据,这种格式便于后续的数据分析和可视化展示。整个数据分析的设计与实现过程注重数据的准确性和效率,确保能够有效地提取有价值的信息,为股票决策提供有力的支持。

(4) 输出Json数据:将分类处理、归并好的信息输出成Json格式储存到本地。
5.2.2 数据分析实现
首先使用Python集群,构造PythonConf,设置Master地址和AppName,连接HDFS分布式文件系统,读取抓取到的股票价格信息源数据,对源数据中的重复值和缺失值进行处理。关键部分代码如下表5-1所示。
表5-1 数据分析关键代码

5.2.3 算法实现
随机森林算法是一种基于集成学习的监督学习算法,广泛应用于分类与回归任务。它通过构建多棵决策树并整合其结果来提升预测准确性与稳定性。随机森林的核心思想是组合多个决策树的预测结果,利用集体智慧提高单一决策树的性能。具体而言,该算法通过有放回地随机抽样(自助法)从原始数据集中生成多个子数据集,为每个子数据集构建一个决策树。在构建决策树时,随机选择特征子集来分裂节点,这样不仅增加了模型的多样性,还能有效降低过拟合的风险。最终,通过投票(分类任务)或取平均(回归任务)的方式整合所有决策树的预测结果,得到最终的输出。随机森林在金融、医疗、市场营销等领域有着广泛的应用,例如信用评分、疾病诊断、客户流失预测等,可以按照以下步骤进行:
1. 数据预处理:对历史数据进行清洗、去重、缺失值填充、特征提取、数据归一化等预处理操作,获得适合于随机森林的训练数据集。
2. 样本划分:将数据集分为训练集和测试集,以便对模型进行评估。
3. 模型训练:使用训练数据集对随机森林模型进行训练,得到相关的系数和截距等模型参数。
4. 模型评估:使用测试数据集对模型进行评估,并根据评估结果进行调整和改进。
5. 模型应用:使用经过训练和评估的随机森林模型,对未来需求进行预测。
6. 模型优化:不断调整模型参数和特征,进行模型优化和进一步提升预测效果。在东方财富网股票趋势分析与预测系统中,需要根据具体业务场景选取不同的特征变量,以提高模型的准确性和稳定性。此外,还可以使用正则化、特征选择、交叉验证等技术,以进一步提升模型的性能。
图4-3 算法流程图
首先,收集东方财富网上相关股票的历史数据,包括股票名称、最高价、最低价和涨跌额等特征。对这些数据进行预处理,如填补缺失值、去除异常值等,以确保数据的质量。接着,将数据划分为训练集和测试集,利用训练集数据来训练随机森林模型。在模型训练过程中,通过最小化预测值与实际值之间的误差,来确定模型参数。训练完成后,使用测试集数据对模型进行验证,评估模型的预测性能。
具体预测时,将待预测股票的名称、最高价、最低价和涨跌额作为输入特征,输入到训练好的随机森林模型中。模型会根据这些特征和已学习的参数,计算出一个预测的最新价。这个预测值是基于历史数据中这些特征与股票价格之间的线性关系得出的。

图4-3 算法代码

图5-4 数据可视化流程
该数据可视化面板集成了多个功能模块,包括市场概览、资金流向分析、涨跌幅分布、行业板块分析以及TOP20股票分析等。每个模块都采用了不同的可视化图表来直观地展示相关数据。“市场概览”使用了雷达图来比较不同类别的流入情况;“资金流向分析”则通过漏斗图展示了从小单到大单的资金流动情况;“涨跌幅分布”运用了环形图来表示不同涨幅区间的股票比例;“行业板块分析”采用了树状图来显示各个行业的占比情况;“TOP20股票分析”结合了折线和散点图,详细列出了前20只股票的名称、涨跌幅等信息。此外,还有“资金流向趋势”模块,通过曲线图描绘了资金在不同时间段内的流动趋势。数据可视化面板界面如下图所示。

图5-5 数据可视化大屏界面
5.4 管理系统的设计与实现
管理员在HTML构建的前端页面上输入用户名和密码,前端将数据发送到后端,后端进行验证。如果验证通过,Django会创建一个用户会话,并通过JWT生成一个令牌,将令牌发送回前端,前端将其存储在本地,用于后续请求的身份验证进行登录操作。管理员登录系统后,可以对首页,用户管理等功能进行相应的操作管理,界面如下图所示。

图5-12 登录界面

图5-13 股票信息管理
用户管理,在用户管理页面可以对ID,用户名,姓名,邮箱,管理员,激活,加入时间,最后登录时间等内容进行添加,编辑,重置密码和删除等操作。展示如下图所示。

图5-14 用户管理
6 系统测试
6.1 测试目的
系统采用分布式架构,融合Python和Python等大数据技术处理海量数据,确保高效分析。前端采用HTML,提升系统可扩展性和灵活性。部署上,利用平台实现资源动态分配,保障系统稳定运行,同时采用多节点部署策略,确保数据安全与高可用性,满足实时数据分析需求。
6.2 系统测试用例
6.2.1 功能测试
表6-1 股票信息抓取测试用例

表6-2 HDFS上传文件测试用例

表6-3 数据存储测试用例

更多推荐
所有评论(0)