摘 要
本文旨在设计与实现一个基于Spark的高考志愿填报推荐系统,旨在帮助高考生根据自身成绩和兴趣,精准推荐合适的大学和专业。
系统采用大数据处理框架Spark,结合机器学习算法,实现了对高考数据的深度挖掘和分析,为考生提供科学、有效的志愿填报建议。系统捕捉考生个人特征、成绩、兴趣与大学专业之间的复杂关系,通过Spark的数据处理功能,对原始高考数据进行预处理。包括数据的清洗、去重、填补缺失值等操作,确保数据的质量和准确性。同时,通过数据转换,将原始数据转换成适合模型训练的格式,为后续的模型训练提供数据支持。通过特征工程的特征选择和参数调优,将高考数据中的非数值型数据进行转换,优化模型的性能,提高了推荐的准确性,以适应模型训练的需要。训练出的模型能够根据考生信息,预测其适合报考的大学和专业。
最终通过Web界面展示推荐结果。界面设计简洁清晰,易于操作。考生可以通过输入自己的高考成绩、兴趣等信息,系统根据训练好的模型,为其推荐。
关键词:Spark;高考志愿填报;推荐系统
ABSTRACT
The purpose of this paper is to design and implement a Spark-based college entrance examination voluntary application recommendation system, which aims to help college entrance examination candidates accurately recommend suitable universities and majors according to their own grades and interests.
The system uses the big data processing framework Spark, combined with machine learning algorithms, to realize the in-depth mining and analysis of college entrance examination data, and provide candidates with scientific and effective suggestions for voluntary filling. The system captures the complex relationship between candidates' personal characteristics, grades, interests and university majors, and preprocesses the original college entrance examination data through Spark's data processing function. It includes data cleaning, deduplication, filling in missing values and other operations to ensure the quality and accuracy of data. At the same time, through data transformation, the original data is converted into a format suitable for model training, providing data support for subsequent model training. Through feature selection and parameter tuning of feature engineering, the non-numerical data in the college entrance examination data are transformed to optimize the performance of the model and improve the accuracy of recommendations to meet the needs of model training. The trained model can predict the universities and majors that candidates are suitable for applying for based on their information.
Finally, the recommendation results are displayed through the web interface. The interface design is simple and clear, and it is easy to operate. Candidates can input their college entrance examination scores, interests and other information, and the system will recommend them according to the trained model.
Key words:Spark;College Entrance Examination Volume Filling;Referral system
1.1 研究背景
高考是中国高中毕业生升入大学的主要途径,考试成绩决定了学生的录取排名和学校专业的选择。由于高校众多、专业繁杂,学生和家长在填报志愿时常面临困扰和选择困难。为了给考生和家长提供平台可以让其客观的根据自身情况填报以及当下发展情况,进行推荐填报。而大多数考生都是找志愿填报老师,完全听取其意见,自己没有相关了解以及个人兴趣。针对此问题,设计本系统可以更好的注重于个人兴趣以及院校水平、专业前景客观推荐。本文将推荐系统与大数据处理框架Spark相结合,帮助考生解决高考志愿填报环节的志愿选择问题。
1.2 国内外现状
1.2.1 国外研究现状
国外的研究主要关注学生个性化需求和多样化的招生制度。一些国际知名企业,如Google、Facebook等,已经开发出了一些先进的大规模推荐系统,涵盖了视频推荐、广告推荐等多个领域。这些推荐系统通常基于分布式计算框架,能够高效地处理大规模数据,提供更加准确和个性化的推荐建议[1]。从大量信息中挖掘出有用信息,为用户进行精准推荐,有效解决了个人用户的“信息过载”问题。同时,推荐系统在消费领域发挥着不可或缺的作用,推动了企业进行数据营销,给企业和社会带来了较高的经济效益[2]。
1.2.2 国内研究现状
目前多家互联网公司已经推出了高考志愿填报模拟系统,比如高考网,中国教育在线—高考频道等。考生可以输入自己的高考分数、所在省份,系统会搜索近几年各院校各专业在该省历年录取分数线与本省当年批次分数线差值低于考生这一年与本省批次线差值的学校和专业[3]。
随着高考改革的不断深入,越来越多的学者和研究机构开始关注高考志愿填报推荐系统的研究和开发。基于Spark的高考志愿填报推荐系统作为一种分布式计算框架,能够高效地处理大规模的高考数据,提供更加准确和个性化的推荐建议。高校和科研机构已经开始进行相关研究和实验,取得了一些初步的成果。同时,一些互联网企业也纷纷涉足高考志愿填报领域,推出了一系列基于大数据分析的志愿填报辅助工具和平台[4]。
。
1.3 主要研究内容
将推荐系统与大数据处理框架Spark相结合,帮助考生志愿选择问题。设计高考志愿推荐的Web前端界面。其中包括用户注册界面、用户登录界面、志愿推荐结果展示界面以及相关高考信息(高校信息与专业信息)的浏览界面。并设计高考志愿场景下的志愿推荐引擎。首先,通过阅读大量高考志愿填报文献,选取合适的用户属性,计算相似性,建立相似矩阵,寻找相似用户;其次,分析几种最常见的推荐算法,结合高考志愿填报的真实场景选择协同过滤算法作为本系统的推荐算法;最后通过Spark计算框架的并行化计算方式生成最终的推荐列表[5]。
1.4 论文框架结构
本文将分为七个章节介绍系统的开发设计过程,全面的向读者介绍从建立课题到理论分析再到完成实现所调查的市场现状,使用的开发技术,创建的搭建环境,制作的编程代码等,使读者能够通过本论文对所开发的系统有所了解。
第一章,绪论。在绪论章节中,将介绍研究背景、国内外现状、主要研究内容以及论文的框架结构。
第二章,相关开发技术与理论。在相关开发技术与理论章节中,将介绍项目所涉及到的相关开发技术与理论。
第三章,系统分析。在系统分析章节中,对本次开发的软件系统从不同方面、不同角度进行可行性分析、功能分析、用例图建模。
第四章,系统设计。在系统设计章节中,对系统的功能模块、概念模型、数据库等进行设计。
第五章,系统实现。在系统实现章节中,对系统的核心功能进行截图展示介绍。
第2章 相关开发技术与理论
2.1 前端技术
Vue是一个渐进式JavaScript框架,Vue具有简洁易学、组件化等特点,使用它可以快速地构建前端界面,且以组件化的方式构建用户界面,将复杂的UI拆分为独立的、可重用的组件,每个组件有自己的数据和逻辑,提高了代码的可维护性和可重用性[6]。它采用MVVM设计模式,通过数据驱动和组件化的方式来构建用户界面。并且采用了类似HTML的模板语法,可以简洁地描述UI的结构和行为。模板语法支持绑定表达式、条件渲染、循环渲染等常见的操作,具有高效的虚拟DOM渲染机制和优化的更新策略,使得应用程序具有出色的性能[7]。
是一个Vue UI库,提供大量的UI组件和开发工具,可以帮助我们快速构建美观、易用的Web应用程序。它提供了丰富的组件和工具,可以帮助开发人员快速构建现代化、高效的Web界面。Element-Plus提供了简单易用的API,可以方便地在Vue应用中集成和使用。同时,也提供了丰富的主题和样式配置选项,支持个性化的主题定制化 [8]。
2.2 后端技术
PySpark是Apache Spark的Python版本,适用于处理大规模数据和进行复杂的数据分析任务。它结合了Python的简洁性和Spark的性能优势,是Apache Spark的Python API。提供了丰富的功能,包括数据处理、机器学习、图计算等。它能够处理各种数据源,PySpark提供了丰富的转换操作和动作操作可以灵活地对数据进行处理和分析 [9]。
Django是一款基于Python的Web应用程序开发框架,具有高度的可重用性、可扩展性和灵活性,被广泛地应用于Web开发领域。Django被用于编写后端API接口和管理界面,在该系统中,Django被用于编写后端API接口和管理界面[8]。提供了强大的对象关系映射(ORM)支持,可以轻松地将数据存储到数据库中,并且可以使用Python类来表示数据库表格。这使得开发人员可以专注于业务逻辑而不是低级别的数据访问代码[9]。
Scrapy是一个Python编写的高效的网络爬虫框架,支持数据抓取和处理、自动化测试等功能。使用XPath或CSS选择器来定义数据提取规则,可以灵活地从HTML或XML文档中提取所需的数据。可以根据不同的网页结构和数据格式来编写提取规则[10]。并且Scrapy自动处理请求的发送和响应的接收,开发人员只需定义爬取规则和数据处理逻辑即可。它还支持请求的优先级、重试机制和动态代理等功能,可实现更加灵活和智能的请求管理。可用于数据挖掘、搜索引擎索引、数据监测还是网站自动化测试 [11]。
协同过滤算法是一种基于用户行为数据的推荐算法,通过分析用户的历史行为数据来计算用户之间的相似度,然后根据相似用户或相似物品的评价来预测用户对未知物品的喜好程度。这种算法能够利用兴趣相投、拥有共同经验的群体的喜好来推荐用户感兴趣的信息。
通过分析用户的历史行为数据,找到与目标用户行为相似的其他用户,从而推荐目标用户可能感兴趣的物品。可以处理任何类型的物品和用户行为,提供高度个性化的推荐,但也存在数据稀疏性、冷启动问题和可扩展性等方面的挑战。
具体步骤:计算用户之间的相似度,如皮尔逊相关系数、余弦相似度等。找到与目标用户相似度最高的K个用户,然后综合这些用户对某个物品的评分来预测目标用户对该物品的评分或偏好,最后推荐目标用户评分最高的N个物品。
将物品的内容信息和用户行为数据结合起来进行推荐。在电子商务、搜索引擎和广告推送等领域有着广泛的应用,能够优化搜索结果,提高用户搜索体验。
具体步骤:它侧重于物品的内容信息,如商品名称、描述、分类等,同时结合用户行为数据来分析用户的行为模式,发现用户的偏好和兴趣。通过分析这些信息,算法可以自动计算出用户的兴趣模型,并推荐与之匹配的相关物品。
基于Spark的高考报名信息推荐系统
系统用到的各项技术和工具的介绍:
1. Python
Python是一种高级的、解释型的程序设计语言,因为其简洁而易学、可读性强等特点,在数据处理、人工智能、机器学习、Web开发等领域得到了广泛运用。在该系统中,Python被用于编写后端服务器程序和数据处理脚本等。
2. PySpark
PySpark是Apache Spark的Python版本,是一个基于内存计算的大数据处理框架,具有高效和易用的特点。在该系统中,PySpark被用于进行数据处理和分析。
3. Hadoop
Hadoop是一个分布式文件系统和计算框架,能够处理大规模数据的存储和处理。在该系统中,Hadoop被用于存储和管理海量数据。
4. Django
Django是一款基于Python的Web应用程序开发框架,具有高度的可重用性、可扩展性和灵活性,被广泛地应用于Web开发领域。在该系统中,Django被用于编写后端API接口和管理界面。
5. Scrapy
Scrapy是一个Python编写的高效的网络爬虫框架,支持数据抓取和处理、自动化测试等功能。在该系统中,Scrapy被用于数据抓取模块的实现。
6. Vue
Vue是一个渐进式JavaScript框架,由Evan You在2014年创建。Vue具有简洁易学、组件化等特点,使用它可以快速地构建前端界面。在该系统中,Vue框架被用于实现前端页面渲染和数据展示。
7. Element-Plus
Element-Plus是一个Vue UI库,提供大量的UI组件和开发工具,可以帮助我们快速构建美观、易用的Web应用程序。在该系统中,Element-Plus被用于实现前端UI组件。
8. 协同过滤算法
协同过滤算法是一种通过挖掘用户历史行为数据来预测用户偏好并进行个性化推荐的算法。在该系统中,我们使用基于物品的协同过滤算法来实现高校和专业的推荐功能。
系统中各个模块的具体实现:
1. 数据抓取模块
该模块使用了Scrapy爬虫框架,通过访问“阳光高考”网站来抓取大学和专业相关数据。在抓取大学数据时,我们将获取学校名称、学校logo、简介、满意度、院系设置、录取规则、食宿条件、设立专业等字段;在抓取大学专业数据时,我们将获取学历层次、专业代码、所属门类、专业类别、介绍、相近专业、从业方向、统计了毕业生规模以及男女比例等信息。
2. 用户注册登录模块
该模块使用Django框架实现用户的注册和登录功能。在注册时,我们要求用户提供用户名、密码等必要信息,同时对用户输入进行合法性校验;在登录时,用户需要输入正确的用户名和密码才能成功登录系统。
3. 后台管理模块
该模块是系统管理员可以对系统中的数据进行管理操作的接口,包括大学和专业数据的增删改查。我们使用Django Admin框架实现后台管理功能。管理员登陆后,进入后台管理界面,就可以对系统中的数据进行增删改查的操作。
4. 高校信息查询模块
该模块是实现用户在高校名称关键词、高校所在地、学历层次等信息筛选出符合条件的国内高校的功能,该页面以卡片形式展示了高校信息。我们使用Vue+Element-Plus框架来实现前端页面渲染、数据展示和分页组件,使用Django框架来实现后端API接口。我们将20条数据为一页,以此来降低后端压力。
5. 专业信息查询模块
该模块是用户可以根据专业分类以及关键词等信息筛选出符合条件的大学专业数据的功能,该页面以表格形式展示了专业信息。我们同样使用Vue+Element-Plus框架来实现前端页面渲染、数据展示和分页组件,使用Django框架来实现后端API接口。
6. 个性化推荐高校和专业模块
该模块是根据用户在高考志愿填报模块所填写的预测成绩、喜欢的专业、喜欢的学校以及想去的省份所在地等信息,从数据库中查找出符合用户条件的高校以及专业数据,再个性化地推荐给用户的功能。我们使用基于物品的协同过滤算法实现系统的推荐功能,并使用Django框架实现后端API接口。
7. 高校详情模块
该模块是当用户查看某高校详情时,可以看到该高校的多种信息,比如院校简介、学校领导、周边环境、通讯地址、院校设置、重点实验室、重点学科、师资力量、录取条件、食宿条件等,还可以查看该学校设立的所有专业数据。该模块同样使用Vue+Element-Plus框架实现前端页面渲染、数据展示,使用Django框架实现后端API接口,并使用基于物品的协同过滤算法给用户推荐相似的高校数据。
8. 专业详情模块
该模块是当用户查看某专业的详情时,可以看到该专业的多种信息,比如学历层次、专业代码、所属门类,专业分类、专业介绍、统计信息包括该专业的毕业生规模和男女比例、相似专业、毕业后的从业方向。该模块同样使用Vue+Element-Plus框架实现前端页面渲染、数据展示,使用Django框架实现后端API接口,并使用基于物品的协同过滤算法给用户推荐相似的专业数据。
技术及功能关键词:
python pyspark hadoop django scrapy vue element-plus 协同过滤算法
通过scrapy爬虫框架抓取“阳光高考”网站上的大学数据(包括了学校名称、学校logo、简介、满意度、院系设置、录取规则、食宿条件、设立专业等字段)以及大学的专业(包括了学历层次、专业代码、所属门类、专业类别、介绍、相近专业、从业方向、统计了毕业生规模以及男女比例等信息)数据
前台用户通过登陆注册后进入系统
管理员可在后台管理所有抓取到的大学及大学专业数据,以及用户填写的高考志愿意向数据
高校信息查询模块,用户可以根据高校名称关键词、高校所在地、学历层次等信息筛选出符合条件的国内高校,该页面以卡片形式展示了高校信息,其中包括了高校名称、高校LOGO、所在地、学历层次、主管部门以及高校评分等数据,分页组件以20条数据为一页,可大大降低后端压力
专业信息查询模块,用户可以根据专业分类以及关键词等信息筛选出符合条件的大学专业数据,该页面以表格形式展示了专业信息,其中包括专业名称、专业所属门类、专业所属类以及专业满意度等信息
个性化推荐高校和专业模块,这是根据用户在高考志愿填报模块所填写的预测成绩、喜欢的专业、喜欢的学校以及想去的省份所在地等信息,在数据库中查找出符合用户条件的高校以及专业数据,再个性化地推荐给用户;需要注意的是,当用户第一次访问该模块时,系统会检测用户是否已填写志愿,如果没有,必须填写后才能够推荐
当用户查看某高校详情时,可以看到该高校的多种信息,比如院校简介、学校领导、周边环境、通讯地址、院校设置、重点实验室、重点学科、师资力量、录取条件、食宿条件等,还可以查看该学校设立的所有专业数据,同时系统会依据基于物品的协同过滤算法给用户推荐相似的高校数据
当用户查看某专业的详情时,可以看到该专业的多种信息,比如学历层次、专业代码、所属门类,专业分类、专业介绍、统计信息包括该专业的毕业生规模和男女比例、相似专业、毕业后的从业方向。也可以看到该专业有哪些高校设立,同时系统会依据基于物品的协同过滤算法给用户推荐相似的专业数据
目录结构(只关注标注了中文的):
├── app 高校或专业数据后端最重要的模块!!!
│ ├── __init__.py
│ ├── admin.py 后台显示数据的配置
│ ├── apps.py 协同过滤算法代码!!!
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py 高校或专业相关的数据库模型
│ ├── tests.py
│ ├── urls.py
│ └── views.py 高校或专业相关所有重要的后端代码!!!!!
├── auth 用户登陆注册模块
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py 登陆注册的代码!
├── college_recommend_system
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py 后端配置文件
│ ├── urls.py 路由配置文件
│ └── wsgi.py
├── db.sqlite3
├── dist
│ ├── assets
│ │ ├── detail.13d47c10.js
│ │ ├── detail.1fa341c4.css
│ │ ├── detail.337af02b.css
│ │ ├── detail.54f10f8e.js
│ │ ├── detail.742aa084.js
│ │ ├── detail.7889713c.js
│ │ ├── detail.7ef48dc3.js
│ │ ├── detail.ee7f2c45.js
│ │ ├── detail.f7625290.js
│ │ ├── detail.fb8a31e4.js
│ │ ├── index.13fd7688.js
│ │ ├── index.162580f2.js
│ │ ├── index.1691dcfa.js
│ │ ├── index.2550ca4f.css
│ │ ├── index.284f6351.css
│ │ ├── index.298ea03e.css
│ │ ├── index.37b9f46a.js
│ │ ├── index.3909a248.js
│ │ ├── index.3c36e44f.js
│ │ ├── index.3dba9fc9.css
│ │ ├── index.40b7da8f.css
│ │ ├── index.5aab477e.js
│ │ ├── index.6cca87c9.js
│ │ ├── index.7538b07b.js
│ │ ├── index.803ad225.js
│ │ ├── index.8c5a47f0.js
│ │ ├── index.8fdc67f4.js
│ │ ├── index.9164ad62.js
│ │ ├── index.94b35005.js
│ │ ├── index.a3c8cee7.js
│ │ ├── index.a80fb208.css
│ │ ├── index.aa7d4a1b.js
│ │ ├── index.c9868bac.js
│ │ ├── index.e360ba0e.js
│ │ ├── index.e675f45b.css
│ │ ├── index.f173cc06.js
│ │ ├── login.25adad7b.js
│ │ ├── login.3faad2ee.js
│ │ ├── login.73bcb05c.js
│ │ ├── login.9fa974fc.js
│ │ ├── login.f552d11e.css
│ │ ├── register.00476390.js
│ │ ├── register.0bec7e5f.js
│ │ ├── register.43303d71.js
│ │ ├── register.73548925.css
│ │ └── register.75406bd0.js
│ └── index.html
├── fake.py
├── frontend
│ ├── README.md
│ ├── index.html
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── src
│ │ ├── App.vue
│ │ ├── assets
│ │ ├── components
│ │ ├── directives
│ │ ├── layout_h
│ │ ├── layout_v
│ │ ├── main.js
│ │ ├── mixins
│ │ ├── router
│ │ ├── stores
│ │ ├── utils
│ │ └── views 前端源代码,前台所有页面的代码都在这!!!
│ └── vite.config.js
├── index
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ ├── utils.py
│ └── views.py
├── manage.py
├── middlewares
│ └── __init__.py
├── requirements.txt
├── scrapy.cfg
├── spider
│ ├── __init__.py
│ ├── extendsion
│ │ ├── __init__.py
│ │ └── selenium
│ ├── items.py
│ ├── middlewares.py
│ ├── pipelines.py 将数据入库的代码
│ ├── settings.py
│ └── spiders
│ ├── __init__.py
│ ├── college.py 高校爬虫
│ ├── major.py 专业爬虫
│ ├── rel.py 将高校与专业关联起来的爬虫
│ └── test.py
└── 项目介绍.txt