推荐系统是一种旨在提高搜索结果质量并提供/建议与用户搜索历史更相关的内容的系统。它们有助于了解用户可能喜欢什么,在今天的本教程中,我们将构建一个应用程序,向用户建议观看哪部电影。
让我们开始吧!
另请阅读: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 编程语言构建了一个成功的电影推荐系统!
另请阅读: