收益:
- 能够区分缺失值的原因(随机、系统、有意义)并选择适当的策略并仅通过训练计算填充值
- 能够在删除异常值之前对其进行检查,并区分数据错误和真正的罕见事件
- 能够通过监控每个步骤对行数/空白数的影响来防止无声丢失,同时使类型和格式不一致达到标准
数据科学家大约 60-80% 的时间用于清理;在业界,这被半开玩笑地称为“data wrangling”(数据整理或数据清理)。因为现实世界的数据几乎永远不会准备好进行分析:日期采用混合格式,数字存储为文本,某些单元格为空,客户在同一个表中以两种不同的拼写出现三次。在本单元中,我们将介绍清理的三个基本方面:缺失值、异常值和类型/格式转换。人工智能是这项工作的得力助手;但由您决定清洁什么以及如何清洁,因为每种清洁选择都会改变分析。
清洁黄金法则:每一次改变都是一个决定
删除单元格、用平均值填充缺失值、修剪异常值——这些都不是“中性”操作。每个都会更改数据并影响结果。因此,清理的黄金法则是:将每个更改写入代码中,注意其基本原理,切勿覆盖原始数据。 AI 可以让你快速清理代码,但你有责任理解该代码的作用;当您说“删除空行”时,不要在没有看到有多少行消失的情况下运行它。
注意:切勿修改原始数据。将清理后的版本写入单独的文件/表。这样,如果您发现错误,您可以返回到第一个位置并保持可重复性。
缺失值:为什么是空的,该怎么办
缺失值(通常显示为 NaN — pandas 中的“不是数字”)是指单元格为空。但差距的原因决定了解决方案。典型情况有以下三种。随机缺失:传感器暂时不工作;填写一下可能比较合理。系统性缺失:仅针对某些客户要求填写表单字段;这里的差距实际上是信息。重大缺失:若“退货日期”为空,则表明顾客未退货;该空格表示 0 或“无”,未填充。
主要策略:
策略
什么时候合适?
风险
删除行
缺失率非常低(<5%)并且是随机的
数据和表示丢失
删除一列
大部分列为空 (>60%)
信息丢失
平均/中值填充
数字,随机缺失
它减少了方差并扭曲了分布
类别“未知”
分类的、系统的缺失
生成附加类别
使用模型进行预测
复杂而珍贵的专栏
泄漏风险、复杂性
关键点:插补值应仅根据训练数据计算,并且相同的值应应用于测试数据。如果包含测试数据的平均值,就会产生泄漏(单元 10)。中位数(序数数据的中间值)通常优于平均值,因为它比平均值对异常值更稳健。
异常值:错误还是真实?
异常值可能是以下两种情况之一:数据错误(年龄列中的 999)或真实但罕见的事件(客户 200 万美元的订单)。混淆两者是灾难性的:删除一个真正的异常值,你就会丢弃重要的信息;如果你放弃一个错误,你的平均成绩就会受到影响。因此,有必要首先检查异常值,而不是自动删除它。
常见的检测方法:IQR法(四分位数间距;数据的25%和75%五分位数之差超过1.5倍的值被视为异常值)和z分数(远离平均值的标准差的数量;如果大于3,通常为异常值)。 AI 在几秒钟内编写这些计算的代码;但在说“删除”之前,请检查这些值是什么。
类型和格式转换:静默错误源
最令人头痛的问题之一是数据类型混乱。如果“金额”列存储为文本,则无法添加;该程序错误地读取了土耳其语格式的数字,例如“1,250.50”而不是“1250”。日期(“01/03/2024”日-月或月-日?)、类别(“男性”/“男性”/“M”是同一件事?)和单位(TL 或 kuruş?)默默地产生错误的结果。清理工作的一个重要部分是将这些不一致纳入标准:日期为一种格式,类别为一种拼写,数字为一种单位。
三个迷你箱子
情况 1 — 平均陷阱。一个团队用平均值(48,500 美元)填写了收入栏中的 320 个缺失值。但缺点是系统性的:这些是从未申报收入的低收入群体。平均填充使这个群体人为地致富,而信用模式是错误的。教训:填写之前先问“为什么它是空白的”。
情况 2 — 不应删除的异常值。一位零售分析师删除了销售数据中的 4 个大订单(每个 180 万里拉),认为它们是“错误”。然而,这些都是真实的企业订单,占总营业额的 22%。删除后的预测模型完全错过了机构需求。教训:在删除异常值之前检查它。
案例 3 — 日期格式灾难。在 CSV 中,日期混合为“2024-03-01”和“01.03.2024”。当YZ编写的代码按照第一种格式进行解析时,6,400行变成NaT作为“无效日期”并被默默地排除在分析之外。分析师只有在线路数量减少时才注意到这一点。教训:转换后一定要检查行数和空格数。
四个可复制模板
1)缺失值图:
我有熊猫 df。编写代码生成一个表格,显示每列的缺失 (NaN) 数量和百分比。然后,分别列出缺失率超过40%的列和缺失率低于5%的列。只是生成这个诊断代码,而不是你建议的策略;我会做出决定。
2)异常值检查(不删除):
编写使用 IQR 方法检测(而不是删除!)“金额”列的异常值的代码。将外围行放在单独的 df 中,以便我可以手动检查它们。还打印异常值的数量及其在总数中所占的份额。
3) 类型/格式标准化:
编写标准化以下列的代码:-“日期”:可以是混合格式(“2024-03-01”和“01.03.2024”); 将它们全部转换为日期时间,计算不可翻译的并报告(默默地扔掉)。 - “性别”:“男”/“男”/“M”->“M”,“女”/“女”/“F”->“K”。 - “金额”:土耳其语格式文本(“1.250,50”)-> 十进制数。打印每次转换后有多少行受到影响。
4) 清洁前/后检查:
编写代码来比较清理步骤之前和之后选定列的 df.shape、缺失计数和汇总统计数据(平均值、中值、最小值、最大值)。目的:看看清洁有什么变化。
弱提示/强提示
弱提示:
清除该数据。
“清楚”是有歧义的; AI不知道哪些缺失部分应该被删除、哪些内容需要填写、哪些栏目需要处理以及如何处理。结果是:盲目的、不可逆转的改变。
强力提示:
您的角色:数据清理助手。 df 列:customer_id (int)、registration_date(混合格式文本)、revenue_tl(文本,“1,200.00”)、city(文本,拼写不一致)。规则:- 改变原来的 df;处理名为 df_clean 的副本。- 将 Revenue_tl 转换为数字,计算无法翻译的内容。- 将 record_date 更改为日期时间,报告错误。- 未经我批准,请勿删除任何行;分别展示候选人。每一步之后,打印 df_temiz.shape 和缺失的数字。
在这里,源头受到保护,每一次转换都被计算在内,删除则留给人类。
常见错误
- 填补空白而不问“为什么是空的?”用平均值填充系统/显着缺失会扭曲数据。
- 删除异常值而不检查它。丢弃真实但罕见的事件会破坏重要信息。
- 根据所有数据计算填充值。包含测试数据会造成泄漏;只需根据训练计算即可。
- 转换后不检查行数/空白数。默默地为 NaT/NaN 的行被排除在分析之外。
- 覆盖原始数据。返回和再现性都会丢失。
提示:通过“前后”比较来运行清理。在每个步骤之后打印 df.shape、缺失计数和关键列的汇总统计信息。因此您立即会发现一步意外地破坏了 6,000 行。
综上所述
清理是数据科学中最耗时且需要决策的阶段。每一次更改都会改变数据,因此每一次更改都是一个有意识的决定。对于缺失值,询问“为什么它是空的?”在删除任何异常值之前检查它们;使类型和格式符合标准。仅根据训练数据计算填充值,保留原始值,并通过计数来跟踪每个步骤的影响。人工智能是这个行业的巨大加速器,但清洁的内容和原因由人类决定。
应用任务
获取(或创建)一个小表,并故意在其中插入三个问题:缺失值元组、离群值、混合日期格式。使用上述模板向AI请求诊断和标准化代码;比较每个步骤之前/之后的行数和空白数。尝试抓住至少一个“无声的损失”,并记下你是如何注意到它的。
清单
- [ ] 我是否保留了原始数据并处理副本?
- [ ] 我是否对每个缺失的列提出了“为什么它是空的”问题?
- [ ] 在删除异常值之前我是否检查过它们?
- [ ] 我是否仅根据训练数据计算填充值?
- [ ] 我是否在每个步骤后检查行数/空白数并消除无声丢失?