如何在命令行清除CSV数据-第2部分

2020-11-08 13:53:02

在上一篇博客文章中,我们证明了当加入两个CSV时,xsv比csvkit快约1882倍,并且看到了xsv的性能以及我们在终端上什么时候可以使用xsv或csvkit。

今天,我们要讨论的是在命令行清理CSV数据的第二部分,调查一个大型CSV文件(来自Kaggle),该文件包含约2600万用户及其在2005年至2017年发布的评论数量。我们还讨论了如果您想签出,一般使用命令行清理文本文件。

但您需要安装Cargo,这是Rust的包管理器,因为xsv是用Rust编写的。

让我们先创建一个csv文件来玩,而不是创建一个大的csv文件。使用您最喜欢的文本编辑器或仅在命令行中创建它:

在这里,我们希望将这个fake_users.csv文件与大的users.csv文件连接在一起。

要查看这里的性能效果,我们将首先堆叠大文件,因为在使用Tail验证第二个文件是否已读入内存并连接时,这会更准确。

此处的行用于指示我们将连接这些行,以便将第二个文件的行追加到第一个文件的行上。

让我们首先看看csvsorte和xsv是如何排序的,方法是按照评论数量n对fake_users.csv进行排序:

下载了约359MB的CSV文件users.csv后,让我们先用xsv对其进行排序。这是+2500万条记录,所以这里会有延迟!

-t,以确定此处为逗号的字段分隔符,因为该文件是CSV文件。

-k2用于设置关键字段(您排序的列是这里的第二列)。

你知道吗,在等待这个命令完成执行一个多小时后,我已经终止了我的终端,而它还没有完成!

知道csvkit是用纯Python编写的,可以从某种程度上证明,仅用这种技术编写性能非常好的工具是不可取的,除非您像Pandas那样将C或Cython与Python一起使用:

这里的熊猫胜过一切,csvkit,BSD分类,甚至xsv,执行时间约为78秒,这意味着它非常接近xsv的结果(1.4分钟=84秒),所以只有6秒的差异,每次运行,时间都不同,所以xsv可以接受与熊猫在性能上的竞争。

从我们对Reddit用户名数据的2600万条记录数据的调查来看,xsv似乎是我使用过的最快的命令行,我认为在终端上也存在过。它比csvkit性能更好。在清理数据时,我们已经看到速度有了极大的提高,原因是:

使用xsv cat行连接csv文件的行,并将其与csv栈‍进行比较。

使用xsv sorte-srn按列和逆序排序,并将其与csvort-rc进行比较。

此外,将这两种公用事业与BSD、Sort和Pandas进行了比较,得出了Pandas和Xsv的非常好的表现。

最后,你可以一如既往地从csvkit或xsv中选择你想要的任何东西,但使用让我们的生活变得简单的xsv是公平的,特别是当我们正在处理像我们今天看到的大型CSV文件时,如果速度和性能不是我们想要的,特别是当我们正在处理小型CSV时,我们可以选择csvkit。

您可能已经注意到,它们在排序和堆叠方面的语法有些相似。所以你总有选择的余地!

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

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

您可能会对我以前关于清理csv文档数据的第1部分的教程感兴趣,或者为什么我们使用docker教程,或者是关于如何在命令行‍中清理文本数据的类似教程。