🎬 基于 Django + 协同过滤算法的电影推荐系统设计与实现
✍️ 本项目由成都理工大学宜宾校区的三位同学曾铭杨、杨皓麟、陈禧锦共同完成。项目以豆瓣电影数据为基础,通过协同过滤算法为用户构建个性化电影推荐服务,是一款集数据爬取、推荐算法实现、前后端整合为一体的完整 Web 推荐系统。
🧩 一、项目背景与目标
随着用户对影视内容多样化需求的提升,智能化、个性化的电影推荐系统越来越成为视频平台和用户交互中的核心模块。本项目旨在:
- ✅ 实现一个完整的电影推荐网站;
- ✅ 提供影片浏览、评分、收藏、评论、推荐等功能;
- ✅ 构建基于用户行为的推荐算法,提升个性化体验;
- ✅ 集成后台管理系统,便于数据维护和模型更新。
本系统最终实现了从用户登录到观看电影、打分并获得推荐的全流程闭环,推荐准确率达到 75% 左右,具有良好的实用价值。
🧱 二、系统架构设计
本项目采用四层架构设计思路:
层级 | 说明 | 使用技术 |
---|---|---|
第 1 层 | 前端展示层 | HTML + Bootstrap + JS + jQuery |
第 2 层 | 后端逻辑层 | Django 2.2.1 + DRF |
第 3 层 | 推荐算法层 | 协同过滤(User-based / Item-based) |
第 4 层 | 数据存储层 | SQLite3(轻量、易部署) |
前后端通过 Django 模板渲染实现数据交互,算法层与数据库通过 ORM 解耦,便于维护与扩展。
🔧 三、项目运行环境与依赖安装
✅ 环境要求
工具 | 版本 |
---|---|
Python | 3.6.x ~ 3.7 |
Django | 2.2.10 |
数据库 | SQLite3 |
浏览器 | Chrome/Edge/Firefox 现代浏览器 |
📊 三、项目核心功能与模块说明
✅ 1. 电影展示与分类
- 首页展示所有电影
- 标签分类浏览(通过
Movie
表关联Tags
表实现) - 热门影片、评分排序、时间排序等方式浏览
✅ 2. 用户操作系统
- 用户注册、登录、信息修改
- 支持打分、收藏、评论操作
- 所有行为作为推荐系统输入数据
✅ 3. 推荐算法实现
- 基于协同过滤算法(user-based & item-based)
- 冷启动问题解决:默认热门推荐 + 标签相似推荐
- 结果通过用户相似度 × 历史评分权重 得出推荐值
✅ 4. 后台管理系统
- 管理员后台路径:
/admin
- 管理电影、标签、用户信息
- 管理评论、评分等数据
🧠 四、推荐算法核心解析
推荐算法代码:recommend_movies.py
- User-based 协同过滤:根据相似用户评分推荐
- Item-based 协同过滤:根据相似电影计算推荐
- 推荐结果 = 相似度 × 评分加权总和
- 相似度计算:使用余弦相似度/皮尔逊相似度
# 简化逻辑示意
recommend_score = similarity(user_i, user_j) * user_j_rating
推荐显示位置:
- 后端:
user/views.py
→ 第 388 行的user_recommend()
方法 - 前端模板:
items.html
页面中使用循环输出推荐电影
##、搜索与分类功能实现
电影搜索:
views.py → search()
方法:
Movie.objects.filter(title__contains=query).union(Movie.objects.filter(director__contains=query))
标签分类:
通过 Movie
→ Tags
多对多关系实现分类展示,支持按类型查看电影。
📈 六、系统运行效果展示
🚀 七、系统优势与改进方向
✅ 系统亮点
- 前后端协作流畅,功能完整;
- 支持用户注册与行为分析;
- 推荐模型简单实用,支持扩展;
- 数据来源真实可靠(豆瓣抓取);
- 模块清晰,适合教学与项目实战。
📌 可扩展方向
方向 | 说明 |
---|---|
✅ 改进算法 | 引入深度学习模型(如NCF、AutoRec)提升准确率 |
✅ 模型评估 | 加入推荐评估指标如 Recall、NDCG、MAP 等 |
✅ 数据源扩展 | 使用豆瓣、IMDb、猫眼等联合数据 |
✅ 多模态推荐 | 加入图像/剧情文本/用户情感分析 |
✅ 推荐解释 | 为每条推荐结果提供可解释性说明 |
📜 八、结语
本项目是一次非常完整的推荐系统实战探索,不仅包含了前后端全栈设计,还融合了推荐算法、数据建模、爬虫、部署等关键知识点,适合作为毕业设计、课程实验或求职作品集。
📎 附:依赖环境列表(requirements.txt)
Django==2.2.10
djangorestframework==3.9.1
django-simpleui==2.1
beautifulsoup4==4.9.3
lxml==4.6.3
aiohttp==3.7.4
greenlet==1.1.0