首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python数据科学实战项目之 基于MovieLens的影评趋势分析

注:图片源于https://movielens.org/

1. 项目任务

1.1 数据来源

本项目使用GroupLens Research收集的MovieLens网站电影评分数据集进行分析

该数据集发布于2015年4月,包含2000多万条评分数据、2.7万部电影数据、46.5万个电影类型标签数据及13.8万位用户数据

本项目对该数据集中的movies及ratings两个csv数据文件进行分析

该数据集下载地址为:https://grouplens.org/datasets/movielens/

1.2 分析目的

分析得出主要电影类型(如电影数量300万以上的电影类型)

分析主要电影类型评分的变化趋势

分析主要电影类型评分变化趋势之间的联系

分析用户对不同类型电影评分之间的关系强度

1.3 分析问题

不同类型电影的平均评分变化趋势:

主要电影类型的平均评分如何变化?

对不同类型电影的平均评分进行比较会有什么发现?

不同类型电影平均评分变化趋势之间的关联程度:

不同类型电影平均评分的变化趋势之间有关联吗?

比如,喜剧片(Comedy)和冒险片(Adventure)等其他电影类型的得分之间是正相关?关联强度怎么样?

2. 项目步骤

2.1 导入包

2.2 数据读取

为了方便查阅,本项目使用魔法命令(以%开始)将matplotlib图表直接嵌入在Notebook之中

用Pandas包的函数分别将文件movies.csv和ratings.csv读入至对应的DataFrame变量中

显示movies的前5行数据

查看movies维度(形状)

显示ratings的前6行数据

查看ratings维度(形状)

查看ratings的统计性描述信息

2.3 数据规整化

2.3.1 movies数据规整化处理

movies数据需要进行规整化处理(Data Tidying),原因在于genrens列不符合规整数据的基本原则

规整化处理的方法与步骤:

[1].以电影所属类型(genres)及符号’’为依据进行分割;

[2].如果一个电影有多个类型(genres),将分割成多个列表(List);

[3].将分割后得到的多个列表(Lists)转换为一个数据框(DataFrame);

[4].将数据框的索引设置为movieId

显示movies_tidy1的前3行

[5].按规整化数据的基本原则,采用函数进行重构,并重新设置行索引

注:重新设置行索引后,原来的行索引保留为movieId列

显示movies_tidy2的前10行

[6].删除level_1列,将columns为0的列重命名为genres,并重新定义数据框为movies_genres

[7].将原movies数据中的genres列替换成movies_genres,得到规整化处理后的movies数据

查看movies维度(形状)

2.3.2 ratings数据规整化处理

[1].查看ratings头部数据

[2].格式化时间戳为本地时间,并输出为4位数年份

2.3.3 定义新的数据集movie_ratings

基于规整化处理后的movies和ratings,构建电影评分数据集movie_ratings

[1].去掉movies中的title列,得到新movies

[2].合并新movies与ratings,连接键为movieId

[3].得到新的数据框movie_ratings

[4].显示数据框movie_ratings的前5行

[5].查看movie_ratings的维度

计算movies_ratings中不同类型电影的频数

[1].按genres列进行分组处理

[2].计算movieId的频数

[3].按movieId的频次进行降序

[4].过滤movie_ratings中数量在300万以下的电影种类

[5].查看movie_ratings的维度

2.4 数据分析及可视化

2.4.1 基本统计分析

计算不同电影类型的年度平均评分

方法:按年份、类型进行分组,并计算各组的均值,将timestamp列名更改为year

统计年度不同电影类型的标准差

方法:按年份、类型进行分组,并计算各组的标准差,将timestamp列改名为year

2.4.2 变化趋势分析

对不同类型电影平均评分的时间变化趋势进行分析

方法:按进行分组,并计算各组平均值

可视化:绘制不同类型电影平均评分的变化趋势图

对比分析不同时间段内的评分变化情况

方法:选取1996-2000及2011-2015两个五年时间段进行分析

用小提琴图可视化1996-2000年间8种电影类型平均评分的分布

用箱线图可视化2011-2015年间8种电影类型平均评分的分布

2.4.3 关联程度分析

对不同电影类型之间用户平均评分的关联程度进行分析

[1].按进行分组,并计算每组平均分,结果存放在数据框ug_ratings

[2].可视化不同类型电影用户平均评分的分布图

[3].对数据框ug_ratings进行重构操作(reshape),生成对应的透视表

[4].通过关联图分析关联程度

4.1 绘制Comedy,Adventure两种类型电影评分的联合图,分析关联程度

4.2 绘制Comedy,Drama两种类型电影评分的联合图,分析关联程度

4.3 绘制 Comedy,Romance 两种类型电影评分的联合图,分析关联程度

4.4 绘制 Comedy,Thriller 两种类型电影评分的联合图,分析关联程度

4.5 绘制Comedy,Action两种类型电影评分的联合图,分析关联程度

4.6 绘制 Comedy,Crime 两种类型电影评分的联合图,分析关联程度

4.7 绘制 Comedy,Sci-Fi 两种类型电影评分的联合图,分析关联程度

3. 结果分析

3.1化趋势分析

电影数量超过300万的主要电影类型有8种:戏剧(Drama)、喜剧(Comedy)、动作(Action)、惊悚(Thriller)、冒险(Adventure)、爱情(Romance)、犯罪(Crime)和科幻(Sci-Fi);

上述8种主要电影类型的平均评分在1996-1998年间均呈下降趋势,之后变化平稳,平均评分均低于3.5分;

1995-2015年间,科幻(Sci-Fi)类电影的平均评分一直最低,动作(Action)类电影的平均评分也比较低;

1995-2015年间,戏剧(Drama)、爱情(Romance)、犯罪(Crime)三种类型电影的平均评分最高。

注:图片源于网络

3.2 关联程度分析

喜剧(Comedy)类电影与其他7种电影类型的得分之间均呈现正相关关系;

喜剧(Comedy)与爱情(Romance)的得分关联程度最高,相关系数达0.72;

喜剧(Comedy)与科幻(Sci-Fi)的得分关联程度最低,相关系数为0.55。

END

【注释】

本文是在Sandipan Dey分析工作的基础上,进行了如下改进:

1.通过数据分析确定主要电影类型(原文没有给出电影类型选择依据)

2.提供了每个步骤的全套源代码(原文没有提供全部代码)

3.对文字解释部分进行了翻译和优化(原文部分地方为灰色难点)

4.对源代码和注释部分进行了优化(原文的源代码和注释需要优化)

5.将原文翻译成中文(原文为英文)

原文地址:https://sandipanweb.wordpress.com/2017/12/16/data-science-with-python-exploratory-analysis-with-movie-ratings-and-fraud-detection-with-credit-card-transactions/

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180121G03HKZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券