计算机毕业设计hadoop+spark+hive在线教育大数据 课程推荐系统(源码+LW文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片!

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片!

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片!

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业讲师以及同行交流合作

主要内容:Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能与大数据、单片机开发、物联网设计与开发设计、简历模板、学习资料、面试题库、技术互助、就业指导等

业务范围:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路等。

收藏点赞不迷路  关注作者有好处

                                         文末获取源码

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

介绍资料

基于Hadoop和Spark的课程推荐系统的设计与实现

  要

如今,计算机和网络技术迅猛发展,数字化教育逐渐兴起,网上教育平台也大量涌现。比如说中国大学Mooc网,Icc教育平台,网易云课堂,沪上网校等等。这些教育平台为学生提供了广阔的学习空间。但这些平台由于数据量巨大,想要获取所需数据需要耗费大量的时间,而且对这些数据并没有比较完备的分析,如果设计一个可以将有用数据进行数据分析并可视化,就可以明确用户的需求,为在线教育平台提供了参考价值。

本系统基于HadoopSpark等大数据技术设计,数据来源是通过Python爬虫获取网络数据,数据清洗与处理采用了Hadoop中的数据清洗工具Mapreduce,数据分析阶段采用了Spark,数据可视化阶段采用FlaskEcharts。采用Vue.js搭建前端框架,采用Spring Boot搭建后端框架,采用MySQL建立数据库。采用VS CodeIDEA 作为主要开发工具。对网络海量的课程数据信息以图表的形式进行一个直观的展示,此外,该系统还具备了对课程的购买和查询功能等,充分体现了大数据技术在教育领域的应用价值。

关键词数据可视化  网络爬虫  Hadoop  Spark

Design and Implementation of the Course Recommendation System based on Hadoop and Spark

ABSTRACT

Nowadays, with the rapid development of computer and network technology, the rise of digital education, and a large number of online education platforms. For example, China University Mooc network, Icc education platform, netease Cloud classroom, Shanghai online school and so on. These educational platforms provide students with a broad learning space for them. However, due to the huge amount of data, these platforms need a lot of time to obtain the required data, and there is no relatively complete analysis of these data. If one is designed to analyze and visualize the useful data and clarify the needs of users, it provides reference value for the online education platform.

This system is designed based on big data technologies such as Hadoop and Spark. The data source is network data acquisition through Python crawler, the data cleaning tool Mapreduce in Hadoop is used for data cleaning and processing, Spark is used in the data analysis stage, and Flask and Echarts are used in the data visualization stage. The Vue.js framework is used on the front end and the Spring Boot framework on the back end, MySQL was used to establish the database. The VS Code and IDEA were used as the main development tools. The online massive amount of course data information is intuitively displayed in the form of charts. In addition, the system also has the function of purchase and query of courses, which fully reflects the application value of big data technology in the field of education.

Key words: Data visualization,  Web Crawler,  Hadoop  ,Spark

目录

第1章  绪论 

1.1  研究背景及意义 

1.2  国内外研究现状 

1.2.1  国内研究现状 

1.2.2  国外研究现状 

1.3  论文组织结构 

1.4  本章小结 

第2章  主要开发工具及关键技术介绍 

2.1  主要开发工具介绍 

2.1.1  WebStorm 

2.1.2  IntelliJ IDEA 

2.1.3  Virtual Studio Code 

2.2  关键技术介绍 

2.2.1  数据分析 

2.2.2  网络爬虫技术 

2.2.3  Hadoop生态系统 

2.2.4  Spark计算引擎 

2.2.5  MySQL 数据库 

2.2.6  协同过滤算法 

2.2.7  Maven 整合 

2.2.8  前后端分离技术 

2.3  本章小结 

第3章  系统分析 

3.1  系统可行性分析 

3.1.1  技术可行性分析 

3.1.2  经济可行性分析 

3.1.3  操作可行性分析 

3.2  功能需求分析 

3.2.1  数据可视化大屏 

3.2.2  用户用例分析 

3.2.2  管理员用例分析 

3.3  性能需求分析 

3.3.1  响应时间 

3.3.2  可伸缩性 

3.3.3  可靠性 

3.4  本章小结 

第4章  系统设计 

4.1  系统架构设计 

4.1.1  数据采集模块 

4.1.2  数据处理模块 

4.1.3  推荐算法模块 

4.1.4  用户交互模块 

4.2  功能模块设计 

4.3  数据仓库设计 

4.3.1  数据仓库分层设计 

4.3.2  数据仓库维度设计 

4.4  数据库设计 

4.4.1  E-R图设计 

4.4.2  逻辑结构设计 

4.4.3  物理结构设计 

4.5  本章小结 

第5章  系统实现 

5.1  用户功能的实现 

5.1.1  用户注册模块的实现 

5.1.2  用户登录模块的实现 

5.1.3  智能推荐模块模块 

5.1.4  课程查询模块 

5.1.5  课程评论模块 

5.1.6  订单管理模块 

5.1.7  支付充值模块(购物车模块) 

5.1.8  预测功能 

5.2  数据采集以及可视化大屏的实现 

5.2.1  数据采集模块 

5.2.2  数据可视化大屏 

5.2.3  决策建议 

5.3  系统管理员功能的实现 

5.3.1  用户管理模块 

5.3.2  个人中心模块 

5.3.3  系统权限模块 

5.3.4  系统日志模块 

5.3.5  评论管理 

5.3.6  章节管理 

5.4  本章小结 

第6章  系统测试 

6.1  系统功能测试 

6.2  系统可用性测试 

6.3  维护测试 

6.4  性能测试 

6.5  测试结果分析 

结论 

致谢 

参考文献 

  1. 绪论

1.1  研究背景及意义

21世纪以来,信息技术不断发展,在线教育平台逐步兴起,为学生提供了宝贵的课程资源,打破了传统线下授课在时空上的局限性然而这些在线教育平台含有了大量的学习数据,包括学习行为、学习习惯、知识点掌握情况等[1]。这些海量的学习数据蕴含着宝贵的教育信息,然而传统的在线教育平台由于数据处理和分析能力的不足和数据安全性的问题,在数据的采集、存储、处理和分析方面具有一定的挑战性[2]。因为对于在线教育平台而言,海量的用户行为数据、课程数据、学习数据等需要被高效地处理和分析,而传统的在线教育平台在处理数据时,往往面临着数据量大、处理速度慢、分析结果不准确等问题。

而在信息爆炸的时代,就在线教育而言,面临着海量的数据信息,人们往往会有这样的困惑,就是如何快速的从海量数据中获取真正符合个人需要的信息。另外,学生对于课程的选择和学习方向的确定也需要一定的参考,需要一个可以分析海量数据的课程推荐系统来满足个性化需求[3]。基于Hadoop和Spark的课程推荐系统,能够有效地解决这些问题,为在线教育的发展提供强大的技术支持。

该课程推荐系统的设计与实现以及可视化大屏的展示,可以有效地帮助老师和学生分析学习数据,了解学生的学习状态和学习习惯,及时调整教学策略,提高教学效果[4]。此外,对于卖家来说,该课程推荐系统的设计与实现以及可视化大屏也可以帮助他们更好地了解用户行为和需求,优化平台服务,提升用户体验。因此,该系统的设计与实现对在线教育的发展与完善和教学质量的提高有很大的促进作用。

1.2  国内外研究现状

1.2.1   国内研究现状

目前在国内,一些研究者已经尝试利用Hadoop和Spark等大数据技术来构建课程推荐系统。通过利用Hadoop和Spark在计算能力和分布式处理方面上的优势,对网络上的海量的课程数据进行预处理和分析,从而提高系统的推荐准确性和效率。除此之外,一些研究者还尝试结合爬虫技术从互联网上收集与课程相关的数据,并利用大数据技术对这些数据进行清洗、筛选和处理,为推荐系统提供更准确和全面的数据支持[5]。有研究者在基于Hadoop和Spark平台完成管理工具的伸缩和扩展上,使用了Apache Atlas元素管理工具,实现了元素管理。通过搭建集群的方式实现主机与主机之间的交互。

另外,国内一些研究者还开始关注将大数据可视化的研究和应用于课程推荐系统中。数据可视化在让用户更直观地理解和使用推荐系统方面起到了至关重要的作用。一些研究者已经使用图表和动画效果等可视化方式,将推荐系统的结果直观地呈现给用户,并通过交互式的界面让用户更好地参与到推荐过程中。

综上所述,国内的研究者已经开始关注利用Hadoop和Spark等大数据技术搭建课程推荐系统,并结合爬虫技术和数据可视化来提高推荐系统的准确性和用户体验。这些研究在推动大数据技术在课程推荐领域的应用方面具有重要意义,为今后的研究和应用提供了有益的借鉴和参考。

1.2.2   国外研究现状

在数据可视化领域,国外处于领先地位,已经提出了许多成熟的慕课数据可视化解决方案,包括基于Echarts、D3.js等技术的可视化平台。这些平台能够对在线教育平台数据进行多维度、多角度的展示和分析,为教育管理者和教师提供了强大的决策支持。在课程推荐系统方面,国外的研究较为深入,涉及到的技术更加先进和成熟。例如,基于大数据的推荐算法、基于用户行为分析的推荐系统等已经取得了一些成功的案例。在实际应用中,这些系统往往能够更好地满足用户的需求,并且具有更强的稳定性和可扩展性。

就大数据技术而言,美国、欧洲、日本等发达国家取得了显著成就,并引发了经济社会的深刻变革。美国在大数据技术的研究与应用方面居于全球领先地位。美国政府已经认识到大数据技术的重要性,并在政策层面积极推动数据开放共享、数据安全与隐私保护等方面的工作,在企业层面如谷歌、微软、亚马逊等也取得了重要突破。尽并将这些技术广泛应用于医疗、金融、教育、交通等领域,极大地推动了相关行业的发展。尽管大数据技术在全球范围内取得了显著成果,并为经济社会发展带来了深刻变革,但各国在发展这些技术的过程中,仍然面临数据安全与隐私保护、人才培养、技术标准制定等挑战。未来,各国需要进一步加强合作,共同推动大数据技术的创新与发展,以期为全球经济增长和人类福祉作出更大的贡献。未来,各国需要进一步加强合作,共同推动大数据技术的创新与发展,以期为全球经济增长和人类福祉作出更大的贡献。

1.3  论文组织结构

第 1 章是绪论。本章主要讲了大数据技术和在线教育平台的发展状况,运用大数据技术,为解决在线教育平台由于数据量多而杂而导致的分宝贵数据效率低的问题,从而使大数据技术在教育领域得到更高的应用价值。

第2章主要介绍了系统中所涉及的开发工具和相关技术。如运用Python爬虫对课程数据进行采集,使用Hadoop进行数据存储与清洗,应用Spark的机器学习库MLlib来实现推荐功能,并利用Echarts.js设计可视化大屏。采用Vue.js搭建前端界面,采用Spring Boot搭建后端框架,使用VS Code、IDEA等作为主要开发工具。

第3章是系统分析本章对系统的需求进行以下三个方面的分析:即系统可行性分析、功能需求分析、性能需求分析,并对这三个方面的需求进行具体分析。

第4章是系统设计。本章的主要内容是设计系统的方法,包括以下三个方面。第一,系统整体结构。第二,设计各模块的实现逻辑;第三,设计说明系统的数据库。

第5章是系统实现。本章是通过运用先前规划的系统设计,结合开发工具和相关技术,构建 各功能模块,展示出相应的实现界面效果。

第6章是系统测试。本章是对系统整体性能调试,确保各功能模块正常运,并对系统进行全面测试,以验证系统运行效果。

1.4  本章小结

本章主要分析了该系统设计的背景和意义,说明了在国内外,大数据技术和推荐系统的研究现状,大致叙述了本论文的组织结构。

  1. 主要开发工具及关键技术介绍

2.1  主要开发工具介绍

2.1.1   WebStorm

WebStorm是JetBrains旗下与IntelliJIDEA同源的JavaScript集成开发环境(简称IDE)。继承了IntelliJidea的部分强大的JS特性。WebStorm支持多种前端框架,如React、Angular、Vue等,以其丰富代码编辑调试重构版本控制功能,使之成为开发者最为偏爱前端开发工具之一

2.1.2   IntelliJ IDEA 

IntelliJ IDEA,全称Intelligent Java Integrated Development Environment,即智能化的Java集成开发坏境。IntelliJ IDEA开发于JetBrains公司,在软件开发中,这款Java IDE在智能代码助手、代码自动提示、重构、JavaEE支持、版本控制工具等方面功能丰富,被广泛认可为当前流行且功能强大的Java IDE之一,为开发人员提供了高效便捷的编码、调试和部署环境。

2.1.3   Virtual Studio Code

Visual Studio Code,简称为 VS Code,是一款由微软开发的轻量级、跨平台集成开发环境其功能涵盖了多种编程语言,包括JavaScript、TypeScript、Python、C++等,并提供了各种插件和工具,以简化开发过程。VS Code拥有强大的编辑功能智能代码提示以及直观调试体验,这些特性有助于提高开发者的工作效率和代码质量

2.2  关键技术介绍

2.2.1  数据分析

数据分析模块负责系统数据的统计、分析和可视化,为系统的运营和决策提供数据支持[6]。在设计上,我们采用了基于Hadoop和Spark的大数据分析技术,利用Spark的图计算库GraphX进行用户行为图的分析和挖掘,为系统的运营和管理提供了丰富的数据分析功能。数据分析模块还采用了数据可视化技术,通过数据报表和图表展示,直观展现系统的运营和用户行为数据,为决策提供了可靠的数据依据。

2.2.2  网络爬虫技术

网络爬虫是自动信息抓取过程,需要依赖于事先设定的规则。通过分析网页自动获取网页信息,与手动查找网页数据相比,自动抓取无疑更为便利。本文使用 Python 的 Requests 库和 Beautifulsoup 库去解析网站,获取数据[7]。当网络爬虫开始抓取网页时,可能会引发网站的反爬机制,导致操作失败。因此,在开发爬虫程序时,需要考虑如何应对反爬机制,这将增加额外的工作量。并且,合法合规是网络爬虫必须要遵守的准则,不能随意侵犯网站信息。

2.2.3  Hadoop生态系统

Hadoop生态系统是一个由Apache Hadoop项目发展而来的大数据处理平台,它包含了许多有关大数据处理的组件和工具,用于构建和管理大规模数据处理应用程序。Hadoop生态系统包括了Hadoop分布式文件系统(HDFS)、Hadoop YARN、Hadoop MapReduce和一系列其他核心组件[8],如HBase、Hive、Oozie、Flume、Zookeeper、Sqoop、Mahout等。这些组件和工具相互配合,为用户提供全面的大数据解决方案,助力企业有效地处理和分析海量数据,以获得更多商业洞察和价值。

 作为分布式文件系统,HDFS主要负责系统原始数据的存储和管理。数据处理与存储阶段,选择了HDFS作为数据采集和存储工具,并结合Hadoop的分布式计算框架实现了数据的高可靠性和可扩展性HDFS还采用了数据冗余和故障恢复机制,保证了数据的安全性和可靠性,为系统的数据处理和分析提供了稳定的数据基础[9]。

  1.   MapReduce

 MapReduce 是 Hadoop 的编程模型和处理框架,其优势在于,将大规模数据分解成多个小任务并行处理,从而大大提高数据处理的效率。MapReduce 模型包括 Map 和 Reduce 两个阶段,其中 Map 阶段将数据分解成多个小块进行处理,Reduce 阶段将处理结果合并[10]。

(3)  YARN

Hadoop中的YARN(Yet Another Resource Negotiator)是一个资源管理器,用于管理集群中的计算资源和调度任务。它是Hadoop 2.x引入的一个重要组件,取代了Hadoop 1.x中的JobTracker和TaskTracker。YARN支持多种运算框架,除了支持MapReduce,YARN还可以在Apache Spark、Apache Flink计算框架内运行。此外,YARN具有很高的容错性,可以容忍某些节点或组件的故障,保证集群的稳定运行。

2.2.4  Spark计算引擎

Spark是一个具有高速度、广泛适用性和可扩展性的大数据处理引擎,拥有内置的内存计算功能和经过优化的调度机制。相比于传统的MapReduce计算模型,Spark具有更高的计算性能和更丰富的API支持,能够更好地适应复杂的数据处理和分析需求。同时,Spark中的机器学习库(MLlib),能够有效支持系统中的推荐算法实现和优化。

2.2.5  MySQL 数据库

MySQL的特点之一是具有数据独立性和安全性,能够有效操作软件项目中的数据,确保数据的准确性,提高了开发者的效率。具有多线程支持MySQL,能够充分利用系统资源,提高速度有效率,同时提供多种连接方式以便操作数据库;尽管MySQL的功能相对较弱,规模也不大,但考虑到本系统的要求并不高,MySQL完全可以满足本网站的需求。

2.2.6  协同过滤算法                      

协同过滤算法(Collaborative Filtering)是一个经典且常用的推荐算法,它依赖于用户和物品之间的行为关系来实现推荐[11]。我们从它的名字“协同过滤”中,也可以窥探到它背后的原理,就是 “协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”[12]。基于物品的协同过滤算法和基于用户的协同过滤算法是协同过滤算法的两大类别,前者根据用户先前喜欢的物品推荐相似物品。后者为用户推荐其可能感兴趣的物品。

2.2.7  Maven 整合

Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,通过一种抽象的项目对象模型(POM),展示了项目的开发和管理。构建的主要流程包括清理、编译、测试、报告、打包、安装、部署。而在此过程中,需要人的智慧实现的分析问题和编码的部分仅占了极少数一部分。Maven提供了一种自动化项目模式,具备标准、统一的项目结构和跨平台的特性。此外,Maven还能有效管理依赖,确保资源之间的版本不会冲突。Maven由一个项目对象模型 ,一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段中插件(plugin)目标的逻辑构成(如图2.3)[13]。

2.2.8  前后端分离技术

Vue.js和Spring Boot是一种常见的技术组合,用于开发现代化的Web应用程序。这种结构下,前端和后端的操作是相互独立进行开发、部署和维护的,它们之间通过API进行交流。Vue.js做为一个渐进式的框架,其核心主要专注于视图层,主要作用是构建用户界面,同时提供了高级功能以支持复杂的单页应用(SPA)[14]。两者组合起来,具有较高的开发效率、部署灵活性和安全性,是现代 Web 应用开发的优秀选择。

2.3 本章小结

本章将介绍本课程推荐系统的主要开发工具及关键技术。首先,我们将详细介绍所采用的主要开发工具,包括开发环境、集成开发工具和版本控制工具等。接着,我们将深入探讨系统中所应用的关键技术,包括Hadoop和Spark等大数据处理技术、推荐算法技术以及网络爬虫技术。通过对这些关键技术的介绍,读者将更好地理解本课程推荐系统的设计与实现过程。

  1.  系统分析

3.1  系统可行性分析

系统的可行性分析是系统设计与实现过程中至关重要的一步,本节将从技术可行性、经济可行性和操作可行性三个方面对课程推荐系统进行全面分析。

3.1.1  技术可行性分析

技术可行性是评估系统开发所需的技术资源是否可行的重要指标。我们的课程推荐系统基于Hadoop和Spark技术,因此首先需要评估这两项技术在系统开发中的可行性。Hadoop作为大数据处理的重要工具,其分布式存储和计算能力能够满足系统对于海量数据的处理需求;而Spark作为高速、通用的大数据处理引擎,可以提供实时数据分析和处理的能力,从而满足系统对于实时推荐的需求。因此,从技术层面来看,Hadoop和Spark技术的可行性是得到了充分的保障的。

3.1.2  经济可行性分析

经济可行性是评估系统开发所需经济资源的可行性。在课程推荐系统的开发中,需要考虑到硬件设备、软件许可、人力成本等各个方面的经济投入。通过对系统开发所需资源的详细评估和成本分析,我们可以得出课程推荐系统在经济上的可行性。同时,还需要考虑到系统的长期运行和维护所需的经济投入,确保系统在整个生命周期内都能够保持经济可行性。

3.1.3  操作可行性分析

操作可行性主要评估系统的易用性和用户接受程度。在课程推荐系统中,用户体验是至关重要的,因此需要对系统的操作界面、交互流程进行全面评估,确保系统的操作可行性。另外,还需要考虑到用户对于系统的接受程度,通过用户调研和反馈收集等方式,了解用户对系统的期望和需求,从而确保系统在操作上的可行性。

3.2 功能需求分析

功能需求分析是系统设计与实现的一个重要换环节,要想设计好一个强大的系统,首先需要分析该系统需要实现什么功能,明确了需要实现的功能,系统开发的过程才会畅通无阻。才能更好更快的满足客户的需求,增强客户的满意度。

3.2.1  数据可视化大屏

其中可视化大屏包括课程章节、观看人数、评论数等数据,使用者可以通过可视化大屏高效准确地获取相关信息,从而使课程推荐系统得到很高的利用率,有利于促进课程推荐系统的开发,以下是可视化大屏的工作流程(如图3.1)以及用例分析(如图3.2)。

3.2.2  用户用例分析

用户完成注册登陆后,进入首页,系统会监控用户的操作,然后智能推荐相关课程用户可以浏览课程列表,选择感兴趣的课程,并点击查看详情。在课程详情页面,用户可以了解课程的具体内容,包括简介、学习人数、讲师介绍等信息。此外,用户可以这里留下评论或将课程收藏起来,已收藏课程会在购物车中展示。此外,用户还可使用课程查询功能来对课程进行评论并加入购物车。在支付管理模块,用户可提供个人信息和安全密码完成付款,如果账户余额不足,可选择进行充值操作。用户也可以删除自己购物车里的课程,在个人中西模块,可以修改自己的用户名和密码。在订单管理模块,用户可以看到自己收藏的课程的支付状态,也可以删除购物车里的课程。在流量预测模块,用户可以看到每天该系统的客流量以及未来两天预测的客流量。

3.2.2  管理员用例分析

系统管理员可以对用户、课程和评论信息进行管理操作。能够操作课程、用户和评论的信息进行编辑、删除和查询操作。不同级别的用户被划分为普通用户、超级用户、禁封用户和评测者等,每个级别的用户都拥有特定的权限。在个人中心处修改并且上传自己的个人信息,在主页处可以看到用户总量、用户登录总量、每天登陆的流量和总课程数。以下是管理员身份的用例图(图3.4) 

3.3  性能需求分析

性能需求分析在系统设计过程中的作用尤为重要,我们要确保一个系统可以安全快速稳定的运行,就要对其性能需求进行全面地、系统地分析。一般来说,系统的性能分析主要包括响应时间、可伸缩性、可靠性。

3.3.1  响应时间

系统的响应时间是衡量系统性能的重要指标之一,对于课程推荐系统来说,实时性是至关重要的。因此,需要对系统的响应时间进行详细的需求分析,确保系统能够在用户请求时快速响应,提供流畅的用户体验。

3.3.2  可伸缩性

系统的可伸缩性是指系统在面对不同规模的用户和数据时,能够保持稳定的性能表现。对于课程推荐系统来说,需要对系统的可伸缩性进行充分的需求分析,确保系统能够支持大规模用户和数据的处理和推荐。

3.3.3  可靠性

可靠性是指系统在面对各种异常情况时,可保持稳定的运行状态[15][16]。通过对系统的可靠性需求分析,可以确保系统能够在各种异常情况下保持稳定的推荐服务,提高系统的可用性和稳定性。

3.4  本章小结

本章对系统进行了一个全面的分析,在系统分析的过程中,不仅要全面理解系统设计的背景,而且还要全面理解系统的可行性、功能和性能,只有做好充分而详细的系统分析,才能确保系统的设计有一个明确的目标。

第4章  系统设计

4.1  系统架构设计

在课程推荐系统的系统架构设计中,我们采用了基于Hadoop和Spark的大数据技术,以应对大规模数据处理和复杂计算的需求。整体结构涵盖了数据收集、数据处理、推荐算法和用户互动四大核心模块,每个模块都有明确定义的功能和责任,并且彼此合作,完成系统的整体功能。以下是对系统架构中的每个模块进行详细介绍及系统的整体架构图(图4.1)。

4.1.1  数据采集模块

数据采集过程主要通过Python爬虫在慕课上爬取相关课程信息,我们采用了Hadoop的分布式文件系统HDFS来存储原始数据,利用Hadoop的MapReduce框架进行数据的初步处理和清洗,保证数据的准确性和完整性。

4.1.2  数据处理模块

数据处理模块是整个系统的核心模块之一,主要负责对原始数据进行清洗、转换和处理,以满足后续的推荐算法和用户交互需求。我们采用Spark作为数据处理的引擎,利用其快速的内存计算和强大的并行计算能力,对大规模的数据进行高效处理。数据处理模块采用了Spark SQL进行数据的结构化处理和分析,通过数据的关联、筛选和聚合等操作,生成符合要求的数据集,为推荐算法模块提供了丰富的数据支持。

4.1.3  推荐算法模块

推荐算法模块是课程推荐系统的核心模块之一,主要负责根据用户的历史行为和偏好,为用户推荐个性化的课程。在设计上,针对设计考量,我们运用了基于协同过滤的推荐算法,在Spark的机器学习库MLlib中完成了推荐模型的训练和优化。推荐算法模块还采用了实时推荐技术,结合用户的实时行为,动态调整推荐结果,提高了推荐的准确性和实时性。

4.1.4  用户交互模块

用户交互模块是系统与用户直接交互的界面,包括网页端、移动端等多种形式。在设计上,我们采用了基于Web的交互界面,利用了Hadoop的HDFS存储数据,利用Hadoop中的MapReduce进行数据清洗,最后采用了Echarts和Flask已处理好的数据进行可视化,采用了Javascript提供的Echarts库,将数据展示到可视化大屏上。

4.2  功能模块设计

在课程推荐系统的功能模块设计中,我们围绕用户需求和系统目标,设计了多个功能模块,每个功能模块都有明确的功能,相互协作完成系统的全面功能主要功能模块如图4.2所示。

  1. 登录注册模块

当输入用户名和密码时,如果发现用户名不存在,系统会提醒用户需要先注册账号;如果用户存在,输入正确密码时,会成功跳转至系统首页。输入错误的密码后,系统提示密码错误,并返回到登录的初始阶段。该流程如图4.3所示。

  1. 支付充值模块

在支付充值模块,用户可以购买加入购物车里的课程,输入用户名和支付密码,完成支付功能,当余额不足时,系统将通知您余额不足,请充值。当余额足够时,系统将显示付款成功。

  1. 订单管理模块

该模块里的课程有两个不同的来源,在智能推荐模块点击加入购物车按钮或者在课程查询中点击加入购物车按钮,都可以在订单管理模块看到相应课程信息和支付状态,如果未完成支付,状态就是未支付,如果已经完成了支付,那么状态就是已支付。

  1. 课程查询模块

在课程查询模块,用户通过输入关键字信息来查询匹配度最高的课程信息,从而进入课程的详情页,获取课程简介,主讲人,所属学校,参与人数,开课时间等详细的信息,另外,该模块还就有对课程进行评论和加入购物车的功能,用户评论之后,系统对评论的内容进行情感分析。

  1. 流量预测模块

流量预测模块始终观测这每天用户的登录次数,通过每天流量的变化趋势预测未来1-2天的用户流量。

  1. 课程管理模块

课程管理模块负责课程信息的管理和维护,包括课程信息的增添、更改、删除和查询。在设计上,我们采用Hadoop和MySQL数据库对课程信息进行存储和管理,为用户提供了丰富的课程选择和浏览功能。课程管理模块还采用了基于Spark的课程推荐引擎,为用户提供个性化的课程推荐服务。

  1. 用户管理模块

用户管理模块负责用户信息的注册、登录、个人信息管理等功能。在设计上,我们采用了基于Hadoop的用户信息存储和管理,利用Spark进行用户数据的统计和分析,为推荐算法提供了用户画像和用户偏好的数据支持。用户管理模块还采用了基于Hadoop的权限管理机制,确保用户信息的安全性和隐私保护。

  1. 数据分析

数据分析模块负责系统数据的统计、分析和可视化,为系统的运营和决策提供数据支持。在设计上,我们采用了基于Hadoop和Spark的大数据分析技术,利用Spark的图计算库GraphX进行用户行为图的分析和挖掘,为系统的运营和管理提供了丰富的数据分析功能。数据分析模块将最终清洗的数据进行数据可视化,直观展现系统的运营和用户行为数据,为决策提供了可靠的数据依据。

  1. 智能推荐模块

智能推荐模块是该课程推荐系统的核心模块,在该模块中,系统为用户推荐其有可能感兴趣的课程,用户登录的次数越频繁,浏览的课程越频繁,系统推荐的课程越匹配用户的爱好。图4.4为该系统中智能推荐的工作流程。

4.3 数据仓库设计

数据仓库是一个其中的数据存储系统,它不仅可以存储结构化数据,亦可以存储非结构化数据,对企业指定决策建议起着极大的推动作用。在该系统中,分别对数据仓库进行分层设计和维度设计,其中,分层设计的目的是可以将这些数据进行明确的分工,把复杂的数据变得简洁而又不失条理,以提高大数据的质量。而维度设计反映了实体与事务之间的联系,但是与E-R图不同,在维度设计中,数据只要存储在数仓之后,就很容易获取。维度设计模型是许多OLAP系统的底层数据的集合体。

4.4  数据库设计

在系统设计的过程中,由于需要的数据量多而且关系复杂,所以设计一个良好的数据表很是重要。本系统的数据库中,设计了了用户表,评论表,课程章节表,订单表等11个数据表,接下来将对数据库的数据表和实体关系图进行详细阐述,以确保数据存储空间的高效利用和数据完整性的维护。

4.4.1  E-R图设计

E-R图(Entity-Relationship Diagram)就是实体-联系图,在数据库设计中扮演着重要角色,通过展现数据类型之间的联系,帮助人们了解数据实体的关联。其要素包括实体型、属性以及联系[17]。

(1)用户表的E-R图如图4.7所示

            for course, w in rec_courses:

                if course in test_courses:

                    hit += 1

                all_rec_courses.add(course)

            rec_count += N

            test_count += len(test_courses)

        precision = hit / (1.0 * rec_count)

        recall = hit / (1.0 * test_count)

        coverage = len(all_rec_courses) / (1.0 * self.course_count)

        print('precisioin=%.4f\trecall=%.4f\tcoverage=%.4f' % (precision, recall, coverage))

# userCF 推荐算法接口

def recommend(userId):

    userCF = UserBasedCF()

    userCF.get_dataset()

    userCF.calc_user_sim()

    reclist = []

    recs = userCF.rec_one(userId)

    return recs

附录

(1)情感分析

@RestController

@RequestMapping("/comment")

public class CommentController extends BaseController<Comment> {

    @Autowired

    ToPython toPython;

    protected String[] search_fields = new String[]{"title", "content", "username" };

    protected String[] search_filter = new String[]{"uid", "oid"};

    @Override

    @GetMapping("/")

    public ServerResponse list(HttpServletRequest request,

                               @RequestParam(defaultValue = "") String search,

                               @RequestParam(defaultValue = "1") Integer page,

                               @RequestParam(defaultValue = "15") Integer limit

                               ) {

        Page<Comment> pages = new Page<>(page, limit);

        MyWrapper<Comment> wrapperFactory = new MyWrapper<>();

        QueryWrapper<Comment> wrapper = wrapperFactory.init(request, search, search_fields, search_filter);

        IPage<Comment> iPage = baseSerivce.page(pages, wrapper);

        return ServerResponse.ofSuccess(iPage);

    }

    @PostMapping("/add")

    public ServerResponse add(@RequestBody Comment comment

    ) {

        String c = comment.getContent();

       //情感分析 Python 脚本调用 LSTM

        String content = toPython.lstm(c);

        JSONArray jo = JSONObject.parseArray(content);

        JSONObject  obj = jo.getJSONObject(0);

        String label = obj.getString("sentiment_key");

        Double positive_probs = obj.getDouble("positive_probs");

        Double probs = positive_probs;

        if(label.equals("negative")){

            probs = 1 - probs;

        }

        comment.setLabel(label);

        comment.setScore(probs);

        baseSerivce.save(comment);

        return ServerResponse.ofSuccess("处理成功");

    }

}

(2)用户登录模块

 @PostMapping("/login")

    @SysLog(value= SysConstant.LOGIN)

    public ServerResponse login(@RequestBody User loginForm) throws Exception{

        Map<String, Object> map = new HashMap();

        User user = userService.login(loginForm.getUsername(), loginForm.getPassword());

        if (user != null){

            String token = tokenService.getToken(user);

            map.put("id", user.getId());

            map.put("username", user.getUsername());

            map.put("user", user);

            map.put("token", token);

            return ServerResponse.ofSuccess(map);

        }

        return ServerResponse.ofError("用户名或密码错误!");

    }

(3)用户注册模块

 @PostMapping("/register")

    public ServerResponse register(@RequestBody User loginForm) throws Exception{

        Map<String, Object> map = new HashMap();

        QueryWrapper<User> wrapper = new QueryWrapper<>();

        wrapper.eq("username",  loginForm.getUsername());

        User user = userService.getOne(wrapper);

        if (user != null){

            return ServerResponse.ofError("用户已存在!");

        }else{

            User u = new User();

            u.setRealname(loginForm.getRealname());

            u.setUsername(loginForm.getUsername());

            u.setPassword(loginForm.getPassword());

            userService.save(u);

            return ServerResponse.ofSuccess("注册成功!");

        }

    }

4)基于用户的协同过滤算法

class UserBasedCF():

    # 初始化相关参数

    def __init__(self):

        # 找到与目标用户兴趣相似的4个用户,为其推荐4部电影

        self.n_sim_user = 8

        self.n_rec_course = 4

        # 将数据集划分为训练集和测试集

        self.trainSet = {}

        self.testSet = {}

        # 用户相似度矩阵

        self.user_sim_matrix = {}

       self.course_count = 0

        print('Similar user number = %d' % self.n_sim_user)

        print('Recommneded course number = %d' % self.n_rec_course)

    # 读文件得到“用户-item”数据

    def get_dataset(self, pivot=0.75):

        trainSet_len = 0

        testSet_len = 0

        # db.ping(reconnect=True)

        results = db.session.query(Rate).all()

        # print(results)

        for item in results:

            user, course, rating = item.uid, item.iid, item.rate

            if random.random() < pivot:

                self.trainSet.setdefault(user, {})

                self.trainSet[user][course] = rating

                trainSet_len += 1

            else:

                self.testSet.setdefault(user, {})

                self.testSet[user][course] = rating

                testSet_len += 1

        print('Split trainingSet and testSet success!')

        print('TrainSet = %s' % trainSet_len)

        print('TestSet = %s' % testSet_len)

        # cursor.close()

    # 读文件,返回文件的每一行

    def load_file(self, filename):

        with open(filename, 'r') as f:

            for i, line in enumerate(f):

                if i == 0:  # 去掉文件第一行的title

                    continue

                yield line.strip('\r\n')

        print('Load %s success!' % filename)

    # 计算用户之间的相似度

    def calc_user_sim(self):

        # 构建“物品-用户”倒排索引

        # key = courseID, value = list of userIDs who have seen this course

        print('Building course-user table ...')

        course_user = {}

        for user, courses in self.trainSet.items():

            for course in courses:

                if course not in course_user:

                    course_user[course] = set()

                course_user[course].add(user)

        print('Build course-user table success!')

        self.course_count = len(course_user)

        print('Total course number = %d' % self.course_count)

        print('Build user co-rated courses matrix ...')

        for course, users in course_user.items():

            for u in users:

                for v in users:

                    if u == v:

                        continue

                    self.user_sim_matrix.setdefault(u, {})

                    self.user_sim_matrix[u].setdefault(v, 0)

                    self.user_sim_matrix[u][v] += 1

        print('Build user co-rated courses matrix success!')

        # 计算相似性

        print('Calculating user similarity matrix ...')

        for u, related_users in self.user_sim_matrix.items():

            for v, count in related_users.items():

                self.user_sim_matrix[u][v] = count / math.sqrt(len(self.trainSet[u]) * len(self.trainSet[v]))

        print('Calculate user similarity matrix success!')

    # 针对目标用户U,找到其最相似的K个用户,产生N个推荐

    def recommend(self, user):

        K = self.n_sim_user

        N = self.n_rec_course

        rank = {}

        if user > len(self.trainSet):

            user = random.randint(1, len(self.trainSet))

        watched_courses = self.trainSet[user]

        # v=similar user, wuv=similar factor

        for v, wuv in sorted(self.user_sim_matrix[user].items(), key=itemgetter(1), reverse=True)[0:K]:

            for course in self.trainSet[v]:

                if course in watched_courses:

                    continue

                rank.setdefault(course, 0)

                rank[course] += wuv

        return sorted(rank.items(), key=itemgetter(1), reverse=True)[0:N]

    def rec_one(self, userId):

        print('推荐一个')

        rec_courses = self.recommend(userId)

        # print(rec_courses)

        return rec_courses

    # 产生推荐并通过准确率、召回率和覆盖率进行评估

    def evaluate(self):

        print("Evaluation start ...")

        N = self.n_rec_course

        # 准确率和召回率

        hit = 0

        rec_count = 0

        test_count = 0

        # 覆盖率

        all_rec_courses = set()

        for i, user, in enumerate(self.trainSet):

            test_courses = self.testSet.get(user, {})

            rec_courses = self.recommend(user)

  1. 综上所述,在该系统的设计中,共包含11个实体。分别为用户、课程信息、课程评论、课程评分、购物车 、系统权限、菜单、权限菜单对应关系、系统日志、订单、课程章节,每个实体都有不同的属性,设计系统的E-R,旨在使整体数据库的结构更加清晰,本系统整体 E-R 图如图 4.18所示。
  2. 4.4.2  逻辑结构设计

    (1)用户表(用户id,用户名,用户权限,用户密码,用户年龄,用户地址,用户邮箱,用户电话,用户职业)

    (2)管理员(管理员 id,管理员用户名,密码,更新日期)

    (3)课程表(课程id,用户id,课程类型,主讲人姓名,课程名称,课程链接,课程热度,课程价格,课程评论类型,课程进度,更新日期)

    (4)课程评价表(评论id,用户id,课程id,课程名称,评论时间,评论删除次数,评论出现概率,评论标题,评论内容,评论者姓名,更新日期)

    (5)购物车表(课程id,课程价格,课程数量,课程名称,支付状态,更新日期)

    (6)系统日志表(日志id,登录iP地址,登录状态,登录网址,登录时间,更新时间)

    (7)订单表(订单id,订单数量,订单价格,订单支付状态,买家家姓名,买家电话,用户id,订单创建时间,课程名称)

    (8)课程评分表(用户id,课程id,分数)

    (9)系统权限表(权限id,用户id,权限名称,权限描述,更改日期,用户登录状态)

    (10)菜单表(菜单id,用户状态,创建时间,样式,排序,路径,菜单权限,菜单名称)

    (11)菜单权限对应表(主键,菜单id,权限名称,创建时间)

    4.4.3   物理结构设计

    (1)用户数据表

    用户表包含了用户id,用户姓名,用户权限,用户密码,用户年龄,用户地址,用户邮箱,用户电话。其中,用户的权限用正整数1-4表示不同级别权限的用户,用户表的具体字段如表4.1所示。

    表4.1 用户数据表

    字段名

    数据类型

    是否为空

    字段描述

    备注

    id

    INT

    FALSE

    用户id

    主键,唯一索引

    Username

    VARCHAR(90)

    FALSE

    用户名

    User route

    INT

    FALSE

    用户权限

    1为禁封用户,2为普通用户,3为审核者,4为超级用户。

    Userpasswd

    VARCHAR(90)

    FALSE

    用户密码

    User_age

    INT

    TRUE

    用户年龄

    User_address

    VARCHAR(255)

    FALSE

    用户地址

    User_email

    VARCHAR(8)

    TRUE

    用户邮箱

    User_Tel

    VARCHAR(13)

    TRUE

    用户电话

    (2)管理员数据表

    理员信息的数据表中储存了管理员的身份标识、登入账号和密码,以及建立账号的日期。具体字段如表4.2。

    表4.2 管理员数据表

    字段名

    数据类型

    是否为空

    字段描述

    备注

    iD

    INT

    FALSE

    管理员id

    主键,唯一索引

    Username

    VARCHAR(90)

    FALSE

    用户名

    UserPasswd

    VARCHAR(90)

    FALSE

    管理员的密码

    Create_time

    DATETIME

    FALSE

    创建用户的时间

    (3)课程信息表

    课程信息里存放了课程的信息,包括课程id,用户id,课程类型,授课教师姓名、课程名称、课程链接、观看人数、售价、评论类型、以及更新日期我们把评论分为积极和消极两类,分别用0和1来表示。课程热度是指用户浏览该课程的次数,用正整数来表示。具体字段如表4.3所示

    表4.3 课程信息表

    字段名

    数据类型

    是否为空

    字段描述

    备注

    Id

    INT

    FALSE

    课程id

    主键

    U_id

    INT

    FALSE

    用户id

    Tag

    INT

    TRUE

    评论类型

    URL

    VARCHAR(512)

    TRUE

    路由

    Teather

    VARCHAR(512)

    FALSE

    主讲人

    Price

    Double

    TRUE

    价格

    Comment

    VARCHAR(255)

    TRUE

    课程评论

    续表4.3 课程信息表

    字段名

    数据类型

    是否为空

    字段描述

    备注

    title

    VARCHAR(255)

    FALSE

    课程类型

    Course_name

    VARCGAR(255)

    FALSE

    课程名

    Hot

    DOUBLE

    TRUE

    课程热度

    (4)课程评论数据表

    课程评论数据表里包含着评论id,用户id,课程id,课程名称,评论时间,评论删除次数,评论出现概率,评论标题,评论内容,评论者姓名,更新日期,表4.4为课程评论数据表具体字段的设计。

    表4.4 课程评论数据表

    字段名

    数据类型

    是否为空

    字段描述

    备注

    Comment_id

    INT

    FALSE

    评论id

    主键

    U_id

    INT

    FALSE

    用户id

    C_id

    INT

    FALSE

    课程id

    Course_name

    VARCHAR(255)

    TRUE

    课程名称

    Comment_time

    DATETIME

    TRUE

    评论时间

    Delete

    INT

    TRUE

    是否删除

    已删除为0,否则为1

    Weight

    DOUBLE

    TRUE

    出现概率

    Title

    VARCHAR(255)

    TRUE

    评论标题

    Comment

    VARCHAR(512)

    TRUE

    评论内容

    Update_time

    DATETIME

    TRUE

    更新时间

    (5)购物车表

    购物车信息包含购物车id,课程价格,课程数量,课程名称,支付状态,更新日期。具体字段设计如表4.5所示。

    表4.5 购物车数据表

    字段名

    数据类型

    是否为空

    字段描述

    备注

    Id

    INT

    FALSE

    购物车id

    主键

    Course_price

    BOUBLE

    TRUE

    课程价格

    Course_name

    VARCHAR(255)

    TRUE

    课程名称

    Status

    INT

    TRUE

    支付状态

    Update_time

    DATETIME

    TRUE

    更新时间

    Amount                     

    INT

    TRUE

    购买课程数量

    (6)订单表

    订单表包括订单id,订单数量,课程价格,订单支付状态,买家家姓名,买家电话,用户id,订单创建时间,课程名称,具体字段设计如表4.6所示。

    表4.6 订单数据表

    字段名

    数据类型

    是否为空

    字段描述

    备注

    Id

    INT

    FALSE

    订单id

    主键

    Amount

    INT

    TRUE

    课程数量

    status

    INT

    TRUE

    支付状态

    支付成功为1,否则为0

    Customer_name

    VARCHAR(512)

    TRUE

    买家姓名

    U_id

    INT

    TRUE

    用户id

    Customser_tel

    VARCHAR(50)

    TRUE

    买家电话

    Create_time

    DATETIME

    TRUE

    订单创建时间

    Course_name

    VARCHAR(255)

    TRUE

    课程名称

    price

    DOUBLE

    TRUE

    价格

    (7)课程评分表

    课程评分表包括用户id,课程id,和分数,具体字段设计如表4.7所示。

    表4.7 课程评分表

    字段名

    数据类型

    是否为空

    字段描述

    备注

    course_id

    INT

    FALSE

    课程id

    主键

    续表4.7 课程评分表

    字段名

    数据类型

    是否为空

    字段描述

    备注

    User_id

    INT

    FALSE

    用户id

    score

    DOUBLE

    TRUE

    分数

    (8)系统日志表

    系统日志表包括日志id,登录iP地址,登录状态,登录网址,登录时间,更新时间,具体字段设计如表4.8所示。

    表4.8 系统日志表

    字段名

    数据类型

    是否为空

    字段描述

    备注

    id

    INT

    FALSE

    日志id

    主键

    host

    VARCHAR(255)

    TRUE

    登录IP地址

    status

    INT

            TRUE

    登录状态

    url

    VARCHAR(255)

    TRUE

    登录网址

    Create_time

    DATETIME

    TRUE

    创建时间

    Update_time

    DATETIME

    TRUE

    更新时间

    (9)系统权限表

    系统权限表包括权限id,用户id,权限名称,权限描述,更改日期,用户登录状态。系统权限表的具体字段设计如表4.9所示。

    表4.9 权限数据表

    字段名

    数据类型

    是否为空

    字段描述

    备注

    Id

    INT

    FALSE

    权限id

    主键

    Description

    VARCHAR(255)

    TRUE

    权限描述

    Rolename

    VARCHAR(50)

    TRUE

    权限名称

    Status

    INT

    TRUE

    权限状态

    Update_time

    DATETIME

    TRUE

    更新时间

    (10)菜单关系对应表

    菜单权限关系对应表包括主键key,菜单id和权限名称,具体字段设计如表4.10所示。

    表4.10 权限关系对应表

    字段名

    数据类型

    是否为空

    字段描述

    备注

    key

    INT

    FALSE

    主键

    主键

    Rolename

    VARCHAR()

    TRUE

    权限名称

    Route_id

    INT

    TRUE

    菜单id

    (11)菜单表

    菜单表包括菜单id,用户状态,创建时间,样式,排序,路径,菜单权限,菜单名称,具体字段设计如表4.11。

    表4.11 菜单表

    字段名

    数据类型

    是否为空

    字段描述

    备注

    Id

    INT

    FALSE

    菜单id

    主键

    Status

    INT

    TRUE

    用户登录状态

    Style

    VARCHAR()

    TRUE

    菜单样式

    Url

    VARCHAR(512)

    TRUE

    路径

    Role

    VARCHAR(255)

    TRUE

    权限名称

    Sort

    INT

    TRUE

    是否排序

    Routename

    VARCHAR(255)

    TRUE

    菜单名称

    Create_time

    DATETIME

    TRUE

    创建时间

    4.5   本章小结

    本章是设计课程推荐系统的阶段,主要对系统的每一个功能模块的设计,包括对原始数据的采集与预处理。需要对系统进行全面的理解和分析,才能达到预期结果。

    5.2.3   决策建议

    在本系统的设计中,数据可视化把从慕课中爬取的原始数据最终转化为转化为直观、易理解的图形和图像,从而高效地为学生提供了宝贵数据,而且还为管理者的决策提供了强有力的数据支撑,更清晰地了解业务情况。然而不只在教育领域,数据可视化在新能源、物流和供应链、政府和公共服务领域,极大的提高了信息传达的效率,促进了跨学科的交流合作。然而如果采取不恰当的数据分析方式,就很有可能影响理解甚至误导。那么,如何能把数据可视化做“好”呢。

    首先,我们需要准备准确而充足的数据。这些数据的来源不限于网络爬虫,还可以来源于内部系统、市场研究、第三方数据库。但一定要确保数据的准确性和完整性,因为这直接影响到后续的分析和决策质量。

    有了完整准确的数据集,下一步,就要选择适当的可视化工具,当然,要根据我们 数据的类型和数据量进行选取。比如如果我们不能确定数据是否为”干净的“数据,PowerBI就比较适合,它可以通过自带的数据清洗功能处理“脏”数据,并以可视化的形式呈现。如果我们的数据量巨大时,就适合选用Tableau,Tableau具有很强的处理数据过载能力,并以自身高级过滤和数据聚合功能允许企业快速识别其数据中的模式和趋势,从而做出更好的决策[18][19]。

    在可视化结果分析的基础上,进一步挖掘数据中存在的问题和机会。这些问题可能是业务流程中的瓶颈、市场趋势的变化等;机会则可能是新的增长点、优化空间等。进而基于发现的问题和机会,制定具体的决策建议。决策建议应明确、具体,并附有详细的解释和理由。同时,还应考虑决策实施的可行性和风险。然后预测决策会有怎样的风险或影响,然后再制定详细的实施方案,包括实施步骤、时间表、资源分配等。同时,建立监控机制,确保决策实施过程中的问题能够及时发现和解决。在这个基础上不断优化与调整,通过科学的方法和工具,确保决策建议的合理性和有效性,为企业的决策提供有力支持。

    以上是对如何让让数据可视化做“好”的决策建议,但不只局限于这几个方面,数据可视化一直在不断的发展,对我们的技术要求也在不断变化,所以需要我们与时俱进,使之化业务流程和提高决策效率。

  3. 系统测试
  4. 系统测试是最终对系统的整体检验,将系统中的操作人员、硬件和软件融为一体,以验证是否符合需求规范。可以验证测试会审查系统的功能是否符合预期,并验证其是否能够正确执行各项任务。在进行测试过程中,需进行严格且详细的检验,系统应能在各种情况下充分运转,以解决可能发生的错误。系统测试的工作流程大体分为4个阶段,分别为(计划,设计,实现,执行)的输入,输出,入口准则,出口准则。

    对于本系统而言,测试结果主要涉及功能测试的结果、可用性测试的结果和性能测试的结果等

    6.1  系统功能测试

    功能测试主要包括五项内容:适用性、准确性、可操作性、合规性、安全性。主要用QTP(使用 B/S和C/S软件),LR(C/S软件),RIA TEST(针对Flash,Flex软件,用Flash编写),Selenium(firefox的插件), IBM Rational Robot等工具进行系统测试,本系统功能测试如表6.1所示。

     6.1 系统的功能测试结果

    测试内容

    测试结果

    合规

    正常

    安全

    正常

    可操作性

    正常

    适用

    正常

    准确

    正常

    6.2  系统可用性测试

    对于该系统而言,可用性测试主要包括以下三点:可操作系性、可理解性、可学习性。

    表6.2 系统可用性测试结果

    测试项

    测试人员的评价

    操作流程是否合理

    所需数据是否正确显示

    模块布局是否协调、合理

    提示内容文字信息是否正确

    选中内容是可以来回切换

    操作方式是否简单

    窗口打开、关闭等操作是否正常

    操作是否流畅

    6.3  维护测试

    表6.3 系统用例测试结果

    序号

    用例名称

    用例操作

    预期结果

    测试结果

    1

    用户登录

    输入账号、密码

    正确输入用户名和密码后可以成功地跳转到首页,否则会有输入错误提示

    符合预期

    2

    爬取课程

    在VS Code里面运行爬虫代码

    相关课程信息会保存在CSV文件中

    符合预期

    3

    查看课程

    浏览清单,根据搜索条件筛选所需信息,然后深入查看课程细节。

    正确显示课程

    符合预期

    4

    用户注册

    在页面内输入用户信息,点击“注册”按钮

    正确存储用户信息

    符合预期

    5

    翻页功能

    点击“上一页”“下一页”“首页”“尾页”

    跳转到正确页

    符合预期

    表6.3  系统用例测试结果

    序号

    用例名称

    用例操作

    预期结果

    测试结果

    6

    智能推荐

    点击智能推荐按钮

    推荐用户可能感兴趣的课程

    符合预期

    7

    数据可视化

    运行程序,点击链接

    显示可视化大屏

    符合预期

    6.4  性能测试

    性能测试主要是通过模拟系统运行的场景来验证系统是否能够满足用户的预期要求。重要的性能测试技术指标包括系统运行速度、网络响应时间和同一时段支持的并发节点数[20]。

    (1)借助于B/S结构,系统可以在多种配置的计算机上运行,没有明显的卡顿或延迟,完全符合用户的需求。

    (2)在网络通畅的条件下测试结果显示,本系统的网络响应时间表现良好,其最小响应时间为1秒,平均响应时间为2秒,最大响应时间为5秒;而在外部网络环境下,最小响应时间为3秒,平均响应时间为7秒,最大响应时间为12秒,均处于用户可接受的范围内。

    (3)在经过模拟环境测试后发现,本系统在具备100个并发节点的情况下,网络运营速度可能会有较大波动,延迟时间大约为7秒左右,符合广大用户的需求。

    6.5  测试结果分析

    根据以上实验结果的分析,系统展现出在多台不同电脑上运行的能力,具备一定的防护机制,防止用户数据泄露,并且可以执行各种操作,包括但不限于增加、删除、修改、查询等功能。

    结论

    本文是在阅读大量有关于大数据技术文献的基础上,结合在大学期间所学到的大数据知识,以及国内外研究者们的成功案例,设计出一个既可以将海量数据进行直观的展示,又可以实现智能化推荐的系统。从数据表的创建到整体架构的形成,从物理坏境的搭建到web层的展示,一次次地对代码就行修改与完善,最终基本完成了该系统的设计与实现。并得出了如下结论。

    (1)本系统运用大数据技术在数据存储与处理上独特的优势,并重点探讨了Hadoop中的HDFS以及MapReduce编程模型等核心组件,明确两者在数据处理过程中发挥的不同作用,将原始的数据转化为干净的数据,实现了数据可视化。

    (2)本系统运用Spark中的机器学习库,以及Spark强大的实时处理数据的能力,提供了基于用户和基于内容的两种推荐算法,增强用户的满意度。

    (3)本文基于Hadoop和Spark大数据技术设计,采用了Python爬虫技术来获取数据源,利用Vue.js+Spring Boot前后端分离的技术栈。Python爬取网络数据在VS Code中实现,利用Echarts.js实现了数据可视化。

    (4)本文也有不足的地方,需要在Linux系统上安装虚拟机,但是虚拟机会耗费磁盘空间很严重,在Linux操作系统上,版本的对应关系很是严格,很容易因为版本不兼容而导致程序无法进行。

    致谢

    时光荏苒,岁月如梭,相逢一见太匆匆,校内繁花几度红。五月仲夏,随着这篇致谢词的开始,也就意味着我大学四年时光也即将落下帷幕,始于2020年初秋,终于2024年盛夏,22岁的我也将开启全新的人生篇章。以前总觉得时间尚早,年龄尚轻,殊不知,人生是一道减法,逝去的便不会再回来。行文至此,也感谢一路以来支持我,陪伴我的老师、家人还有朋友。

    “桃李不言,下自成蹊”。首先感谢我的论文指导老师,感谢您的悉心指导和耐心帮助,才得以让我的毕业论文顺利完成。感谢大学四年以来所有的授课老师,谆谆教导、细心耐心,授予我丰富的专业知识,让我在此后的工作方向上有了更加明确的认识以及理论基础。

    “慈母爱子,非为报也”。感谢我的母亲这多年以来的养育之恩,给我提供了优渥的环境让我的学习生活没有后顾之忧。感谢妈妈多年以来的言传身教,教会了我如何做人如何做事,也让我在爱里快乐的长大。在这成长的路上,一直陪伴我、尊重我,支持我做的每一个决定,让我有更多的底气和勇气去面对一路上遇到的所有问题。在此希望自己可以不断努力奋进,不负所望,成为你的骄傲。

    “过眼年华,动人幽意,相逢几番春换”。感谢我的好友陪伴了我的整个青春时光,相识9年,我们早已从朋友变成了家人般的存在,成为彼此重要的依托,在成长的这一路上相互扶持、相互陪伴,互相倾诉心中苦恼。平生感知己,方寸岂悠悠,愿未来的人生旅途中,我们可以继续相互扶持,依旧保持热爱,奔赴热爱。

    “山水一程,三生有幸”。感谢大学里在学生会遇见的每一个同学,共同在计算机学院里参与很多活动,一起学习成长。也感谢大学里遇到的同学们,以及我的室友,四年来共同成长,也在此祝愿大家,前途似锦,我们都将拥有光明的未来。

    “以梦为马,不负韶华”。最后,感谢自己这一路以来的坚持和努力,我始终相信学无止境,希望自己不忘初心,努力朝着自己的目标不断努力。凡是过往,皆为序章,凡事未来,皆有可期。

    参考文献

  5. 张君瑞.基于学生答题序列的得分预测算法研究[D].华东师范大学,2021.
  6. 王仡捷.基于数据挖掘的课程推荐系统设计研究[J].电脑知识与技术,2023,19(14):54-56.
  7. 王玲,高佳佳.基于改进聚类和spark的数据信息分析建模及可视化平台研究[J].自动化与仪器仪表,2023,(09):289-292.
  8. 王一高,任耀星,李嘉瑶.基于Hadoop集群的大数据新闻可视化平台的设计[J].电子技术与软件工程,2021,(07):170-172.
  9. 张震.面向物联网的农业环境大数据处理系统研究[D].浙江海洋大学,2022.
  10. 羊斌,宁丽.基于可视化技术的市场监管大数据分析系统[J].信息技术与信息化,2020,(07):240-242.
  11. 陈奋,张晓兰.基于Python语言的爬虫技术应用——以高校官网校园动态版块信息统计分析为例[J].厦门城市职业学院学报,2022,24(03):86-91.
  12. 李春彬. 基子Spark的公路管理和预警平台的设计与实现[D]. 南昌大学, 2021.
  13. 丁慧娟.基于Hadoop的农产品市场交易的大数据分析[D].贵州财经大学,2019.
  14. 张煜福.基于Spark的查询日志用户行为系统的设计与实现[D].曲阜师范大学,2020.
  15. 夏恒毅. 志愿团体活跃度与团体推荐算法研究[D]. 北京邮电大学, 2020.
  16. 陈玉帛,项慨,王顺驰,等.  基于用户画像的课程学习视频推荐系统研究与设计    [J].  现代信息科技,  2023,  7  (09):  1-8.  
  17. 张鹏. 基于Stack Overflow的Java主题分析[D]. 大连理工大学, 2019.
  18. 王飞,卢朴,石雷. 一种基于前后端分离的低代码开发核心框架 [J]. 合肥师范学院学报, 2023, 41 (06): 27-31.
  19. 桂晨晖. 基于SpringBoot框架对P2P借贷平台的设计与实现[D]. 电子科技大学, 2019.
  20. J. I V ,C. S .A Secured Healthcare Management and Service Retrieval for Society Over Apache Spark Hadoop Environment[J].IETE Journal of Research,2023,69(2):684-703.
  21. Lubis H J ,Zamzami M E . Relational database reconstruction from SQL to Entity Relational Diagrams [J]. Journal of Physics Conference Series, 2020, 1566 (1): 012072.
  22. 要志鑫.基于Spark的出租车大数据时空检索方法与可视化研究[D].北京建筑大学,2023.
  23. 朱卫东,李子龙,乔良才.SSM_HADOOP框架的高校学生手机用户信息大数据可视化研究[J].软件,2022,43(03):26-28.
  24. Junduo D ,Jianbo Z .A Multi-Level Distributed Computing Approach to XDraw Viewshed Analysis Using Apache Spark[J].Remote Sensing,2023,15(3):761-761.

运行截图

推荐项目

上万套Java、Python、大数据、机器学习、深度学习等高级选题(源码+lw+部署文档+讲解等)

项目案例

优势

1-项目均为博主学习开发自研,适合新手入门和学习使用

2-所有源码均一手开发,不是模版!不容易跟班里人重复!

🍅✌感兴趣的可以先收藏起来,点赞关注不迷路,想学习更多项目可以查看主页,大家在毕设选题,项目代码以及论文编写等相关问题都可以给我留言咨询,希望可以帮助同学们顺利毕业!🍅✌

源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式。🍅

点赞、收藏、关注,不迷路,下方查看👇🏻获取联系方式👇🏻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

B站计算机毕业设计大学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值