PART 01
趣闻
几年前,我看到有人在推特上说自己是一个excel专家,然后他们的老板让他们做一个透视表。根据这条推文,那个人立刻惊慌失措,辞掉了工作。这条推文很有趣,我能理解,因为一开始,它们可能会令人困惑,尤其是在excel中。但是不用害怕,数据透视表非常棒,在Python中,它们非常快速和简单。数据透视表是数据科学中一种方便的工具。任何开始数据科学之旅的人都应该熟悉它们。让我们快速地看一下这个过程,在结束的时候,我们会消除对数据透视表的恐惧。
PART 02
什么是数据透视表?
数据透视表是一种对数据进行重新排列或“透视”以总结某些信息的技术。
例如,考虑一个产品销售数据集。其中一列可能是“年龄类别”,如年轻、中年和老年。如果你想要看到每个年龄类别的平均销售额,数据透视表将是一个很好的工具。它会给你一个新表格,显示每一列中每个类别的平均销售额。
让我们来看看一个真实的场景,在这个场景中,数据透视表非常有用。我们可以用它来分析数据,甚至得出一些结论。
为了说明这个工作流,让我们采取以下步骤。
- 提出一个问题或假设
- 找到数据
- 使用Pandas创建透视表
- 用条形图将我们的发现形象化
- 根据我们最初的问题或假设得出结论
PART 03
我们试图回答的问题
让我们假设一群愤怒的父母再次认为电子游戏太暴力。这一次,他们说电子游戏开发者制作了太多带有卡通和虚构暴力风格的游戏。“TX”将这些游戏评级为适合儿童,这意味着开发者可以将游戏卖给更广泛的用户。对于这一群体,大多数儿童游戏都有这种类型的卡通暴力。让我们看看能不能找到一些数据,看看他们的说法是否有效。
在我们开始创造问题或假设之前,我们首先需要了解电子游戏评级。我们需要先熟悉TX的评级系统然后才能继续前进。这些评级在他们的网站上有详细描述,但我也在下面的表格中总结了评级。
这群愤怒的父母在他们的指责中含糊其辞,但让我们对他们的要求采取一些自由。将预测他们所创造的游戏的百分比,并将其定义为“大多数”。
由于TX的评级明确地说“不包含父母会认为不合适的材料”,我们可以提出我们的第一个假设。如果任何“TX”游戏都有这种暴力风格,那么评级系统就有问题了。我们可以使用下面的假设来传达这一点。
超过0%的电子游戏被评为“TX”有某种形式的卡通暴力。
如果这个假设是正确的,那么父母是正确的,评分系统有问题。
如果我们的假设是错误的,那么父母就是错误的,评分系统是按照设计的方式运行的。
我们还需要一个“E”级游戏的假设。“E”是为6岁以上的儿童设计的,但它可能包含卡通暴力。假设超过50%的人占多数,使用下面的假设。
超过50%的E级电子游戏带有某种卡通暴力。
如果我们的假设是正确的,那么家长们就正确地认为暴力正悄悄进入面向孩子的游戏中。如果我们的假设是错误的,那么我们晚上可以睡得很好,因为我们知道“E”级电子游戏中没有太多暴力。
PART 04
数据
Kaggle有一个完美的数据集名为“ESRB”视频游戏评级:
https://www.kaggle.com/imohtn/video-games-rating-by-esrb
从描述中,我们可以看到这个数据集包含了带有34个ESRP评级描述符和ESRB给定评级的1895款游戏。每个描述符都以二进制值列出,其中1表示描述符存在,0表示不存在。数据集还有一些列,但我们只关心评级描述符。让我们下载这个数据集并将其导入到Jupyter Notebook。使用Jupyter Notebook将允许我们导入所需的Python库,并提供一种显示结果的好方法。
PART 06
使用Pandas做一个透视表
Pandas库是Python中任何类型的数据操作和分析的主要工具。
首先,我们需要导入pandas,然后我们可以使用panda .read_csv将Kaggle数据集转换为DataFrame。
代码语言:javascript复制import pandas as pd
ratings = pd.read_csv("Video_games_esrb_rating.csv")
现在我们需要决定哪些评级描述符是卡通的还是动画的。让我们使用以下描述符:animated_blood, cartoon_violence, mild_cartoon_violence, mild_fantasy_violence。我们将这些列名存储在一个列表中.
代码语言:javascript复制cartoon_cols = ["animated_blood", "cartoon_violence",
"mild_cartoon_violence", "mild_fantasy_violence"]
我们的DataFrame有一个名为pivot_table的方法,它将为我们构建数据透视表。在这个示例中,我们将使用两个参数。第一个参数是index,它将是评级。可以将索引看作是我们进行分组的值。第二个参数是我们前面创建的列表中的值。还有一个非常重要的参数,aggfunc。这个参数将决定如何总结我们的信息。因为这些列都是布尔值,所以寻找平均值的默认值是完美的。这些列的均值将给出每个描述符中有1个游戏的百分比。
代码语言:javascript复制pivot = ratings.pivot_table(index="esrb_rating", values=cartoon_cols)
pivot
太棒了!让我们分解这个输出告诉我们什么:
- 我们只在4个不同的等级中看到这些内容描述符:E(每个人),ET(E 10), T(青少年),M(成熟)。这告诉我们,EC(Early Childhood)游戏不包含任何这种卡通风格的暴力。
- 在被评为“E”级的游戏中,没有任何一款游戏含有动画血液或卡通暴力。约5%的人有轻微的卡通暴力,约18.5%的人有轻微的幻想暴力。
- 2%的ET(“E 10”)游戏有动画血液,5%有卡通暴力,4%有轻微卡通暴力,约3%有轻微幻想暴力。
- 成熟游戏在这些类别中很少有暴力元素,青少年游戏也有一些这种类型的暴力元素,但比“E 10”级别的游戏要少。
PART 07
用条形图可视化数据透视表
数据透视表在几秒钟内就给了我们一些快速的信息。如果以视觉的方式展示某些东西,人们通常更容易理解它。我们可以使用Pandas用数据透视表制作一个柱状图。
由于本演练是基于使用Jupyter Notebook,我们需要第一行来查看柱状图。我们也使用了numpy。排列作为一个快捷方式,在y轴上做10个滴答声,从0开始,以0.1增量递增。我们创建的数据透视表实际上是一个DataFrame,它允许我们调用plot。条形法。如果我们不指定x轴上的值,则使用索引。在这种情况下,这是完美的,因为它将使用我们的“TX”评级。然后y轴将显示每个描述符生成的值。
代码语言:javascript复制%matplotlib inline
import numpy as np
pivot.plot.bar(ylim=(0,1),yticks=np.arange(0,1,.1))
·END·