首先导入 Numpy 库、 Pandas 库、 Seanborn 库,以及本节的示例数据——一份泰坦尼克号乘客数据:
- import numpy as np
- import pandas as pd
- import seaborn as sns
- titanic = sns.load_dataset('titanic')
- titanic.head()
可以看到,我们的示例数据中包含了泰坦尼克号上每一个乘客的相关信息,包括是否生还、是否在世等等。
运用 Pandas 的 groupby 函数,我们可以用分组的思维构建一个数据透视表,例如查看不同性别的生还者占比:
- titanic.groupby('sex')[['survived']].mean()
通过在 groupby 函数中传入指定的列名序列,我们就可以进行多维度下的数据透视,例如查看在不同舱位等级中男女的生还者占比(可以理解为生还的概率):
- titanic.groupby(['sex', 'class'])['survived'].aggregate('mean').unstack()
Pandas 中的另一个函数 pivot_table 同样也能够帮助我们构建数据透视表,相比于 groupby 函数, pivot_table 在构建数据表格时更为直接,我们只需要指定表格的行列与元素的含义,便能够默认地得到对应的结果:
- titanic.pivot_table('survived', index='sex', columns='class')
通过 cut 函数,我们将数据集 age 列中的元素归纳入不同的分组,由此构建新的序列 age,这个序列中的元素代表了对应乘客样本所属的年龄段。我们由此构建数据透视表,查看不同仓位等级下不同年龄段的男性与女性中的生还者占比:
- age = pd.cut(titanic['age'], [0, 18, 80])
- titanic.pivot_table('survived', ['sex', age], 'class')
当然,我们还可以在列上为数据透视表增加维度,只要将 pivot_table 函数的第三个输入也改为指定的列表即可,例如我们可以同时查看一下票价高低对于生还概率的影响:
- fare = pd.qcut(titanic['fare'], 2)
- titanic.pivot_table('survived', ['sex', age], [fare, 'class'])
以上转自 数析学院,原文内容较多,有需要的同学可以直接查看原文