查看原文
其他

用数据透视表剖析泰坦尼克号乘客数据

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:孙晓玲

文字编辑:钱梦璇

技术总编:张   邯

导读

数据透视表(Pivot Table)是一种交互式的表,可以根据表中的排布进行如求和与计数等计算。之所以称为数据透视表,是因为其可以动态地改变版面布置,以便按照不同方式分析数据,每一次改变版面布置时,数据透视表会立即按照新的布置重新计算数据。作为强大的数据分析库,Pandas的pivot_table函数便可实现数据透视表的功能。


正文

本文将借助具体案例详细介绍pivot_table的用法,本文选用的数据为泰坦尼克号乘客信息数据,这个数据可以直接从seaborn库的示例数据中获取,获取命令如下:

import seaborn as snstitanic = sns.load_dataset('titanic')

首先我们看一下数据概貌。

import numpy as npimport pandas as pdtitanic.head()

这其中,有很多我们感兴趣的变量,存活率(“survived”)与性别(“sex”)年龄(“age”)和所在仓的等级(“pclass”或“class”)之间有何关系?首先,我们对数据进行简单的描述性统计获取数据概貌。

titanic.describe()

从数据输出结果可知,一共统计了891名乘客信息。其中,有177名乘客的年龄信息有缺失值,无缺失的乘客的平均年龄约为30岁;一等舱乘客数量不足25%,三等舱乘客数量超过50%。

现在,我们希望得到不同性别不同等级舱位的数据透视表。index为行分组键,设置用于分组的列名并作为结果DataFrame的行索引,这里我们设置为“sex”和“class”。columns与之对应设置列分组键。

pd.pivot_table(titanic,index=['sex','class'])

由于没有设置values数,默认输出结果为各列的均值,可以用aggfunc参数对其进行设置。例如,我们想要得到不同性别不同等级舱位的存活率及存活人数,可以这样进行设置。
pd.pivot_table(titanic,index=['sex','class'],values='survived',aggfunc=[np.mean,np.sum],margins=True)

与料想的结果大致相符,高等舱位的存活率更高,而且女性的存活率高于男性的存活率,因为优先保护妇女。从存活人数来看,虽然一等舱人数不到总人数的25%,但存活人数却占总存活人数的40%(136/342);虽然三等舱男性的存活人数为47,大于一二等舱男性存活人数,但存活率仍是低于一二等舱,因为三等舱人数基数大,占总人数的50%以上,这也证实了绝对数优势具有迷惑性的统计数据常态。

为了数据分析的方便,这里我们将年龄进行分段处理,分为(0-18],(18-65], (65-80]三段,为显示方便我们标记为“Q1、Q2、Q3”。分性别输出不同舱位在不同年龄段的船票数的均值、存活人数和存活率,参数fill_value=0设置缺失值为0。

titanic['agecut'] = pd.cut(titanic["age"],[0,18,65,80],labels=['Q1','Q2','Q3']) # 对年龄数据列进行分段,便于观看table=pd.pivot_table(titanic,index=['sex','class'],columns=['agecut'],aggfunc ={'survived':[sum,'mean'] ,'fare':'mean'},fill_value=0,dropna=True)table

输出的结果反应,船票价格的均值随着年龄段的增大而减少,女性和男性二三舱位Q3年龄段数据为缺失值,这个年龄段的存活人数也为0。从存活角度看,Q1年龄段存活率普遍较高,优先保护幼子,阶级差距显著,三舱位的Q1年龄段存活率比一二舱位低很多,三舱位的男性未成年人存活率仅达21%。

数据透视表的灵活性与可选择性为数据分析提供了有力的帮助,快来一起探索其中的精华吧~







对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

读入文本文档,intext来帮忙

matchit——解锁文本相似度的钥匙

基于广义线性模型的机器学习算法——线性回归
听说你会魔法?
dummieslab——从分类变量到虚拟变量的“一步之遥”
线上Python课程都面向哪些方向?
子类与父类
用requests库爬取淘宝数据
WordStat—Stata的文本分析小助手
数据筛选理还乱,datacheck能诊断

如何用简单的手法绘制出不一样的海外疫情趋势图

matplotlib绘制数学函数
gen的再进化
Stata版大家来找茬—cfout就够了
另辟蹊径js逆向爬取百度翻译
可迭代对象、迭代器、生成器傻傻分不清楚
Ftools命令组之fegen命令介绍

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存