第十四章 数据分析示例
注:本章示例数据集可在附带的GitHub仓库(http://github.com/wesm/pydata-book)中找到
14.2 MovieLens 1M数据集
GroupLens实验室(http://www.grouplens.org/node/73)提供了一些从MovieLens用户那里收集的20世纪90年代末和21世纪初的电影评分数据的集合。这些数据提供了电影的评分、电影的元数据(流派和年份)以及观众数据(年龄、邮编、性别、职业)。这些数据通常会用于基于机器学习算法的推荐系统开发,虽然我们不会在本书中详细探讨机器学习技术,但我会向你展示如何将这些数据集切片并切成你需要的确切形式。
MovieLens 1M数据集包含6,000个用户对4,000部电影的100万个评分。数据分布在三个表格中:评分,用户信息和电影信息。
图14-1:使用pandas.read_table加载1.从ZIP文件中提取数据后,我们可以使用pandas.read_table将每个表加载到一个pandas DataFrame对象中。(见图14-1)
图14-2:使用切片查验 图14-3:查验2.通过使用Python的切片语法来查看每个DataFrame的前几行来验证一切是否成功(见图14-2、14-3)
注:年龄和职业被编码为整数,这些表示了数据集的README文件所描述的分组。
3.合并数据集
跨越三个表格分析数据并不是一件简单的事情,例如,假设你想按性别和年龄计算某个电影的平均评分。正如你将看到的,将所有表格合并到单个表中会更容易。使用pandas的合并功能,我们首先将ratings表与users表合并,然后将该结果与movies表数据合并。pandas根据重叠名称推断哪些列用作合并的(或连接)键位(见图14-4)
图14-4:合并数据集图14-5:获取按性别分级的平均电影评分4.为了获得按性别分级的每部电影的平均电影评分,我们可以使用pivot_table方法(见图14-5)
注:上面的代码产生了另一个DataFrame,其中包含电影标题作为行标签(“索引”)和性别作为列标签的平均评分。
5.首先过滤掉少于250(完全随意定的数字)个评分的电影
为此,我接着按标题对数据进行分组,并使用size()为每个标题获取一个元素是各分组大小的Series(见图14-6)
图14-6:过滤图14-8:选取评分多于250个的电影6.评分多于250个的电影标题的索引之后可以用于从mean_ratings中选出所需的行(见图14-8)
图14-9:女性观众top榜7.看女性观众的top电影,我们可以按F列降序排序(见图14-9)
14.2.1 测量评价分歧
1.找到男性和女性观众之间最具分歧性的电影。
一种方法是添加一列到含有均值差的mean_ratings中,然后按以下方式排序(见图14-9、14-10)
图14-9:女性首选的评分差异电影排名 图14-10:男性首选的评分差异电影排名图14-11:不依赖于性别标识异议最大的电影排名2.假设你想要的是不依赖于性别标识而在观众中引起最大异议的电影。异议可以通过评分的方差或标准差来衡量(见图14-11)
注:电影流派是以管道分隔(|)字符串的形式给出的。如果你想按流派做一些分析,需要做更多的工作来将流派信息转化为更有用的形式
网友评论