本章学习目标建立“拿到数据先体检”的职业习惯记住6个核心问题及其背后的检查目的学会向AI描述体检需求能够读懂体检结果并判断“有没有问题”一、为什么叫“体检”想象你去医院做体检体检项目目的数据分析的对应身高体重知道你的基本数据数据有多少行、多少列血常规检查各项指标是否正常每列是什么类型、有没有异常值X光片看有没有隐藏问题缺失值、重复值、脏数据医生问诊结合你的情况综合判断结合业务场景判断数据是否合理体检的核心逻辑先做标准化检查每个人都有同样的项目发现问题再深入检查某项指标异常加做专项拿到报告后判断“正常”还是“有问题”体检的意义不要在生病后才去看病而是在数据进入分析流程之前就发现潜在问题。二、体检清单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远超正常范围有异常值检查是否是录入错误均值远大于中位数数据右偏存在很大的极端值用中位数代表“典型值”均值为负但金额不应该为负有错误数据检查负数是否合理标准差非常大数据波动很大看是否存在异常值或分组差异年龄列 min0, max200明显的数据错误需要清洗异常值一个具体例子收入数据场景均值中位数说明正常分布80007500均值和中间值接近数据正常老板加入了数据150007500均值被拉高中位数更能代表“典型员工”录入错误一个999999严重偏离7500均值完全失真中位数还能用如何向AI描述“对数值列做描述性统计分析告诉我均值、标准差、最大最小值、以及各分位数”“检查年龄列有没有异常值比如小于0或大于120的”“看看金额列的最大值是否合理有没有异常的极高值”核心心法不要相信任何一个数字直到你检查过它的分布。一个异常值就能让均值完全失真。问题6有哪些唯一值这个问题问的是文本/分类列里都有哪些不同的取值具体看什么操作它做什么能发现什么问题列出唯一值显示该列所有不同的取值发现脏数据、理解分类统计唯一值个数看有多少种不同的取值判断是分类变量还是连续文本统计每个值的频次每个值出现多少次看分布是否均匀、哪个值最多你能发现的问题你看到的可能的问题应该怎么做“北京”、“北京市”、“BJ”同时存在同一含义的不同写法统一成一种写法“男”、“Male”、“M”性别字段脏数据标准化状态列有“已完成”、“完成”、“完毕”枚举值不统一统一年龄列有100多个唯一值年龄应该是连续变量不是分类不需要当分类看某值出现比例极高如95%是“正常”类别不平衡分析时注意少数类应该只有“是/否”的列出现“√”、“1”、“Y”取值不规范统一一个具体例子城市列的数据质量检查假设你在分析用户数据查看“城市”列的唯一值唯一值[北京, 北京市, BJ, beijing, 上海, 上海市, 广州, 深圳]问题北京出现了4种不同的写法这会导致统计北京用户数量时只能数到“北京”那部分漏掉了其他写法分组分析时会产生虚假的多个组解决方案告诉AI“把城市列中所有指向北京的值统一成‘北京’”。如何向AI描述“列出城市列的所有唯一值”“统计每个城市的用户数量按从高到低排序”“检查状态列有哪些不同的取值看看有没有不规范的写法”核心心法分类变量只有在取值规范时才有意义。脏数据会让你的分组和统计完全失准。四、体检清单速查卡序号问题核心检查点异常信号一句话告诉AI1数据长什么样前几行内容乱码、列名错位、读错文件“显示前10行”2有多少行、多少列数据规模太大或太小“告诉我行数和列数”3每列是什么类型数据类型类型与业务含义不符“检查每列的数据类型”4哪些有缺失缺失数量和占比缺失过多“检查缺失值情况”5数值分布如何最大/最小/均值/中位数范围异常、均值偏离中位数“对数值列做描述性统计”6有哪些唯一值唯一值列表和频次同义异写、取值不规范“列出城市列的唯一值”五、完整体检报告示例假设你拿到一份“用户订单数据”体检后你应该能回答【数据体检报告】 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个核心问题必须记住数据长什么样→ 看一眼前几行有多少行、多少列→ 知道数据规模每列是什么类型→ 数字/文本/日期决定能做什么操作哪些有缺失→ 知道数据不完整的地方数值分布如何→ 最大/最小/均值/中位数有哪些唯一值→ 分类变量有哪些取值核心心法“拿到数据先体检后分析”——这是区分“新手”和“老手”的第一道分水岭。新手急着跑模型、做图表老手先花5分钟体检确认数据没问题再动手体检花的5分钟能帮你省下后续5小时的返工时间。思考题你刚读取了一个CSV文件用head()查看前5行发现第一行显示“## 2024年销售报表”第二行显示“导出时间2024-01-15”第三行才是列名。这意味着什么你应该怎么办info()显示“年龄”列有200个非空值但总行数是1000行。这说明什么缺失比例是多少应该怎么办describe()显示“金额”列的最小值是-100最大值是999999均值是5000中位数是300。你能从中发现哪些异常信号value_counts()查看“城市”列发现有“北京”、“北京市”、“BJ”、“北平”四种写法。这会导致什么问题你应该怎么处理你拿到一张1000万行、50列的数据集。在用info()和describe()之前你应该先问哪个问题为什么下一节预告3.2 工具速查 —— 用什么工具完成这6个体检项目head()、info()、describe()、value_counts()……每个工具是干嘛的、输出长什么样