成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

七個(gè)用于數(shù)據(jù)科學(xué)(data science)的命令行工具

運(yùn)維 系統(tǒng)運(yùn)維
作為一名數(shù)據(jù)科學(xué)家,我用命令行的時(shí)間非常長(zhǎng),尤其是要獲取、整理和探索數(shù)據(jù)的時(shí)候。而且我也不是唯一一個(gè)這樣做的人。下面我將介紹在我的日常工作中發(fā)現(xiàn)很有用的七個(gè)命令行工具。

數(shù)據(jù)科學(xué)是OSEMN(和 awesome 相同發(fā)音),它包括獲取(Obtaining)、整理(Scrubbing)、探索(Exploring)、建模(Modeling)和翻譯(iNterpreting)數(shù)據(jù)。作為一名數(shù)據(jù)科學(xué)家,我用命令行的時(shí)間非常長(zhǎng),尤其是要獲取、整理和探索數(shù)據(jù)的時(shí)候。而且我也不是唯一一個(gè)這樣做的人。最近,Greg Reda介紹了可用于數(shù)據(jù)科學(xué)的經(jīng)典命令行工具。在這之前,Seth Brown介紹了如何在Unix下進(jìn)行探索性的數(shù)據(jù)分析

下面我將介紹在我的日常工作中發(fā)現(xiàn)很有用的七個(gè)命令行工具。包括:jq、 json2csv、 csvkit、scrape、 xml2json、 sample 和 Rio。(我自己做的scrape、sample和Rio可以在這里拿到)。任何建議意見(jiàn)、問(wèn)題甚至git上的拉取請(qǐng)求都非常歡迎(其他人建議的工具可以在***找到)。好的,下面我們首先介紹jq。

1. jq – sed for JSON

JSON現(xiàn)在越來(lái)越流行,尤其當(dāng)API盛行了以后。我還記得處理JSON時(shí),用grep和sed寫(xiě)著丑陋的代碼。謝謝jq,終于可以不用寫(xiě)的這么丑了。

假設(shè)我們對(duì)2008總統(tǒng)大選的所有候選人感興趣。紐約時(shí)報(bào)有一個(gè)關(guān)于競(jìng)選財(cái)務(wù)的API。讓我們用curl取一些JSON:

  1. curl -s 'http://api.nytimes.com/svc/elections/us/v3/finances/2008/president/totals.json?api-key=super-secret' > nyt.json 

-s表示靜默模式。然后我們用jq最簡(jiǎn)單的格式j(luò)q ‘.’,可以把得到的丑陋的代碼:

  1. {"status":"OK","base_uri":"http://api.nytimes.com/svc/elections/us/v3/finances/2008/","cycle":2008,"copyright":"Copyright (c) 2013 The New York Times Company. All Rights Reserved.","results":[{"candidate_name":"Obama, Barack","name":"Barack Obama","party":"D", 

轉(zhuǎn)換成漂亮的格式:

  1. < nyt.json jq '.' | head { "results": [ { "candidate_id": "P80003338", "date_coverage_from": "2007-01-01", "date_coverage_to": "2008-11-24", "candidate_name": "Obama, Barack", "name": "Barack Obama", "party": "D", 

同時(shí),jq還可以選取和過(guò)濾JSON數(shù)據(jù):

  1. < nyt.json jq -c '.results[] | {name, party, cash: .cash_on_hand} | select(.cash | tonumber > 1000000)' 
  2. {"cash":"29911984.0","party":"D","name":"Barack Obama"} 
  3. {"cash":"32812513.75","party":"R","name":"John McCain"} 
  4. {"cash":"4428347.5","party":"D","name":"John Edwards"} 

更多使用方法參見(jiàn)手冊(cè),但是不要指望jq能做所有事。Unix的哲學(xué)是寫(xiě)能做一件事并且做得好的程序,但是jq功能強(qiáng)大!下面就來(lái)介紹json2csv。

2. json2csv – 把JSON轉(zhuǎn)換成CSV

雖然JSON適合交換數(shù)據(jù),但是它不適合很多命令行工具。但是不用擔(dān)心,用json2csv我們可以輕松把JSON轉(zhuǎn)換成CSV。現(xiàn)在假設(shè)我們把數(shù)據(jù)存在million.json里,僅僅調(diào)用

  1. < million.json json2csv -k name,party,cash 

就可以把數(shù)據(jù)轉(zhuǎn)換成:

  1. Barack Obama,D,29911984.0 
  2. John McCain,R,32812513.75 
  3. John Edwards,D,4428347.5 

有了CSV格式我們就可以用傳統(tǒng)的如 cut -d 和 awk -F 一類(lèi)的工具了。grep和sed沒(méi)有這樣的功能。因?yàn)镃SV是以表格形式存儲(chǔ)的,所以csvkit的作者開(kāi)發(fā)了csvkit。

3. csvkit – 轉(zhuǎn)換和使用CSV的套裝

csvkit不只是一個(gè)程序,而是一套程序。因?yàn)榇蠖鄶?shù)這類(lèi)工具“期望”CSV數(shù)據(jù)有一個(gè)表頭,所以我們?cè)谶@里加一個(gè)。

  1. echo name,party,cash | cat - million.csv > million-header.csv 

我們可以用csvsort給候選人按競(jìng)選資金排序并展示:

  1. < million-header.csv csvsort -rc cash | csvlook 
  2. |---------------+-------+--------------| 
  3. |  name         | party | cash         | 
  4. |---------------+-------+--------------| 
  5. |  John McCain  | R     | 32812513.75  | 
  6. |  Barack Obama | D     | 29911984.0   | 
  7. |  John Edwards | D     | 4428347.5    | 
  8. |---------------+-------+--------------| 

看起來(lái)好像MySQL哈?說(shuō)到數(shù)據(jù)庫(kù),我們可以把CSV寫(xiě)到sqlite數(shù)據(jù)庫(kù)(很多其他的數(shù)據(jù)庫(kù)也支持)里,用下列命令:

  1. csvsql --db sqlite:///myfirst.db --insert million-header.csv 
  2. sqlite3 myfirst.db 
  3. sqlite> .schema million-header 
  4. CREATE TABLE "million-header" ( 
  5.     name VARCHAR(12) NOT NULL, 
  6.     party VARCHAR(1) NOT NULL, 
  7.     cash FLOAT NOT NULL 
  8. ); 

插入后數(shù)據(jù)都會(huì)正確因?yàn)镃SV里也有格式。此外,這個(gè)套裝里還有其他有趣工具,如 in2csv、 csvgrep 和csvjoin。通過(guò)csvjson,數(shù)據(jù)甚至可以從csv轉(zhuǎn)換會(huì)json。總之,你值得一看。

4. scrape – 用XPath和CSS選擇器進(jìn)行HTML信息提取的工具

JSON雖然很好,但是同時(shí)也有很多資源依然需要從HTML中獲取。scrape就是一個(gè)Python腳本,包含了lxml和cssselect包,從而能選取特定HTML元素。維基百科上有個(gè)網(wǎng)頁(yè)列出了所有國(guó)家的邊界線(xiàn)語(yǔ)國(guó)土面積的比率,下面我們來(lái)把比率信息提取出來(lái)吧。

  1. curl -s 'http://en.wikipedia.org/wiki/List_of_countries_and_territories_by_border/area_ratio' | scrape -b -e 'table.wikitable > tr:not(:first-child)' | head 
  2. <!DOCTYPE html> 
  3. <html> 
  4. <body> 
  5. <tr> 
  6. <td>1</td> 
  7. <td>Vatican City</td> 
  8. <td>3.2</td> 
  9. <td>0.44</td> 
  10. <td>7.2727273</td> 
  11. </tr> 

-b命令讓scrape包含和標(biāo)簽,因?yàn)橛袝r(shí)xml2json會(huì)需要它把HTML轉(zhuǎn)換成JSON。

5. xml2json – 把XML轉(zhuǎn)換成JSON

如名字所說(shuō),這工具就是把XML(HTML也是一種XML)轉(zhuǎn)換成JSON的輸出格式。因此,xml2json是連接scrape和jq之間的很好的橋梁。

  1. curl -s 'http://en.wikipedia.org/wiki/List_of_countries_and_territories_by_border/area_ratio' | scrape -be 'table.wikitable > tr:not(:first-child)' | xml2json | jq -c '.html.body.tr[] | {country: .td[1][], border: .td[2][], surface: .td[3][], ratio: .td[4][]}' | head 
  2. {"ratio":"7.2727273","surface":"0.44","border":"3.2","country":"Vatican City"} 
  3. {"ratio":"2.2000000","surface":"2","border":"4.4","country":"Monaco"} 
  4. {"ratio":"0.6393443","surface":"61","border":"39","country":"San Marino"} 
  5. {"ratio":"0.4750000","surface":"160","border":"76","country":"Liechtenstein"} 
  6. {"ratio":"0.3000000","surface":"34","border":"10.2","country":"Sint Maarten (Netherlands)"} 
  7. {"ratio":"0.2570513","surface":"468","border":"120.3","country":"Andorra"} 
  8. {"ratio":"0.2000000","surface":"6","border":"1.2","country":"Gibraltar (United Kingdom)"} 
  9. {"ratio":"0.1888889","surface":"54","border":"10.2","country":"Saint Martin (France)"} 
  10. {"ratio":"0.1388244","surface":"2586","border":"359","country":"Luxembourg"} 
  11. {"ratio":"0.0749196","surface":"6220","border":"466","country":"Palestinian territories"} 

當(dāng)然JSON數(shù)據(jù)之后可以輸入給json2csv。

6. sample – 用來(lái)debug

我寫(xiě)的第二個(gè)工具是sample。(它是依據(jù)bitly的data_hacks寫(xiě)的,bitly還有好多其他工具值得一看。)當(dāng)你處理大量數(shù)據(jù)時(shí),debug管道非常尷尬。這時(shí),sample就會(huì)很有用。這個(gè)工具有三個(gè)用處:

  1. 逐行展示數(shù)據(jù)的一部分。
  2. 給在輸出時(shí)加入一些延時(shí),當(dāng)你的數(shù)據(jù)進(jìn)來(lái)的時(shí)候有些延時(shí),或者你輸出太快看不清楚時(shí)用這個(gè)很方便。
  3. 限制程序運(yùn)行的時(shí)間。

下面的例子展現(xiàn)了這三個(gè)功能:

1
seq 10000 | sample -r 20% -d 1000 -s 5 | jq '{number: .}'

這表示,每一行有20%的機(jī)會(huì)被給到j(luò)q,沒(méi)兩行之間有1000毫秒的延遲,5秒過(guò)后,sample會(huì)停止。這些選項(xiàng)都是可選的。為了避免不必要的計(jì)算,請(qǐng)盡早sample。當(dāng)你debug玩之后你就可以把它移除了。

7. Rio – 在處理中加入R

這篇文章沒(méi)有R就不完整。將R/Rscript加入處理不是很好理解,因?yàn)樗麄儾](méi)有標(biāo)準(zhǔn)化輸入輸出,因此,我加入了一個(gè)命令行工具腳本,這樣就好理解了。

Rio這樣工作:首先,給標(biāo)準(zhǔn)輸入的CSV被轉(zhuǎn)移到一個(gè)臨時(shí)文件中,然后讓R把它讀進(jìn)df中。之后,在-e中的命令被執(zhí)行。***,***一個(gè)命令的輸出被重定向到標(biāo)準(zhǔn)輸出中。讓我用一行命令展現(xiàn)這三個(gè)用法,對(duì)每個(gè)部分展現(xiàn)5個(gè)數(shù)字的總結(jié):

  1. curl -s 'https://raw.github.com/pydata/pandas/master/pandas/tests/data/iris.csv' > iris.csv 
  2. < iris.csv Rio -e 'summary(df)' 
  3.   SepalLength      SepalWidth     PetalLength      PetalWidth   
  4.  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
  5.  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
  6.  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
  7.  Mean   :5.843   Mean   :3.054   Mean   :3.759   Mean   :1.199  
  8.  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
  9.  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
  10.      Name          
  11.  Length:150        
  12.  Class :character  
  13.  Mode  :character 

如果加入了-s選項(xiàng),sqldf包會(huì)被引入,這樣CSV格式就會(huì)被輸出,這可以讓你之后用別的工具處理數(shù)據(jù)。

  1. < iris.csv Rio -se 'sqldf("select * from df where df.SepalLength > 7.5")' | csvlook 
  2. |--------------+------------+-------------+------------+-----------------| 
  3. |  SepalLength | SepalWidth | PetalLength | PetalWidth | Name            | 
  4. |--------------+------------+-------------+------------+-----------------| 
  5. |  7.6         | 3          | 6.6         | 2.1        | Iris-virginica  | 
  6. |  7.7         | 3.8        | 6.7         | 2.2        | Iris-virginica  | 
  7. |  7.7         | 2.6        | 6.9         | 2.3        | Iris-virginica  | 
  8. |  7.7         | 2.8        | 6.7         | 2          | Iris-virginica  | 
  9. |  7.9         | 3.8        | 6.4         | 2          | Iris-virginica  | 
  10. |  7.7         | 3          | 6.1         | 2.3        | Iris-virginica  | 
  11. |--------------+------------+-------------+------------+-----------------| 

如果你用-g選項(xiàng),ggplot2會(huì)被引用,一個(gè)叫g(shù)得帶有df的ggplot對(duì)象會(huì)被聲明。如果最終輸出是個(gè)ggplot對(duì)象,一個(gè)PNG將會(huì)被寫(xiě)到標(biāo)準(zhǔn)輸出里。

  1. < iris.csv Rio -ge 'g+geom_point(aes(x=SepalLength,y=SepalWidth,colour=Name))' > iris.png 

iris

我制作了這個(gè)工具,為了可以在命令行中充分利用R的力量。當(dāng)然它有很多缺陷,但至少我們不需要再學(xué)習(xí)gnuplot了。

別人建議的命令行工具

下面是其他朋友通過(guò)twitter和hacker news推薦的工具,謝謝大家。

結(jié)論

我介紹了七個(gè)我日常用來(lái)處理數(shù)據(jù)的命令行工具。雖然每個(gè)工具各有所長(zhǎng),我經(jīng)常是將它們與傳統(tǒng)工具(如grep, sed, 和awk)一起使用。將小工具結(jié)合起來(lái)使用組成一個(gè)大的流水線(xiàn),這就是其用處所在。

不知你們對(duì)這個(gè)列表有什么想法,你們平時(shí)喜歡用什么工具呢。如果你們也做了什么好玩的工具,歡迎將其加入數(shù)據(jù)科學(xué)工具包data science toolbox

如果你不認(rèn)為自己能制作工具,也不用擔(dān)心,下次當(dāng)你寫(xiě)一個(gè)異乎尋常的命令行流水線(xiàn)時(shí),記得將它放到一個(gè)文件里,加一個(gè)#!,加一些參數(shù),改成可執(zhí)行文件,你就做成一個(gè)工具啦~

雖然命令行工具的強(qiáng)大在獲取、處理和探索數(shù)據(jù)時(shí)不容小覷,在真正的探索、建模和理解翻譯數(shù)據(jù)時(shí),你還是***在科學(xué)計(jì)算環(huán)境下進(jìn)行。比如R或者IPython notebook+pandas

如果感興趣,歡迎follow me on Twitter

原文鏈接: jeroen janssens   翻譯: 大飛
譯文鏈接: http://blog.jobbole.com/54308/

責(zé)任編輯:黃丹 來(lái)源: jobbole.com
相關(guān)推薦

2018-04-03 13:50:27

Linux容器命令行工具

2022-04-11 10:21:35

GNU命令行工具

2023-12-01 15:10:56

2022-04-08 10:22:21

云原生Kubernetes

2020-12-10 10:40:38

DNS命令行工具Linux

2018-12-06 10:17:10

2018-04-19 06:09:11

命令行工具操作系統(tǒng)Linux

2024-11-22 15:59:00

2021-11-17 15:28:06

LinuxLinux命令

2015-07-29 10:34:50

Linux系統(tǒng)命令行工具

2015-07-30 11:04:08

Linux命令行工具

2015-07-30 11:24:47

Linux 系統(tǒng)命令行工具

2011-06-17 16:49:05

Cocoa蘋(píng)果

2018-05-02 08:06:12

2021-11-09 10:02:37

Linux工具開(kāi)源繪圖

2019-02-27 09:24:48

命令行文件Linux

2014-02-18 10:45:48

2014-04-09 11:05:11

2020-03-30 12:57:50

Linux命令行Markdown

2010-08-24 09:10:14

Linux命令行工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美日韩在线综合 | 99久久精品免费看国产免费软件 | 国产精品日产欧美久久久久 | 蜜桃视频麻豆 | www国产亚洲精品 | 欧美一区二区三区视频在线播放 | 亚洲天堂精品久久 | 国产免费一区二区三区 | 国产性网| 久久伊人久久 | 日韩三级 | 国产亚洲精品美女久久久久久久久久 | 欧美专区在线观看 | 欧美成人一级 | 国产中文字幕在线 | caoporn免费在线视频 | 看片国产 | 成人av观看| 日本大香伊一区二区三区 | 日韩在线观看一区 | 日韩欧美三级电影 | 日韩福利在线观看 | 青青草这里只有精品 | 国产成人精品一区二区三区网站观看 | 在线免费看黄 | 伊人免费观看视频 | 午夜三级网站 | 秋霞电影一区二区三区 | 久久久亚洲成人 | 日韩视频一区 | 国产你懂的在线观看 | 中文字幕福利视频 | 欧美成人二区 | 婷婷国产一区二区三区 | 成人二区 | av网站在线免费观看 | av天空 | 亚洲一区三区在线观看 | 成人黄色在线视频 | 亚洲人成网站777色婷婷 | 99免费看 |