NumPy 如何用 Seaborn 可视化数据分布?

文章导读
Previous Quiz Next 使用 Seaborn 可视化分布 在处理数据时,可视化分布是理解数据特征的重要步骤。
📋 目录
  1. 使用 Seaborn 可视化分布
  2. Seaborn 是什么?
  3. 设置 Seaborn
  4. 可视化正态分布
  5. 可视化均匀分布
  6. 可视化指数分布
  7. 可视化 Pareto 分布
  8. 自定义 Seaborn 图表
A A

NumPy - 使用 Seaborn 可视化分布



Previous
Quiz
Next

使用 Seaborn 可视化分布

在处理数据时,可视化分布是理解数据特征的重要步骤。

Seaborn 基于 Matplotlib 构建,是 Python 中一个强大的可视化库,它简化了创建信息丰富且美观的统计图表的流程。

在本教程中,我们将探索如何使用 Seaborn 可视化不同类型的分布,包括正态分布、均匀分布和其他概率分布。我们还将演示如何通过自定义选项和样式增强可视化效果。

Seaborn 是什么?

Seaborn 是一个 Python 可视化库,它提供了高级接口来创建美观且信息丰富的统计图形。它与 Pandas 数据结构集成良好,并提供了多个函数来可视化数据中的分布、关系和趋势。

它的一个关键优势是使用最少的代码即可轻松可视化分布、相关性和数据关系。

Seaborn 基于 Matplotlib,并提供了更简洁的函数来创建复杂图表。它还自动处理美学元素,如配色方案和标签,使您的可视化更加美观且易于解释。

设置 Seaborn

在开始使用 Seaborn 可视化分布之前,我们需要安装必要的库并设置环境。如果尚未安装,可以使用 pip 安装 Seaborn,如以下所示 −

# 使用 pip 安装 Seaborn
!pip install seaborn

除了 Seaborn 外,我们还将使用 NumPy 生成分布数据。以下是导入两个库的典型设置 −

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

库导入后,我们就可以开始生成并可视化不同类型的分布了。

可视化正态分布

统计学中最常用的分布之一是正态分布,也称为高斯分布。它是对称的钟形曲线,常用于模拟测试分数、身高和测量误差等。

我们可以使用 NumPy 的 numpy.random.normal() 函数生成正态分布的随机数据,然后使用 Seaborn 的 seaborn.histplot() 函数来可视化分布。

示例

在以下示例中,sns.histplot() 函数会自动为数据创建直方图,通过将 kde 参数设置为 True,它会在直方图上添加平滑的核密度估计 (KDE) 曲线,以可视化概率密度函数 (PDF) −

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 从正态分布生成随机数据
data = np.random.normal(loc=0, scale=1, size=1000)

# 使用 Seaborn 可视化分布
# kde=True 添加核密度估计曲线
sns.histplot(data, kde=True)  
plt.title('Normal Distribution')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()

生成的图表将显示钟形曲线,这是正态分布的典型特征 −

Numpy Distribution with Seaborn

可视化均匀分布

均匀分布是一种所有结果等概率发生的分布类型。在连续均匀分布中,数据点在给定范围内均匀分布。

我们可以使用 NumPy 的 numpy.random.uniform() 函数生成均匀分布的数据,并使用 Seaborn 进行可视化。

示例

在这里,numpy.random.uniform() 函数生成指定低值和高值(本例中为 0 和 10)之间的随机数。直方图显示了一个平坦的分布,表明在指定范围内所有值等概率发生 −

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 从均匀分布生成随机数据
data_uniform = np.random.uniform(low=0, high=10, size=1000)

# 使用 Seaborn 可视化分布
sns.histplot(data_uniform, kde=True)
plt.title('Uniform Distribution')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()

输出的结果将显示一个均匀分布,其中每个值的频率在范围内大致相同 −

Uniform Numpy Seaborn Distribution

可视化指数分布

指数分布常用于建模 Poisson 过程中事件之间的时间间隔。它具有小值高频且大值长尾的偏态特征。

NumPy 提供了 numpy.random.exponential() 函数来生成指数分布的随机数据。

示例

在以下示例中,我们创建了一个图表,显示了近零处有峰值且向右延伸长尾的分布。这是指数分布的典型特征,即随着值增大,发生概率呈指数衰减 −

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 从指数分布生成随机数据
data_exponential = np.random.exponential(scale=1, size=1000)

# 使用 Seaborn 可视化分布
sns.histplot(data_exponential, kde=True)
plt.title('Exponential Distribution')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()

输出结果如下所示 −

NumPy Seaborn Exponential Distribution

可视化 Pareto 分布

正如我们之前讨论的,Pareto 分布遵循幂律,在经济学中常用于建模财富分布。您可以使用 NumPy 的 numpy.random.pareto() 函数生成 Pareto 分布的数据。

示例

让我们使用 Seaborn 可视化 Pareto 分布 −

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 从 Pareto 分布生成随机数据
# 添加 1 以平移最小值
data_pareto = np.random.pareto(a=2, size=1000) + 1  

# 使用 Seaborn 可视化分布
sns.histplot(data_pareto, kde=True)
plt.title('Pareto Distribution')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()

Pareto 分布将显示一个高度偏斜的直方图,右边延伸长尾,反映出少数大值主导了数据集 −

NumPy Seaborn Pareto Distribution

自定义 Seaborn 图表

Seaborn 允许您轻松自定义图表的外观。例如,您可以调整直方图中的 bin 数量、更改图表的颜色,甚至修改图表的样式。以下是几种自定义外观的方法 −

  • 更改 bin 数量: 您可以通过指定 bins 参数来控制直方图中的 bin 数量。
  • 更改颜色: 使用 color 参数为图表设置自定义颜色。
  • 修改样式: Seaborn 提供了几种内置样式(如 'darkgrid''whitegrid' 等),可以使用 sns.set_style() 应用于图表。

示例

在以下示例中,我们创建了一个具有 30 个 bin、蓝色和白色网格背景的图表 −

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 从正态分布生成随机数据
data = np.random.normal(loc=0, scale=1, size=1000)

# 自定义图表样式
sns.set_style('whitegrid')

# 使用更多 bin 和自定义颜色绘制图表
sns.histplot(data, bins=30, color='blue', kde=True)
plt.title('自定义正态分布')
plt.xlabel('值')
plt.ylabel('频率')
plt.show()

生成的结果如下 −

NumPy Seaborn Customized Normal Distribution