用无人监督的ML进行数据清洗不再是非常痛苦的事情!
点击上方关注,All in AI中国
数据清洗不一定是一件非常痛苦的事情!这篇文章就是一个很好的例子,说明如何使用无监督的机器学习来清理大量凌乱的文本数据。
我们在处理什么?
在这个例子中,我们将面临着从HMTL和PDF文件中删除的数千篇文章,返回的文本质量在很大程度上取决于抓取过程。从样本检查的一些结果中我们知道存在一些问题,从错误的链接、不可读的PDF到已成功读入的项目,但内容本身就是完全垃圾。
这些文件现在保存于Pandas数据框中,每个项目都包含“元数据”,例如公司名称和发布年份,以及从return中删除的文本:
这是起点- 文本数据是数据框中的最后一列
简单的题外话:Missingno
python Missingno包非常有用。它可以在4行代码中的数据框上安装和运行,如果数据框中有任何缺失信息,它将快速突出显示。它还能够对数据集中的行进行采样,因此可以轻松地处理非常大的数据帧。
在我们的数据框上运行此操作,它可以向我们显示数据已完成,但一列除外。由于我们没有使用它进行分析,因此不需要进一步的工作,但如果在其他领域存在差距,我们将不得不考虑如何最好地处理这些(例如删除这些行或尝试插入缺失值)。
该图表显示除了一列之外的所有列都已完成- 我们现在可以专注于自己的文本数据
...返回清理文本数据
扫描数据框中的文本显然存在问题。例如,在此项中读取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.为算法创建功能:
下面的代码将单词计数、字符数和唯一单词(只出现一次)数作为新列显示在我们的数据框中:
步骤2.可视化数据:
使用Spotify、Chartify中真正优秀的图表库,可以使用我们刚刚创建的新功能快速绘制数据图:
这个创建的图表告诉我们关于我们的数据集的大量信息。有一个明显的趋势,即增加单词、字符和唯一单词。这是可以预料的,但是在这下面还有一大堆,底部有一行比较明显的呈现,单词非常少,但字符数很多:
步骤3.创建集群:
通过使用机器学习对数据进行聚类,我们应该能够自动拆分在图表中看到的每个区域,并进一步调查这些区域。下面的代码对数据进行缩放,然后将K-Means聚类应用于它:
再次通过我们的可视化运行,我们得到以下结果:
这在划分问题领域方面做了很好的工作。看起来集群1、4和5需要进一步研究。在此之前,让我们放大图表左下角,以确保集群仍然在这里工作,因为在当前的图中很难看到:
即使在点之间存在重叠的情况下,算法也足够健壮以基于单独的字符计数来区分它们。
为什么我们选择7个集群?试错,7是仍然有效分割数据集的最小值。
检查结果
这一切看起来都很棒,但我们实际上已经实现了我们的目标吗? 我们可以通过检查每个集群中的内容来检查这一点,特别是集群1、4和5。
Custer 1:
这很有意思,文字看起来也很完美。 以上示例来自3M,但另一个return区域也很干净。集群1是从现代奴隶制声明中获得的实际数据的一部分,而不是数据质量差。当我们进一步分析数据时,我们想要研究为什么这个集群存在。
集群4和5:
这是我们凌乱的数据,单个的单字是很有意义的,该算法也足够智能,可以正确的聚类示例。
我们现在需要做的就是从数据集中排除这些集群,然后继续分析一组漂亮、干净的数据。
文章来源:https://towardsdatascience.com/clean-your-data-with-unsupervised-machine-learning-8491af733595