![pandas大数据分析案例:movielens电影评分告诉你哪部电影最好看](http://p2.ttnews.xyz/loading.gif)
本文通过一份电影评分的分析主要讲解一下pandas数据分析的重要功能:分组统计的扩展用法。
引用数据为:grouplens网站的数据,感兴趣的可以自己下载
![pandas大数据分析案例:movielens电影评分告诉你哪部电影最好看](http://p2.ttnews.xyz/loading.gif)
内容描述了电影推荐服务[MovieLens](http://movielens.org)的5星评级和自由文本标记活动。它包含了27278部电影的20000263个评级和465564个标签应用程序。这些数据由1995年1月9日至2015年3月31日期间的138493位用户创建。该数据集于2015年3月31日生成,并于2016年10月17日更新
评分最高的电影:
- Shawshank Redemption, The (1994) 肖申克的救赎
- Godfather, The (1972) 教父
- Usual Suspects, The (1995) 普通嫌犯
- Schindler's List (1993) 辛德勒的名单
- Godfather: Part II, The (1974) 教父2
- Seven Samurai (Shichinin no samurai) (1954) 七武士
- Rear Window (1954) 后窗
- Band of Brothers (2001) 兄弟乐队
- Casablanca (1942) 卡萨布兰卡
- Sunset Blvd. (a.k.a. Sunset Boulevard) (1950) 日落大道
素材分析:
下载后共包括7个附件:
描述了27278部电影的名称以及流派
描述了用户20000263个评分
数据分析:
分析需求:
先了解数据内容,然后弄清楚分析的需求,然后在考虑如何去实现
- 统计每一部电影的平均评分,找出评分最高的前10部电影
- 统计哪部电影的评分人数最多
- 统计哪种电影类型的评分人数最多,评分最高的前10部电影
- 统计评分人数>1000个的每个电影类型的前10部评分最高的电影
统计电影的平均评分:
因为评分和电影名称分布在两张表中,但是因为有共同的键,我们可以把他们合并到一起:
ratings=pd.merge(data_4,data_3,on="movieId")
ratings
统计排名最靠前的10部电影:
- 首先利用groupby透视出电影的平均得分
- 然后降序排列
- 切片筛选前10名的电影
dd_ratings=ratings.groupby("title")["rating"].mean()
dd_ratings=pd.DataFrame(dd_ratings)
dd_ratingsed=dd_ratings.sort_values(by="rating",ascending=False)[:10]
dd_ratingsed
统计哪部电影的评分人数最多的前10部电影
思路和刚才是一样的:
- 首先透视出每一部电影的评分人数总和
- 降序排列
- 切片筛选出前10部电影
dd_ratings_2=ratings.groupby("title")["userId"].count()
dd_ratings_2=pd.DataFrame(dd_ratings_2)
dd_ratings_2ed=dd_ratings_2.sort_values(by="userId",ascending=False)[:10]
dd_ratings_2ed
统计哪种电影类型的评分人数最多,评分最高的前10部电影
思路是这样的:
- 刚才已经透视出每部电影的平均得分,和评分人数,现在需要将两个数据合并起来
- 对评分人数,评分分别降序排列
- 切片筛选出前10的电影
- 注意剔除掉只有几个人评分的电影
dd_ratings_hb=pd.merge(dd_ratings,dd_ratings_2)
dd_ratings_hb2=dd_ratings_hb[dd_ratings_hb["userId"]>50]
dd_ratings_hbed=dd_ratings_hb2.sort_values(by=["rating","userId"],ascending=[False,False])
dd_ratings_hbed[:10]
统计评分人数>1000个的每个电影类型的前10部评分最高的电影
这也是最难的一个统计:
- 首先统计出所有电影类型和电影的评分人数
- 和ratings匹配出电影评分
- 筛选大于1000的评分电影
- 自定义函数统计出每个电影类型的前10部电影
第一步统计评分人数:
dd_ratings_4=ratings.groupby(["genres","title"])["userId"].count()
dd_ratings_4=pd.DataFrame(dd_ratings_4)
dd_ratings_4.reset_index(inplace=True)
dd_ratings_4
第二步匹配电影的平均评分:
dd_ratings_4ed=pd.merge(dd_ratings_4,dd_ratings)
dd_ratings_4ed
第三步筛选出大于1000评分人数的电影:
dd_ratings_5=dd_ratings_4ed[dd_ratings_4ed["userId"]>1000]
dd_ratings_5
第四步自定义函数统计:
def top10(x):
x_1= x.sort_values(by=["userId","rating"],ascending=[False,False])
return x_1[:10]
dd_ratings_5ed=dd_ratings_5.groupby(["genres"]).apply(top10)
dd_ratings_5ed
閱讀更多 嘩啦圈的夢 的文章