news 2026/3/31 17:36:58

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

作者头像

张小明

前端开发工程师

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/31 0:01:43

vh6501测试busoff过程中CAN收发器行为解析

深入解析 vh6501 测试 Bus-Off 过程中 CAN 收发器的真实行为在汽车电子开发的日常调试中&#xff0c;总线异常并不可怕&#xff0c;真正考验系统鲁棒性的是——当一个节点“失控”时&#xff0c;它是否会拖垮整个网络。而Bus-Off&#xff0c;正是 CAN 协议为防止这种灾难设计的…

作者头像 李华
网站建设 2026/3/12 17:18:58

python情感分类系统 深度学习 细粒度情感分类预测 Flask框架 PaddleHub 计算机 数据集OCEMOTION 毕业设计(建议收藏)

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…

作者头像 李华
网站建设 2026/3/19 17:13:35

Arduino IDE语言选项修改深度剖析步骤

手把手教你修改 Arduino IDE 语言设置&#xff1a;从英文到中文的底层逻辑与实战你是不是刚打开 Arduino IDE&#xff0c;面对满屏英文菜单一头雾水&#xff1f;“Sketch”是啥&#xff1f;“Upload”又是哪个按钮&#xff1f;别急——这其实是每个中文初学者都会遇到的“第一道…

作者头像 李华
网站建设 2026/3/28 3:37:14

如何挑战自己的分析,避免他人挑战

原文&#xff1a;towardsdatascience.com/how-to-challenge-your-own-analysis-so-others-wont-b3745919d098?sourcecollection_archive---------2-----------------------#2024-07-03 掌握合理性检查的艺术&#xff0c;提升你的工作质量 https://medium.com/twalbaum?sourc…

作者头像 李华
网站建设 2026/3/31 12:22:55

使用HID进行固件升级(DFU模拟):创新方案实战

用HID玩转固件升级&#xff1a;不靠Bootloader的轻量级DFU实战你有没有遇到过这样的场景&#xff1f;一款基于STM32G0的小型IoT传感器节点&#xff0c;Flash只有64KB。为了支持远程维护&#xff0c;团队想加入固件升级功能。但传统的双Bank DFU方案光是Bootloader就占了12KB&am…

作者头像 李华
网站建设 2026/3/22 21:38:16

快速理解虚拟串口软件:安装前必须知道的5件事

虚拟串口不是“装上就能用”——工程师踩坑前必须搞懂的5个硬核真相你有没有遇到过这种情况&#xff1a;调试一个Modbus从设备&#xff0c;手头只有笔记本电脑&#xff0c;连个RS-232接口都没有&#xff1f;或者远程客户现场的PLC突然通信中断&#xff0c;你却没法亲自插根串口…

作者头像 李华