七个用于数据科学(data science)的命令行工具

数据科学是OSEMN(和 awesome 相同发音),它包括获取(Obtaining)、整理(Scrubbing)、探索(Exploring)、建模(Modeling)和翻译(iNterpreting)数据。作为一名数据科学家,我用命令行的时间非常长,尤其是要获取、整理和探索数据的时候。而且我也不是唯一一个这样做的人。最近,Greg Reda介绍了可用于数据科学的经典命令行工具。在这之前,Seth Brown介绍了如何在Unix下进行探索性的数据分析

下面我将介绍在我的日常工作中发现很有用的七个命令行工具。包括:jqjson2csvcsvkit、scrape、 xml2json、 sample 和 Rio。(我自己做的scrape、sample和Rio可以在这里拿到)。任何建议意见、问题甚至git上的拉取请求都非常欢迎(其他人建议的工具可以在最后找到)。好的,下面我们首先介绍jq。

1. jq – sed for JSON

JSON现在越来越流行,尤其当API盛行了以后。我还记得处理JSON时,用grep和sed写着丑陋的代码。谢谢jq,终于可以不用写的这么丑了。

假设我们对2008总统大选的所有候选人感兴趣。纽约时报有一个关于竞选财务的API。让我们用curl取一些JSON:

-s表示静默模式。然后我们用jq最简单的格式jq ‘.’,可以把得到的丑陋的代码

转换成漂亮的格式:

同时,jq还可以选取和过滤JSON数据:

更多使用方法参见手册,但是不要指望jq能做所有事。Unix的哲学是写能做一件事并且做得好的程序,但是jq功能强大!下面就来介绍json2csv。

2. json2csv – 把JSON转换成CSV

虽然JSON适合交换数据,但是它不适合很多命令行工具。但是不用担心,用json2csv我们可以轻松把JSON转换成CSV。现在假设我们把数据存在million.json里,仅仅调用

就可以把数据转换成:

有了CSV格式我们就可以用传统的如 cut -d 和 awk -F 一类的工具了。grep和sed没有这样的功能。因为CSV是以表格形式存储的,所以csvkit的作者开发了csvkit。

3. csvkit – 转换和使用CSV的套装

csvkit不只是一个程序,而是一套程序。因为大多数这类工具“期望”CSV数据有一个表头,所以我们在这里加一个。

我们可以用csvsort给候选人按竞选资金排序并展示:

看起来好像MySQL哈?说到数据库,我们可以把CSV写到sqlite数据库(很多其他的数据库也支持)里,用下列命令:

插入后数据都会正确因为CSV里也有格式。此外,这个套装里还有其他有趣工具,如 in2csv、 csvgrep 和csvjoin。通过csvjson,数据甚至可以从csv转换会json。总之,你值得一看。

4. scrape – 用XPath和CSS选择器进行HTML信息提取的工具

JSON虽然很好,但是同时也有很多资源依然需要从HTML中获取。scrape就是一个Python脚本,包含了lxml和cssselect包,从而能选取特定HTML元素。维基百科上有个网页列出了所有国家的边界线语国土面积的比率,下面我们来把比率信息提取出来吧