AI 训练数据缺失热力图用什么画?用 Seaborn 定位成片缺失

用 pandas 生成缺失标记,再用 Seaborn 画按样本编号排列的热力图,核对每列缺失数、共缺字段和对应原行。

对已经在 pandas 里的 AI 训练表格,本题推荐用 Seaborn 画缺失热力图:先把缺失位置转成 0/1,再用行列标签回查样本。它能补充“每列缺失多少”的统计,帮助你看见哪些行同时缺了多个字段。

Seaborn 是绘图库,不会自动判断 AI 训练数据是否合格,也不会推断缺失原因。若只要每列空值率,用数值表更清楚;若需要定位共同缺失的行,才增加本题的二维图。

AI 训练数据缺失热力图用什么画?用 Seaborn 定位成片缺失

先定颜色与编号的含义

横轴是三个数值字段,纵轴是稳定 sample_id;浅色 0 表示该格有观测值,红色 1 表示缺失。画的是缺失标记,颜色不表示原数值高低,也不是相关系数。固定 vmin=0、vmax=1,避免不同批次使用不同色阶。

输入是人工构造的六条训练表格记录,不是工业现场采集结果;没有拟合模型,也没有填补空值。本例已在 Windows、Python 3.11.15、pandas 2.3.3、NumPy 2.4.6、Seaborn 0.13.2、Matplotlib 3.10.7 运行。

在空的练习目录里创建独立环境。以下为 Windows PowerShell 命令;macOS/Linux 的激活命令用 source .venv/bin/activate。输出文件只用于本次演示,重复执行会更新这些演示文件。

python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install pandas==2.3.3 numpy==2.4.6 seaborn==0.13.2 matplotlib==3.10.7

从缺失矩阵画图,保留源行关系

将下面代码保存为 missingness_heatmap.py,执行 python missingness_heatmap.py。输出目录 missing_output 内有 missing_mask.csv 与 missingness.png。演示只选三个特征,编号保留在索引中,不将编号本身当作特征作图。

from pathlib import Path
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

frame = pd.DataFrame({
    'sample_id': ['s01', 's02', 's03', 's04', 's05', 's06'],
    'temperature': [20, np.nan, np.nan, 22, 23, 24],
    'pressure': [1, np.nan, np.nan, 1.2, 1.3, 1.4],
    'vibration': [0.2, 0.3, 0.4, np.nan, 0.5, np.nan],
}).set_index('sample_id')
missing = frame.isna().astype(int)
joint_ids = frame.index[missing[['temperature', 'pressure']].eq(1).all(axis=1)].tolist()
assert missing.shape == (6, 3)
assert missing.sum().tolist() == [2, 2, 2]
assert joint_ids == ['s02', 's03']
out = Path('missing_output')
out.mkdir(exist_ok=True)
missing.to_csv(out / 'missing_mask.csv', encoding='utf-8-sig')

fig, ax = plt.subplots(figsize=(7, 4))
sns.heatmap(
    missing, vmin=0, vmax=1,
    cmap=ListedColormap(['#edf5ff', '#e35d6a']),
    annot=True, fmt='d', linewidths=0.5,
    cbar_kws={'ticks': [0, 1], 'label': '0=present, 1=missing'}, ax=ax,
)
ax.set_title('Synthetic training-data missingness')
fig.tight_layout()
fig.savefig(out / 'missingness.png', dpi=150)
plt.close(fig)
print('matrix_shape:', missing.shape)
print('column_missing:', missing.sum().to_dict())
print('row_missing:', missing.sum(axis=1).tolist())
print('joint_missing_ids:', joint_ids)

逐格检查这张图

matrix_shape: (6, 3)
column_missing: {'temperature': 2, 'pressure': 2, 'vibration': 2}
row_missing: [0, 2, 2, 1, 0, 1]
joint_missing_ids: ['s02', 's03']

矩阵大小应为 6×3,每列缺失数都是 2;每行缺失数依次为 0、2、2、1、0、1。s02 和 s03 的 temperature、pressure 同时缺失,而 s04、s06 只有 vibration 缺失。打开 PNG,看图中这些位置是否为红色 1,再用 CSV 和原表按编号核对。

三个字段各缺两格,看单列缺失率都一样;热力图进一步揭示前两列在同一组样本共同缺失。下一步回查 s02、s03 的采集批次、输入来源和字段映射,确认是否共享同一个上游问题,而不是直接把这些行删除。

空字符串和无穷大要另定规则

pandas isna 不把空字符串和正负无穷大自动标成缺失。真实 CSV 若用空字符串、空白、-999 或字符串“未知”表示缺测,先按字段契约规定哪些值需要转为空值,并保留转换记录;不要把所有字段中的 0 都当作缺失。

先确认 sample_id 唯一、没有空值。排序只为展示,必须保留 ID;若行顺序本来不代表时间,就不能因为图上形成相邻红色区域而认定问题连续发生。

数十万行直接画满一张图会难以辨认。可以先按来源或批次分组,选择可回查的样本;抽样规则和原始 ID 要一起保留。图只能展示缺失的共同位置,不能证明采集设备故障、某字段导致另一字段缺失或某种缺失机制。

热力图通过后能直接填补吗?

还要确定字段含义、缺失原因和训练/验证划分。本题只定位缺测。需要进入建模时,可参考缺失填补与空列检查,继续核对训练统计量和输出列。

官方资料与版本范围

本文于 2026 年 10 月 1 日读取下列官方文档;示例的实际版本见正文。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32535.html

赞 (0)
AI小管家的头像AI小管家
AI 数据可视化工具怎么选?Matplotlib 与 Plotly 的静态报告和交互对比
上一篇 1小时前
AI 样本复核看板怎么搭?用 Streamlit 筛选记录并下载 CSV
下一篇 1小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部