用数据透视表剖析泰坦尼克号乘客数据
本文作者:孙晓玲
文字编辑:钱梦璇
导读
数据透视表(Pivot Table)是一种交互式的表,可以根据表中的排布进行如求和与计数等计算。之所以称为数据透视表,是因为其可以动态地改变版面布置,以便按照不同方式分析数据,每一次改变版面布置时,数据透视表会立即按照新的布置重新计算数据。作为强大的数据分析库,Pandas的pivot_table函数便可实现数据透视表的功能。
正文
本文将借助具体案例详细介绍pivot_table的用法,本文选用的数据为泰坦尼克号乘客信息数据,这个数据可以直接从seaborn库的示例数据中获取,获取命令如下:
import seaborn as sns
titanic = sns.load_dataset('titanic')
首先我们看一下数据概貌。
import numpy as np
import pandas as pd
titanic.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'])
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%。
数据透视表的灵活性与可选择性为数据分析提供了有力的帮助,快来一起探索其中的精华吧~
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。