本篇作者:小郑同学
不知道大家平时喜不喜欢看电影来消遣时光,我是比较喜欢看电影的。对我而言,当我看完一部电影,觉得很好看的时候,我就会寻找类似这部电影的其他电影。刚好有这么一个数据集,包含了很多部的电影,于是打算对其进行一波简单的分析并尝试建一个简单的“推荐系统”,一起来看一下吧~~
库:
Pandas,Numpy,Re
工具:
Ipython Notebook
这边插一句,小密圈曾经有一篇文章大家一起讨论了常用的5种Python开发工具,Notebook做数据分析并且记录笔记非常不错!
1.数据集
本文使用的数据集来自于https://grouplens.org/datasets/movielens/,上面有多种版本,主要区别在于数据集的大小(即收录的电影和用户信息的多少),这里使用的是最小的一个数据集:
2.数据初探
数据集里包含了4个文件,本文只用到了其中的两个:电影信息movies.csv,用户对电影的评分ratings.csv,先来看看这两个文件长什么样:
import pandas as pd
movies_data=pd.read_csv('movies.csv')
ratings_data=pd.read_csv('ratings.csv')
print (movies_data)
1).看一下movies_data里的数据
2).看一下用户评分的数据:
显然,如果单纯从单个文件里来分析的话似乎得不到什么有用或者是直观的信息,但是我们可以把这两个数据帧(DataFrame)结合起来,合成新的,把用户评分和电影信息结合起来,方便我们后续的分析处理
3).合并两个数据集
#合并
data=pd.merge(movies_data,ratings_data)
#删除列,可写可不写,不会产生影响
data.drop('timestamp',1,inplace=True)
>>
好了,完成了这一步,我们把重要的信息都结合在一起了,可以开始我们真正的数据分析或探索了,接着看看那些电影收到的评分最多,我们只需一句(valuecounts()是我在pandas里最喜欢的一个函数之一)
4).看看评价最多的20名电影
嗯,经典就是经典,评价最多的前几部都是有名的电影(阿甘正传、低俗小说、肖申克的救赎、沉默的羔羊、星球大战……)
看完评价最多的电影,但大多数人更加关心的是电影究竟好不好看,于是乎,我们就把目光转向评分这里. 那接着就来统计下用户对每一部电影的平均评分吧
5).电影的平均评分
其中size是每部电影参评人数,mean是平均分.
6).继续找一下评分最高的top5:
咦,我们可以看到,虽然评分是5分,但是……评分只有1人啊,这样绝不是我们想看到的,因为不是很客观,于是,我们再来改进下
这次我们把评价人数大于150人的电影找出来,在进行统计:
movie_ratings[movie_ratings['rating']['size']>=150].\
sort_values([('rating','mean')],ascending=False).head()
哈哈哈,这样就客观多了吗,top5分别是:教父、肖申克的救赎、非常嫌疑犯、辛德勒的名单、冰血暴,都是经典电影(大家都看过没有呢)
3.简单的推荐系统
当我们看完一部觉得好看电影,是不是会有这样的感觉,立马看有没有续集,没有的话就会找相似的电影。
是的,这里是基于这样思想,当我们输入一部电影,就找同样的类型的电影,然后返回给我们结果
用代码实现也不多,主要思想是:我们输入电影名或关键词,我们就从数据帧里匹配,然后找到这部电影的类型,再找出与其相同类型的电影,最后返回结果,具体代码为:
看看和Toy Story(玩具总动员)类似的动画片有哪些
比如找一下星球大战类似的电影:
限于篇幅没有完全截图
结论:来自小郑同学
正如前文刚刚提到过一样,这个数据集还是比较小的,只有九千多条电影记录,当然网站上可以下载更多的数据和更多有趣的信息。另外这个“推荐系统”比较简单,各位小伙伴可以根据自身的要求,再进一步的优化升级,这里就当做是抛砖引玉吧!