3.3 高级统计图形


文档摘要

3.3 高级统计图形 第三章:Matplotlib 与数据分析领域 - 3.3 高级统计图形详解 3.3.1 直方图 (Histogram) 直方图是最基础但极其重要的统计图形之一,它通过将数据分bins(箱子),并统计每个bin内数据点的数量(或频率),来展示数据分布的形状。直方图可以帮助我们快速了解数据的中心趋势、离散程度以及是否存在偏态和峰值。 代码实践 内容详解 : 这是创建直方图的核心函数。 : 输入的数据,通常是一维数组或列表。 : 指定直方图的箱子数量。可以是一个整数(如上面的30),也可以是一个箱子边界的序列。 的选择会显著影响直方图的形状,需要根据数据特点进行调整。 , : 设置柱子的颜色和边框颜色,增强可视化效果。 , , : 添加图表标题和轴标签,使图形更易于理解。

3.3 高级统计图形

第三章:Matplotlib 与数据分析领域 - 3.3 高级统计图形详解

3.3.1 直方图 (Histogram)

直方图是最基础但极其重要的统计图形之一,它通过将数据分bins(箱子),并统计每个bin内数据点的数量(或频率),来展示数据分布的形状。直方图可以帮助我们快速了解数据的中心趋势、离散程度以及是否存在偏态和峰值。

代码实践

import matplotlib.pyplot as plt import numpy as np # 生成示例数据:1000个服从正态分布的随机数 data = np.random.randn(1000) # 创建直方图 plt.hist(data, bins=30, color='skyblue', edgecolor='black') # bins参数控制柱子数量,edgecolor添加边框 # 添加标题和轴标签 plt.title('Histogram of Random Data') plt.xlabel('Value') plt.ylabel('Frequency') # 添加网格线 plt.grid(axis='y', linestyle='--', alpha=0.7) # 显示图形 plt.show()

内容详解

  • plt.hist(data, bins=30, ...): 这是创建直方图的核心函数。

    • data: 输入的数据,通常是一维数组或列表。

    • bins: 指定直方图的箱子数量。可以是一个整数(如上面的30),也可以是一个箱子边界的序列。bins 的选择会显著影响直方图的形状,需要根据数据特点进行调整。

    • color, edgecolor: 设置柱子的颜色和边框颜色,增强可视化效果。

  • plt.title(), plt.xlabel(), plt.ylabel(): 添加图表标题和轴标签,使图形更易于理解。

  • plt.grid(axis='y', linestyle='--', alpha=0.7): 添加水平网格线,辅助观察柱子的高度,axis='y' 表示只添加y轴网格线,linestylealpha 控制网格线的样式和透明度。

直方图的应用场景:

  • 了解数据分布: 快速判断数据是否服从正态分布、均匀分布、指数分布等。

  • 检测异常值: 观察直方图的尾部,可能存在远离主体分布的异常值。

  • 比较不同数据集: 可以通过绘制多个直方图在同一坐标系下,比较不同数据集的分布差异。

  • 数据预处理: 直方图可以帮助我们判断数据是否需要进行标准化、归一化或对数转换等预处理操作。

3.3.2 箱线图 (Box Plot)

箱线图(也称为盒须图)是一种用于显示数据分布的五数概括(最小值、下四分位数Q1、中位数、上四分位数Q3、最大值)和异常值的标准化图形。箱线图特别适合比较不同组数据之间的分布差异,并识别潜在的离群点。

代码实践

import matplotlib.pyplot as plt import numpy as np # 生成示例数据:三组不同分布的数据 data1 = np.random.normal(0, 1, 100) # 均值为0,标准差为1的正态分布 data2 = np.random.normal(2, 1.5, 100) # 均值为2,标准差为1.5的正态分布 data3 = np.random.uniform(-1, 3, 100) # -1到3之间的均匀分布 data = [data1, data2, data3] # 创建箱线图 plt.boxplot(data, labels=['Group 1', 'Group 2', 'Group 3'], patch_artist=True, boxprops=dict(facecolor='lightcoral', color='black'), whiskerprops=dict(color='black'), capprops=dict(color='black'), medianprops=dict(color='black')) # 添加标题和轴标签 plt.title('Box Plot of Multiple Groups') plt.ylabel('Value') # 显示图形 plt.show()

内容详解

  • plt.boxplot(data, labels=['Group 1', ...], ...): 创建箱线图的核心函数。

    • data: 输入的数据,可以是一个列表,其中每个元素代表一组数据。

    • labels: 为每组数据添加标签,方便识别。

    • patch_artist=True: 使箱体可以填充颜色。

    • boxprops, whiskerprops, capprops, medianprops: 分别设置箱体、须、帽和中位线的属性,例如颜色、线型等,可以自定义箱线图的样式。

箱线图的组成部分:

  • 箱体 (Box): 由下四分位数 (Q1) 和上四分位数 (Q3) 界定,箱体内部包含了50%的数据。

  • 中位数线 (Median Line): 箱体内部的横线,表示数据的中位数。

  • 须 (Whiskers): 从箱体两端延伸出的线条,通常延伸至距离箱体边缘1.5倍四分位距 (IQR = Q3 - Q1) 的位置,或者延伸至数据的最大值和最小值(如果它们在1.5倍IQR范围内)。

  • 帽 (Caps): 须的末端,表示须的范围。

  • 异常值 (Outliers): 超出须范围的数据点,通常用点或圈表示。

箱线图的应用场景:

  • 比较不同组数据: 直观比较不同组数据的中心位置、离散程度和分布形状。

  • 识别异常值: 快速发现数据中的异常值,用于数据清洗或异常检测。

  • 数据分布概括: 简洁地展示数据的五数概括,快速了解数据分布的主要特征。

  • 质量控制: 在质量控制领域,箱线图可以用于监控产品质量的稳定性,检测异常批次。

3.3.3 小提琴图 (Violin Plot)

小提琴图是箱线图的扩展,它结合了箱线图和核密度估计,不仅显示了数据的五数概括,还展示了数据的概率密度分布。小提琴图更详细地描绘了数据的分布形状,尤其是在数据分布呈现多峰或非对称时,小提琴图比箱线图更具信息量。

代码实践

import matplotlib.pyplot as plt import seaborn as sns import numpy as np # 生成示例数据:与箱线图相同的三组数据 data1 = np.random.normal(0, 1, 100) data2 = np.random.normal(2, 1.5, 100) data3 = np.random.uniform(-1, 3, 100) data = [data1, data2, data3] # 创建小提琴图 sns.violinplot(data=data, inner="quart", palette="muted") # inner参数控制小提琴内部的表示,palette设置颜色 # 设置x轴标签 plt.xticks(range(len(data)), ['Group 1', 'Group 2', 'Group 3']) # 添加标题和y轴标签 plt.title('Violin Plot of Multiple Groups') plt.ylabel('Value') # 显示图形 plt.show()

内容详解

  • sns.violinplot(data=data, inner="quart", palette="muted"): 使用Seaborn库创建小提琴图。Seaborn是基于Matplotlib的高级可视化库,提供了更简洁的API和更美观的默认样式。

    • data: 输入的数据,与plt.boxplot() 类似,可以是一个列表,其中每个元素代表一组数据。

    • inner="quart": 在小提琴内部显示四分位数和中位数。其他可选值包括 "box" (箱线图), "point" (点), "stick" (线条), None (无内部表示)。

    • palette="muted": 设置调色板,控制小提琴的颜色。

小提琴图的特点:

  • 形状对称: 小提琴图的主体形状是对称的,两侧对称地展示了数据的核密度估计。

  • 宽度变化: 小提琴图的宽度随概率密度变化,宽度越宽表示该值附近的数据越集中。

  • 内部表示: 通常在小提琴内部会叠加箱线图或四分位数信息,以便同时展示分布的概括统计量。

小提琴图的应用场景:

  • 详细比较分布: 相比箱线图,小提琴图能更细致地比较不同组数据的分布形状,尤其适用于展示非正态分布或多峰分布的数据。

  • 展示数据密度: 直观展示数据在不同值范围内的密度分布,帮助理解数据的集中程度。

  • 探索数据模式: 小提琴图可以帮助发现数据中潜在的模式,例如多峰分布可能暗示数据来自不同的子群体。

3.3.4 热图 (Heatmap)

热图是一种用颜色编码来表示矩阵数据的图形,颜色深浅通常代表数值的大小。热图广泛应用于相关性分析聚类分析基因表达数据可视化等领域,可以直观地展示矩阵数据的模式和结构。

代码实践

import matplotlib.pyplot as plt import seaborn as sns import numpy as np import pandas as pd # 生成示例数据:模拟一个相关性矩阵 np.random.seed(0) # 设置随机种子,保证结果可重复 data = np.random.rand(10, 10) corr_matrix = pd.DataFrame(data).corr() # 计算相关性矩阵 # 创建热图 sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f", linewidths=.5, linecolor='black') # annot=True显示数值,cmap设置颜色映射,fmt控制数值格式,linewidths和linecolor设置网格线 # 添加标题 plt.title('Correlation Heatmap') # 显示图形 plt.show()

内容详解

  • sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', ...): 使用Seaborn库创建热图。

    • corr_matrix: 输入的矩阵数据,通常是相关性矩阵、距离矩阵或数值矩阵。

    • annot=True: 在每个单元格中显示数值。

    • cmap='coolwarm': 设置颜色映射,'coolwarm' 是一种常用的双色调色板,蓝色代表负相关,红色代表正相关,白色代表接近零相关。其他常用的色板包括 'viridis', 'plasma', 'magma', 'Greens', 'Reds', 'Blues' 等。

    • fmt=".2f": 设置数值的显示格式,.2f 表示保留两位小数的浮点数。

    • linewidths=.5, linecolor='black': 设置单元格之间的网格线宽度和颜色。

热图的应用场景:

  • 相关性分析: 可视化变量之间的相关性矩阵,快速识别强相关和弱相关的变量对。

  • 聚类分析: 在聚类分析中,热图可以用于展示样本或特征之间的相似性或距离矩阵,辅助判断聚类效果。

  • 基因表达数据: 在生物信息学领域,热图常用于可视化基因表达数据,展示不同基因在不同样本中的表达水平。

  • 缺失值可视化: 通过将缺失值编码为特定颜色,热图可以用于可视化数据中的缺失值模式。

  • 时间序列数据: 可以将时间序列数据转换为矩阵形式,用热图展示数据随时间变化的模式。

3.3.5 散点矩阵图 (Pair Plot / Scatter Matrix)

散点矩阵图(也称为成对关系图)用于可视化多个变量之间两两组合的散点图。对于包含多个数值型变量的数据集,散点矩阵图可以帮助我们快速探索变量之间的相关关系分布情况。对角线上通常会绘制每个变量的直方图或核密度估计图,以展示单变量的分布。

代码实践

import matplotlib.pyplot as plt import seaborn as sns import pandas as pd # 生成示例数据:包含四个数值型变量的DataFrame np.random.seed(0) data = pd.DataFrame({ 'var1': np.random.randn(100), 'var2': np.random.randn(100) + 2, 'var3': np.random.rand(100) * 5, 'var4': np.random.uniform(-2, 2, 100) }) # 创建散点矩阵图 sns.pairplot(data) # 默认对角线是直方图 # 添加标题 plt.suptitle('Pair Plot of Multiple Variables', y=1.02) # suptitle用于添加整个图形的标题,y调整标题位置 # 显示图形 plt.show()

内容详解

  • sns.pairplot(data): 使用Seaborn库创建散点矩阵图。

    • data: 输入的DataFrame,包含要分析的数值型变量。

    • kind 参数可以设置为 'scatter' (散点图,默认), 'kde' (核密度估计图), 'hist' (直方图), 'reg' (带回归线的散点图) 等,用于控制非对角线图形的类型。

    • diag_kind 参数可以设置为 'hist' (直方图,默认), 'kde' (核密度估计图), None (无对角线图形) 等,用于控制对角线图形的类型。

散点矩阵图的结构:

  • 对角线: 展示每个变量自身的分布情况,通常是直方图或核密度估计图。

  • 非对角线: 展示变量两两之间的散点图,用于观察变量之间的关系。

散点矩阵图的应用场景:

  • 探索变量关系: 快速浏览多个变量之间的相关性,识别可能存在线性或非线性关系的变量对。

  • 发现数据模式: 观察散点图的形状,发现数据中潜在的聚类、趋势或异常值。

  • 特征选择: 在特征工程中,散点矩阵图可以帮助我们评估特征之间的相关性,辅助选择合适的特征子集。

  • 高维数据可视化: 虽然散点矩阵图难以展示高维数据的所有关系,但对于中等维度的数据集,它仍然是一种有效的探索性可视化工具。

3.3.6 等高线图 (Contour Plot)

等高线图用于在二维平面上表示三维数据。它通过绘制等值线(contour lines)来连接z值相等的点,类似于地图上的等高线表示地面的高度。等高线图可以用于可视化二维函数的曲面地理数据密度分布等。

代码实践

import matplotlib.pyplot as plt import numpy as np # 生成示例数据:二维高斯函数 delta = 0.025 x = np.arange(-3.0, 3.0, delta) y = np.arange(-2.0, 2.0, delta) X, Y = np.meshgrid(x, y) # 创建网格坐标 Z = np.exp(-(X**2 + Y**2) / 2) # 计算高斯函数值 # 创建等高线图 CS = plt.contour(X, Y, Z, 8, colors='black') # 绘制等高线,8表示等高线数量,colors设置颜色 plt.clabel(CS, inline=1, fontsize=10) # 添加等高线标签,inline=1表示标签在线条内部 # 填充等高线之间的区域 plt.contourf(X, Y, Z, 8, cmap=plt.cm.viridis) # contourf用于填充颜色,cmap设置颜色映射 plt.colorbar() # 添加颜色条 # 添加标题和轴标签 plt.title('Contour Plot of 2D Gaussian Function') plt.xlabel('x') plt.ylabel('y') # 显示图形 plt.show()

内容详解

  • plt.contour(X, Y, Z, 8, colors='black'): 绘制等高线。

    • X, Y: 二维网格的x和y坐标,通常使用 np.meshgrid() 生成。

    • Z: 与网格坐标对应的z值,即要绘制曲面的高度值。

    • 8: 等高线的数量,也可以是一个等高线值的序列。

    • colors='black': 设置等高线颜色。

  • plt.clabel(CS, inline=1, fontsize=10): 为等高线添加标签,显示z值。

    • CS: plt.contour() 返回的等高线对象。

    • inline=1: 标签显示在线条内部。

    • fontsize=10: 设置标签字体大小。

  • plt.contourf(X, Y, Z, 8, cmap=plt.cm.viridis): 填充等高线之间的区域,创建填充等高线图。

    • cmap=plt.cm.viridis: 设置填充颜色映射,plt.cm.viridis 是一种常用的连续色板。
  • plt.colorbar(): 添加颜色条,显示颜色与z值的对应关系。

等高线图的应用场景:

  • 可视化二维函数: 展示二维函数的曲面形状,例如数学函数、物理场的分布等。

  • 地理数据可视化: 绘制地形图、气象图等,表示地理高度、温度、气压等地理变量的分布。

  • 密度估计: 通过等高线图可视化二维数据的密度分布,例如散点图的密度轮廓线。

  • 图像处理: 在图像处理领域,等高线图可以用于边缘检测、图像分割等。

3.3.7 三维曲面图 (3D Surface Plot) (扩展 - 虽然不完全是“统计”图形,但常用于数据可视化)

虽然严格来说,三维曲面图可能不完全属于“高级统计图形”,但在数据分析和可视化中,它也是一种非常有用的工具,用于直接展示三维数据二维函数的曲面。Matplotlib也提供了绘制三维图形的功能。

代码实践

import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 导入3D绘图工具包 import numpy as np # 生成示例数据:与等高线图相同的二维高斯函数 delta = 0.025 x = np.arange(-3.0, 3.0, delta) y = np.arange(-2.0, 2.0, delta) X, Y = np.meshgrid(x, y) Z = np.exp(-(X**2 + Y**2) / 2) # 创建3D图形对象 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 创建3D子图 # 绘制三维曲面图 ax.plot_surface(X, Y, Z, cmap=plt.cm.viridis) # plot_surface绘制曲面,cmap设置颜色映射 # 添加标题和轴标签 ax.set_title('3D Surface Plot of 2D Gaussian Function') ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') # 显示图形 plt.show()

内容详解

  • from mpl_toolkits.mplot3d import Axes3D: 导入Matplotlib的3D绘图工具包。

  • fig = plt.figure(); ax = fig.add_subplot(111, projection='3d'): 创建3D图形对象和3D子图。

    • projection='3d': 指定子图为3D投影。
  • ax.plot_surface(X, Y, Z, cmap=plt.cm.viridis): 绘制三维曲面图。

    • X, Y, Z: 三维数据,与等高线图相同。

    • cmap=plt.cm.viridis: 设置曲面颜色映射。

  • ax.set_xlabel(), ax.set_ylabel(), ax.set_zlabel(): 设置三维坐标轴标签。

三维曲面图的应用场景:

  • 可视化三维数据: 直接展示三维数据点的分布,例如科学模拟结果、传感器数据等。

  • 可视化二维函数: 直观展示二维函数的曲面形状。

  • 探索数据结构: 在某些情况下,三维曲面图可以帮助我们更好地理解数据的三维结构。

总结

本节详细介绍了Matplotlib中常用的高级统计图形,包括直方图、箱线图、小提琴图、热图、散点矩阵图和等高线图(以及扩展的三维曲面图)。每种图形都有其独特的用途和优势,可以帮助我们从不同的角度探索和理解数据。

在数据分析实践中,选择合适的统计图形至关重要。理解每种图形的特点和适用场景,并结合具体的数据和分析目标,才能有效地利用Matplotlib的高级统计图形功能,挖掘数据背后的价值,并清晰地传达分析结果。通过灵活运用这些高级图形,我们可以更深入地洞察数据,发现隐藏的模式和规律,为决策提供有力支持。


发布者: 作者: 转发
评论区 (0)
U