🎬 基于 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