文章目录
- 一、说明
- 二、数据预处理
- 三、缺失值
- 四、数据集中可能会出现多种类型的缺失值:
- 五、处理缺失值的方法
- 六、结论
一、说明
在AI数据挖掘中,对原始数据的预处理是必须的技术手段,本篇将对数据预处理的一系列注意事项进行展示。
二、数据预处理
3 级清理(缺失值、离群值和错误)
此级别的数据清理是最困难的数据清理级别,因为它需要更深入地了解数据预处理的分析目标。在第一级,我们清理了表格,而不管数据结构或记录的值如何。在第二级中,我们关注的是拥有一个支持我们分析目标的数据结构,但我们仍然没有太多关注记录值的正确性或适当性,我们在第三级中解决了这个问题。在第三级数据清理中,我们将重点关注记录值,并采取措施确保检查与数据中记录值相关的缺失值、异常值和错误这三个问题。是。首先,我们确保识别出数据中的缺失值,并调查发生这种情况的原因,并采取适当的措施来解决这些问题,以确保记录的值正确且无误。然后,确保在数据中识别出异常值,并采取适当的措施来修复它们。
第三级数据清理与第二级数据清理类似,涉及数据分析的目标和工具。一级数据清理可以单独进行,与数据分析的目标和工具无关。
三、缺失值
在数据分析中,缺失值是指特定观测值或变量中没有值。缺失值可能由于各种原因而发生,例如数据输入错误、设备故障,甚至是有意删除。缺失值可以表示为空单元格或特殊字符,例如“N/A”、“-9999”或“NaN”或空值。
缺失值的管理是数据清理和预处理的一个重要方面,因为它会对数据分析的准确性和有效性产生重大影响。处理缺失值的方法多种多样,包括插补、删除以及使用可以处理缺失数据的算法,方法的选择取决于数据的具体性质和目标。在图 2 中,我们有一些缺失值的虚拟数据,这些值可以使用 “isna()” 命令来识别。
以下是创建数据并将其转换为 CSV 文件的代码:
import csv
data = [
['Column_A', 'Column_B', 'Column_C'],
[10, 20, 30],
['', 40, ''],
[50, '', '']
]
with open('output.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerows(data)
我们可以用 pandas 读取和展示它:
import pandas as pd
df = pd.read_csv('output.csv')
df.head()
下面的代码标识这些缺失值并计算它们在每列中的数量。
print('Number of missing values:')
for col in df.columns:
n_MV = sum(df[col].isna())
print(f'{col}: {n_MV}')
输出:
Number of missing values:
Column_A: 1
Column_B: 1
Column_C: 2
现在,我们已经知道如何检测缺失值,我们需要将注意力转向了解导致这些值缺失的原因。在我们寻求处理缺失值的过程中,我们首先需要知道它发生的原因。在下文中,我们将讨论哪些情况会导致 missing 值。
缺失值的原因
出现缺失值的原因可能有很多。了解值缺失的原因是我们能够有效管理缺失值的最关键信息。以下列表提供了值可能缺失或缺失的最常见原因:
·人为错误
·受访者可以拒绝回答调查问题。
·参与调查的人不理解问题。
·提供的值是一个明显的错误,因此已被删除。
·没有足够的时间回答问题。
·故意删除和忽视数据收集(可能是出于欺诈目的)
·由于缺乏有效的数据库管理而导致记录丢失
·第三方操纵或阻止数据收集
·传感器故障
·编程错误
在处理数据时,有时我们所拥有的只是数据,没有人可以询问有关数据的问题。因此,这里重要的是对数据感到好奇,并了解缺失值背后的原因。但是,如果我们可以访问了解数据的人,则查找缺失值原因的最佳方法是询问该人。无论是什么导致了缺失值,从数据分析的角度来看,我们可以将所有缺失值分为三种类型。了解这些类型对于决定如何管理它们非常重要。
缺失值的类型
图 3. 缺失值的类型
四、数据集中可能会出现多种类型的缺失值:
-
完全随机缺失 (MCAR)
当缺失数据与数据集中的任何其他变量无关时。换句话说,缺失数据是完全随机的,并且没有系统模式。当缺失值被分类为 MCAR 时,具有缺失值的数据对象可以是任何数据对象。例如,如果空气质量传感器由于 Internet 连接的随机波动而无法与其服务器通信以存储记录,则缺失值为 MCAR 类型。这是因为任何数据对象都可能发生 Internet 连接问题,但对于特定数据对象,这些问题完全随机发生。 -
随机缺失 (MAR)
这种情况是指缺失数据与数据集的其他变量相关,但与缺失数据本身无关。这意味着缺失的概率取决于数据集中的其他观测变量。换句话说,缺失不是随机的,而是可以用数据集中的其他变量来解释的。例如,假设我们有一个数据集,其中包含有关收入和教育水平的信息,但某些观测值没有收入值。在这种情况下,缺失的数据可能与教育水平有关,但与收入本身无关。特别是,受教育程度较高的人不得输入收入值。这是 MAR 的一个示例,因为缺失数据的概率取决于观察到的变量(教育水平),而不是缺失变量(收入)。处理 MAR 的方法之一是使用根据观测数据估计缺失值的插补方法。有许多插补方法,包括均值插补、回归插补和多重插补。插补方法的选择取决于数据集的具体特征和感兴趣的研究问题。 -
失踪非随机 (MNAR)
这种类型的缺失数据最难处理,因为当缺失的概率取决于未观察到的数据时,就会发生这种情况,并且可能与数据集未捕获的因素有关。换句话说,缺失不是随机的,不能用数据集中的任何观察或测量变量来解释。例如,假设我们有一个数据集,其中包含有关收入、教育水平和工作满意度的信息,但某些观测值没有收入值。在这种情况下,缺失数据可能与收入本身有关,因此收入较高的个人可能没有记录相关的收入金额(例如,逃税)。这是 MNAR 的一个例子,因为缺席的概率取决于未观察到的变量 (收入)。处理 MNAR 具有挑战性,因为缺失数据与难以或不可能测量或控制的未观察到的因素有关。插补方法可能不适用于 MNAR,因为这些方法假定缺失仅与观测变量相关。相反,数据分析师可能需要使用更复杂的统计方法,例如最大似然估计或贝叶斯建模,这些方法可以解释缺失数据机制并估计所需的参数。需要注意的是,MNAR 会导致偏倚并影响统计结论的有效性。
了解数据集中缺失值的类型对于选择适当的方法来处理数据非常重要。一般来说,MCAR 是最容易错过的类型,其次是 MAR,而 MNAR 是最难的。
五、处理缺失值的方法
有四种不同的方法可以处理缺失值:
- 第一种方法:保持缺失值不变。
这种方法保留了缺失值并进入了数据预处理的下一阶段。在以下两种情况下,此方法是处理缺失值的最佳方法:
我们在必须与他人共享数据的情况下使用此策略,并且我们不是唯一打算使用数据进行分析的人。通过这种方式,我们还允许其他人根据自己的分析需求决定如何处理缺失值。
如果数据分析目标和我们使用的工具都可以处理缺失值,则最佳方法是保留它们。例如,可以采用 K 最近邻 (KNN) 算法来解决缺失值,而无需删除数据。
2. 第二种方法:删除具有缺失值的一行或多行数据。
应非常谨慎地选择这种方法,因为它可能会导致数据集出现偏差,还会遗漏有价值的信息。例如,当数据集中的缺失值为 MNAR 或 MAR 类型时,我们会尽可能避免删除具有缺失值的数据。这是因为样本的某一部分被排除在数据集之外。
即使缺失值是 MCAR 类型,我们也应该首先尝试找到其他方法来处理这些值,然后再继续删除行。当没有其他方法可以处理缺失值时,应将此方法视为最后的手段。
-
第三种方法:删除包含缺失值的特征(属性或列)
当数据集中的大多数缺失值来自一个或两个特征时,我们可能会考虑将特征删除作为处理缺失值的一种方式。当然,如果该功能是我们无法继续项目的关键功能,那么这种方法将不起作用。但是,如果要素对于工程不是必需的,则移除缺失值较大的要素可能是一种不错的方法。当要素中的缺失值数量足够大(大约超过数据的 25%)时,估计和插补缺失值将变得毫无意义,并且删除要素比估计缺失值要好。 -
第四种方法:估计一个值并替换缺失值
在这种方法中,我们使用知识和分析工具来填充缺失值。我们用另一个值替换缺失值,因为我们知道这可能会使分析产生偏差。如果缺失值是 MCAR 或 MAR 类型,并且我们选择的方法无法处理具有缺失值的数据集,则插补缺失值可能是最佳方法。
估计缺失值的替换项有四种常规方法,我们在下面介绍:
A. 使用中心趋势值(如平均值、中位数或众数)进行插值:
此方法更适合于缺失的 MCAR 值。
B. 将更相关的数据组的集中趋势值归因于缺失值:此方法更适合 MAR 缺失值。
C. 回归分析:该方法通常效率不高,但如果我们必须处理具有 MNAR 类型缺失值的数据集,则此方法更适合此类数据集。
D. 插值:当数据集为时间序列数据集且缺失值为 MCAR 类型时,此方法更合适。
注意:估计和插补过程中的一个常见错误是,我们想用最准确的替代项来估算缺失值,这不是正确的想法。插补时,我们的目标不是最好地预测缺失值的值,而是将它们替换为对分析造成的偏差最小的值。例如,对于聚类分析,如果数据集具有 MCAR 缺失值,则选择整个总体的集中趋势是最好的方法。这是因为 central tendency 的值在对数据对象进行分组的过程中充当中立投票。
注意: 在本章中,讨论的技术和方法基于 Roy Jafari 的《Hands-On Data Preprocessing in Python》一书,该书为理解和实施有效的数据预处理工作流提供了有价值的参考。
六、结论
在机器学习系列的第 7 部分中,我们深入探讨了 3 级清理,它包括三个主要部分:1. 缺失值,2. 异常值和 3. 错误。在这篇文章中,我们重点介绍了缺失值并探讨了与之相关的各个方面,包括缺失值出现的原因、缺失值的不同类型的缺失值以及有效处理缺失值的方法。
在即将发布的博文机器学习系列:第 8 天 — 预处理(第 3 部分)中,我们将把注意力转移到异常值上。异常值是与数据集中的大多数观测值明显不同的数据点。它们可能由于各种原因而产生,例如测量错误、数据输入错误或数据中真正的极值。检测和处理异常值至关重要,因为它们可能会对分析和建模过程产生不成比例的影响。
如果您喜欢这篇文章并希望支持我,请确保: