电影智能推荐系统

电影智能推荐系统

背景介绍

​ 人们经常会在视频平台上观看影片,有时目标明确,想要观看某部电影,但有时仅仅是随机搜寻。

​ 如果视频平台可以利用基于物品的智能推荐系统,有效地从用户对其观看过的电影的评分中挖掘数据,便可以根据用户偏好的电影个性化地推荐更多类似的电影,优化用户体验,提高用户粘性,创造额外收入。

分析步骤

  1. 读取数据
  2. 数据分析
    • 合并电影数据和评分数据
    • 计算每部电影的评分均值
    • 计算每部电影的“评分次数”
    • 创建数据透视表,以’'用户编号“为行索引,”名称“为列名称,”评分“为数据值
  3. 智能推荐

​ 以电影"阿甘正传(2031)"为例,计算各个电影与"阿甘正传(2031)"的相关系数,并删除相关系数是NaN的数据,最后筛选出评分次数超过20次的电影数据,并按照相关系数降序排序。

代码实现

# 读取数据
import pandas as pd 
movies = pd.read_excel('电影.xlsx')
movies = movies.loc[:, ~movies.columns.str.contains('Unnamed')]
movies.head()
score = pd.read_excel('评分.xlsx')
score.head()

# 合并电影数据和评分数据
df = pd.merge(movies, score, on='电影编号')
df.head()

# 计算每部电影的评分均值,并组装成DataFrame
ratings = pd.DataFrame(df.groupby('名称')['评分'].mean())
# 添加评分次数列
ratings['评分次数'] = df.groupby('名称')['评分'].count()
# 根据评分次数降序排序
ratings.sort_values('评分次数', ascending=False).head()

# 创建透视表
user_movie = df.pivot_table(index='用户编号', columns='名称', values='评分')
user_movie.tail()
user_movie.shape

# 智能推荐
FG = user_movie['阿甘正传(2031)']  # FG阿甘英文名称的缩写
pd.DataFrame(FG).head()

# axis默认为0,计算user_movie各列与FG的相关系数
corr_FG = user_movie.corrwith(FG)
similarity = pd.DataFrame(corr_FG, columns=['相关系数'])
similarity.head()

# 删除相关系数是NaN的数据
similarity.dropna(inplace=True)  
similarity.head()

# 合并DataFrame
similarity_new = pd.merge(similarity, pd.DataFrame(ratings['评分次数']), left_index=True, right_index=True)
similarity_new.head()

# 筛选出评分次数超过20次的电影数据,并按照相关系数降序排序
similarity_new[similarity_new['评分次数'] > 20].sort_values(by='相关系数', ascending=False).head(10)  

实战补充——groupby()分组妙用

​ 在日常的数据分析中,经常需要将数据根据某个(多个)字段划分为不同的群体进行分

析,而DataFrame中的groupby()可以灵活地完成各种分组计算的需求。

代码演示

import pandas as pd
# 创建DataFrame对象
data = pd.DataFrame([['三国', '王刚', 6, 8], ['盗梦空间', '王二', 8, 6], ['盗梦空间', '张三', 10, 8], ['海上钢琴师', '刘勇', 8, 8], ['海上钢琴师', '赵五', 8, 10]], columns=['电影名称', '影评师', '观前评分', '观后评分'])

# 根据"电影名称"分组,然后对每一组的“观后评分”计算平均值
data.groupby('电影名称')['观后评分'].mean()

# 也可以通过DataFrame的形式展示结果
data.groupby('电影名称')[['观后评分']].mean()

#对分组后的多个列求平均值
data.groupby('电影名称')[['观前评分', '观后评分']].mean()

# 通过多个字段分组
data.groupby(['电影名称', '影评师'])[['观后评分']].mean()

# 统计分组后每一组对应列的次数
count = data.groupby('电影名称')[['观后评分']].count()
# 修改列名称
count = count.rename(columns={'观后评分':'评分次数'})

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值