CodeGym /课程 /Python SELF ZH /构建直方图以可视化数据分布

构建直方图以可视化数据分布

Python SELF ZH
第 41 级 , 课程 3
可用

1. 构建直方图的基础知识

如果你曾经看过自助餐桌并试图决定哪种小吃最多,你已经对数据分布有了一点了解。在编程中,我们使用直方图来发现数据中可能不那么明显的模式。直方图帮助我们直观地分析数据是如何分布到特定类别或数值范围的。让我们开始吧!

什么是直方图?

直方图是一种图表,用于可视化数据如何分布在特定的区间或“箱子”(有时称为“篮子”或“桶”)中。例如,如果我们想知道学生在测试中获得一定分数的次数,直方图是最佳展示方式。

直方图的主要参数

直方图由柱状图(箱子)组成,每个柱状图显示了对应区间内的值的数量。直方图的主要参数有:

  • 箱子 (bins): 数据范围被分成的区间数量。
  • 颜色和边框 (coloredgecolor): 定义柱状图的外观。
  • 范围 (range): 设置要显示的最小值和最大值。
  • 密度 (density): 如果设置为 True,则直方图将归一化,使得柱状图的总面积等于1。

使用 hist() 函数构建直方图

Matplotlib 库中有一个很棒的 hist() 函数,可以简化直方图的创建。让我们看看一个简单的例子:

Python

import matplotlib.pyplot as plt
import numpy as np

# 创建数据集
data = np.random.normal(0, 1, 1000)

# 创建直方图
plt.hist(data, bins=30, alpha=0.7, color='blue')
plt.title('数据分布直方图')
plt.xlabel('数值')
plt.ylabel('频率')
plt.show()

在这里,我们使用 np.random.normal() 生成了一个数据集,该函数创建正态分布。我们将数据分为30个箱子,并通过 alpha 参数设置柱状图的透明度以获得更好的可视化效果。

2. 调整箱子和图表样式

确定箱子的数量和大小

箱子的数量和大小会显著影响直方图的解释。过大的箱子可能会掩盖重要的细节,而过小的箱子可能会使直方图杂乱无章并难以理解。

实践案例:

Python

# 调整箱子的数量和大小
plt.hist(data, bins=10, color='green', edgecolor='black')
plt.title('具有10个箱子的直方图')
plt.xlabel('数值')
plt.ylabel('频率')
plt.show()

plt.hist(data, bins=50, color='red', edgecolor='black')
plt.title('具有50个箱子的直方图')
plt.xlabel('数值')
plt.ylabel('频率')
plt.show()

看看使用10个和50个箱子时直方图的变化。看出区别了吗?这就是箱子大小的重要性!

调整直方图参数的实际示例

直方图不仅可以调整箱子的数量,还可以调整颜色、透明度甚至柱状图的样式。以下是一些示例:

Python

# 其他参数设置
plt.hist(data, bins=30, density=True, color='purple', edgecolor='white', linestyle='dashed')
plt.title('带有改进样式的密度直方图')
plt.xlabel('数值')
plt.ylabel('密度')
plt.grid(True)
plt.show()

在此示例中,我们添加了参数 density=True,它将直方图归一化,使图形下的面积等于1。当你想要分析概率分布的密度时,这会特别有用。

3. 使用直方图的示例

直方图在许多领域都得到了广泛应用——从财务数据分析到物理实验。让我们看看如何在实际数据集上使用直方图。

构建基于实际数据集的直方图

假设我们有一个数据集,代表一年中每天的平均温度。我们想要分析温度在特定范围内的频率。

Python

# 温度数据集(简化示例)
temperatures = [15, 16, 15, 14, 19, 22, 24, 25, 17, 18, 15, 16, 23, 24, 21, 19, 18, 20, 22, 25, 26, 27]

# 构建直方图
plt.hist(temperatures, bins=5, color='navy', edgecolor='black')
plt.title('温度分布直方图')
plt.xlabel('温度 (°C)')
plt.ylabel('频率')
plt.show()

在此示例中,我们使用了5个箱子来分析值的分布。直方图显示大多数温度集中在15到20°C的范围内。

在一张直方图中对比多个分布

有时需要对比多个数据集的分布。在 Matplotlib 中,可以使用 alpha 参数(透明度)叠加多个直方图。

示例 3: 对比分布

Python

import matplotlib.pyplot as plt

# 数据生成
data1 = [5, 10, 10, 15, 15, 20, 25, 30, 30, 35, 40]
data2 = [5, 7, 9, 10, 11, 13, 15, 17, 19, 20, 25]

# 构建重叠直方图
plt.hist(data1, bins=5, color="blue", alpha=0.5, label="数据集 1")
plt.hist(data2, bins=5, color="green", alpha=0.5, label="数据集 2")
plt.xlabel("值")
plt.ylabel("频率")
plt.title("两个分布的对比")
plt.legend()
plt.show()

在此示例中,我们为每个直方图设置了参数 alpha=0.5,使柱状图半透明,从而可以直观地比较分布的交集。

使用直方图的实用技巧

  • 选择最佳箱子数量: 根据数据量和特性选择箱子数量。过少或过多的箱子可能会扭曲分布。
  • 对比分布: 使用透明度 (alpha) 叠加多个直方图来对比分布。
  • 添加网格: 网格可以帮助更好地解释数据。可以使用 plt.grid(True) 添加网格。
  • 参数 density: 使用 density=True 将数据以概率密度的形式显示,这在对比分布时尤其有用。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION