@浙大疏锦行
知识点:
- 介绍了热力图的绘制方法
- 介绍了 enumerate() 函数
- 介绍了子图的绘制方法
作业:尝试对着心脏病数据集绘制热力图和单特征分布的大图(包含几个子图)
1 热力图的绘制
- 热力图Heatmap通过颜色深浅展示数据矩阵中数值大小或相关性。数值越大,颜色越深;横轴和纵轴通常代表不同的变量或类别,矩阵中的每个单元格对应一个具体数值。
- 在绘图之前,需要把字符串映射为数字,使用上篇的标签编码进行处理,这里不再赘述。
- 热力图本质上只能对连续值进行绘制,数值形的离散值其实不适合用热力图的,为了方便处理,这里不处理数据。
- 热力图依赖数值的相对大小,所以需要对数据进行标准化 / 归一化。如果使用混淆矩阵,可以不对数据进行标准化/归一化。
import seaborn as sns
import matplotlib.pyplot as plt
continuous_features = ['age','trestbps','chol','thalach','oldpeak'] # 提取连续特征
correlation_matrix = data[continuous_features].corr() # 计算相关系数矩阵
plt.rcParams['figure.dpi'] = 300 # 设置图片清晰度
# 绘制热力图
plt.figure(figsize=(12,10))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('Correlation Heatmap of Continuous Features')
plt.show()

.corr()函数默认计算皮尔逊相关系数;
heatmap中的参数分别表示相关系数矩阵、显示具体的相关系数数值、配色方案和颜色映射的数值范围。
从图中可得出:
- 颜色较浅的部分(偏灰色部分),相关系数的绝对值较小,表示两个变量之间的相关性较弱。例如thalach列与chol列的相关性较弱,相关系数为-0.0099
- 颜色偏暖色调且越深(红色等),代表正相关程度越高。例如age与trestbps的相关系数为0.28,颜色为橘色
- 颜色偏冷调且越深(蓝色等),代表负相关程度越高。例如oldpeak与thalach的相关系数为-0.34,颜色为蓝色
2 子图绘制
- 子图可以在一张画布上分别展示多个特征的分布情况,以箱线图Boxplot的子图为例
# 子图
features = ['trestbps','chol','slope','thalach'] # 选择绘制的特征
plt.rcParams['figure.dpi'] = 300
fig, axes = plt.subplots(2, 2, figsize=(12, 8)) # 创建整体布局,2行2列共4个图
for i in range(len(features)): # 遍历features中每个特征
row = i // 2
col = i % 2 # 确定好存放的行和列
feature = features[i]
axes[row, col].boxplot(data[feature].dropna()) # 删除缺失值
axes[row, col].set_title(f'Boxplot of {feature}') # 设置标题
axes[row, col].set_ylabel(feature) # 设置y轴标签
plt.tight_layout() # 调整子图布局,避免内容重叠
plt.show()

箱线图中,黄色横线为数据的中位数;
箱体的上下边界为第25百分位和第75百分位,箱体高度表示数据的中间 50% 的范围;
异常值(超出上下界1.5倍)用单独的点表示;
箱体上下的 whisker(须)延伸到非异常值的最大 / 最小值
3 enumerate()函数
作用:可以同时迭代一个序列,返回每个元素的索引和值
例子:
features = ['Annual Income', 'Years in current job', 'Tax Liens', 'Number of Open Accounts']
for i, feature in enumerate(features):
print(f"索引 {i} 对应的特征是: {feature}")

在绘制子图时使用enumerate()函数,for循环可以改为for i, feature in enumerate(features):

751

被折叠的 条评论
为什么被折叠?



