数据可视化专题——Seaborn简介

时间:2022-10-12 11:17:02

Seaborn 是一个用 Python 制作统计图形的库。 它建立在 matplotlib 之上,并与 pandas 数据结构紧密集成。Seaborn 可帮助您探索和理解您的数据。 它的绘图功能对包含整个数据集的数据框和数组进行操作,并在内部执行必要的语义映射和统计聚合以生成信息图。 其面向数据集的声明式 API 让您可以专注于绘图的不同元素的含义,而不是关注如何绘制它们的细节。请看以下示例:

# Import seaborn
import seaborn as sns

# Apply the default theme
sns.set_theme()

# Load an example dataset
tips = sns.load_dataset("tips")

# Create a visualization
sns.relplot(
data=tips,
x="total_bill", y="tip", col="time",
hue="smoker", style="smoker", size="size",
)

数据可视化专题——Seaborn简介

下面我们逐句解释:

# Import seaborn
import seaborn as sns

      seaborn是本例中需要导入的库,为了方便将其缩写为sns。在后台,seaborn使用matplotlib来绘图。需要在绘图结束之后调用matplotlib.pyplot.show()来显示图片。

# Apply the default theme
sns.set_theme()

      这使用了 matplotlib rcParam 系统,并且会影响所有 matplotlib 绘图的外观,即使您不使用 seaborn 制作它们。 除了默认主题之外,还有其他几个选项,您可以独立控制绘图的样式和缩放比例,以便在演示上下文之间快速转换您的工作(例如,制作一个在演讲期间投影时具有可读字体的图形版本 )。 如果你喜欢 matplotlib 默认值或喜欢不同的主题,你可以跳过这一步,仍然使用 seaborn 绘图功能。

# Load an example dataset
tips = sns.load_dataset("tips")

      文档中的大多数代码将使用 load_dataset() 函数来快速访问示例数据集。 这些数据集没有什么特别之处:它们只是 pandas 数据帧,我们可以使用 pandas.read_csv() 加载它们或手动构建它们。 文档中的大多数示例都将使用 pandas 数据框指定数据,但 seaborn 对它接受的数据结构非常灵活。

# Create a visualization
sns.relplot(
data=tips,
x="total_bill", y="tip", col="time",
hue="smoker", style="smoker", size="size",
)

      该图使用对 seaborn 函数 relplot() 的一次调用显示了tips 数据集中五个变量之间的关系。 请注意我们如何仅提供变量的名称及其在图中的角色。 与直接使用 matplotlib 不同,没有必要根据颜色值或标记代码指定绘图元素的属性。 在幕后,seaborn 处理了从数据框中的值到 matplotlib 理解的参数的转换。 这种声明性方法让您可以专注于您想要回答的问题,而不是关注如何控制 matplotlib 的细节。

1 用于统计图形的高级 API

      没有通用的最佳数据可视化方法。 不同的问题最好用不同的情节来回答。 Seaborn 通过使用一致的面向数据集的 API 可以轻松地在不同的视觉表示之间切换。函数 relplot() 之所以这样命名,是因为它旨在可视化许多不同的统计关系。 虽然散点图通常很有效,但一个变量代表时间度量的关系最好用一条线表示。 relplot() 函数有一个方便的 kind 参数,可让您轻松切换到此替代表示:

dots = sns.load_dataset("dots")
sns.relplot(
data=dots, kind="line",
x="time", y="firing_rate", col="align",
hue="choice", size="coherence", style="choice",
facet_kws=dict(sharex=False),
)

数据可视化专题——Seaborn简介

      请注意散点图和折线图中如何使用大小和样式参数,但它们对两种可视化的影响不同:更改散点图中的标记区域和符号与线宽和折线图中的虚线。 我们不需要记住这些细节,让我们专注于情节的整体结构和我们希望它传达的信息。

2 统计估计

      通常,我们对作为其他变量函数的一个变量的平均值感兴趣。 许多 seaborn 函数将自动执行回答这些问题所必需的统计估计:

fmri = sns.load_dataset("fmri")
sns.relplot(
data=fmri, kind="line",
x="timepoint", y="signal", col="region",
hue="event", style="event",
)

数据可视化专题——Seaborn简介

      当估计统计值时,seaborn 将使用自举来计算置信区间并绘制表示估计不确定性的误差线。seaborn 中的统计估计超出了描述性统计。 例如,可以通过使用 lmplot() 包含线性回归模型(及其不确定性)来增强散点图:

sns.lmplot(data=tips, x="total_bill", y="tip", col="time", hue="smoker")

数据可视化专题——Seaborn简介

3 分布表示

      统计分析需要有关数据集中变量分布的知识。 seaborn 函数 displot() 支持多种可视化分布的方法。 其中包括直方图等经典技术和核密度估计等计算密集型方法:

sns.displot(data=tips, x="total_bill", col="time", kde=True)

数据可视化专题——Seaborn简介

      Seaborn 还尝试推广功能强大但不太熟悉的技术,例如计算和绘制数据的经验累积分布函数:

sns.displot(data=tips, kind="ecdf", x="total_bill", col="time", hue="smoker", rug=True)

数据可视化专题——Seaborn简介

4 分类数据图

      seaborn 中的几种特殊绘图类型面向可视化分类数据。 它们可以通过 catplot() 访问。 这些图提供了不同级别的粒度。 在最好的水平上,您可能希望通过绘制一个“群”图来查看每个观察结果:一个散点图,它调整了点在分类轴上的位置,使它们不重叠:

sns.catplot(data=tips, kind="swarm", x="day", y="total_bill", hue="smoker")

数据可视化专题——Seaborn简介

      或者,您可以使用核密度估计来表示从中采样点的基础分布:

sns.catplot(data=tips, kind="violin", x="day", y="total_bill", hue="smoker", split=True)

数据可视化专题——Seaborn简介

      或者您可以仅显示每个嵌套类别中的平均值及其置信区间:

sns.catplot(data=tips, kind="bar", x="day", y="total_bill", hue="smoker")

数据可视化专题——Seaborn简介

5 复杂数据集的多元视图

      有些seaborn函数可以将多个图组合在一起,以便快速展现数据集的摘要信息。其中之一就是jointplot(),它关注单一关系,能够绘制了两个变量之间的联合分布以及每个变量的边际分布:

penguins = sns.load_dataset("penguins")
sns.jointplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", hue="species")

数据可视化专题——Seaborn简介

另外,还有函数pairplot(),能够展现更开阔的视角。它能够展示所有两两组合的变量间的联合分布以及边际分布,如下所示:

sns.pairplot(data=penguins, hue=“species")

数据可视化专题——Seaborn简介

6 与 matplotlib 的关系

      Seaborn 与 matplotlib 的集成允许您在 matplotlib 支持的许多环境中使用它,包括笔记本中的探索性分析、GUI 应用程序中的实时交互以及多种光栅和矢量格式的存档输出。

      虽然你可以只使用 seaborn 函数来提高工作效率,但完全自定义你的图形需要一些 matplotlib 的概念和 API 知识。 对于 seaborn 的新用户来说,学习曲线的一个方面是知道什么时候需要下拉到 matplotlib 层才能实现特定的定制。 另一方面,来自 matplotlib 的用户会发现他们的大部分知识转移。

      Matplotlib 拥有全面而强大的 API; 几乎可以根据自己的喜好更改图形的任何属性。 seaborn 的高级界面和 matplotlib 的深度可定制性相结合,将允许您快速浏览数据并创建可定制为出版质量最终产品的图形。