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

温馨提示:文末有 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 = 0
        sum_sim = 0
        for 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 += similarity
        rating = user.userextra.rating_avg + rating/sum_sim
        result.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 精品实战案例

最近更新

  1. TCP协议是安全的吗?

    2023-12-24 07:02:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-24 07:02:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-24 07:02:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-24 07:02:01       20 阅读

热门阅读

  1. Semaphone应用&源码分析(二)

    2023-12-24 07:02:01       41 阅读
  2. 音视频转码

    2023-12-24 07:02:01       41 阅读
  3. obs video-scaler-ffmpeg.c 源码讲解

    2023-12-24 07:02:01       37 阅读
  4. 微信小程序生成一个天气查询的小程序

    2023-12-24 07:02:01       43 阅读
  5. C语言实现对数组去重算法详解

    2023-12-24 07:02:01       45 阅读
  6. HarmonyOS和OpenHarmony的区别

    2023-12-24 07:02:01       48 阅读
  7. OpenCV技巧: 图像孔洞填充的方法与实现

    2023-12-24 07:02:01       37 阅读
  8. 云卷云舒:云原生业务应用成熟度模型

    2023-12-24 07:02:01       46 阅读
  9. facebook广告投放对落地页的要求

    2023-12-24 07:02:01       42 阅读