news 2026/3/15 3:30:47

如何为你的现实生活数据科学项目清理数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何为你的现实生活数据科学项目清理数据

原文:towardsdatascience.com/how-to-clean-your-data-for-your-real-life-data-science-projects-5beb44609966

数据科学变得简单

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/91380dd204a89c9525096b67c4d1459c.png

图片来自 Wannapik

我们经常听到——“哦,有现成的包可以完成所有事情!使用这些包运行模型只需要 10 分钟。”是的,我同意,确实有这些包——但它们只在你有一个干净的数据集时才能工作。那么,从多个来源创建、整理和清理一个适合目的的数据集需要多长时间呢?问问那些正在努力创建数据集的数据科学家。所有那些不得不花费数小时清理数据、研究、阅读和重写代码、失败并再次重写的人都会同意我的观点!这让我们回到了一个观点:

“现实生活中的数据科学 70%是数据清洗,30%是实际建模或分析”

因此,我想,让我们回到基础,稍微了解一下如何清理数据集,使它们更有效地解决业务问题。我们将从这个系列关于缺失值处理开始。以下是议程:

  1. 什么是缺失值

  2. 数据集中缺失值的原因是什么

  3. 为什么缺失值很重要

  4. 处理缺失值的方法

  5. Python 中处理缺失值的指南——一些使用真实数据集的示例

让我们开始吧…

1. 什么是缺失值

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0fd6f94ee77f218b92d7a72ab48b9164.png

照片由 Mika Baumeister 在 Unsplash 上提供

缺失值基本上是数据或变量的缺失值——这意味着如果有一个变量,比如“产品线”,它描述了产品的类型,如“健康或美容”或“体育和旅游”等,那么“产品线”变量的缺失值可能表明某些交易没有被映射到任何特定的产品组/类别。

另一个例子可以是一个像“收入”这样的变量,它描述了客户的特征,可能存在缺失值。这可能是因为某个客户没有披露他们的收入,或者也可能是该客户没有任何收入,比如 18 岁以下的 Z 世代。

正如你所见,某些变量的值缺失可能有各种原因。这使得我们很自然地过渡到下一个部分,即这些缺失值的原因或理由。

2. 数据集中缺失值的原因是什么

主要有 3-4 个原因会导致数据集中出现缺失值,或者我们如何对缺失数据的类型进行分类。

a)MCAR(完全随机缺失):这意味着特定变量缺失并不依赖于数据集中的其他变量,即它是独立于其他变量的。这不会在数据中引入任何偏差——但这种情形很少发生。

例如,在数据收集过程中,由于某些技术故障,一些受访者可能遗漏了诸如“收入”这样的变量信息,因此一些值变得缺失。

b)MAR(随机缺失):在这里,缺失的变量与数据集中的其他变量相关。

例如,以“收入”为例,对于 Z 世代(即年轻一代),“收入”可能比老一代更可能缺失,因为他们可能还没有开始赚钱。因此,这里收入缺失受到另一个变量即“年龄”的影响。

c)MNAR(非随机缺失):缺失值不是随机的,而是与特定变量的值相关。

例如,扩展“收入”的例子——高收入客户可能会跳过关于收入的问题,从而导致缺失值。

还可能有另一个原因——结构化缺失数据——但我们现在先不讨论这个话题。如果感兴趣,请在评论中告诉我 💬,我可以在以后的博客中详细阐述。

3. 缺失值为什么重要

为什么我会关心我的数据中存在缺失值?这是因为——

a)偏差:缺失值,尤其是如果不是 MCAR,可能会在数据集中引入偏差,并且用于样本的数据集可能不能代表总体。这意味着我们从数据中得出的任何推断、预测或洞察可能并不完全准确,即参数估计将不准确。

就像我们的收入例子一样,这意味着某些人口群体可能代表性不足,例如高收入群体。

您可以参考我在信用卡欺诈检测背景下关于不平衡数据集的帖子,了解如何克服这个问题。

使用不同采样技术进行信用卡欺诈检测

b)信息丢失:如果缺失数据占较大比例,那么我们的样本量就会减少,数据集的变异性会受到损害,这使得进行有意义的分析或预测变得更加困难。这可能导致预测偏差和分析的深度不足。

c)对模型性能的影响:正如我在开头提到的,大多数模型包都是在数据完整性的假设下工作的。因此,缺失数据反过来会导致模型性能不佳。

d)信任和完整性的丧失:这一点非常重要——如果缺失数据没有得到严格的处理,那么分析/预测就不能被信任。业务利益相关者可能会失去信心,这可能会影响他们基于分析所做的决策。

4. 处理缺失值的方法

现在我们已经了解了缺失值及其处理的重要性,让我们看看一些常见的处理方法。

a)删除缺失数据:根据缺失数据的百分比和特定变量的重要性,有时我们可以删除整个数据集的整行。

b)缺失值插补:使用均值、中位数或众数或回归或 K 最近邻(KNN)来插补缺失值。插补的类型将根据具体情况而有所不同。

热图显示缺失值(图片由作者提供)

作为一项经验法则:

如果一个变量或特征有< 5%的缺失数据,我们通常可以忽略它。

对于 5% – 20%的数据缺失,在分析数据模式、缺失数据的原因等之后,可以进行外推和插补。

然而,如果超过 20%的数据缺失,那么通常该特定变量/特征不应用于建模/分析。

5. Python 中处理缺失值的快速指南——一些使用真实数据集的示例

我们将考虑来自 Kaggle 数据集的超市销售数据来完成这项工作。

我们可以使用热图来可视化由白色线条表示的缺失数据。变量——客户类型、产品线、单价和数量存在缺失值。缺失值的数量和热图可以通过以下代码得出:

df.isna().sum()
sns.heatmap(df.isnull(),cbar=False)
Invoice ID0Branch0City0Customertype79Gender0Product line43Unit price6Quantity19Tax5%0Total0Time0Payment0cogs0gross margin percentage0gross income0Rating0dtype:int64

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/aa48496eb41738fe85ad7df470e8c769.png

缺失值插补成功(图片由作者提供)

我们将演示第四部分中讨论的“缺失值插补”方法。这可以通过对数值变量使用均值和对分类变量使用众数来完成。

df.fillna(df.mean(),inplace=True)df.fillna(df.mode().iloc[0],inplace=True)

您可以验证在此步骤之后,所有缺失值都将被替换。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8ceba455123373541279505d3c811877.png

c)模型/算法的选择:一些模型如决策树等可以处理缺失值,而无需特殊处理。

请注意,这可能会是一个简化的表示,在实践中,将需要进行额外的分析来理解数据模式,以找到正确的方法。然而,有时简化的方法也能奏效!

总结

我们讨论了在进行任何分析时——无论是学术还是行业——了解数据集中的缺失值至关重要。遵循✅这 4 个关于缺失值的原理,您在数据科学项目中永远不会出错。

a)做出更通用的预测

b)提高模型的准确性

c)减少偏差

d)在分析中建立信任和完整性

请关注我后续关于进一步数据整理技术的文章。

如有任何问题或评论,您可以通过 Medium, LinkedIn 或 Twitter 联系我。

您可以通过以下链接订阅我的电子邮件列表 📩 这里,以免错过我的最新文章。

参考文献

  1. Roderick J. A. Little, Donald B. Rubin, 《缺失数据统计分析》 (2002)

数据集的许可信息:GPL-3.0 许可协议 或 Apache 2.0

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/13 3:22:45

CANFD协议帧格式解析:结合STM32H7硬件说明

深入理解CAN FD协议与STM32H7的FDCAN控制器&#xff1a;从帧格式到实战应用你有没有遇到过这样的场景&#xff1f;在开发一个电动汽车电池管理系统&#xff08;BMS&#xff09;时&#xff0c;每个电芯模组需要上传几十个电压和温度采样点&#xff0c;而传统CAN总线每帧只能传8字…

作者头像 李华
网站建设 2026/3/13 8:23:07

IDEA配置[自动生成jar文件]

自动生成jar文件 搞不懂为什么别人的开发环境会自动生成jar文件,而我的环境不会自动生成,研究了好久没有办法只有用工件来实现这个功能! 本文引用&#xff1a;https://zhuanlan.zhihu.com/p/669542994只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&…

作者头像 李华
网站建设 2026/3/13 4:40:29

10个AI写作工具,专科生轻松搞定论文格式与内容!

10个AI写作工具&#xff0c;专科生轻松搞定论文格式与内容&#xff01; AI 工具让论文写作不再难 对于专科生来说&#xff0c;论文写作不仅是学业的重要环节&#xff0c;也是考验综合能力的关键一步。然而&#xff0c;面对复杂的格式要求、内容逻辑的梳理以及查重率的压力&…

作者头像 李华
网站建设 2026/3/13 11:24:34

CAPL编程项目应用:CANoe中总线监控功能开发

CAPL编程实战&#xff1a;在CANoe中打造智能总线监控系统 你有没有遇到过这样的场景&#xff1f; 测试台上几十个ECU正在通信&#xff0c;Trace窗口里满屏飞舞着CAN报文&#xff0c;而你要从中找出某个偶发的“心跳丢失”或“状态跳变”问题——靠肉眼翻日志&#xff1f;等故障…

作者头像 李华
网站建设 2026/3/13 11:28:52

ESP32 Arduino环境搭建:Soft-AP配置完整示例

手把手教你用ESP32搭建本地Wi-Fi热点&#xff1a;Soft-AP实战全解析你有没有遇到过这样的场景&#xff1f;手里的智能设备还没连上家里的Wi-Fi&#xff0c;怎么给它配网&#xff1f;或者在野外、地下室这种没有路由器的地方&#xff0c;想临时控制一个传感器系统&#xff0c;该…

作者头像 李华
网站建设 2026/3/14 5:07:26

Packet Tracer汉化完整指南:适用于初学者的配置流程

让Packet Tracer说中文&#xff1a;零基础也能搞定的汉化实战指南 你是不是也曾在打开 Packet Tracer 的那一刻&#xff0c;面对满屏英文菜单感到头大&#xff1f;“Simulation Mode”是啥&#xff1f;“Realtime”和“Simulation”切换按钮到底干啥用的&#xff1f;刚学网络…

作者头像 李华