在这篇文章中,我们将指导你使用 Python 完成数据清理和预处理的初始步骤,从导入最流行的库到实际的特性编码。数据清理是检测和纠正(或删除)记录集、表或数据库中损坏或不准确的记录的过程,指的是识别数据中不完整、不正确、不准确或不相关的部分,然后替换、修改或删除脏的或粗糙的数据。/ /维基百科

步骤 1. 加载数据集

导入库

你需要做的第一件事绝对是导入库以进行数据预处理。有很多可用的库,但最流行和最重要的用于处理数据的 Python 库是 Numpy、Matplotlib 和 Pandas。Numpy 是用于所有数学方面的库。Pandas 是导入和管理数据集的最佳工具。Matplotlib(Matplotlib.pyplot)是制作图表的库。

为了方便以后使用,可以使用快捷别名导入这些库:

import numpy as np 

import matplotlib.pyplot as plt 

import pandas as pd

将数据加载到 Pandas

下载数据集并将其命名为 .csv 文件后,您需要将其加载到 Pandas DataFrame 中以探索它并执行一些基本的清理任务,删除不需要的信息,这些信息会使数据处理速度变慢。

通常,此类任务包括:

  • 删除第一行:它包含无关文本而不是列标题。此文本阻止数据集被 Pandas 库正确解析:

my_dataset = pd.read_csv(‘data/my_dataset.csv’, skiprows=1, low_memory=False)

  • 删除我们不需要的带有文本说明的列、url 列和其他不必要的列:

my_dataset = my_dataset.drop([‘url’],axis=1)

  • 删除所有只有一个值的列,或者有超过 50% 的缺失值以更快地工作(如果你的数据集足够大,它仍然有意义):

my_dataset = my_dataset.dropna(thresh=half_count,axis=1)

以不同的方式命名过滤后的数据集,以使其与原始数据分离,也是一种很好的做法。这样可以确保你在需要返回原始数据时仍然保留原始数据。

步骤 2. 探索数据集

理解数据

现在你已经设置好数据,但仍然应该花一些时间来研究它并了解每个列代表什么特征。这种对数据集的人工审查很重要,可以避免数据分析和建模过程中的错误。

为了使这个过程更简单,你可可以创建一个 DataFrame,该 DataFrame 包含列的名称、数据类型、第一行的值和数据字典中的描述。

在探索这些功能时,你可以关注以下任何列:

  • 格式化不佳
  • 需要更多的数据或大量的预处理才能变成有用的特征
  • 包含冗余信息

因为如果处理不当,这些事情会影响你的分析。

你还应该注意数据泄漏,这会导致模型过度拟合。这是因为该模型还将从我们使用它进行预测时不可用的特征中学习。我们需要确保我们的模型只使用贷款申请时的数据进行训练。

确定目标列

在探索筛选数据集之后,你需要创建一个因变量矩阵和一个自变量向量。首先,你应该根据你要回答的问题决定将合适的列用作建模的目标列。例如,如果你想预测癌症的发展,或者信用被批准的机会,你需要找到一个带有疾病状态或贷款发放情况的列,并将其用作目标列。

例如,如果目标列是最后一列,则可以通过键入以下内容来创建因变量矩阵:

X = dataset.iloc[:, -1]..values

这第一个冒号()表示要取数据集中的所有行。 : -1 表示我们要获取除最后一列之外的所有数据列。最后的 value 意味着我们想要所有的值。

要获得仅包含最后一列数据的自变量向量,可以键入

y = dataset.iloc[:, -1].values

步骤 3. 为机器学习准备特征

最后,是时候做准备工作来为 ML 算法提供特征了。要清理数据集,你需要处理缺失值和分类特征,因为大多数机器学习模型的数学假设数据是数值的,不包含缺失值。此外, 如果你尝试使用包含缺失值或非数字值的数据来训练线性回归和逻辑回归等模型,scikit-learn 库会返回错误。

处理缺失值

丢失数据可能是不完整数据最常见的特征。这些值通常采用 NaN 或 None 的形式。

以下是导致缺失值的几个原因:有时值缺失是因为它们不存在,或者是因为数据收集不当或数据输入不当。例如,如果某人是未成年人,而该问题适用于 18 岁以上的人,则该问题将包含一个缺失值。在这种情况下,为该问题填写值是错误的。

有几种方法可以填补缺失值:

  • 如果你的数据集足够大并且缺失值的百分比很高(例如超过 50%),你可以删除带有数据的行;
  • 可以用 0 填充所有空变量来处理数值;
  • 可以使用 scikit-learn 库中的 Imputer 类来用数据(平均值、中值、最频繁)填充缺失值;
  • 还可以决定用同一列中紧随其后的任何值来填充缺失值。

这些决定取决于数据的类型、你想对数据做什么以及值缺失的原因。实际上,仅仅因为某样东西很受欢迎并不意味着它就是正确的选择。最常见的策略是使用平均值,但根据数据的不同,可能会采用完全不同的方法。

处理分类数据

机器学习仅使用数值(float 或 int 数据类型)。但是,数据集通常包含需要转换为数字的对象数据类型。在大多数情况下,类别值是离散的,可以编码为虚拟变量,为每个类别分配一个数字。最简单的方法是使用 One Hot Encoder,指定要处理的列的索引:

从 sklearn.preprocessing 导入 OneHotEncoder 

onehotencoder = OneHotEncoder(categorical_features = [0])

X = onehotencoder.fit_transform(X).toarray()

处理不一致的数据输入

例如,当一个列中有不同的唯一值时,就会出现生不一致。你可以考虑不同的大写方法、简单的印刷错误和不一致的格式来形成一个想法。删除数据不一致的方法之一是删除条目名称之前或之后的空格,并将所有大小写转换为小写。

但是,如果存在大量不一致的唯一条目,则无法手动检查最接近的匹配项。你可以使用 Fuzzy Wuzzy 包来确定哪些字符串最有可能相同。它接受两个字符串并返回一个比率。比率越接近 100,就越有可能统一字符串。

处理日期和时间

数据不一致的一种类型是日期格式不一致,例如同一列中的 dd/mm/yy 和 mm/dd/yy。你的日期值可能不是正确的数据类型,这将不允许你有效地执行操作并从中获得洞察力。这个时候就可以使用 datetime 包来修复日期的类型了。

缩放和标准化

如果你需要指定一个量的变化不等于另一个量的变化,则缩放很重要。在缩放的帮助下,你可以确保一些功能虽然很大,但它们不会被用作主要预测因素。例如,如果你用一个人的年龄和工资来预测,有些算法会因为工资更大而更加关注,这是没有任何意义的。

标准化涉及将数据集转换或转换为正态分布。某些算法(如 SVM)在标准化数据上收敛得更快,因此对数据进行标准化以获得更好的结果是有意义的。

有很多方法可以执行特征缩放。简而言之,我们将所有特征都放在同一尺度上,这样就不会被其他特征所支配。例如,你可以使用 sklearn.preprocessing 包中的 StandardScaler 类来拟合和转换你的数据集:

从 sklearn.preprocessing 导入 StandardScaler

sc_X = StandardScaler()

X_train = sc_X.fit_transform(X_train) 

X_test = sc_X.transform(X_test)

由于你不需要让它适合你的测试集,所以你只需应用转换。

sc_y = StandardScaler() 

y_train = sc_y.fit_transform(y_train)

保存为 CSV

为了确保你仍然拥有原始数据,最好将工作流的每个部分或阶段的最终输出存储在单独的 csv 文件中。通过这种方式,你将能够更改数据处理流程,而无需重新计算所有内容。

正如我们之前所做的那样,你可以使用 pandas to_csv() 函数将 DataFrame 存储为 .csv。

my_dataset.to_csv(“processed_data/cleaned_dataset.csv”,index=False)

结论

这些是处理大型数据集、清理和准备任何数据科学项目数据所需的非常基本的步骤。在制定任何模型之前,你需要妥善安排和整理数据。更好、更干净的数据胜过最好的算法,更重要的是,执行基本的预处理并不难!

作者:Max Ved

免责声明:凡未注明来源或者来源为网络的信息均转自其它平台,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。网站只负责对文章进行整理、排版、编辑,不承担任何法律责任。若有侵权或异议请联系我们删除,谢谢。

发表评论

您的电子邮箱地址不会被公开。