Pandas 和Seaborn中的多个箱线图绘制
在本文中,我们将介绍如何使用Pandas和Seaborn在数据集中绘制多个箱线图。箱线图是一个常用的可视化工具,用于表示数据的分布情况和离群值情况。
阅读更多:Pandas 教程
准备数据
首先,我们需要导入所需的库和数据。本文中使用的是Seaborn中的内置数据集:tips
。
import seaborn as sns
import pandas as pd
tips = sns.load_dataset('tips')
我们可以通过调用数据集的head()
方法来查看数据集的前几行。
tips.head()
输出:
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
接下来,我们需要将数据按照不同的分组方式进行分组,并计算出每个组的统计数据。本文中,我们将使用餐厅顾客总账单金额(total_bill
)和顾客人数(size
)进行分组。
grouped = tips.groupby(['total_bill', 'size'])['tip'].median().reset_index()
grouped.head()
输出:
total_bill size tip
0 3.07 1 1.00
1 5.75 2 1.00
2 7.25 1 1.00
3 7.51 2 2.00
4 7.56 2 1.44
单个箱线图
在进行多个箱线图绘制之前,我们先来了解如何绘制单个箱线图。我们可以使用Seaborn中的boxplot()
函数来绘制箱线图。
sns.boxplot(x = "size", y = "tip", data = grouped)
可以看出,顾客人数(size
)对给出小费(tip
)的中位数有一定影响,人数越多,中位数也越高。
多个箱线图
接下来,我们将介绍如何在同一图中绘制多个箱线图,在这里,我们选择将绘制不同人数下给出小费数额(tip
)的箱线图。
我们可以使用Pandas中的pivot()
方法将数据转换为正确的格式。具体而言,我们将使用total_bill
和size
作为行和列索引,tip
作为值。
pivoted = grouped.pivot(index='total_bill', columns='size', values='tip')
pivoted.head()
输出:
size 1 2 3 4
total_bill
3.07 1.0 NaN NaN NaN
5.75 NaN 1.00 NaN NaN
7.25 1.0 NaN NaN NaN
7.51 NaN 2.00 NaN NaN
7.56 NaN 1.44 NaN 1.51
接下来,我们可以使用Seaborn中的heatmap()
函数来绘制热力图。
sns.heatmap(pivoted, cmap='coolwarm', annot=True, fmt='.2f')
可以看出,给出小费的中位数在不同的人数下有很大的差异,例如两个人用餐时中位数明显低于四人和六人用餐时。
接下来,我们使用Seaborn中的boxplot()
函数来绘制多个箱线图。
sns.boxplot(data=grouped, x="size", y="tip", hue="total_bill")
可以看出,不同账单金额(total_bill
)下给出小费的中位数也有很大的差异,可以看作是另一维度的分组。
总结
本文介绍了如何使用Pandas和Seaborn在数据集中绘制多个箱线图。通过观察和比较不同分组下的中位数,我们可以更好地理解数据分布情况和离群值情况。同时,我们还演示了如何在同一图中绘制多个箱线图,以探索另一维度上的分组关系。