目标:给定一个电影表movie,一个分数表rating。通过这两个表格,给出电影表movie里任意一个电影相关的top-n。
思路:首先建立用户与项目矩阵,其次计算用户之间的相似度分数,最后相似度排名,取top-n作为推荐结果。
1. 导入库和数据
import pandas as pd
导入movie数据(数据获取方式见本博客底部)
movie=pd.read_csv(r'C:\Users\xbh\Desktop\movie.csv')
movie
由于rating数据集已经把相似度算出来了,所以可以不用看genres这一列。取movieID和title这两列。
movie=movie.loc[:,["movieId","title"]] #loc通过行索引 "Index" 中的具体值来取行数据
movie.head(10)
导入rating数据(数据获取方式见本博客底部)
rating=pd.read_csv(r'C:\Users\xbh\Desktop\rating.csv')
rating=rating.loc[:,["userId","movieId","rating"]]
rating.head(10)
2.建立用户-项目矩阵
将movie和rating两个数据集合并,建立用户-项目矩阵
data=pd.merge(movie,rating)
data.head(10)
为了加快运行速度,只采取前1000000行数据进行实验
data=data.iloc[:1000000,:]
data.head(10)
3.建立透明表以进行排序
将userId这一列作为索引建立透明表
pivot_table=data.pivot_table(index=["userId"],columns=["title"],values="rating")
pivot_table.head(10)
以Bad Boys (1995)这部电影为对象,求出这部电影的相似度矩阵,并进行相似度排序。
这里调用corrwith的函数。
movie_watched=pivot_table["Bad Boys (1995)"]
similarity_with_other_movies=pivot_table.corrwith(movie_watched)
4.得出推荐结果
取相似度排序后的top-10作为Bad Boys (1995)这部电影最后的推荐结果。
similarity_with_other_movies.sort_values(ascending=False).head(10)
思考
1.怎么通过movie的genres属性得出评分?
2.怎么自己编写计算相似度的算法?
有思路的大佬们留个言。
数据获取方式:扫描下方二维码关注公众号“BoH工作室”,回复 data1 获取数据。
对推荐系统和图神经网络感兴趣的网友可以关注我的微信公众号“BoH工作室”,以后会陆续分享一些推荐系统和图神经网络的学习心得,欢迎大家关注并一起探讨。