天天看點

資料科學家必備!12個基本指令行工具幫你擺脫滑鼠

這篇文章概述了十二個可以用于資料科學項目的類Unix作業系統指令行工具。

這一系列工具不包括任何基本的檔案管理指令(pwd、ls、mkdir、rm……)和遠端桌面管理工具(rsh、ssh……),但是從資料科學角度來看,這些指令行工具都是比較實用的,通常用來進行不同程度的資料檢驗和資料處理。

這一系列指令行工具都包含在一種特殊的類Unix作業系統中。

這些固然都是最基礎的操作指令,但我還是鼓勵你針對某些指令行自行查找更多的應用執行個體。

在本文中,工具名都可以直接連結到維基百科詞條,而不是Linux的使用手冊頁面,我覺得前者對于新手來說更友好一點。

Linux的使用手冊頁面:

https://linux.die.net/man/

wget

wget是一個檔案檢索工具,用于從遠端位置下載下傳檔案,其下載下傳遠端檔案的基本用法如下:

wget:

https://en.wikipedia.org/wiki/wget

~$ wget https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv     --2018-03-20 18:27:21-- https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv     Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.20.133     Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.20.133|:443... connected.     HTTP request sent, awaiting response... 200 OK     Length: 3716 (3.6K) [text/plain]     Saving to: ‘iris.csv’     iris.csv     100 [=======================================================================================================>] 3.63K --.-KB/s in 0s      2018-03-20 18:27:21 (19.9 MB/s) - ‘iris.csv’ saved [3716/3716]           

cat

cat是将檔案内容标準輸出的工具,此名稱來自連接配接(concatenate)這個詞。它可以用于實作一些較複雜的檔案處理,包括将檔案合并在一起(也就是真正的檔案連接配接)、将檔案追加到另一個檔案中、以及給檔案行編号等功能。

cat:

https://en.wikipedia.org/wiki/Cat_(Unix)

~$ cat iris.csv     sepal_length,sepal_width,petal_length,petal_width,species     5.1,3.5,1.4,0.2,setosa     4.9,3,1.4,0.2,setosa     4.7,3.2,1.3,0.2,setosa     4.6,3.1,1.5,0.2,setosa     5,3.6,1.4,0.2,setosa     ...     6.7,3,5.2,2.3,virginica     6.3,2.5,5,1.9,virginica     6.5,3,5.2,2,virginica     6.2,3.4,5.4,2.3,virginica     5.9,3,5.1,1.8,virginica           

wc

wc指令用于生成字數統計、行計數、位元組計數以及與文本檔案相關的内容。在沒有設定其他選項的情況下,wc的預設輸出是一行,由左到右依次是行數、字數統計(注意:每一行上沒有空格中斷的單個字元串被算作一個單詞)、字元計數和檔案名。

wc:

https://en.wikipedia.org/wiki/Wc_(Unix)

~$ wc iris.cs     151 151 3716 iris.csv           

head

head指令是标準地輸出檔案的前n行(預設為10行),顯示行數可以用-n項設定,如下。

Head:

https://en.wikipedia.org/wiki/Head_(Unix)

~$ head -n 5 iris.csv     sepal_length,sepal_width,petal_length,petal_width,species     5.1,3.5,1.4,0.2,setosa     4.9,3,1.4,0.2,setosa     4.7,3.2,1.3,0.2,setosa     4.6,3.1,1.5,0.2,setosa           

tail

接下來猜猜看tail是用來實作什麼功能的?

tail:

https://en.wikipedia.org/wiki/Tail_(Unix)

~$ tail -n 5 iris.csv     6.7,3,5.2,2.3,virginica     6.3,2.5,5,1.9,virginica     6.5,3,5.2,2,virginica     6.2,3.4,5.4,2.3,virginica     5.9,3,5.1,1.8,virginica           

運作指令行魔法

find

find是用于搜尋特定檔案的檔案系統工具。以下指令就是在樹結構中搜尋特殊檔案的例子,即從目前目錄(“.”)開始,搜尋以“iris”開頭,并以任意字元結尾,類型為普通檔案類型(“-type f”)的檔案:

find:

https://en.wikipedia.org/wiki/Find_(Unix)

~$ find . -name 'iris*' -type f     ./iris.csv     ./notebooks/kmeans-sharding-init/sharding/tests/results/iris_time_results.csv     ./notebooks/ml-workflows-python-scratch/iris_raw.csv     ./notebooks/ml-workflows-python-scratch/iris_clean.csv     ...           

cut

cut指令用于文本分割,雖然cut用于分割文本可以在各種标準下進行,但是它對于CSV檔案中列資料的提取尤其有用。以下指令即為輸出使用逗号分隔符("-d ','")的iris.csv檔案的第五列(“- f 5”):

cut:

https://en.wikipedia.org/wiki/Cut_(Unix)

~$ cut -d ',' -f 5 iris.csv     species     setosa     setosa     setosa     ...           

uniq

uniq是通過将文本中的重複行進行去重,進而将文本輸出标準化的工具。就其本身而言,這似乎并沒多大用處,但是當其用于建構pipelines時(将一個指令的輸出連接配接到另一個指令的輸入等等)将變得非常有用。

uniq:

https://en.wikipedia.org/wiki/Uniq

以下指令結果是iris資料集的第五列中包含的不同類别及其計數:

~$ tail -n 150 iris.csv | cut -d "," -f 5 | uniq -c     50 setosa     50 versicolor     50 virginica           

奶牛說了什麼

awk

awk實際上不是一個"指令",而是一套完整的程式設計語言。它用于處理和提取文本, 且可以從指令行中以單行指令的形式調用。

awk:

https://en.wikipedia.org/wiki/AWK

完全掌握awk是需要一些時間的,但在此之前,這裡有一個可以練習的例子。考慮到樣本檔案iris.csv相當有限的文本多樣性,以下這行指令就可以調用awk,在給定的檔案(“iris.csv”)中搜尋字元串“setosa”,并将所有項(在$0變量中儲存的)一個一個地标準輸出如下:

~$ awk '/setosa/ { print $0 }' iris.csv     5.1,3.5,1.4,0.2,setosa     4.9,3,1.4,0.2,setosa     4.7,3.2,1.3,0.2,setosa     4.6,3.1,1.5,0.2,setosa     5,3.6,1.4,0.2,setosa           

grep

grep是另一種文本處理工具,用來查找比對字元串和正規表達式。

grep:

https://en.wikipedia.org/wiki/Grep

~$ grep -i "vir" iris.csv     6.3,3.3,6,2.5,virginica     5.8,2.7,5.1,1.9,virginica     7.1,3,5.9,2.1,virginica     ...           

當你需要花大量的時間進行文本處理時,grep無疑是你需要掌握的一個好工具,更多有用的資訊請參考網站:

https://www.thegeekstuff.com/2009/03/15-practical-unix-grep-command-examples。

sed

sed是一個流編輯器,也是一個文本處理和轉換工具,類似于awk。下面我們将用此指令把iris.csv檔案中的“setosa”改為“irissetosa”:

sed:

https://en.wikipedia.org/wiki/Sed

~$ sed 's/setosa/iris-setosa/g' iris.csv > output.csv     ~$ head output.csv     sepal_length,sepal_width,petal_length,petal_width,species     5.1,3.5,1.4,0.2,iris-setosa     4.9,3,1.4,0.2,iris-setosa     4.7,3.2,1.3,0.2,iris-setosa     ...           

history

history非常簡單,但也非常有用,特别是當你需要用指令語句來完成一些重複性的資料準備工作時。

History:

https://en.wikipedia.org/wiki/History_(Unix)

~$ history547 tail iris.csv     548 tail -n 150 iris.csv     549 tail -n 150 iris.csv | cut -d "," -f 5 | uniq -c     550 clear     551 history           

至此,這篇文章已經對這12個友善的指令行工具都進行了簡單的介紹,這隻是對資料科學(或其他任何目标)可能用到的指令行工具的一種粗淺的體驗。現在,是時候讓它們把你的生産力從滑鼠中解放出來了。

原文釋出時間為:2018-04-18

本文作者:文摘菌

本文來自雲栖社群合作夥伴“

大資料文摘

”,了解相關資訊可以關注“

”。

繼續閱讀