3.1 数据体检清单(6个核心问题)

本章学习目标

  • 建立"拿到数据先体检"的职业习惯
  • 记住6个核心问题及其背后的检查目的
  • 学会向AI描述体检需求
  • 能够读懂体检结果并判断"有没有问题"

一、为什么叫"体检"?

想象你去医院做体检:

体检项目 目的 数据分析的对应
身高体重 知道你的基本数据 数据有多少行、多少列
血常规 检查各项指标是否正常 每列是什么类型、有没有异常值
X光片 看有没有隐藏问题 缺失值、重复值、脏数据
医生问诊 结合你的情况综合判断 结合业务场景判断数据是否合理

体检的核心逻辑

  1. 先做标准化检查(每个人都有同样的项目)
  2. 发现问题再深入检查(某项指标异常,加做专项)
  3. 拿到报告后判断"正常"还是"有问题"

体检的意义:不要在生病后才去看病,而是在数据进入分析流程之前,就发现潜在问题。


二、体检清单:6个核心问题

无论拿到什么数据,你都需要回答这6个问题:

序号 问题 一句话回答 如果不检查会怎样
1 数据长什么样? 看一眼前几行,确认加载正确 读错了文件都不知道
2 有多少行、多少列? 了解数据规模 小数据集用大方法、大数据集跑崩内存
3 每列是什么类型? 数字、文本、还是日期? 不该求平均的求了平均,不该做差值的做了差值
4 哪些列有缺失?缺了多少? 知道数据不完整的地方 计算出的平均值是错的、模型报错
5 数值分布如何? 最大值、最小值、均值、中位数 被异常值欺骗、数据范围理解错误
6 有哪些唯一值? 分类变量有哪些取值 脏数据("北京"和"BJ"共存)没发现

三、逐一拆解6个问题

问题1:数据长什么样?

这个问题问的是:我加载的数据,看起来对吗?

具体做:看表格的前几行(通常是5-10行)

你从这步能发现什么

你能发现的问题 实际例子 怎么处理
列名不是我预期的那一行 第一行是"报表日期:2024年1月",第二行才是真正的列名 告诉AI用正确的行作为列名
文件读错了 本应该读订单表,结果读了用户表 换正确的文件
数据是乱码 名字显示为"å¼ ä¸‰" 告诉AI换个编码重新读
分隔符不对 整行粘在一起,没有分列 告诉AI用正确的分隔符
空行或广告行 前几行是公司Logo和报表标题 告诉AI跳过这些行

如何向AI描述

"帮我读取这个文件,显示前10行,让我看看数据长什么样"
"这个Excel前3行是无关内容,跳过前3行再读"

核心心法:这一步就像你收到一堆快递,先拆开看一眼里面是什么,别急着往冰箱里塞。


问题2:有多少行、多少列?

这个问题问的是:数据规模有多大?

具体做:获取表格的"形状"------行数 × 列数

知道这个数字后,你能判断什么

行数 意味着什么 你应该怎么做
< 1000 小数据集 随便怎么分析都行,不用考虑性能
1,000 - 100,000 中等数据集 常规分析没问题
100,000 - 1,000,000 大数据集 注意性能,避免低效操作
> 1,000,000 超大数据集 可能需要分块处理或用数据库
列数 意味着什么 你应该怎么做
< 20 小特征集 好处理
20 - 100 中等特征集 可能需要做特征筛选
> 100 高维数据 可能需要降维,注意内存

如何向AI描述

"告诉我这个表格有多少行、多少列"
"这个数据集的规模是多大?"

核心心法:知道数据规模,你就知道自己手里是"自行车"还是"卡车"------决定你用什么方式去开它。


问题3:每列是什么类型?

这个问题问的是:每列存储的是什么类型的数据?

常见的类型及含义

类型名称 它代表什么 数据举例 能做什么操作
整数 整数数字,没有小数 年龄25、数量3、用户ID 加减乘除、求平均、排序
浮点数 带小数的数字 价格199.5、比例0.85 加减乘除、求平均、排序
文本/字符串 文字或混合字符 姓名"张三"、地址"北京朝阳区" 比较是否相等、查找子串、拼接
日期时间 时间和日期 2024-01-15、2024-01-15 10:30:00 计算时间差、提取年月日、排序
分类 有限个固定取值 性别"男/女"、状态"完成/取消" 分组统计、频次分析

为什么类型这么重要?

因为类型决定了你能做什么操作,也决定了不能做什么操作

你想做的事 数字类型 文本类型
计算平均值 ✅ 可以做 ❌ 没有意义("张三"的平均值是什么?)
比较大小 ✅ 可以做 ❌ 没有意义("张三"比"李四"大?)
查找包含某个字 ✅ 有些困难 ✅ 很适合
做加减法 ✅ 适合 ❌ 不能做

经典错误案例

  • 把用户ID当成数字,求平均ID(毫无意义)
  • 把手机号当成数字,前面的0丢了
  • 把日期当成文本,无法计算"今天距离注册过了多少天"

常见的问题类型及如何处理

你发现的问题 它是什么意思 怎么告诉AI
数字列显示为文本 数字被误读成了文本 "把金额列转成数字类型"
日期列显示为文本 日期被误读成了文本 "把订单日期列解析成日期格式"
城市列显示为文本但取值很少 这其实是个分类变量 "把城市列转成分类类型,节省内存"
ID列显示为数字 ID不应该当数字用 "把用户ID读成字符串类型"

如何向AI描述

"检查每一列的数据类型,看看有没有类型不对的"
"user_id应该是字符串,不是数字,帮我转一下"
"把order_date列从文本转成日期格式"

核心心法:类型决定一切。类型对了,分析才可能对;类型错了,结果一定是错的。


问题4:哪些列有缺失?缺了多少?

这个问题问的是:数据里有多少"空位"?

什么是缺失值:数据表格里某些单元格是空的,原因可能是:

  • 用户没填(年龄、性别)
  • 系统没记录(某些日志没采集到)
  • 数据合并时没匹配上

为什么要关注缺失值

缺失程度 影响 你的应对
< 5% 影响很小 可以直接删除缺失的行
5% - 20% 有一定影响 需要决定"删除"还是"填充"
20% - 50% 影响很大 填充前需要仔细思考用哪个值填
> 50% 该列可能没什么用 考虑是否删除整列

缺失值处理的三条原则(提前预告,后续会细讲):

情况 建议做法 场景举例
缺失很少(<5%) 删除缺失的行 1万行里缺了100行,删掉不影响
缺失较多但该列重要 用某个值填充 用平均值填充年龄缺失
缺失很多(>50%) 考虑删除整列 "备注"列80%都是空,留着意义不大

如何向AI描述

"检查每一列的缺失值数量,告诉我哪些列缺了、缺了多少、占比多少"
"这个表里有哪些列存在空值?"

核心心法:缺失值就像体检报告里的"未检测"------你得知道哪些指标没测到,才能决定是重测、忽略、还是用其他方式推断。


问题5:数值分布如何?

这个问题问的是:数值列的大致情况------最大值、最小值、集中在什么范围?

具体看什么:对于每一列数值数据,看以下指标:

指标 它是什么 能发现什么问题
计数 有多少个非空值 确认和总行数的差异
均值 平均值 是否有极端值拉高或拉低
标准差 数据波动程度 波动很大说明数据不稳定
最小值 最小的那个值 是否合理(年龄0?价格负数?)
25%分位数 前25%的数据的上限 数据分布位置
50%分位数(中位数) 中间那个值 比均值更抗极端值
75%分位数 前75%的数据的上限 数据分布位置
最大值 最大的那个值 是否合理(年龄200?)

你能从这些数字中发现的"异常信号"

你看到的 可能的问题 应该怎么做
最小值 = 0,但业务上不应该有0 数据错误或默认值 检查这些0是否合理
最大值 = 999999,远超正常范围 有异常值 检查是否是录入错误
均值远大于中位数 数据右偏,存在很大的极端值 用中位数代表"典型值"
均值为负,但金额不应该为负 有错误数据 检查负数是否合理
标准差非常大 数据波动很大 看是否存在异常值或分组差异
年龄列 min=0, max=200 明显的数据错误 需要清洗异常值

一个具体例子:收入数据

场景 均值 中位数 说明
正常分布 8000 7500 均值和中间值接近,数据正常
老板加入了数据 15000 7500 均值被拉高,中位数更能代表"典型员工"
录入错误(一个999999) 严重偏离 7500 均值完全失真,中位数还能用

如何向AI描述

"对数值列做描述性统计分析,告诉我均值、标准差、最大最小值、以及各分位数"
"检查年龄列有没有异常值,比如小于0或大于120的"
"看看金额列的最大值是否合理,有没有异常的极高值"

核心心法:不要相信任何一个数字,直到你检查过它的分布。一个异常值就能让均值完全失真。


问题6:有哪些唯一值?

这个问题问的是:文本/分类列里,都有哪些不同的取值?

具体看什么

操作 它做什么 能发现什么问题
列出唯一值 显示该列所有不同的取值 发现脏数据、理解分类
统计唯一值个数 看有多少种不同的取值 判断是分类变量还是连续文本
统计每个值的频次 每个值出现多少次 看分布是否均匀、哪个值最多

你能发现的问题

你看到的 可能的问题 应该怎么做
"北京"、"北京市"、"BJ"同时存在 同一含义的不同写法 统一成一种写法
"男"、"Male"、"M" 性别字段脏数据 标准化
状态列有"已完成"、"完成"、"完毕" 枚举值不统一 统一
年龄列有100多个唯一值 年龄应该是连续变量不是分类 不需要当分类看
某值出现比例极高(如95%是"正常") 类别不平衡 分析时注意少数类
应该只有"是/否"的列出现"√"、"1"、"Y" 取值不规范 统一

一个具体例子:城市列的数据质量检查

假设你在分析用户数据,查看"城市"列的唯一值:

复制代码
唯一值:["北京", "北京市", "BJ", "beijing", "上海", "上海市", "广州", "深圳"]

问题:北京出现了4种不同的写法!这会导致:

  • 统计北京用户数量时只能数到"北京"那部分,漏掉了其他写法
  • 分组分析时会产生虚假的多个组

解决方案:告诉AI"把城市列中所有指向北京的值统一成'北京'"。

如何向AI描述

"列出城市列的所有唯一值"
"统计每个城市的用户数量,按从高到低排序"
"检查状态列有哪些不同的取值,看看有没有不规范的写法"

核心心法:分类变量只有在取值规范时才有意义。脏数据会让你的分组和统计完全失准。


四、体检清单速查卡

序号 问题 核心检查点 异常信号 一句话告诉AI
1 数据长什么样? 前几行内容 乱码、列名错位、读错文件 "显示前10行"
2 有多少行、多少列? 数据规模 太大或太小 "告诉我行数和列数"
3 每列是什么类型? 数据类型 类型与业务含义不符 "检查每列的数据类型"
4 哪些有缺失? 缺失数量和占比 缺失过多 "检查缺失值情况"
5 数值分布如何? 最大/最小/均值/中位数 范围异常、均值偏离中位数 "对数值列做描述性统计"
6 有哪些唯一值? 唯一值列表和频次 同义异写、取值不规范 "列出城市列的唯一值"

五、完整体检报告示例

假设你拿到一份"用户订单数据",体检后你应该能回答:

markdown 复制代码
【数据体检报告】

1. 数据概况:891行 × 12列

2. 类型检查:
   - 正常:乘客ID、票价等是数字
   - 异常:年龄列是文本类型,需要转数字
   - 异常:登船时间列是文本,应该是日期

3. 缺失检查:
   - 年龄列:177个缺失(占20%),需要填充
   - 船舱号列:687个缺失(占77%),考虑删除
   - 登船港口列:2个缺失(占0.2%),影响很小

4. 数值分布检查(票价列):
   - 最小值:0 → 不合理,票价不能为0
   - 最大值:512 → 合理范围内
   - 均值:32,中位数:14 → 均值>中位数,存在高价票拉高均值

5. 唯一值检查(登船港口列):
   - 唯一值:['S', 'C', 'Q'] → 规范
   - 唯一值(性别列):['male', 'female'] → 规范

【体检结论】
- 需要处理:年龄类型转换、年龄缺失填充、票价0值检查
- 建议删除:船舱号列(缺失太多)
- 可忽略:登船港口的2个缺失

六、如何向AI描述体检需求(提示词模板汇总)

你的需求 你应该这样告诉AI
完整体检 "帮我做数据体检:显示前几行、基本信息和缺失值、数值列统计、分类列唯一值"
快速扫描 "快速看一下这张表的基本情况"
检查类型 "检查每列的数据类型是否正确"
检查缺失 "哪些列有缺失值?缺了多少?占比多少?"
检查数值 "对数值列做描述性统计,有没有异常值?"
检查分类 "检查分类列的唯一值,有没有不规范的写法?"

七、本章总结

6个核心问题(必须记住)

  1. 数据长什么样? → 看一眼前几行
  2. 有多少行、多少列? → 知道数据规模
  3. 每列是什么类型? → 数字/文本/日期决定能做什么操作
  4. 哪些有缺失? → 知道数据不完整的地方
  5. 数值分布如何? → 最大/最小/均值/中位数
  6. 有哪些唯一值? → 分类变量有哪些取值

核心心法

"拿到数据,先体检,后分析"------这是区分"新手"和"老手"的第一道分水岭。

  • 新手:急着跑模型、做图表
  • 老手:先花5分钟体检,确认数据没问题再动手

体检花的5分钟,能帮你省下后续5小时的返工时间。


思考题

  1. 你刚读取了一个CSV文件,用head()查看前5行,发现第一行显示"## 2024年销售报表",第二行显示"导出时间:2024-01-15",第三行才是列名。这意味着什么?你应该怎么办?

  2. info()显示"年龄"列有200个非空值,但总行数是1000行。这说明什么?缺失比例是多少?应该怎么办?

  3. describe()显示"金额"列的最小值是-100,最大值是999999,均值是5000,中位数是300。你能从中发现哪些异常信号?

  4. value_counts()查看"城市"列,发现有"北京"、"北京市"、"BJ"、"北平"四种写法。这会导致什么问题?你应该怎么处理?

  5. 你拿到一张1000万行、50列的数据集。在用info()describe()之前,你应该先问哪个问题?为什么?


下一节预告 :3.2 工具速查 ------ 用什么工具完成这6个体检项目?head()info()describe()value_counts()......每个工具是干嘛的、输出长什么样?

相关推荐
源码之家1 小时前
计算机毕业设计:Python基于数据挖掘的医院疾病分析与预测系统 Flask框架 数据分析 可视化 ARIMA算法 大数据 大模型(建议收藏)✅
python·信息可视化·数据挖掘·数据分析·flask·lstm·课程设计
YangYang9YangYan1 小时前
2026产品经理学数据分析的价值与指南
数据挖掘·数据分析·产品经理
zxsz_com_cn17 小时前
设备预测性维护中大数据分析的关键应用实例
数据挖掘·数据分析
AI科技星21 小时前
算法联盟ROOT · 全域数学物理卷第20、21、22分册:量子纠缠、隐形场论与时间膨胀
人工智能·算法·数学建模·数据挖掘·机器人
AI科技星1 天前
微积分:变化与累积的数学(分层大白话解释版)
人工智能·算法·数学建模·数据挖掘·机器人
源码之家1 天前
计算机毕业设计:Python医疗数据分析可视化系统 Flask框架 随机森林 机器学习 疾病数据 智慧医疗 深度学习(建议收藏)✅
python·机器学习·信息可视化·数据分析·flask·课程设计
AI科技星1 天前
基于代数拓扑与等腰梯形素数对网格【乖乖数学】
人工智能·算法·决策树·机器学习·数学建模·数据挖掘·机器人
YangYang9YangYan1 天前
2026财务分析师岗位学数据分析的价值分析
人工智能·数据挖掘·数据分析
得闲喝茶1 天前
SQL处理数据的常用语法语句
数据库·笔记·sql·数据分析·excel