Day 89:【99天精通Python】项目篇(二) - 电影推荐系统 (上) - 需求分析与数据探索

Day 89:【99天精通Python】项目篇(二) - 电影推荐系统 (上) - 需求分析与数据探索

前言

欢迎来到第89天!

我们将启动本系列最后一个,也是最有趣的大型项目——电影推荐系统
推荐系统是现代互联网产品的核心(淘宝的猜你喜欢、抖音的视频流)。我们将从零开始,搭建一个能根据用户历史评分,为他推荐可能喜欢的电影的系统。

我们将使用最经典的协同过滤 (Collaborative Filtering)算法。
它的核心思想是:“物以类聚,人以群分”

  1. 找到和你品味相似的用户。
  2. 把他们喜欢但你还没看过的电影推荐给你。

本节内容:

  • 项目目标与需求分析
  • 数据集介绍 (MovieLens)
  • 数据加载与探索性分析 (EDA)
  • 算法选型:基于用户的协同过滤 (User-Based CF)

一、项目目标

开发一个 API,输入一个user_id,返回为该用户推荐的 Top 10 电影列表。


二、数据集介绍 (MovieLens)

我们将使用 GroupLens 提供的公开数据集MovieLens。它包含几百万条"用户-电影-评分"的记录。
为了方便,我们使用ml-latest-small这个子集,包含 10 万条评分。

下载并解压后,我们主要关心两个文件:

  • movies.csv:movieId,title,genres
  • ratings.csv:userId,movieId,rating,timestamp

三、数据加载与探索 (EDA)

EDA 是数据分析的第一步,先看看数据长什么样。

importpandasaspd# 1. 加载数据movies=pd.read_csv("./ml-latest-small/movies.csv")ratings=pd.read_csv("./ml-latest-small/ratings.csv")print("--- 电影数据 ---")print(movies.head())print("\n--- 评分数据 ---")print(ratings.head())# 2. 合并数据# 用 merge 把两张表连起来,方便分析df=pd.merge(ratings,movies,on="movieId")print("\n--- 合并后数据 ---")print(df.head())# 3. 基础统计n_users=df['userId'].nunique()n_movies=df['movieId'].nunique()print(f"\n用户数:{n_users}, 电影数:{n_movies}")# 4. 看看热门电影 (按评分次数排序)movie_counts=df['title'].value_counts()print("\n--- 最热门的电影 Top 5 ---")print(movie_counts.head())# 5. 看看评分分布print("\n--- 评分分布 ---")print(df['rating'].describe())

四、算法原理:基于用户的协同过滤

假设我们要为用户 A 推荐电影。

  1. 找到相似用户
    • 遍历所有其他用户 (B, C, D…)
    • 计算 A 和每个用户之间的相似度。相似度的计算基于他们共同评分过的电影。
    • 相似度算法:余弦相似度 (Cosine Similarity)是最常用的。
  2. 筛选邻居
    • 选出和 A 最相似的 Top K 个用户(比如 K=20),他们是 A 的"邻居"。
  3. 生成推荐
    • 遍历邻居们看过且评分很高,但 A没看过的电影。
    • 对这些电影进行加权评分(相似度越高的邻居,他的推荐权重越大)。
    • 按最终得分排序,返回 Top N 个电影。

五、数据准备:用户-物品评分矩阵

为了计算相似度,我们需要一个"用户-电影"的评分矩阵。

  • 行:userId
  • 列:title
  • 值:rating

这个矩阵通常是稀疏的(大部分是 NaN,因为用户只看过一小部分电影)。

# 使用 pivot_table 创建评分矩阵movie_matrix=df.pivot_table(index='userId',columns='title',values='rating')print(movie_matrix.head())# title '71 (2014) 'Hell or High Water' (2016) ...# userId# 1 NaN NaN ...# 2 NaN NaN ...

六、计算用户相似度

Scikit-Learn 提供了cosine_similarity函数。

fromsklearn.metrics.pairwiseimportcosine_similarity# 缺失值用 0 填充 (代表没看过)user_item_matrix=movie_matrix.fillna(0)# 计算用户之间的相似度user_similarity=cosine_similarity(user_item_matrix)# 包装成 DataFrame,方便查看user_sim_df=pd.DataFrame(user_similarity,index=user_item_matrix.index,columns=user_item_matrix.index)print("\n--- 用户相似度矩阵 ---")print(user_sim_df.head())# userId 1 2 3 4 5# userId# 1 1.000000 0.027283 0.059709 0.194395 0.129080# 2 0.027283 1.000000 0.000000 0.000000 0.032118

七、小结

今天是项目的第一步:理解问题和准备数据

  1. 推荐系统的核心是"相似度"。
  2. 协同过滤分为基于用户 (User-CF) 和基于物品 (Item-CF)。
  3. Pandas是数据探索和预处理的核心工具,mergepivot_table非常关键。
  4. 用户-物品评分矩阵是算法的基础。

明天 (Day 90),我们将编写核心的推荐函数,并将其封装成一个 Flask API,完成整个项目!


八、课后作业

  1. 数据可视化:使用 Matplotlib 或 Seaborn,绘制电影评分次数的直方图,看看长尾效应有多严重。
  2. Item-CF:思考一下"基于物品的协同过滤"该怎么实现?(提示:转置评分矩阵,计算电影与电影之间的相似度)。
  3. 相似用户分析:编写代码,找出与userId=1最相似的 5 个用户。

系列导航

  • 上一篇:Day 88 - 实战篇二总结
  • 下一篇:Day 90 - 电影推荐系统 (下)(待更新)

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

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

相关文章

kkFileView国产化迁移实战:从x86到ARM架构的完整解决方案

kkFileView国产化迁移实战:从x86到ARM架构的完整解决方案 【免费下载链接】kkFileView Universal File Online Preview Project based on Spring-Boot 项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView 在信创产业快速发展的今天,企…

AI手势识别如何实现毫秒级响应?极速CPU版实战解析

AI手势识别如何实现毫秒级响应?极速CPU版实战解析 1. 引言:AI 手势识别与追踪的技术价值 随着人机交互技术的不断演进,非接触式控制正逐步成为智能设备的重要输入方式。在智能家居、虚拟现实、车载系统乃至工业控制中,手势识别凭…

Keil5安装后如何验证?新手必备测试方法

Keil5装完怎么测?一个最简工程搞定环境验证 你是不是也经历过这样的时刻: 花了一两个小时,终于走完了Keil5的安装流程,点开图标看到uVision界面顺利启动,心里刚松一口气—— 结果下一秒就想问自己: 这到…

终极指南:open-notebook - 完全免费的AI驱动笔记管理神器

终极指南:open-notebook - 完全免费的AI驱动笔记管理神器 【免费下载链接】open-notebook An Open Source implementation of Notebook LM with more flexibility and features 项目地址: https://gitcode.com/GitHub_Trending/op/open-notebook 在信息爆炸的…

如何快速掌握Frigate:AI智能监控的完整使用指南

如何快速掌握Frigate:AI智能监控的完整使用指南 【免费下载链接】frigate NVR with realtime local object detection for IP cameras 项目地址: https://gitcode.com/GitHub_Trending/fr/frigate Frigate是一款革命性的开源NVR系统,它通过本地AI…

Hunyuan推理速度优化:batch_size设置实战教程

Hunyuan推理速度优化:batch_size设置实战教程 1. 引言 1.1 业务场景描述 在企业级机器翻译系统中,响应延迟和吞吐量是衡量服务性能的核心指标。Tencent-Hunyuan/HY-MT1.5-1.8B 是一款基于 Transformer 架构的高性能翻译模型,参数量达 1.8B…

使用状态机设计UDS 19服务响应流程操作指南

用状态机重构UDS 19服务响应:让诊断流程更清晰、更可靠你有没有遇到过这样的场景?在调试一个复杂的ECU时,诊断仪反复发送0x19请求读取DTC信息,结果ECU偶尔返回乱码,或者干脆无响应。翻遍代码发现,处理逻辑被…

如何用Sandboxie实现安全沙箱隔离:5步完整配置指南

如何用Sandboxie实现安全沙箱隔离:5步完整配置指南 【免费下载链接】Sandboxie Sandboxie Plus & Classic 项目地址: https://gitcode.com/gh_mirrors/sa/Sandboxie Sandboxie是一款功能强大的系统沙箱工具,能够在隔离环境中安全运行应用程序…

树莓派AirPlay镜像终极指南:零配置网络发现深度解析

树莓派AirPlay镜像终极指南:零配置网络发现深度解析 【免费下载链接】RPiPlay An open-source AirPlay mirroring server for the Raspberry Pi. Supports iOS 9 and up. 项目地址: https://gitcode.com/gh_mirrors/rpi/RPiPlay 在当今智能设备普及的时代&am…

ComfyUI-WanVideoWrapper终极指南:从零搭建完整视频生成工作流

ComfyUI-WanVideoWrapper终极指南:从零搭建完整视频生成工作流 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 想要在ComfyUI中实现专业级视频生成效果?这篇文章将带你一…

AI编程新体验:Open Interpreter+Qwen3-4B实测分享

AI编程新体验:Open InterpreterQwen3-4B实测分享 1. 引言:当自然语言成为编程入口 在传统开发流程中,编写代码是一项高度专业化的工作,需要掌握语法、调试技巧和系统知识。然而,随着大语言模型(LLM&#…

Steam饰品交易终极助手:跨平台自动比价完整指南

Steam饰品交易终极助手:跨平台自动比价完整指南 【免费下载链接】SteamTradingSiteTracker Steam 挂刀行情站 —— 24小时自动更新的 BUFF & IGXE & C5 & UUYP 挂刀比例数据 | Track cheap Steam Community Market items on buff.163.com, igxe.cn, c5g…

Cap开源录屏工具终极指南:免费替代Loom的完整解决方案

Cap开源录屏工具终极指南:免费替代Loom的完整解决方案 【免费下载链接】Cap Effortless, instant screen sharing. Open-source and cross-platform. 项目地址: https://gitcode.com/GitHub_Trending/cap1/Cap 还在为录制屏幕时遇到的功能限制、水印困扰和跨…

Youtu-2B论文辅助神器:学生党1块钱体验,告别显卡焦虑

Youtu-2B论文辅助神器:学生党1块钱体验,告别显卡焦虑 你是不是也和我一样,是个文科研究生?每天泡在图书馆翻文献、写综述、赶论文,最怕的不是熬夜,而是——AI工具明明能帮你省下80%的时间,可你…

从语音到情感标签的完整解析|基于SenseVoice Small镜像的实践落地

从语音到情感标签的完整解析|基于SenseVoice Small镜像的实践落地 1. 引言:语音理解的新范式 随着人工智能在多模态感知领域的深入发展,传统的语音识别(ASR)已无法满足复杂场景下的语义理解需求。用户不再仅仅关注“…

PicView:重新定义Windows图片浏览体验的现代解决方案

PicView:重新定义Windows图片浏览体验的现代解决方案 【免费下载链接】PicView Fast, free and customizable image viewer for Windows 10 and 11. 项目地址: https://gitcode.com/gh_mirrors/pi/PicView 当传统图片查看器无法满足需求时 你是否曾遇到过这…

AI手势识别为何要彩虹骨骼?可视化设计实战解读

AI手势识别为何要彩虹骨骼?可视化设计实战解读 1. 引言:AI 手势识别与人机交互的演进 随着智能硬件和边缘计算的发展,非接触式人机交互正成为下一代用户界面的重要方向。在众多交互模态中,手势识别因其自然、直观的特性脱颖而出…

基于UART的PLC数据采集系统:完整指南与实例分析

从零构建工业级PLC数据采集系统:UART与Modbus RTU实战全解析在一家老旧的注塑厂里,工程师老张正面对着一堆没有以太网口的西门子S7-200 PLC。老板要求实现“手机上看车间运行状态”,但他手头既不能换设备,预算又紧张。怎么办&…

电商商品识别实战:用Qwen3-VL-2B快速搭建智能客服

电商商品识别实战:用Qwen3-VL-2B快速搭建智能客服 1. 引言:智能客服的视觉进化需求 在当前电商行业高度竞争的背景下,用户对客服响应速度与服务质量的要求持续提升。传统基于关键词匹配或纯文本对话的智能客服系统,在处理复杂咨…

Midscene.js 快速上手指南:3分钟零基础配置视觉AI助手

Midscene.js 快速上手指南:3分钟零基础配置视觉AI助手 【免费下载链接】midscene Let AI be your browser operator. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 还在为复杂的自动化测试配置头疼吗?Midscene.js 让视觉驱动的 A…