全文链接:http://tecdat.cn/?p=8287
在每个现实世界的数据集中,缺失数据值几乎是不可避免的,在典型的数据收集过程中几乎不可能避免。
这可能由于各种原因而发生,例如文件丢失/损坏、数据输入过程中的错误、数据收集过程中的技术问题以及许多其他原因。
在任何现实世界的数据集中,通常都会有一些数据科学家和机器学习工程师必须处理的缺失数据,否则,它可能会导致开发数据时出现一些问题。
表中缺少数据
因此,在这篇文章中,我将展示一些可用于处理数据驱动项目中丢失数据的技术,并可能消除在构建数据管道时丢失数据可能导致的问题。
为什么你应该处理丢失的数据
在继续如何解决问题之前,必须首先了解为什么需要处理丢失的数据。
数据确实是所有数据科学和机器学习项目的主要驱动力。它是机器做出所有决定的所有项目的核心要素。
虽然缺失数据的存在确实令人沮丧,但从数据集中彻底消除它可能并不总是正确的方法。例如,考虑下图。
表中缺少数据
如果您考虑消除所有至少有一个缺失值的行,它:
1 减少数据集中的数据点数量
下图所示,完全拒绝包含任何缺失值的行会显着减少数据集中的行数。
删除具有至少一个 NaN 值的行
2 导致我们已经拥有的其他有价值(和正确)信息的丢失
在具有至少一个 NaN 值的行中标记的非 NaN 值
即使没有B观察到的值,我们仍然可以精确地知道A,C对应值,这仍然非常有价值。
处理缺失数据
现在您已经了解了为什么要处理缺失数据,让我们了解处理缺失数据的技术方面。
每当您在表格数据中遇到缺失值时,您基本上只有三个选项可供选择,如下图所示:
处理缺失数据的三种方法
下面让我们详细讨论这三种方法。
1 保留缺失的数据
==========
顾名思义,这种方法绝对忽略了数据集中任何缺失数据点的存在。
不对 DataFrame 应用任何转换
然而,在这里,本质上假设丢失的数据点不会在数据管道中造成任何问题,并且所利用的方法擅长处理丢失的数据。
因此,数据科学家或机器学习工程师的工作是决定如果丢失的数据保持原样,他们的算法是否可以工作。
2 删除缺失的数据
==========
接下来,想象一下,如上所述,保留丢失的数据对于您的特定用例是不可行的。
在这种情况下,完全删除丢失的数据可能是一个继续前进的方向。
这里的主要想法是从 DataFrame 中删除具有任何缺失值的整行(如果您的用例需要基于系列的分析,则删除一列)。
换句话说,在这种技术中,您只保留与每一列(或行)对应的非空值的数据行(或列),并将数据集视为删除的行从未存在过。
逐行丢弃
顾名思义,这里的目标是删除包含缺失值的 DataFrame 行。
下图描绘了逐行下降。
删除具有至少一个 NaN 值的行
在面向行的删除中,列数保持不变。
逐列删除
与逐行删除相比,逐列删除涉及删除包含缺失值的 DataFrame 的列(或系列)。
删除具有至少一个 NaN 值的列
在面向列的删除中,行数保持不变。
3 填补缺失的数据
==========
最后一种技术涉及用一些值填充缺失的数据,该值可能是给定未观察位置的最佳估计值。
用随机策略替换缺失值
该策略可能涉及用列的平均值、中值或列的最频繁值(众数)填充缺失数据——具体取决于列中值的类型。
这是因为平均值、中位数和众数只能针对数值进行估计。但是,在分类列的情况下,均值和中位数没有意义。
此外,填充标准完全取决于您的特定数据源、您正在解决的问题以及评估该特定缺失数据点的舒适程度。
执行
寻找缺失值的最佳估计值的最常用技术包括均值、中值和众数,如下所示:
- 用平均值填充:
均值策略用列的平均值替换缺失值。
如上所述,均值策略没有替换colB
.
- 填充中位数:
接下来,中值策略将列中的缺失值替换为中值。这是在下面实现的:
再一次,最初缺少的值colB
仍然充满了NaN
值。
- 填充众数:
最后,用众数填充,将缺失值替换为列中出现频率最高的值,如下所示:
您还可以对不同的列应用不同的填充策略,如下所示:
colA
在这里,我们用colA
的平均值和colB
的众数填充缺失值。
结论
具体来说,我们研究了为什么处理缺失数据对您的数据管道至关重要,然后是处理缺失数据的常用策略。
在处理缺失数据时,您应该记住,我们在本文中讨论的三种方法(保持、丢弃和填充)中没有正确的方法。这是因为每种情况都不同。
根据情况需要,始终由您决定选择哪种具体方法。
谢谢阅读!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。