译者 | 陆离
出品 | AI科技大本营(ID:rgznai100)
一样平常来说,我们在拟合一个机器学习模型或是统计模型之前,总是要进行数据清理的事情。由于没有一个模型能用一些凌乱无章的数据来产生对项目故意义的结果。

数据清理或打消是指从一个记录集、表或是数据库中检测和修正(或删除)破坏或不准确的数据记录的过程,它用于识别数据中不完全的、禁绝确的、不准确的或者与项目本身不干系的部分,然后对这些无效的数据进行更换、修正或者删除等操作。
这是个很长的定义,不过描述的较为大略,随意马虎理解。
为了简便起见,我们在Python中新创建了一个完全的、分步的指南,你将从中学习到如何进行数据查找和清理的一些方法:
缺失落的数据;
不规则的数据(非常值);
不必要的数据——重复数据等;
不一致的数据——字母大小写、地址等。
在本文中,我们将利用Kaggle供应的俄罗斯房地产数据集(
https://www.kaggle.com/c/sberbank-russian-housing-market/overview/description),目标是要预测一下俄罗斯近期的房价颠簸。我们不会去清理全体数据集,由于本文只是会用到个中的一部分示例。
在对数据集开始进行清理事情之前,让我们先大略地看一下里面的数据。
从上述的结果中,我们理解到这个数据集统共有30471行和292列,还确定了特色是数值变量还是分类变量,这些对我们来说都是有用的信息。
现在可以查看一下“dirty”数据类型的列表,然后逐个进行修复。
让我们立时开始。
缺失落的数据
处理缺失落的数据是数据清理中最棘手但也是最常见的一种情形。虽然许多模型可以适应各种各样的情形,但大多数模型都不接管数据的缺失落。
如何创造缺失落的数据?
我们将为你先容三种技能,可以进一步理解在数据集中的缺失落数据。
1、缺失落数据的热图
当特色数量较少的时候,我们可以通过热图来进行缺失落数据的可视化事情。
下图显示了前30个特色的缺失落数据样本。横轴表示特色的名称;纵轴显示不雅观测的数量以及行数;黄色表示缺失落的数据,而其它的部分则用蓝色来表示。
例如,我们看到特色life_sq在许多行中是有缺失落值的。而特色floor在第7000行附近险些就没有什么缺失落值。
缺失落数据热图
2、缺失落数据的百分比列表
当在数据集中有足够多的特色时,我们可以为每个特色列有缺失落数据的百分比。
这将不才面形成一个列表,用来显示每个特色的缺失落值的百分比。
详细来说,我们看到特色life_sq缺失落了21%的数据,特色floor则只缺失落了1%。这个列表是一个较为有用的汇总,根据它就可以补充热图可视化了。
缺失落数据的百分比列表——前30个特色
3、缺失落数据的直方图
当我们有足够多特色的时候,缺失落数据的直方图也是一种技能。
为了理解更多关于不雅观测数据的缺失落值样本的信息,我们可以利用直方图来对它进行可视化操作。
这个直方图有助于识别30471个不雅观测数据中的缺失落值情形。
例如,有6000多个没有缺失落值的不雅观测数据,而将近4000个不雅观测数据中仅有一个缺失落值。
缺失落数据直方图
我们该当怎么做?
对付处理缺失落的数据,没有任何同等的办理办法。我们必须在研究了特定的特色和数据集之后,来决定处理它们的最佳办法。
不才文中,分别先容了四种处理缺失落数据的常见方法。但是,如果碰着更繁芜的情形,我们就须要利用一些相对更加繁芜的方法,比如缺失落数据建模等。
1、放弃不雅观察
在统计学中,这种方法被称为列表删除技能。在这个方案中,只要包含了一个缺失落值,我们就要删除整条的不雅观测数据。
只有当我们确定所缺失落的数据没有供应有用信息的时候,我们才能实行此操作。否则,我们该当考虑利用其它的办法。
当然,也可以利用其它标准来删除不雅观察数据。
例如,从缺失落数据的直方图中,我们可以看到统共缺失落了至少35个以上的特色不雅观测数据。我们可以创建一个新的数据集df_less_missing_rows,然后删除具有35个以上缺失落特色的不雅观测数据。
2、删除特色
与方案一比较类似,我们只有在确定当前特色没有供应任何有用信息的时候才能实行这个操作。
例如,从缺失落数据百分比的列表中,我们把稳到hospital_beds_raion的缺失落值百分比高达47%。那么,我们就可以删除全体特色数据了。
3、补充缺失落数据
当特色是一个数值变量的时候,可以进行缺失落数据的补充。我们会将缺失落的值更换为相同特色数据中已有数值的均匀值或是中值。
当特色是一个分类变量的时候,我们可以通过模式(最频繁涌现的值)来补充缺失落的数据。
以life_sq为例,我们可以用它的中值来更换这个特色的缺失落值。
此外,我们还可以同时对所有的数字特色利用相同的补充数据的办法。
比较幸运的是,我们的数据集中并没有缺失落分类特色的值。然而,我们可以对所有的分类特色进行一次性的模式补充操作。
4、更换缺失落的数据
对付分类特色,我们可以添加一个类似于“_MISSING_”这样的值,这是一种新类型的值。对付数值特色,我们可以利用-999这样的分外值来更换它。
这样,我们仍旧可以保留缺失落值作为有用的信息。
不规则的数据(非常值)
非常值是与其它的不雅观测值截然不同的数据,它们可能是真正的非常值或者是缺点值。
如何创造不规则的数据?
根据特色是数值的还是分类的,我们可以利用不同的技能来研究其分布特点用以检测它的非常值。
1、直方图和方框图
当特色是数值的时候,我们可以利用直方图或者是方框图来检测它的非常值。
下面是特色life_sq的直方图。
由于可能存在非常值,因此,数据准确性的差别看起来是非常显著的。
直方图
为了更深入地研究这个特色,下面我们来画一个方框图。
在这个图中,我们可以看到一个超过7000的非常值。
方框图
2、描述性统计数据
此外,对付数值特色,非常值可能过于明显,甚至方框图无法对其进行可视化。相反地,我们可以看看它们的描述性统计数据。
例如,对付特色life_sq,我们可以看到最大值是7478,而75%的四分位数只有43。很明显,7478值是一个非常值。
3、条形图
对付分类特色,我们可以利用条形图来理解特色的种别以及分布的情形。
例如,特色ecology具有合理的分布,但是,如果有一个种别只有一个叫做“other”的值,那么这肯定便是一个非常值。
条形图
4、其它的技能
还有许多其它的技能也可以用来创造非常值,例如散点图、z-score和聚类等等,在这里将不会逐一进行讲解。
我们该当怎么做?
虽然探求非常值并不是什么难事,但是我们必须确定精确的办理办法来进行处理。它高度依赖于所利用的数据集和项目的目标。
处理非常值的方法有些类似于缺失落数据的操作。我们要么放弃、要么调度、要么保留它们。对付可能的办理方案,我们可以参考本文的缺失落数据部分。
不必要的数据
在对缺失落数据和非常值进行了所有的努力之后,让我们看看关于不必要的数据,这就更大略了。
首先,所有输入到模型中的数据都该当为项目的目标做事。不必要的数据便是数据没有实际的数值。根据不同的情形,我们紧张划分了三种类型的不必要数据。
1、无信息或者重复值
有时,一个特色没有有用的信息,由于太多的行具有相同的值。
如何创造无信息或者重复值?
我们可以创建一个具有相同数值的百分比较高的特色列表。
例如,我们不才面指定显示95%以上的具有相同值的行的特色。
我们可以一个一个地研究这些变量,看看它们是否具有有代价的信息,在这里就不显示细节了。
我们该当怎么做?
我们须要理解重复特色背后的缘故原由,当它们真的短缺有用信息的时候,就可以把它们放弃了。
2、不干系的数据
同样,数据须要为项目供应有用的信息。如果这些特色数据与我们在项目中要办理的问题没什么关系,那么它们便是不干系的。
如何创造不干系的数据?
首先,我们须要浏览一下这些特色,以便之后能识别那些不干系的数据。
例如,一个记录多伦多景象的特色数据并不能为预测俄罗斯房价供应任何有用的信息。
我们该当怎么做?
当这些特色数据并不符合项目的目标时,我们就可以放弃它们了。
3、重复数据
重复数据是指存在多个相同的不雅观测值。
重复数据紧张包含两种类型。
(1)基于所有特色的重复数据
如何创造基于所有特色的重复数据?
当不雅观察到的所有特色数据都相同的时候,就会发生这种重复征象,这是很随意马虎创造的。
我们首先要去除数据集中的唯一标识符id,然后通过删除重复数据来创建一个名为df_dedupped的数据集。我们通过比较两个数据集(df和df_deduped),找出有多少个重复行。
得出,10行是完备重复的不雅观察结果。
我们该当怎么做?
我们该当删除这些重复数据。
(2)基于关键特色的重复数据
如何创造基于关键特色的重复数据?
有时最好根据一组唯一的标识符来删除那些重复的数据。
例如,同一建筑面积、同一价格、同一建筑年份的两个房发生意营业同时发生的可能性险些为零。
我们可以设置一组关键特色作为交易的唯一标识符,包括timestamp、 full_sq、life_sq、floor、build_year、num_room、price_doc,我们会检讨是否有基于这些标识符的副本(重复记录)。
基于这组关键特色,共有16个副本,也便是重复数据。
我们该当怎么做?
我们可以根据关键特色删除这些重复数据。
我们在名为df_dedupped2的新数据集中删除了16个重复数据。
不一致的数据
让数据集遵照特定的标准来拟合模型也是至关主要的。我们须要用不同的方法去探索数据,这样就可以找出不一致的数据了。很多时候,这取决于细致的不雅观察和丰富的履历,并没有固定的代码用来运行和修复不一致的数据。
下面我们将先容四种不一致的数据类型。
1、大小写不一致
在分类值中存在着大小写不一致的情形,这是一个常见的缺点。由于Python中的数据剖析是区分大小写的,因此这就可能会导致问题的涌现。
如何创造大小写不一致?
先让我们来看看特色sub_area。
它用来存储不同地区的名称,看起来已经非常的标准化了。
但是,有时候在同一个特色数据中存在着大小写不一致的情形。举个例子,“Poselenie Sosenskoe”和“pOseleNie sosenskeo”就可能指的是同一地区。
我们该当怎么做?
为了避免这种情形的发生,我们要么所有的字母用小写,要么全部用大写。
2、数据格式不一致
我们须要实施的另一个标准化是数据格式。这里有一个例子,是将特色从字符串(String)格式转换为日期韶光(DateTime)格式。
如何创造不一致的数据格式?
特色timestamp因此字符串的格式来表示日期的。
我们该当怎么做?
我们可以利用下面的代码进行转换,并提取出日期或韶光的值。之后,会更随意马虎按年或月进行分组的交易量剖析。
3、数据的分类值不一致
不一致的分类值是我们要谈论的末了一种不一致数据的类型。分类特色值的数量有限。有时候由于输入缺点等缘故原由,可能会存在其它的值。
如何创造不一致的分类值?
我们须要仔细不雅观察一个特色来找出不一致的值,在这里,我们用一个例子来解释一下。
由于我们在房地产数据集中并不存在这样的问题,因此,我们不才面创建了一个新的数据集。例如,特色city的值被缺点地定义为“torontoo”和“tronto”。但它们两个都指向了精确的值“toronto”。
一种大略的确认方法是模糊逻辑(或是编辑间隔,edit distance)。它衡量了我们须要变动一个值的拼写用来与另一个值进行匹配的字母差异数量(间隔)。
我们知道这些种别该当只有“toronto”、“vancouver”、“montreal”以及“calgary”这四个值。我们打算了所有的值与单词“toronto”(和“vancouver”)之间的间隔。可以看到,那些有可能是打字缺点的单词与精确的单词之间的间隔较小,由于它们之间只差了几个字母而已。
我们该当怎么做?
我们可以设置一个标准将这些缺点的拼写转换为精确的值。例如,下面的代码将间隔“toronto”2个字母以内的所有值都设置为“toronto”。
4、地址数据不一致
地址特色目前成为了我们许多人最头疼的问题。由于人们常常在不遵照标准格式的情形下,就将数据输入到数据库中了。
如何创造不一致的地址?
我们可以通过查看数据来找到难以处理的地址。纵然有时候我们创造不了任何问题,但我们还可以运行代码,对地址数据进行标准化处理。
在我们的数据集中没有属于隐私的地址。因此,我们利用特色address创建了一个新的数据集df_add_ex。
正如我们所看到的那样,地址数据可是非常不规范的。
我们该当怎么做?
我们运行下面的代码,目的是将字母统一变成小写的、删除空格、删除空行以及进行单词标准化。
现在看起来好多了。
我们终于完成了,经由了一个很长的过程,打消了那些所有阻碍拟合模型的“dirty”数据。
原文链接:
https://towardsdatascience.com/data-cleaning-in-python-the-ultimate-guide-2020-c63b88bf0a0d
本文为 CSDN 翻译,转载请注明来源出处。