前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速在Python中实现数据透视表

快速在Python中实现数据透视表

作者头像
HuangWeiAI
发布2021-08-24 14:46:28
2.9K0
发布2021-08-24 14:46:28
举报
文章被收录于专栏:浊酒清味浊酒清味

PART 01

趣闻

几年前,我看到有人在推特上说自己是一个excel专家,然后他们的老板让他们做一个透视表。根据这条推文,那个人立刻惊慌失措,辞掉了工作。这条推文很有趣,我能理解,因为一开始,它们可能会令人困惑,尤其是在excel中。但是不用害怕,数据透视表非常棒,在Python中,它们非常快速和简单。数据透视表是数据科学中一种方便的工具。任何开始数据科学之旅的人都应该熟悉它们。让我们快速地看一下这个过程,在结束的时候,我们会消除对数据透视表的恐惧。

PART 02

什么是数据透视表?

数据透视表是一种对数据进行重新排列或“透视”以总结某些信息的技术。

例如,考虑一个产品销售数据集。其中一列可能是“年龄类别”,如年轻、中年和老年。如果你想要看到每个年龄类别的平均销售额,数据透视表将是一个很好的工具。它会给你一个新表格,显示每一列中每个类别的平均销售额。

让我们来看看一个真实的场景,在这个场景中,数据透视表非常有用。我们可以用它来分析数据,甚至得出一些结论。

为了说明这个工作流,让我们采取以下步骤。

  1. 提出一个问题或假设
  2. 找到数据
  3. 使用Pandas创建透视表
  4. 用条形图将我们的发现形象化
  5. 根据我们最初的问题或假设得出结论

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·

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python学会 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档