【数据挖掘 05】数据清洗快速入门
文章目录
1. 简介
错误或不一致的数据会导致错误的结论。因此,清洗和理解数据的质量对结果质量有很大影响。
Quality data beats fancy algorithms.
数据清洗(Data cleaning,or data cleansing),是通过识别数据中的任何错误或损坏,更正或删除它们,或根据需要手动处理以防止再次发生错误来确保数据正确,一致和可用的过程。该过程的手动部分是使数据清洗成为一项压倒性任务的关键。尽管许多数据清洗可以通过软件完成,但必须对其进行监视并检查不一致之处。
以下是数据清洗过程中的几个主要优点:
- 它消除了将多个数据源提取到一个数据集中时不可避免的主要错误和不一致情况。
- 使用工具来清洗数据将使每个人都更有效率,因为他们将能够从数据中快速获取所需信息。
- 能够映射不同的功能,数据的用途以及数据的来源。
2. Data quality
2.1 Validity
有效性(Validity)是指数据符合定义的业务规则或约束的程度。
- 数据类型约束(Data-Type Constraints):特定列中的值必须具有特定数据类型,例如布尔值,数值,日期等。
- 范围约束(Range Constraints):通常,数字或日期应在一定范围内。
- 强制约束(Mandatory Constraints):某些列不能为空。
- 唯一约束(Unique Constraints):一个字段或多个字段的组合在整个数据集中必须唯一。
- Set-Membership Constraints:列的值来自一组离散值,例如枚举值。例如,一个人的性别可以是男性或女性。
- 外键约束(Foreign-key constraints):如在关系数据库中一样,外键列不能具有所引用的主键中不存在的值。
- 正则表达式模式(Regular expression patterns):必须采用特定模式的文本字段。例如,可能要求电话号码的格式为(999)999–9999。
- 跨字段验证(Cross-field validation):必须满足跨越多个字段的某些条件。例如,患者出院日期不能早于入院日期。
2.2 Accuracy
准确性(Accuracy)是指数据接近真实值的程度。
定义所有可能的有效值可以轻松发现无效值,但这并不意味着它们是准确的。
一个有效的街道地址可能实际上并不存在。一个有效的人的眼睛颜色(例如蓝色)可能是有效的,但并不代表现实。
要注意的另一件事是准确性(accuracy)和精确性(precision)之间的差异。说生活在地球上是真的。但是,不精确。在地球上的哪里?说住在特定的街道地址会更准确。
2.3 Completeness
完整性(Completeness)是指所有必需数据的已知程度。
由于各种原因,将会丢失数据。可以通过质疑原始来源来缓解这一问题,例如重新采访该主题。主题可能会给出不同的答案,或者很难再次达到。
2.4 Consistency
一致性(Consistency)是指数据在同一数据集中或在多个数据集中的一致性程度。
当数据集中的两个值相互矛盾时,就会出现不一致的情况。例如,离婚后的有效年龄(例如10岁)可能与婚姻状况不符。客户记录在两个具有两个不同地址的不同表中。哪一个是对的?
2.5 Uniformity
均匀度(Uniformity)使用同一度量单位指定数据的程度。
重量可以用磅或千克记录。日期可能遵循美国格式或欧洲格式。货币有时是美元,有时是人民币。因此,必须将数据转换为单个度量单位。
3. 工作流程
工作流程由三个步骤组成,旨在生成高质量数据并考虑我们已经讨论的所有标准。
- 检查(Inspection):检测意外,不正确和不一致的数据。
- 清洗(Cleaning):修复或删除发现的异常。
- 验证(Verifying):清洁后,检查结果以验证正确性。
- 报告(Reporting):记录有关所做更改和当前存储数据质量的报告。
实际上,这不是顺序过程,而是一个反复无休止的过程。当发现新的缺陷时,可以从验证到检查。
3.1 Inspection
检查数据非常耗时,并且需要使用许多方法来探索基础数据以进行错误检测。这里是其中的一些:
3.1.1 资料分析(Data profiling)
一个汇总统计有关数据的,所谓的数据分析,是真正有用的,以提供有关数据质量的总体思路。
例如,检查特定的列是否符合特定的标准或模式。数据列是否记录为字符串或数字?缺少多少个值?一列中有多少个唯一值及其分布?该数据集是链接到另一个数据集还是与另一个数据集有关系?
3.1.2 可视化(Visualizations)
通过使用诸如均值,标准差,范围或分位数之类的统计方法分析和可视化数据,人们可以找到出乎意料的错误值。
例如,通过可视化各个国家/地区的平均收入,可能会发现有一些离群值(链接具有图像)。有些国家的人的收入比其他任何人都要多。这些离群值值得调查,不一定是错误的数据。
3.1.3 软件包(Software packages)
可以使用几种软件包或库来指定约束条件,并检查数据是否违反这些约束条件。
此外,他们不仅可以生成关于违反了哪些规则以及违反了多少次的报告,还可以创建与哪些规则相关联的列的图形。
3.2 Cleaning
数据清洗涉及基于问题和数据类型的不同技术。可以采用不同的方法,每种方法都有自己的权衡。总体而言,不正确的数据将被删除,更正或估计。
3.2.1 不相关数据(Irrelevant data)
不相关的数据是那些实际上并不需要的数据,并且不适合我们要解决的问题。例如,如果我们正在分析有关人群总体健康状况的数据,则无需按列方式使用电话号码。
同样,如果您只对一个特定国家/地区感兴趣,则不希望包括所有其他国家/地区。或者,仅研究那些接受过手术的患者,我们不会逐行包括每个人。
仅当您确定一条数据不重要时,才可以删除它。否则,探索特征变量之间的相关矩阵。
即使您没有发现任何相关性,也应咨询领域专家。您永远都不会知道,从领域角度(例如临床角度)来看,似乎无关的特征可能非常相关。
3.2.2 重复项(Duplicates)
重复项是在数据集中重复的数据点。
它经常发生在例如:
- 数据来自不同来源
- 用户可能会两次以为未真正提交表单而点击了“提交”按钮。
- 提交了两次在线预订请求,以更正第一次错误输入的错误信息。
一个常见的问题是两个用户具有相同的标识号。或者,同一篇文章被报废了两次。因此,只需将其删除。
3.2.3 类型转换(Type conversion)
确保将数字存储为数字数据类型。日期应存储为日期对象或Unix时间戳(秒数),依此类推。如果需要,可以将分类值转换为数字。通过查看摘要中每一列的数据类型,可以很快发现这一点。
请注意,不能转换为指定类型的值应转换为NA值(或任何值),并显示警告。这表明该值不正确,必须将其固定。
3.2.4 语法错误(Syntax errors)
-
删除空格:应删除字符串开头或结尾的多余空格。
-
填充字符串:字符串可以用空格或其他字符填充到一定宽度。例如,某些数字代码通常以前缀零表示,以确保它们始终具有相同的位数。
-
修正拼写错误:可以用许多不同的方式输入字符串,而且也难怪会出错。
3.3 标准化(Standardize)
我们的职责不仅是识别拼写错误,而且还要将每个值都设置为相同的标准化格式。
对于字符串,请确保所有值均为小写或大写。对于数值,请确保所有值都具有特定的度量单位。
例如,最高高度可以是米和厘米。1米的差异被认为与1厘米的差异相同。因此,这里的任务是将高度转换为一个单位。
对于日期,美国版本与欧洲版本不同。将日期记录为时间戳(以毫秒为单位)与将日期记录为日期对象不同。
3.4 缩放/转换(Scaling / Transformation)
缩放意味着转换数据以使其适合特定的比例,例如0–100或0–1。
例如,可以将学生的考试分数重新缩放为百分比(0-100),而不是GPA(0-5)。
它还可以帮助简化某些类型的数据的绘制。例如,我们可能希望减少偏斜度以帮助绘图(当具有如此多的异常值时)。最常用的函数是对数,平方根和反函数。
也可以对具有不同测量单位的数据进行缩放。
由于这两项考试的规模不同,因此无法比较不同考试的学生分数,即SAT和ACT。1 SAT分数的差异被认为与1 ACT分数的差异相同。在这种情况下,我们需要重新缩放SAT和ACT分数以获取数字,例如介于0–1之间。
通过缩放,我们可以绘制和比较不同的分数。
3.5 归一化(Normalization)
虽然归一化也将值重新缩放到0–1的范围内,但此处的目的是转换数据以使其以正态分布。为什么?在大多数情况下,如果我们要使用依赖于正态分布数据的统计方法,则可以对数据进行标准化。怎么样?一个可以使用log函数,或者也许使用以下方法之一。
根据所使用的缩放方法,数据分布的形状可能会发生变化。例如,“ 标准Z分数 ”和“ 学生的t统计量 ”保留了形状,而对数函数却没有。
3.6 缺失值
3.6.1 Drop
如果列中的缺失值很少发生并且是随机发生的,那么最简单,最向前的解决方案是删除具有缺失值的观察值(行)。如果大多数列的值都丢失并且是随机出现的,那么通常的决定是删除整个列。这在进行统计分析时特别有用,因为填写缺失值可能会产生意外或有偏差的结果。
3.6.2 Impute
这意味着根据其他观察结果计算缺失值。有很多方法可以做到这一点。
第一,使用平均值,中位数等统计值。但是,这些都不保证数据的公正性,尤其是在缺少许多值的情况下。当原始数据不倾斜时,平均值最有用,而中位数更健壮,对异常值不敏感,因此在数据倾斜时使用。在正态分布的数据中,可以得到与平均值相差2个标准偏差以内的所有值,通过KaTeX parse error: Expected 'EOF', got '&' at position 18: …ean — 2 * std) &̲ (mean + 2 * st… 计算。
第二,使用线性回归。根据现有数据,人们可以计算两个变量之间的最佳拟合线,例如,房价与面积m²。值得一提的是,线性回归模型对异常值敏感。
第三,Hot-deck。从其他类似记录中复制值。仅当有足够的可用数据时,此功能才有用。并且,它可以应用于数值和分类数据。
可以采用随机方法,在该方法中,我们使用随机值填充缺失值。进一步采取这种方法,可以先根据某个特征(例如性别)将数据集分为两组(层次),然后随机分别填充不同性别的缺失值。
在顺序 hot-deck 插补中,将根据辅助变量对包含缺失值的列进行排序,以使具有相似辅助功能的记录顺序出现。接下来,每个缺少的值将使用以下第一条可用记录的值填充。
更有趣的是,也可以使用????最近邻归集法,该归类法对相似的记录进行分类并将它们放在一起。然后通过首先找到最接近具有缺失值的记录的????个记录来填充缺失值。接下来,从1/3个最近的邻居中选择一个值(或从中计算出一个值)。在计算的情况下,可以使用诸如均值的统计方法(如前所述)。
3.6.3 Flag
有人认为,无论我们使用哪种估算方法,填写缺失值都会导致信息丢失。这是因为说数据丢失本身是有用的,算法应该知道这一点。否则,我们只是在增强其他功能已经存在的模式。
当丢失数据不是随机发生时,这一点尤其重要。例如进行一项调查,其中来自特定种族的大多数人拒绝回答某个问题。
丢失的数字数据可以用0填充,但是在计算任何统计值或绘制分布图时必须忽略这些零。虽然分类数据可以用“ Missing”(缺少)来填充:这是一个新类别,它表明该数据段已丢失。
3.7 离群值
它们的值与所有其他观察值有显着差异。与Q1和Q3四分位数相差超过(1.5 * IQR)的任何数据值均被视为离群值。在证明有错之前,离群值是无辜的。话虽如此,除非有充分的理由,否则不应将其删除。
例如,人们可能会注意到一些不太可能发生的怪异,可疑的值,因此决定删除它们。不过,在删除之前,值得进行调查。还值得一提的是,某些模型(例如线性回归)对异常值非常敏感。换句话说,离群值可能会使模型脱离大多数数据所在的位置。
3.8 记录中和跨数据集错误
这些错误是由于在同一行或跨数据集相互矛盾的两个或多个值引起的。
例如,如果我们有一个关于城市生活成本的数据集。总栏必须等于房租,交通和食物的总和。同样,孩子不能结婚。员工的薪水不能低于计算的税额。同样的想法适用于跨不同数据集的相关数据。
4. 验证(Verifying)
完成后,应该通过重新检查数据并确保规则和约束确实成立来验证正确性。
例如,在填写丢失的数据后,它们可能违反任何规则和约束。
否则,可能需要进行一些手动更正。
5. 报告(Reporting)
报告数据的健康程度对于清洁同样重要。
如前所述,软件包或库可以生成所做更改,违反了哪些规则以及执行了多少次的报告。
除了记录违规之外,还应考虑这些错误的原因。为什么它们首先发生?
参考:
https://www.geotab.com/blog/data-cleaning/
https://towardsdatascience.com/the-ultimate-guide-to-data-cleaning-3969843991d4