海运 |分类图
绘图基本上用于可视化变量之间的关系。这些变量可以是完全数字的,也可以是像组、类或部门这样的类别。本文处理分类变量以及如何使用Python提供的Seaborn 库将它们可视化。
Seaborn除了是一个统计绘图库外,还提供了一些默认数据集。我们将使用一个名为“tips”的默认数据集。 “小费”数据集包含有关可能在餐厅用餐的人的信息,以及他们是否给服务员留下小费、他们的性别、是否吸烟等信息。
让我们看一下tips数据集。
代码
Python3
# import the seaborn library
import seaborn as sns
# import done to avoid warnings
from warnings import filterwarnings
# reading the dataset
df = sns.load_dataset('tips')
# first five entries if the dataset
df.head()
Python3
# set the background style of the plot
sns.set_style('darkgrid')
# plot the graph using the default estimator mean
sns.barplot(x ='sex', y ='total_bill', data = df, palette ='plasma')
# or
import numpy as np
# change the estimator from mean to standard deviation
sns.barplot(x ='sex', y ='total_bill', data = df,
palette ='plasma', estimator = np.std)
Python3
sns.countplot(x ='sex', data = df)
Python3
sns.boxplot(x ='day', y ='total_bill', data = df, hue ='smoker')
Python3
sns.violinplot(x ='day', y ='total_bill', data = df, hue ='sex', split = True)
Python3
sns.stripplot(x ='day', y ='total_bill', data = df,
jitter = True, hue ='smoker', dodge = True)
Python3
sns.swarmplot(x ='day', y ='total_bill', data = df)
Python3
sns.violinplot(x ='day', y ='total_bill', data = df)
sns.swarmplot(x ='day', y ='total_bill', data = df, color ='black')
Python3
sns.factorplot(x ='day', y ='total_bill', data = df, kind ='bar')
现在让我们继续进行绘图,以便我们可以如何可视化这些分类变量。
条形图
条形图基本上用于根据某些方法聚合分类数据,默认情况下是平均值。也可以理解为按动作分组的可视化。为了使用这个图,我们为 x 轴选择一个分类列,为 y 轴选择一个数值列,我们看到它创建了一个图,每个分类列都取平均值。
句法:
barplot([x, y, hue, data, order, hue_order, …])
例子:
Python3
# set the background style of the plot
sns.set_style('darkgrid')
# plot the graph using the default estimator mean
sns.barplot(x ='sex', y ='total_bill', data = df, palette ='plasma')
# or
import numpy as np
# change the estimator from mean to standard deviation
sns.barplot(x ='sex', y ='total_bill', data = df,
palette ='plasma', estimator = np.std)
输出:
解释/分析
从情节来看,我们可以说男性的平均总账单比女性多。
- 调色板用于设置绘图的颜色
- 估计器用作每个分类箱内估计的统计函数。
计数图
计数图基本上计算类别并返回它们出现的计数。它是 seaborn 库提供的最简单的绘图之一。
句法:
countplot([x, y, hue, data, order, …])
例子:
Python3
sns.countplot(x ='sex', data = df)
输出:
解释/分析
查看该图,我们可以说数据集中男性的数量多于女性的数量。由于它只返回基于分类列的计数,我们只需要指定 x 参数。
箱形图
箱线图有时被称为箱线图。它显示了代表变量之间比较的定量数据的分布。箱线图显示数据集的四分位数,而胡须延伸以显示分布的其余部分,即表示异常值存在的点。
句法:
boxplot([x, y, hue, data, order, hue_order, …])
例子:
Python3
sns.boxplot(x ='day', y ='total_bill', data = df, hue ='smoker')
输出:
解释/分析——
x 取分类列,y 是数值列。因此我们可以看到每天花费的总账单。“hue”参数用于进一步添加分类分隔。通过查看情节,我们可以说不吸烟的人周五的账单比吸烟的人高。
小提琴情节
它类似于箱线图,只是它提供了更高、更高级的可视化,并使用核密度估计来更好地描述数据分布。
句法:
violinplot([x, y, hue, data, order, …])
例子:
Python3
sns.violinplot(x ='day', y ='total_bill', data = df, hue ='sex', split = True)
输出:
解释/分析——
- 色调用于使用性别类别进一步分离数据
- 设置 split=True 将为每个级别绘制一半的小提琴。这可以更容易直接比较分布。
条形图
它基本上根据类别创建散点图。
句法:
stripplot([x, y, hue, data, order, …])
例子:
Python3
sns.stripplot(x ='day', y ='total_bill', data = df,
jitter = True, hue ='smoker', dodge = True)
输出:
解释/分析——
- 带状图的一个问题是,您无法真正分辨出哪些点堆叠在一起,因此我们使用 jitter 参数来添加一些随机噪声。
- jitter 参数用于添加一定量的抖动(仅沿分类轴),当您有许多点并且它们重叠时,这可能很有用,以便更容易查看分布。
- 色调用于提供额外的分类分离
- 设置 split=True 用于根据 hue 参数指定的类别绘制单独的条形图。
群图
它与带状图非常相似,只是点被调整为不重叠。有些人还喜欢将小提琴图和带状图的想法结合起来形成这个图。使用 swarmplot 的一个缺点是有时它们不能很好地扩展到非常大的数字,并且需要大量计算来排列它们。因此,如果我们想正确地可视化一个 swarmplot,我们可以将它绘制在小提琴图之上。
句法:
swarmplot([x, y, hue, data, order, …])
例子:
Python3
sns.swarmplot(x ='day', y ='total_bill', data = df)
输出:
例子:
Python3
sns.violinplot(x ='day', y ='total_bill', data = df)
sns.swarmplot(x ='day', y ='total_bill', data = df, color ='black')
输出:
因子图
它是所有这些绘图中最通用的,并提供了一个名为 kind 的参数来选择我们想要的绘图类型,从而使我们免于单独编写这些绘图的麻烦。 kind 参数可以是 bar、violin、swarm 等。
句法:
sns.factorplot([x, y, hue, data, row, col, …])
例子:
Python3
sns.factorplot(x ='day', y ='total_bill', data = df, kind ='bar')
输出: