用无人监督的ML进行数据清洗不再是非常痛苦的事情!

cafebar 2018-12-08

点击上方关注,All in AI中国

数据清洗不一定是一件非常痛苦的事情!这篇文章就是一个很好的例子,说明如何使用无监督的机器学习来清理大量凌乱的文本数据。

用无人监督的ML进行数据清洗不再是非常痛苦的事情!

我们在处理什么?

在这个例子中,我们将面临着从HMTL和PDF文件中删除的数千篇文章,返回的文本质量在很大程度上取决于抓取过程。从样本检查的一些结果中我们知道存在一些问题,从错误的链接、不可读的PDF到已成功读入的项目,但内容本身就是完全垃圾。

这些文件现在保存于Pandas数据框中,每个项目都包含“元数据”,例如公司名称和发布年份,以及从return中删除的文本:

用无人监督的ML进行数据清洗不再是非常痛苦的事情!

这是起点- 文本数据是数据框中的最后一列

简单的题外话:Missingno

python Missingno包非常有用。它可以在4行代码中的数据框上安装和运行,如果数据框中有任何缺失信息,它将快速突出显示。它还能够对数据集中的行进行采样,因此可以轻松地处理非常大的数据帧。

用无人监督的ML进行数据清洗不再是非常痛苦的事情!

在我们的数据框上运行此操作,它可以向我们显示数据已完成,但一列除外。由于我们没有使用它进行分析,因此不需要进一步的工作,但如果在其他领域存在差距,我们将不得不考虑如何最好地处理这些(例如删除这些行或尝试插入缺失值)。

用无人监督的ML进行数据清洗不再是非常痛苦的事情!

该图表显示除了一列之外的所有列都已完成- 我们现在可以专注于自己的文本数据

...返回清理文本数据

扫描数据框中的文本显然存在问题。例如,在此项中读取PDF文件时出现问题:

CMR644311ABP英国现代奴隶制声明2017年9月)ABP UKModern Slavery Statement 2017年9月ABP UKModern Slavery Statement 2017年9月AABP UKModern Slavery Statement 2017年9月bABP ......

这个看起来更糟糕:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!”#)*%+ !,(- &*(#./& 0#&!- !* !! 1 !! 2-34 5 5/6 !! 1 !! 7-8( &9%!! 1 !! 7:;!<=>!3-8(%&- *($ 9 !!!!!!!!!!!!!! Academia Ltd. Modern Slavery Compliance State ....

这些显然无法修复- 但我们如何将它们与已正确读取的文本文件分开?

机器学习拯救了我们

我们可能花费大量时间尝试从真实数据中分离出这些损坏的信息,但这正是机器学习的亮点。希望我们可以使用它来查找数据中的模式,并将其自动集中到干净、杂乱的数据中,从而节省大量工作。使用Python,可以通过三个步骤快速轻松地完成此操作:

步骤1.为算法创建功能:

下面的代码将单词计数、字符数和唯一单词(只出现一次)数作为新列显示在我们的数据框中:

用无人监督的ML进行数据清洗不再是非常痛苦的事情!

步骤2.可视化数据:

使用Spotify、Chartify中真正优秀的图表库,可以使用我们刚刚创建的新功能快速绘制数据图:

用无人监督的ML进行数据清洗不再是非常痛苦的事情!

这个创建的图表告诉我们关于我们的数据集的大量信息。有一个明显的趋势,即增加单词、字符和唯一单词。这是可以预料的,但是在这下面还有一大堆,底部有一行比较明显的呈现,单词非常少,但字符数很多:

用无人监督的ML进行数据清洗不再是非常痛苦的事情!

步骤3.创建集群:

通过使用机器学习对数据进行聚类,我们应该能够自动拆分在图表中看到的每个区域,并进一步调查这些区域。下面的代码对数据进行缩放,然后将K-Means聚类应用于它:

用无人监督的ML进行数据清洗不再是非常痛苦的事情!

再次通过我们的可视化运行,我们得到以下结果:

用无人监督的ML进行数据清洗不再是非常痛苦的事情!

用无人监督的ML进行数据清洗不再是非常痛苦的事情!

这在划分问题领域方面做了很好的工作。看起来集群1、4和5需要进一步研究。在此之前,让我们放大图表左下角,以确保集群仍然在这里工作,因为在当前的图中很难看到:

用无人监督的ML进行数据清洗不再是非常痛苦的事情!

即使在点之间存在重叠的情况下,算法也足够健壮以基于单独的字符计数来区分它们。

为什么我们选择7个集群?试错,7是仍然有效分割数据集的最小值。

检查结果

这一切看起来都很棒,但我们实际上已经实现了我们的目标吗? 我们可以通过检查每个集群中的内容来检查这一点,特别是集群1、4和5。

Custer 1:

用无人监督的ML进行数据清洗不再是非常痛苦的事情!

这很有意思,文字看起来也很完美。 以上示例来自3M,但另一个return区域也很干净。集群1是从现代奴隶制声明中获得的实际数据的一部分,而不是数据质量差。当我们进一步分析数据时,我们想要研究为什么这个集群存在。

集群4和5:

用无人监督的ML进行数据清洗不再是非常痛苦的事情!

这是我们凌乱的数据,单个的单字是很有意义的,该算法也足够智能,可以正确的聚类示例。

我们现在需要做的就是从数据集中排除这些集群,然后继续分析一组漂亮、干净的数据。

文章来源:https://towardsdatascience.com/clean-your-data-with-unsupervised-machine-learning-8491af733595

相关推荐