电影推荐系统 – 入门

推荐系统是一种旨在提高搜索结果质量并提供/建议与用户搜索历史更相关的内容的系统。它们有助于了解用户可能喜欢什么,在今天的本教程中,我们将构建一个应用程序,向用户建议观看哪部电影。

让我们开始吧!

另请阅读:Python 推荐系统的理论介绍


在本教程中,我们将使用 TMDB 5000 电影数据集,可以在此处找到。我们将使用以下代码加载网站上提到的两个数据集。我们还将根据两个数据集的“id”列连接这两个数据集。

1
2
3
4
5
6
7
import pandas as pd
import numpy as np
df1=pd.read_csv('tmdb_5000_credits.csv')
df2=pd.read_csv('tmdb_5000_movies.csv')
 
df1.columns = ['id','tittle','cast','crew']
df2= df2.merge(df1,on='id')

接下来,我们将决定一个指标来判断哪部电影比其他电影更好。一种方法是我们可以直接使用数据集中给出的电影的平均评分。但这并不公平,因为特定电影的选民人数不一致。

因此,我们将使用 IMDB's weighted rating (wr) 数学描述如下 –

电影推荐系统评分公式

在上面的公式中,我们有,

v – 票数
m – 需要列出的最低票数
R – 电影的平均评分
C – 平均票数

让我们使用下面的代码计算电影的价值, qualified 方法是计算平均票数,然后仅考虑投票人数比其他电影多 90% 的电影来计算电影所需的最低票数。

1
2
3
4
5
6
C= df2['vote_average'].mean()
print("Mean Average Voting : ",C)
 
m= df2['vote_count'].quantile(0.9)
print("\nTaking the movies which have 90% more voters than the other movies")
print("Minimum votes required : ",m)

现在,让我们使用下面的代码片段过滤出最受欢迎和推荐的电影。

q_movies = df2.copy().loc[df2['vote_count'] >= m]

但我们仍然没有计算出每部合格电影的指标。我们将定义一个函数, weighted_rating 其中定义 a  new feature score ,它将帮助我们使用下面的代码计算所有合格电影的价值。

1
2
3
4
5
6
def weighted_rating(x, m=m, C=C):
    v = x['vote_count']
    R = x['vote_average']
    return (v/(v+m) * R) + (m/(m+v) * C)
 
q_movies['score'] = q_movies.apply(weighted_rating, axis=1)

最后,让我们根据分数列对整个数据框进行排序,并查看所有其他电影中最受推荐的电影。

q_movies = q_movies.sort_values('score', ascending=False)

让我们尝试使用下面的代码可视化排序的数据集,并了解整个数据集中最受欢迎的电影。

1
2
3
4
5
6
7
8
9
10
11
12
pop= df2.sort_values('popularity', ascending=False)
 
import matplotlib.pyplot as plt
plt.figure(figsize=(12,4),facecolor="w")
 
plt.barh(pop['title'].head(10),pop['popularity'].head(10),
         align='center',color='pink')
plt.gca().invert_yaxis()
 
plt.xlabel("Popularity Metric")
plt.title("Name of the most Popular Movies")
plt.show()

看看剧情多好看,我们可以看到,在前 10 部电影中, Minions 最受欢迎和推荐的电影是这部电影。

电影推荐系统剧情

恭喜!您使用 python 编程语言构建了一个成功的电影推荐系统!

另请阅读:

  1. Python:Moviepy 模块
  2. Python Tkinter:随机电影建议
  3. 使用 Selenium 从网页获取数据 [完整指南]