基于协同过滤的电影评论数据分析与推荐系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 

1. 项目介绍

        随着社会的发展,人们生活水平的提高,欣赏电影逐渐成为人们闲暇时的主要娱乐方式之一。本文电影推荐系统是为了给顾客提供方便快捷的热门电影推荐以及查询电影资讯而建立的,主要包括以下功能:电影分类、热门电影、最新上映、评分最高等信息。本文主要描述系统的分析与设计部分,包含了系统的业务分析、功能需求分析、数据流分析、非功能需求分析等内容。设计部分,包含了架构设计、功能结构设计、主要功能模块设计、数据库设计及界面设计等内容。

        本电影推荐系统采用的数据库是Mysql,使用 Django框架开发。系统记录用户评论电影等行为数据,利用协同过滤算法,实现电影的个性化推荐。

基于Python的电影评论数据分析与推荐系统

 2. 协同过滤算法

        基于协同过滤的两种推荐算法,核心思想是很朴素的”物以类聚、人以群分“的思想。所谓物以类聚,就是计算出每个标的物最相似的标的物列表,我们就可以为用户推荐用户喜欢的标的物相似的标的物,这就是基于物品(标的物)的协同过滤。所谓人以群分,就是我们可以将与该用户相似的用户喜欢过的标的物的标的物推荐给该用户(而该用户未曾操作过),这就是基于用户的协同过滤。

         协同过滤的核心是怎么计算标的物之间的相似度以及用户之间的相似度。

3. 基于协同过滤的电影评论数据分析与推荐系统

3.1 数据库结构设计

        用户信息实体主要存储管理信息包括用户名、密码、重新输入密码,陆属性图如图4-5所示。

        热门电影信息:导演、主演、类型、制片国家、语言、上映日期、片长、片名,实体属性图如图4-6所示。

图4-6热门电影信息属性图

3.2 用户注册登录

3.3 首页电影分类展示 

3.4 电影详情与收藏与评论

3.5 收藏与评论电影列表

3.6 电影点击量排行榜

 

3.7 个性化推荐

协调过滤核心算法部分代码:

def recommend(user:User, k):sims_user_list = cal_user_sims(user, 5)movie_set = set()for sim_user_data in sims_user_list:sim_user = sim_user_data['user']sim_user_movies = set(sim_user.rating_set.values_list('movie_id', flat=True))movie_set = movie_set | (sim_user_movies)exclude_movie_set = set(user.rating_set.values_list('movie_id'))movie_set = movie_set - exclude_movie_set# print('movie_set', movie_set)result = []for movie_id in movie_set:rating = 0sum_sim = 0for sim_user_data in sims_user_list:sim_user = sim_user_data['user']similarity = sim_user_data['similarity']sim_user_rating = Rating.objects.filter(user=sim_user, movie_id=movie_id).first()if sim_user_rating:rating += similarity * (sim_user_rating.score-sim_user.userextra.rating_avg)sum_sim += similarityrating = user.userextra.rating_avg + rating/sum_simresult.append({'movie_id': movie_id, 'rating':rating})result = sorted(result, key=lambda result: result['rating'], reverse=True)result = result[:k]result = [Movie.objects.get(pk=i['movie_id']) for i in result]return result

 

 4. 结论

        本系统基于Python技术,使用UML建模,采用Django框架组合进行设计,Mysql数据库存储数据。本系统的功能主要包括:用户注册、登录、信息维护、搜索电影、电影评分、个性化推荐以及管理员进行信息管理等。个性化推荐功能使用基于用户的协同过滤算法和热点推荐来实现。开发工具主要有:Pycharm、Python3.8、Django3、mysql8、Navicat等。

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的学长 QQ 名片 :)

精彩专栏推荐订阅:

1. Python 毕设精品实战案例
2. 自然语言处理 NLP 精品实战案例
3. 计算机视觉 CV 精品实战案例

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

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

相关文章

MFC窗体背景颜色的设置、控件白色背景问题、控件文本显示重叠问题、被父窗体背景覆盖的问题

文章目录 设置mfc窗体背景颜色窗体设置背景颜色后解决控件白色背景解决重复修改控件文本后重叠的问题自绘控件被父窗体背景覆盖的问题 设置mfc窗体背景颜色 设置窗体的背景颜色非常简单,只需要在窗体的OnEraseBkgnd里面填充窗体背景就可以了,甚至直接画…

强化学习(五)-Deterministic Policy Gradient (DPG) 算法及公式推导

针对连续动作空间,策略函数没法预测出每个动作选择的概率。因此使用确定性策略梯度方法。 0 概览 1 actor输出确定动作2 模型目标: actor目标:使critic值最大 critic目标: 使TD error最大3 改进: 使用两个target 网络…

每日一题——轮转数组

1. 题目描述 给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。 示例1: 输入:nums [1,2,3,4,5,6,7],k 3 输出:[5,6,7,1,2,3,4] 解释: 向右轮转 1步:[7,1,2,3,4,5,6] 向右…

C++模版类

文章目录 class与typename区别template<class NameType, class AgeType>template<typename T>class vs typename 基本代码实现 class与typename区别 在 C 中&#xff0c;template<class NameType, class AgeType> 和 template<typename T> 都是模板声…

Downie 4 中文

Downie 4是一款备受推崇的视频下载工具&#xff0c;以其高效、便捷的特点在广大用户中获得了良好的口碑。这款工具不仅支持从各种不同的网站上下载视频&#xff0c;还具备了智能化、多线程下载的优势&#xff0c;让用户能够快速地获取所需的视频资源。 首先&#xff0c;Downie…

非阻塞 IO(NIO)

文章目录 非阻塞 IO(NIO)模型驱动程序应用程序模块使用 非阻塞 IO(NIO) 上一节中 https://blog.csdn.net/tyustli/article/details/135140523&#xff0c;使用等待队列头实现了阻塞 IO 程序使用时&#xff0c;阻塞 IO 和非阻塞 IO 的区别在于文件打开的时候是否使用了 O_NONB…

单词接龙[中等]

一、题目 字典wordList中从单词beginWord和endWord的 转换序列 是一个按下述规格形成的序列beginWord -> s1 -> s2 -> ... -> sk&#xff1a; 1、每一对相邻的单词只差一个字母。 2、对于1 < i < k时&#xff0c;每个si都在wordList中。注意&#xff0c;beg…

Android模拟器的安装和adb连接

一、前置说明 APP 自动化可以使用真机进行测试&#xff0c;也可以使用模拟器来模拟安卓设备。我们可以根据个人喜好安装模拟器&#xff0c;个人推荐安装两款模拟器&#xff1a;网易 MuMu 模拟器、夜神模拟器。 MuMu模拟器可以支持 Android 12 版本&#xff0c;优点是&#xf…

微信小程序开发学习(上强度):从0开始写项目

前置知识 1、配置插件 微信小程序 基础模板引入sass的两种方法_微信小程序使用sass-CSDN博客 之后在对应页面里新建一个scss文件&#xff0c;写css 2、注册小程序&#xff0c;有个自己的appid&#xff0c;不用测试号了 5.1.注册小程序账号获取appid及个人和企业版差异_哔哩…

Vue3中使用props和emits详解

前言 在Vue3中&#xff0c;父子组件之间的数据传递是一个常见的需求。本文将介绍如何在Vue3中传递对象&#xff0c;并且在子组件中访问和修改父组件对象中的属性值&#xff0c;以及子组件如何调用父组件中的方法。 在 Vue 3 中&#xff0c;父子组件之间传值有以下作用&#xf…

实用干货:公司规定所有接口都用 POST请求,为什么?

大家好&#xff0c;我是大澈&#xff01; 本文约1000字&#xff0c;整篇阅读大约需要2分钟。 感谢关注微信公众号&#xff1a;“程序员大澈”&#xff0c;免费领取"面试礼包"一份&#xff0c;然后免费加入问答群&#xff0c;从此让解决问题的你不再孤单&#xff01…

可视化开发

可视化开发 数据可视化 交互式可视化 文章目录 可视化开发前言一、可视化开发二、Python数据可视化大屏GIS图像智能识别处理软件开发三、可视化开发必备总结前言 可视化开发可以帮助开发者通过图形化界面和拖放操作来创建、编辑和测试应用程序。使用这些工具,开发者可以提高开…