在数据可用之前,需要对其进行清洗。这一繁琐的过程包括从删除重复值到处理缺失异常数据的所有内容。清洗阶段越准确,在数据处理、算法学习和建模阶段从数据集中提取价值就越容易。
事实上,任何基于数据科学的项目都首先需要有效的数据清洗和处理。
什么是数据处理/清洗?
作为一名数据科学家,在开始一个项目时,您需要首先收集各种数据集,可以通过从外部网站提取或从不同的内部来源获取,具体取决于您的需求。
并不是所有您获取的数据都与您的目标相关。为了将相关数据与无关数据区分开,您需要清洗收集的数据集。换句话说,您可能需要删除或修改列、删除重复值、处理缺失值和异常数据等。您还可能需要对数据进行标准化和缩放,使其符合一定范围。
数据清洗还包括通过使用图表和统计函数对数据进行可视化,以发现‘底层数据’,即‘均值’、‘中位数’、‘范围’、‘分布’等。
为什么数据处理/清洗对数据科学家很重要?
在任何数据科学家能够专注于建模之前,他们需要掌握数据清洗。您清洗数据的有效性将决定您的建模有多复杂。清洗阶段的数据集越有条理,建模阶段的学习算法就越简单。数据的结构也会直接影响您的预测精度。
简而言之,数据清洗与构建算法本身同样重要。一旦掌握了数据清洗,您可以期望:
- 较短的处理时间
- 更精确的预测
- 简化的算法功能
- 增强的模型学习
为什么选择 Python?
Python 正成为数据科学中首选的编程语言,原因有很多。首先,它提供了多种用于数据科学项目的计算库,包括数据处理和清洗。在本文中,我们将使用 Pandas Python 库。
使用 Python 进行数据处理和清洗的6个步骤:
#1:实施缺失值插补 – 这是一个标准的统计插补常数,使用 KNN 插补。
使用以下方法进行异常/异常值检测:孤立森林、一类 SVM、本地异常因子和/或异常检测算法。
#2:进行异常值/异常检测 – 您可以通过使用孤立森林、一类 SVM 和/或本地异常因子异常检测算法来实现这一点。
#3:使用 X 变量家族的清洗技术 – 在这种情况下,您需要应用自定义函数、删除重复项以及替换关键值。
#4:使用 Y 变量类型的清洗技术 – 在这里,进行标签编码、独热编码以及字典映射是很重要的。
#5:需要合并‘数据框’ – 这一步包括连接、合并和加入。
#6:最后一步是‘解析日期’ – 在这里,您需要使用自动格式检测字符串来完成‘日期时间’转换,包括将‘日期时间’对象更改为数字。
让我们详细介绍每一步:
第一步:插补缺失值
在原始提取的数据集中,最常见的问题之一是缺失值。只要缺失值不多,就可以在这阶段轻松插补。
- 简单插补方法,例如均值、中位数、众数,可以用每列的统计量来填补缺失值(NaN)。参数可以替换为‘均值’、‘中位数’、‘最频繁’或模式,或‘常数’,这是一个手动值。
- KNN 插补是一种更复杂的插补缺失值的方法。KNN 算法用于在数据集中找到缺失值的不同数据点。
需要注意的是,使用 KNN 插补时,需要对数据进行标准化以消除尺度差异。使用 KNN 插补需要:
- 标准化数据
- KNN 插补以填补缺失值
- 逆尺度/再次标准化数据
第二步:异常值和异常检测
- 孤立森林是一种用于返回数据集异常分数的算法。该算法选择一个特征并通过随机选择一个分割值来隔离观测值。路径通过表示值的正常性来创建。路径越短,表明异常。样本的短路径‘树’构成了一个‘森林’,可能揭示异常。
- 一类 SVM 是另一种发现异常的方法。适用于孤立森林无法应用的情况,原因是方差过大。
- 本地异常因子是第三种用于检测异常的方法。本地异常因子测量每个数据集的密度偏差,与其他数据集相比。显示出比邻居低密度的样本可能是异常值。这是一种基于距离的算法,意味着在使用之前需要标准化数据。这是一种高方差的孤立森林替代方法。
使用这三种方法中的任何一种时,确保异常值不是简单的数据集群是很重要的。您可以使用 PCA 可视化进行双重检查。
第三步:X 变量清洗方法
- 在无法通过内置函数清洗时,应用自定义函数是必要的。在这种情况下,您可能需要编写自己的函数,但您可以尝试首先使用外部内置函数。
- 删除重复项是数据清洗的重要部分。这可以通过 data.drop_duplicates() 来完成,删除具有相同值的行。您必须小心检查重复的行是否不是错误,尤其是在较小的数据集中。
- 对于大型数据集,抽样数据点是很重要的。这允许您随机抽样数据点,可以通过 data.sample(number_of_samples) 来完成。
- 重命名列通过 .rename 来完成,其中键是原始列名,值是重命名的值。
- 替换值可以通过 data.replace() 来完成,从数据框中取两个值,您将用其他值替换。这对于插补缺失值非常有用,以便插补算法能够有效工作。
第四步:Y 变量清洗方法
- 标签编码对于分类 y 变量是必要的。如果您的数据有两个类,需要将它们转换为 0 和 1,因为机器学习算法只能处理数学字符。您可以使用 .map() 函数来完成,将字典或原始名称转换为数字。如果有太多类无法手动映射,可以使用 sklearn 的自动方法。这种方法的好处是可以使用 encoder.inverse_transform(array) 将数据轻松恢复到原始格式。
- 在某些情况下,当您有很多类且不想对数据进行定量测量时,可以优先选择独热编码。使用独热编码,每个 y 值都是一个向量,其长度为每个类的数量,其中一个‘1’标记向量中的一个索引,其他值标记为‘0’。Pandas 有一个内置函数 get_dummies,可以自动采用表单并输出独热编码的数据框。
第五步:合并数据框
- 连接是上下方法连接数据框
- 合并是左右合并两个数据框的过程
- 加入是其他类型的合并。合并仅在两个数据框中存在共同关键字的行进行组合。加入包括左外连接,其中左数据框中的所有关键字都包含在内,而右数据框中的行仅在其关键字存在于左数据框时包含在内
第六步:解析日期
- 日期可能是非常困难的数据集,但也是一些最重要的数据集。这就是为什么理解如何正确处理这类数据非常重要。
- 自动格式检测 字符串到日期时间转换是一个关键技能,因为数据集很少附带可以直接访问的日期时间对象。您可以使用 dateutil 来自动确定天、月和年的位置。
- 将日期转换为数字对于模型能够理解时间的概念是必要的。日期时间对象转换为数字。换句话说,每个日期表示自数据集中最早日期以来经过的天数。该函数应用于日期列使用 .apply()
总结
数据处理和清洗是所有数据科学家在开始任何机器学习项目之前必须采取的关键步骤。本文提供了逐步指南,以减少混淆并节省时间。Python 的库允许您现在处理您的数据,以便在以后的步骤中获得更准确的结果。