计算机毕业设计Django+Vue.js考研推荐系统 考研分数线预测 中公考研爬虫 混合神经网络推荐算法 考研可视化 机器学习 深度学习 大数据毕业设计

Python数据分析与可视化期末项目报告

     项目名称:  考研推荐系统数据分析与可视化                                         

    学    号:                                           

    姓    名:                                            

专业班级:                                            

                  2023年12月

考研推荐系统

  • 项目概述

考研(研究生入学考试)是许多大学毕业生追求深造的一种途径。为了帮助考生更好地选择适合自己的研究生专业和院校,开发一个考研推荐系统可以为考生提供个性化的建议。该项目旨在通过数据分析和可视化技术,为考生提供基于数据的研究生专业和院校推荐。

通过数据分析和可视化,为考生提供具有个性化的研究生专业和院校推荐服务,帮助考生更好地选择适合自己的研究生方向。

该项目涉及数据处理、统计分析和可视化等技术,需要结合数据库管理、数据清洗、数据分析工具和可视化库进行开发实现。

  • 大数据分析、挖掘与可视化开发环境

    本项目采用Python语言及第三方库进行大数据分析、挖掘,包括训练模型的构建、后端开发环境、使用的第三方库和模型评估等方面。

  1. 软件开发环境:PyCharm、Navicat、MySQL

2.第三方库包

django==2.2.1
django-simpleui==2.1
djangorestframework==3.9.1
pandas
requests
Beautifulsoup4
pyecharts

  • 数据采集

本项目爬虫由两个爬虫同时组成,并可以并行爬取数据。

其中一个爬虫用于采集研究生院校的基本信息,包括学校名称、地理位置、专业设置等。另一个爬虫用于采集历年考研数据,包括报考人数、录取人数、专业录取分数线等。爬虫可以通过网络请求和HTML解析的方式获取所需数据,并将数据保存到本地csv文件或数据库中。

四、数据准备(含数据清洗、补全、整合、转换等)

在数据准备阶段,对采集到的数据进行清洗、补全、整合和转换等处理操作,以确保数据的质量和一致性。这包括处理缺失值、异常值、重复值等,对数据进行格式转换和标准化,以及将不同来源的数据整合到一个统一的数据集中。项目中所爬取的最新考研录取人数存在未知,且爬取下来的字段为-字符串,故将其修改为0.

  • 数据分析处理与训练模型的构建

在数据分析方面,我们分析了院校收藏Top10和院校评分Top10。统计了院校数量、双一流院校数量、自划线院校数量排名前十的省份。对专业报录比、学校报录比、学校报名前十做了统计分析。

在基于学校评分和收藏的模型构建阶段,我们将利用学生对不同学校的评分和收藏数据来构建推荐模型。这些评分和收藏数据可以反映学生对学校的偏好和兴趣。

  • 模型评估

数据准备:

收集学生对不同学校的评分和收藏数据。

对数据进行清洗和预处理,处理缺失值、异常值等。

特征工程:

根据评分和收藏数据,提取相关的特征,如学校评分、收藏次数等。

进行特征选择和转换,以提取对模型训练有用的特征。

模型评估:

基于准备好的特征和数据集,使用自定义算法构建推荐模型。

将数据集分为训练集和测试集,并评估模型的性能和准确性。

根据评估结果,对模型进行调整和改进,以提高推荐准确性和用户满意度。

模型优化:

可以尝试不同的机器学习算法、模型参数和特征组合,以优化模型表现。

进行模型调优和参数调整,以提高推荐结果的准确性和个性化程度。

七、数据可视化

数据可视化是将数据分析结果以直观、易于理解的图表、图形等形式展示的过程。在这一阶段,可以使用数据可视化技术,如绘制柱状图、折线图、散点图等,来展示分析结果和模型预测的信息。通过交互式界面和图表,用户可以根据自身需求进行筛选和选择,从而更好地理解和利用数据分析结果。

本项目使用柱状图分析了院校收藏和评分前十,饼状图统计了院校总数量、双一流院校数量、自划线院校数量前十的省份。最好,通过柱状图分析了每个院校及专业报录比前十情况,可以得出哪些院校或者哪些专业竞争比较激烈。

核心算法代码分享如下:

!
以下文字解释recommend.py,也就是推荐模块,比较长,不方便念。
1. 计算基于用户收藏的 Jaccard 相似度
这个函数的目的是计算当前用户与其他用户之间的 Jaccard 相似度,基于他们的收藏行为。Jaccard 相似度是通过计算两个集合的交集元素数量与并集元素数量之间的比值来衡量的。功能:
首先,该函数获取了当前用户收藏的学校,然后根据这些学校构建了一个收藏向量,向量中的每个元素代表一个学校的收藏情况。如果用户收藏了某个学校,则在向量中相应的位置上置1,否则为0。
接着,遍历除了当前用户之外的所有其他用户。对每个用户,获取其收藏的学校,构建一个收藏向量,然后计算当前用户与其他用户之间的 Jaccard 相似度。
最后,将与当前用户相似度大于给定阈值的用户及其相似度存储在一个字典中并返回。
2. 基于用户收藏计算当前用户对邻居收藏院校的 Jaccard 兴趣度
python
Copy code
def user_recommendations_jaccard_collections(user_id, similarities, similarities_jaccard):# 获取当前用户的收藏数据user_collections = UserCollection.objects.filter(user_id=user_id).values('school_id', 'collection')# 获取当前用户收藏的学校iduser_collections_school_id = [user_collection['school_id'] for user_collection in user_collections]recommendations_jaccard = {}# 邻居用户已收藏的学校中目标用户未收藏的学校for school_id in UserCollection.objects.filter(user_id__in=similarities).exclude(school_id__in=user_collections_school_id).values_list('school_id', flat=True).distinct():# 获取收藏了当前物品的用户:用户id和收藏情况(collection = 1)item_collections = UserCollection.objects.filter(school_id=school_id).values('user_id', 'collection')# 初始化一个空列表weighted_scores = []# 遍历 item_collections 中的每一条记录for collection in item_collections:# 如果该收藏记录对应的用户在 similarities_jaccard 字典中,则计算该收藏记录对该物品的权重得分if collection['user_id'] in similarities_jaccard:# 获取该收藏记录对应用户与目标用户的相似度similarity = similarities_jaccard[collection['user_id']]# 计算该收藏记录对该物品的权重得分weighted_score = similarity * collection['collection']# 将该权重得分添加到列表中weighted_scores.append(weighted_score)numerator = sum(weighted_scores)denominator = sum(similarities_jaccard.values())if denominator > 0:recommendations_jaccard[school_id] = round(numerator / denominator, 2)return recommendations_jaccard
功能:
这个函数的目的是计算当前用户对邻居收藏院校的 Jaccard 兴趣度。该兴趣度是基于当前用户与邻居用户的相似度以及邻居用户对学校的收藏情况计算的。
该函数首先检索当前用户的收藏数据,并构建了一个收藏向量,表示用户收藏的情况。
接着,遍历所有邻居用户收藏的学校,计算当前用户对这些学校的兴趣度得分,并存储在一个字典中以便返回。
2. 基于用户评分计算相似度的函数
2.1. 基于用户评分计算当前用户与其他用户的余弦相似度
python
Copy code
def user_cosine_similarity_ratings(user_id, default_similarity_cosine=0):# 获取当前用户评分数据user_ratings = UserScore.objects.filter(user_id=user_id).values('school_id', 'score')user_ratings_school_id = [user_rating['school_id'] for user_rating in user_ratings]# 构造当前用户评分向量user_rating_vector = [0 for i in range(999)]for school_id, score in user_ratings:user_rating_vector[school_id] = scoresimilarities_cosine = {}for user in User.objects.exclude(id=user_id):# 获取当前用户与其他用户共同评价的物品的评分数据ratings = user.userscores.filter(school_id__in=user_ratings_school_id).values('school_id', 'score')if ratings:  # 如果当前用户与该用户有共同评分的学校,则计算当前用户与该用户的相似度,这里使用余弦相似度# 获取该用户所有的评分学校的评分情况:(school_id,score)ratings = user.userscores.filter().values('school_id', 'score')ratings_school = [(rating['school_id'], rating['score']) for rating in ratings]# 构造该用户评分向量:rating_vectorrating_vector = [0 for i in range(999)]for school_id, score in ratings_school:rating_vector[school_id] = score# 计算两用户之间的余弦相似度similarity_cosine = cosine_similarity(user_rating_vector, rating_vector)if similarity_cosine > default_similarity_cosine:similarities_cosine[user.id] = similarity_cosinereturn similarities_cosine
功能:
这个函数的目的是计算当前用户与其他用户之间的余弦相似度,基于他们的评分行为。余弦相似度是通过计算两个向量的夹角余弦值来衡量的。
首先,该函数获取了当前用户的评分数据,然后根据这些评分构建了一个评分向量,向量中的每个元素代表一个学校的评分情况。如果用户对某个学校进行了评分,则在向量中相应的位置上记录该评分,否则为0。
接着,遍历除了当前用户之外的所有其他用户。对每个用户,获取其评分的学校,构建一个评分向量,然后计算当前用户与其他用户之间的余弦相似度。
最后,将与当前用户相似度大于给定阈值的用户及其相似度存储在一个字典中并返回。
2.2. 基于用户评分计算当前用户对邻居评分院校的余弦兴趣度
python
Copy code
def user_recommendations_cosine_ratings(user_id, similarities, similarities_cosine):# 获取当前用户评分数据user_ratings = UserScore.objects.filter(user_id=user_id).values('school_id', 'score')user_ratings_school_id = [user_rating['school_id'] for user_rating in user_ratings]recommendations_cosine = {}# 邻居用户已评分的学校中目标用户未评分的学校for school_id in UserScore.objects.filter(user_id__in=similarities).exclude(school_id__in=user_ratings_school_id).values_list('school_id', flat=True).distinct():# 获取评价了当前物品的用户和评分数据item_ratings = UserScore.objects.filter(school_id=school_id).values('user_id', 'score')# 初始化一个空列表weighted_scores = []# 遍历 item_ratings 中的每一条记录for rating in item_ratings:# 如果该评分记录对应的用户在 similarities_cosine 字典中,则计算该评分记录对该物品的权重得分if rating['user_id'] in similarities_cosine:# 获取该评分记录对应用户与目标用户的相似度similarity = similarities_cosine[rating['user_id']]# 计算该评分记录对该物品的权重得分weighted_score = similarity * rating['score']# 将该权重得分添加到列表中weighted_scores.append(weighted_score)numerator = sum(weighted_scores)denominator = sum(similarities_cosine.values())if denominator > 0:recommendations_cosine[school_id] = round(numerator / denominator, 2)return recommendations_cosine
功能:
这个函数的目的是计算当前用户对邻居评分院校的余弦兴趣度。该兴趣度是基于当前用户与邻居用户的相似度以及邻居用户对学校的评分情况计算的。
该函数首先检索当前用户的评分数据,并构建了一个评分向量,表示用户评分的情况。
接着,遍历所有邻居用户评分的学校,计算当前用户对这些学校的兴趣度得分,并存储在一个字典中以便返回。
3. 计算相似度的函数
3.1. Jaccard 相似度计算函数
功能:这个函数用于计算两个向量之间的 Jaccard 相似度。
通过将布尔向量转换为集合,它计算两个集合的交集和并集的大小,并据此计算相似度。
3.2. 重载字典计算方法
功能:这个类重载了字典的加法和乘法运算符,以支持字典之间的加法和乘法操作。
3.3. 余弦相似度计算函数
功能:这个函数用于计算两个向量之间的余弦相似度。
计算两个向量的内积作为分子,两个向量模长的乘积作为分母,然后计算相似度。
4. 基于用户收藏计算相似度的函数
4.1. 计算基于用户收藏的 Jaccard 相似度
功能:这个函数的目的是计算当前用户与其他用户之间的 Jaccard 相似度,基于他们的收藏行为。
首先,该函数获取了当前用户收藏的学校,然后根据这些学校构建了一个收藏向量,向量中的每个元素代表一个学校的收藏情况。如果用户收藏了某个学校,则在向量中相应的位置上置1,否则为0。
接着,遍历除了当前用户之外的所有其他用户。对每个用户,获取其收藏的学校,构建一个收藏向量,然后计算当前用户与其他用户之间的 Jaccard 相似度。
最后,将与当前用户相似度大于给定阈值的用户及其相似度存储在一个字典中并返回。
4.2. 基于用户收藏计算当前用户对邻居收藏院校的 Jaccard 兴趣度
功能:这个函数的目的是计算当前用户对邻居收藏院校的 Jaccard 兴趣度。该兴趣度是基于当前用户与邻居用户的相似度以及邻居用户对学校的收藏情况计算的。
该函数首先检索当前用户的收藏数据,并构建了一个收藏向量,表示用户收藏的情况。
接着,遍历所有邻居用户收藏的学校,计算当前用户对这些学校的兴趣度得分,并存储在一个字典中以便返回。
5. 基于用户评分计算相似度的函数
5.1. 基于用户评分计算当前用户与其他用户的余弦相似度
功能:这个函数的目的是计算当前用户与其他用户之间的余弦相似度,基于他们的评分行为。余弦相似度是通过计算两个向量的夹角余弦值来衡量的。
首先,该函数获取了当前用户的评分数据,然后根据这些评分构建了一个评分向量,向量中的每个元素代表一个学校的评分情况。如果用户对某个学校进行了评分,则在向量中相应的位置上记录该评分,否则为0。
接着,遍历除了当前用户之外的所有其他用户。对每个用户,获取其评分的学校,构建一个评分向量,然后计算当前用户与其他用户之间的余弦相似度。
最后,将与当前用户相似度大于给定阈值的用户及其相似度存储在一个字典中并返回。
5.2. 基于用户评分计算当前用户对邻居评分院校的余弦兴趣度
功能:这个函数的目的是计算当前用户对邻居评分院校的余弦兴趣度。该兴趣度是基于当前用户与邻居用户的相似度以及邻居用户对学校的评分情况计算的。
该函数首先检索当前用户的评分数据,并构建了一个评分向量,表示用户评分的情况。
接着,遍历所有邻居用户评分的学校,计算当前用户对这些学校的兴趣度得分,并存储在一个字典中以便返回。

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

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

相关文章

【PHP开发工程师系统性教学】——thinkPHP的分页操作,不管有几页,用这个你想分几页就分几页

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

MoneyPrinterPlus:AI自动短视频生成工具,详细使用教程

MoneyPrinterPlus是一款使用AI大模型技术,一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上的轻松赚钱工具。 之前有出过一期基本的介绍,但是后台收到有些小伙伴说,不知道如何使用。 今天我将会手把手的详细介绍…

怎么加密U盘数据?U盘加密软件哪个好?

U盘是我们在生活和工作中最常用的移动存储设备,而为了避免U盘数据泄露,我们需要使用U盘加密软件来加密保护U盘数据。那么,U盘加密软件哪个好呢?下面我们就一起来了解一下吧。 BitLocker加密 BitLocker是Windows系统提供的磁盘加密…

多种传感器在钢铁工业安全风险监测预警中的应用

中国作为钢铁行业的生产与消费大国,其钢铁冶炼流程的复杂性和长周期性使得各环节中频繁出现的有毒有害、易燃易爆气体以及粉尘等危险物质成为行业安全管理的重大挑战。为了保障工作人员的安全,多种传感器在安全风险监测预警中的应用显得尤为重要。 钢铁产…

java从红外图片提取温度,计算超过阈值的温度占总面积的百分比

灰度图是单通道图,像素只有一个值:灰度值。灰度值越高,则图像越亮。 现在我们已经知道我们看到一张灰度图是由许多不同灰度值的像素点构成,而每个像素就是一个越亮的像素,灰度值越高,最高值是255&#xff…

Latex的参考文献中显示三个问号???——解决办法

1、问题描述 在使用spring模板,并引用book时,末尾的引文地方出现三个???由于使用的bibtex是直接从谷歌学术中导出来的,其中仅包含作者,书名,出版社,年份等,缺少了重要的信息。结果导致在出版…

什么!没有Starter的阿里云OSS也能集成到SpringBoot?

实际上,我们在Maven存储库中尝试搜索阿里云OSS。在此过程中,我们会发现阿里云官方未提供一种集成Spring Boot的模式,即xxx-Springboot-Starter,显然,这是一个需要自行定制的组件。然而,如今许多企业在研发过…

LeetCode | 520.检测大写字母

这道题直接分3种情况讨论:1、全部都为大写;2、全部都为小写;3、首字母大写其余小写。这里我借用了一个全是大写字母的串和一个全为小写字母的串进行比较 class Solution(object):def detectCapitalUse(self, word):""":type …

【机器学习】计算机图形和深度学习模型NeRF详解(1)

1.引言 1.1.1. NeRF研究的背景 人们在拍照的时候,往往会中各个角度进行拍摄,以呈现出物体的全貌和美丽。下图的照片,拍摄的是一架楼梯,但是拍摄的角度完全不同: 我们可以看到这些图片都是楼梯的照片,但拍…

Training language models to follow instructions with human feedback 论文阅读

论文原文:https://arxiv.org/pdf/2203.02155 论文简介 语言模型越大并不意味着它能更好的理解用户的意图,因此在这篇论文中,展示了根据人的反馈对模型进行微调,使得语言模型能够在各种人物上更好的理解用户的意图。在评估中&…

树莓派4B学习笔记11:PC端网线SSH连接树莓派

今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 今日学习使用网线连接树莓派,网线可以提供更…

使用 C# 学习面向对象编程:第 8 部分

抽象方法 亲爱的读者,本文是 OOP 的第四大支柱,也是最后一大支柱。对于 OOP 初学者来说,这很容易让人困惑。因此,我们用非常简单的语言提供了一个示例。 “抽象用于管理复杂性。无法创建抽象类的对象。抽象类用于继承。” 例如…

降噪领夹麦克风哪个牌子好?揭秘无线领夹麦克风哪个降噪好

相信很多新手视频创作者都有一个疑问:为什么别人的视频或者直播音质这么清晰,几乎没什么噪音呢?其实最主要的就是麦克风的原因,相机或手机内置的麦克风是无法提供高质量的音频记录以及很好的指向性的。 想要拍摄出来的视频作品拥有…

每一个男人都曾有一个机器人的梦想

每一个男人都曾有一个机器人的梦想 我也有 每一个男人都曾有一个机器人的梦想。对于我来说,这个梦想始于童年时代,那时变形金刚风靡一时,几乎所有80后的孩子都为之疯狂。我是80后中的一员,那时候的科技还远没有如今这般发达&#…

《现代通信原理与技术》码间串扰和​​​​​​​无码间串扰的眼图对比实验报告

实 验:码间串扰和无码间串扰的眼图对比实验报告 摘 要: 在数字通信系统中,码间串扰(Inter-Symbol Interference, ISI)是影响信号质量和系统性能的重要因素之一。本实验通过MATLAB软件生成并对比了受码间串扰影响和未…

华为昇腾异构计算架构CANN及AI芯片简介

异构计算架构CANN 异构计算架构CANN(Compute Architecture for Neural Networks)是华为针对AI场景推出的异构计算架构,向上支持多种AI框架,包括MindSpore、PyTorch、TensorFlow等,向下服务AI处理器与编程,…

Open To Buy(OTB)计划:零售业者的库存管理利器

在当今快速变化的服装市场中,如何高效、精准地进行商品管理成为了服装企业竞争的关键。OTB(Open-to-Buy)作为一种有效的商品管理方法,在企业管理中扮演着至关重要的角色。它基于预算、商品计划以及市场需求等多维度因素&#xff0…

Android开发系列(二)Jetpack Compose 之Text控件

Jetpack Compose是一种全新的声明式UI框架,用于构建Android应用程序。Jetpack Compose Text控件是Compose中用于显示文本的基本UI组件。 Text是一个可组合函数,函数声明如下所示。 Composable fun Text(text: String,modifier: Modifier Modifier,colo…

AGI 远不止 ChatGPT!一文入门 AGI 通识及应用开发

AI 大语言模型进入爆发阶段 2022 年 12 月 ChatGPT 突然爆火,原因是其表现出来的智能化已经远远突破了我们的常规认知。虽然其呈现在使用者面前仅仅只是一个简单的对话问答形式,但是它的内容化水平非常强大,甚至在某些方面已经超过人类了&am…

k8s上使用ConfigMap 和 Secret

使用ConfigMap 和 Secret 实验目标: 学习如何使用 ConfigMap 和 Secret 来管理应用的配置。 实验步骤: 创建一个 ConfigMap 存储应用配置。创建一个 Secret 存储敏感信息(如数据库密码)。在 Pod 中挂载 ConfigMap 和 Secret&am…