如何在命令行中清理文本数据

2020-10-18 12:34:57

清理数据就像清理房子的墙壁一样,你清除所有的涂鸦,清除灰尘,过滤掉那些不必要的让你的墙壁变得丑陋的东西,然后把它去掉。清理数据时也会发生同样的事情,即过滤我们想要的东西,删除我们不想要的东西,使原始数据变得有用,而不再是原始数据。您可以使用Python、R或您喜欢的任何语言进行清理,但在本教程中,我将通过提供一篇研究clickbait和非clickbait数据的论文中的见解,说明如何在命令行清理文件中的文本文件。

披露:这本书的两个亚马逊链接(在这一部分)是付费链接,所以如果你买了这本书,我会有一小笔佣金。

本书试图在您执行数据科学任务时引起您对命令行功能的关注-这意味着您可以使用命令行获取数据、操作数据、探索数据并对其进行预测。如果你是一名数据科学家,有志于成为一名数据科学家,或者想要更多地了解它,我强烈推荐这本书。你可以从它的网站上免费阅读它,或者订购一本电子书或平装本。在本教程中,我们将重点介绍如何使用命令行来清理我们的数据。

为了省去下载我们要处理的文件和我们需要的依赖项的麻烦,我为您制作了一个包含您需要的所有内容的坞站映像。您只需将其从Docker Hub中拉出,您就会发现需要操作什么才能让您专注于清洁部分。因此,让我们拉出该图像,然后以交互方式运行它,以进入shell并编写一些命令行。

选项-it是-i和-t的组合,它是为交互进程(Shell)设置的。

如果您仍然不清楚如何使用docker,您可以了解我们为什么使用docker教程。

让我们清理两个文本文件,每个文件包含16,000篇文章的点击诱饵和非点击诱饵标题。这些数据取自2016年IEEE/ACM社交网络分析和挖掘进展国际会议(ASONAM)上一篇题为:停止点击诱饵:检测和预防在线新闻媒体中的点击诱饵的论文。我们的目标是获得最常用的词,在点击诱饵和非点击诱饵标题。

如果您列出容器内的内容,您将看到两个文本文件,分别称为clickbait_data和non_clickbait_data。让我们先看看我们想要的最终产出是什么。对于点击诱饵数据,我们希望用它们的计数来表示最常见的20个单词:

让我们看看如何通过命令行一步一步地获取这些直方图。运行停靠器映像后,我们现在进入了新的shell和新的环境。让我们首先通过获取clickbait_data文件的前10行来看看它有什么:

因此,这个文件似乎有标题,如您所见,标题被标记为“点击诱饵”(Clickbait):

你属于哪个电视剧女性朋友组合?“星球大战:原力觉醒”的预告片在这里给你带来寒意这株纽约藤蔓上的名人老大哥是他妈的完美夫妇在得知她患有无法手术的脑瘤后,和他们的宝宝拍了一张令人惊叹的照片。(注:“星球大战:原力觉醒”是“原力觉醒”)预告片来了,给你带来寒意这株纽约藤蔓上的名人老大哥是他妈的完美夫妇,在得知她得了无法手术的脑瘤后,和他们的宝宝拍了一张令人惊叹的照片。

修改信用卡规则的法案被寄给奥巴马,其中包括枪支措施在好莱坞,轻松赚钱的一代Toughens Up 1700名跑步者在洪水过后仍下落不明洋基投手交易现场演练实践大地震使印尼惊慌失措;两天内第七次酷玩乐队的新专辑本周在全球商店上市联合国领导人就加速救济难民营中的战争难民向斯里兰卡施压。

我们感兴趣的是这里的单词,而不是短语,所以我们可以通过以下方式获得从3个字母到更多字母的单词:

这里使用标题clickbait_data,因为我们在这里对文件顶部的几个标题进行统计,该文件通过管道传输到下一个grep命令grep-oe';\w{3,}';

-OE-o用于仅获取匹配词,-E用于使用扩展正则表达式(下一种模式。

';\w{3,}';此模式类似于';\w\w\w+';,它匹配包含3个或更多字母的整个单词

为了获得每个单词的计数,我们需要首先获得Uniq命令可以获得的唯一单词,并使用-c选项为您提供计数,但是要让uniq删除重复的单词,您需要首先进行排序:

此命令在前10行执行,让我们在整个点击诱饵标题中执行此命令:

$cat clickbait_data|grep-oe';\w{3,}';|排序|uniq-c|排序-nr|标题。

Cat clickbait_data|grep-oe';\w{3,}';|排序|uniq-c我们现在将此命令(以跨点击诱饵数据获取所有单词)放入下一个命令的标准输入中。

Sort-nr以逆序进行数字排序,以首先获得最高计数。

5538你4983 2538你的1945那1942年是18121645和1396年1326是什么1242。

看起来我们现在已经关门了,现在状况很好,让我们看看我们能做些什么来更好地清理一下。

我们可以看到我们遗漏了小写字母和全部大写字母。例如,对于您这个词,我们缺少您,我们也缺少您。让我们试着看看这些词是否已经存在:

$cat clickbait_data|grep-OE';\w{3,}';|SORT|uniq-c|ort-nr|grep you$cat clickbait_data|grep-oe';\w{3,}';|ort|uniq-c|ort-nr|grep you。

我们遗漏了两个单词,每个单词都可以对我们的计数做出贡献,您的事件和您的事件分别为5540个和2540个。

我们首先需要做的是使用tr将每个大写字母转换为小写字母,tr是一个转换字符的命令行实用程序:

$cat clickbait_data|TR';[:UPPER:]';[:LOWER:]';|GREP-OE';\w{3,}';\|SORT|uniq-c|SORT-nr|HEAD。

TR';[:UPPER:]';';[:LOWER:]';此处将clickbait_data的内容翻译为小写。[';UPER';]是表示所有大写字符的字符类,[';LOWER';]是表示所有小写字符的字符类。

要将这些值作为标题的前缀,我们可以使用sed来放置两个列名来表示每列:

$cat clickbait_data|TR';[:UPER:]';';[:LOWER:]';|GREP-OE';\w{3,}';\|SORT|uniq-c|SORT-nr|sed';1i count,word';|head。

SED';1I COUNT,单词,所以我们有代表出现次数的计数和明显代表单词的单词

这里使用1I将这两个单词写在第一行,文件中的更改将就地生效。

为了将其打印成漂亮的形状,我们可以使用csvlook.。

|count|word||-||-|5540您|4992您||2540您的|1950,||1944是|1812此||1653和|1397为|1326什么|。

这一点都不好看。发生这种情况的原因是csvlook一如其名称所示工作,以便更好地查找CSV格式的文件,因此我们应该首先使用CSV(逗号分隔值)格式的文件。然后,我们应该找到一种方法,用逗号分隔每行的每个值。此时,我们可以使用awk,这是一种面向模式的扫描和处理语言:

$cat clickbait_data|TR';[:UPER:]';';[:LOWER:]';|grep-OE';\w{3,}';\|SORT|uniq-c|ort-nr|awk&39;{print$1";,";$2}';|sed';1i count,word';head|csvlook.。

|count|word||-|-||5540|您||4992|The|2540|Your|1950|the|1944|are||1812|this||1653|和|1397|for|1326|What。

如果我们想要在第一个字段中获取word column,在第二个字段中获取count列,我们只需要颠倒awk和sed命令中的顺序:

$cat clickbait_data|TR';[:UPER:]';';[:LOWER:]';|grep-OE';\w{3,}';\|SORT|uniq-c|ort-nr|awk&39;{print$2";,";$1}';|sed';1i word,count';head|csvlook.

为了获得与非点击诱饵数据相同的输出,我们只需更改文件名:

$cat non_clickbait_data|TR';[:UPPER:]';';[:LOWER:]';|grep-OE';\w{3,}';\|SORT|uniq-c|ort-nr|awk';{打印$2";,";$1}';|sed';1i word,count';|head|csvlook.。

在这项研究中,正如论文所报道的,它解决了点击诱饵和非点击诱饵标题,以便能够检测到这两个标题都是。

大多数在线新闻媒体严重依赖于读者点击产生的收入,由于存在众多这样的媒体,它们需要相互竞争以获得读者的关注。

因此,本教程的重点是通过命令行来清理数据,这样我们就可以对这篇论文的结果有一些了解,看看我们是否可以通过他们的研究得到论文所声称的一些观点。

同样,让我们看看这个数据中最常见的20个点击诱饵标题单词的最终分布情况:

很明显,我们可以看到你过度使用所有格,而没有使用第三人称,如He,She,或特定的名字。

此外,你可能会出现在点击诱饵中常用的短语中,比如“会让你大吃一惊”。另外,我们也可以找到这样那样的限定词的常用词

让用户对被引用的对象产生好奇心,并说服他们进一步追求这篇文章。

另一方面,非点击诱饵标题最常用的20个单词的分布是:

我们可以在这里看到像澳大利亚人、总统、奥巴马这样的非占有者,以及其他一些在这两个词中都可以发生的词。

点击诱饵论文建议进行比我们这里更深入的调查,但是我们可以通过命令行中的一行代码获得一些有价值的见解。我们学习了如何使用tr翻译字符,使用grep过滤出从3个字母开始的单词,使用SORT和uniq获得单词出现的直方图,使用awk在我们需要的位置打印字段,使用sed将标题放到我们正在处理的文件中。