html
在 Python 数据分析中理解相关性和热图
目录
简介
数据可视化是有效数据分析的基石。在各种可视化技术中,热图以其能够以直观且易于理解的方式展示复杂的数据矩阵而脱颖而出。当与相关性矩阵结合使用时,热图可以同时揭示多个变量之间复杂的关系。
本文探讨如何在 Python 中执行相关性分析并使用热图可视化结果。通过利用经典的机器学习和统计学数据集——鸢尾花数据集,我们将逐步展示如何计算相关性并创建有洞察力的可视化。
什么是相关性?
定义
相关性量化了两个变量之间相关的程度。其范围从 -1 到 +1,其中:
- +1 表示完全正相关:一个变量增加,另一个变量按比例增加。
- -1 表示完全负相关:一个变量增加,另一个变量按比例减少。
- 0 表示无相关性:变量之间没有明显的线性关系。
相关性的类型
- 正相关:两个变量朝同一个方向变化。
- 负相关:变量朝相反的方向变化。
- 无相关:变量之间不存在可预测的模式。
了解这些关系对于特征选择、在预测模型中识别多重共线性以及深入了解数据的潜在结构至关重要。
在 Python 中计算相关性
Python 提供了强大的库,如 Pandas 和 NumPy,可以轻松计算相关性。Pandas 中的 DataFrame.corr()
方法计算列之间的成对相关性,并排除 NA/空值。
示例:
123456789
import pandas as pd # 加载鸢尾花数据集names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class']iris = pd.read_csv('iris.data', names=names) # 计算相关矩阵correlation_matrix = iris.corr()print(correlation_matrix)
输出:
sepal_length
sepal_width
petal_length
petal_width
sepal_length
1.000000
-0.109369
0.871754
0.817954
sepal_width
-0.109369
1.000000
-0.420516
-0.356544
petal_length
0.871754
-0.420516
1.000000
0.962757
petal_width
0.817954
-0.356544
0.962757
1.000000
热图介绍
什么是热图?
热图是数据的图形表示,其中各个数值通过颜色来描绘。在相关矩阵的上下文中,热图提供了变量之间关系的视觉概述,使识别模式、相关性的强度和方向变得更容易。
为什么使用热图?
- 清晰:将复杂的数据矩阵简化为易于理解的格式。
- 高效:快速突出显示强相关和弱相关。
- 可视化:通过颜色渐变增强对数据关系的理解。
使用 Seaborn 热图可视化相关性
Seaborn 是基于 Matplotlib 构建的 Python 数据可视化库,提供了一个高层接口来绘制美观且信息丰富的统计图表。Seaborn 中的 heatmap()
函数专为有效可视化相关矩阵设计。
示例:
1234567891011
import seaborn as snsimport matplotlib.pyplot as plt # 设置热图的风格sns.set() # 创建热图sns.heatmap(correlation_matrix, annot=True, fmt='.2f') # 显示热图plt.show()
参数:
correlation_matrix
:要可视化的数据。
annot=True
:在每个单元格中标注相关系数。
fmt='.2f'
:将标注文本格式化为两位小数。
解释热图
生成热图后,理解其元素至关重要:
- 颜色强度:表示相关性的强度。
- 较深的颜色:表示较强的正相关。
- 较浅的颜色:表示较强的负相关。
- 标注值:提供精确的相关系数以进行准确解释。
- 对角线:总是显示 1.00 的相关性,因为一个变量与其自身完全相关。
关键见解:
- 高正相关(例如,花瓣长度和花瓣宽度):表明花瓣长度增加时,花瓣宽度也倾向于增加。
- 高负相关(例如,萼片宽度和花瓣长度):表明一个变量增加时,另一个变量倾向于减少。
- 低或接近零的相关性:意味着变量之间几乎没有线性关系。
实际应用:鸢尾花数据集示例
鸢尾花数据集是数据科学中的常用数据集,以其在演示分类算法时的简单性和清晰性而闻名。它包含来自三种鸢尾花的 150 个样本,每个样本测量了四个特征:
- 萼片长度
- 萼片宽度
- 花瓣长度
- 花瓣宽度
通过分析这些特征之间的相关性,我们可以深入了解数据集的结构,并为机器学习模型的特征选择提供有价值的见解。
代码演练
以下是使用鸢尾花数据集实现相关性分析和热图可视化的逐步指南。
1. 导入必要的库
12345678
import numpy as npimport pandas as pd import matplotlib.pyplot as pltimport seaborn as sns # 配置 seabornsns.set()%matplotlib inline
2. 加载鸢尾花数据集
12345678
# 定义列名names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'] # 加载数据集iris = pd.read_csv('iris.data', names=names) # 显示前几行print(iris.head())
示例输出:
sepal_length
sepal_width
petal_length
petal_width
class
5.1
3.5
1.4
0.2
Iris-setosa
4.9
3.0
1.4
0.2
Iris-setosa
4.7
3.2
1.3
0.2
Iris-setosa
4.6
3.1
1.5
0.2
Iris-setosa
5.0
3.6
1.4
0.2
Iris-setosa
3. 计算相关矩阵
12345
# 计算相关矩阵correlation_matrix = iris.corr() # 显示相关矩阵print(correlation_matrix)
输出:
sepal_length
sepal_width
petal_length
petal_width
sepal_length
1.000000
-0.109369
0.871754
0.817954
sepal_width
-0.109369
1.000000
-0.420516
-0.356544
petal_length
0.871754
-0.420516
1.000000
0.962757
petal_width
0.817954
-0.356544
0.962757
1.000000
4. 生成热图
12345
# 创建热图sns.heatmap(correlation_matrix, annot=True, fmt='.2f') # 显示热图plt.show()
结果:

注意:在 Python 环境中运行代码时,将显示实际的热图。
5. 解释热图
- 对角线值 (1.00): 如预期,每个特征与其自身完全相关。
- 高正相关:
petal_length
和 petal_width
(0.96)
sepal_length
和 petal_length
(0.87)
- 中等负相关:
sepal_length
和 sepal_width
(-0.11)
petal_length
和 sepal_width
(-0.42)
这些见解表明,花瓣的尺寸高度相关,这对机器学习模型中的特征选择任务至关重要。
结论
相关性分析和热图是数据科学中不可或缺的工具,提供了变量之间关系的深刻见解。通过可视化这些相关性,分析师可以在特征选择上做出明智的决策,识别潜在的多重共线性问题,并增强机器学习模型的可解释性。
利用 Python 的 Pandas 和 Seaborn 库,用户可以轻松计算和可视化相关矩阵,将复杂的数据集转化为直观的视觉表示。鸢尾花数据集是一个展示这些概念的优秀示例,突显了这些分析技术的强大和简便性。
参考资料与进一步阅读
携带适当的工具和知识踏上数据分析之旅,能够使分析师发现隐藏的模式并做出数据驱动的决策。掌握相关性分析和热图可视化是提高数据科学和机器学习熟练度的重要一步。