旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實習/?A計劃
全國統(tǒng)一咨詢熱線:010-5367 2995
首頁 > 熱門文章 > 大數(shù)據(jù)分析 > 大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)

時間:2020-10-14來源:lb577.com點擊量:作者:Sissi
時間:2020-10-14點擊量:作者:Sissi



  現(xiàn)代藝術(shù)博物館是世界上最有影響力的博物館之一,他們已經(jīng)發(fā)布了有關(guān)其收藏中藝術(shù)品的數(shù)據(jù)集。但是,數(shù)據(jù)集存在一些數(shù)據(jù)質(zhì)量問題,需要清理。
 

  在之前我們發(fā)布的文章中,我們討論了如何使用Python和Pandas清理數(shù)據(jù)集。在大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)中,我們將學習如何使用該csvkit庫來獲取和探索表格數(shù)據(jù)。
 

  為什么使用命令行?
 

  好問題!在云大數(shù)據(jù)分析環(huán)境中工作時,有時您只能訪問服務(wù)器的外殼。在這些情況下,精通命令行大數(shù)據(jù)分析才是真正的超級大國。隨著您變得更加熟練,使用命令行執(zhí)行某些大數(shù)據(jù)分析任務(wù)比編寫Python腳本或Hadoop作業(yè)要快得多。
 

  最后,命令行具有豐富的工具生態(tài)系統(tǒng),并且可以集成到文件系統(tǒng)中。這使得某些類型的任務(wù)(尤其是涉及多個文件的任務(wù))異常簡單。期望大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)有一些在命令行上工作的經(jīng)驗。如果您不熟悉命令行,建議您閱讀我們的交互式命令行課程
 

  csvkit
 

  csvkit是一個為處理CSV文件而優(yōu)化的庫。它是用Python編寫的,但是主要界面是命令行。您可以csvkit使用安裝pip:

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
 

  您將需要這個庫來跟隨大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)。
 

  數(shù)據(jù)采集
 

  MOMA藝術(shù)品數(shù)據(jù)集可在博物館的Github回購中找到。讓我們使用從Githubcurl下載Artworks.csv。curl是大多數(shù)Shell環(huán)境中內(nèi)置的工具,使您可以在服務(wù)器之間傳輸數(shù)據(jù)。Github為每個文件提供直接URL,您可以通過單擊Raw按鈕找到它們。
 

  最后,我們將使用>運算符將輸出重定向curl到名為的文件artworks.csv。

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
 

  數(shù)據(jù)探索
 

  我們可以使用該head命令顯示n文件的第一行(默認為10行)。要顯示前三行,可以使用以下任一命令:

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
 

  與大多數(shù)數(shù)據(jù)集一樣,第一行看起來包含列標題。除此之外,輸出雜亂無章,很難從默認輸出中收集其他信息。我們需要一個知道如何以可讀方式顯示CSV文件的工具。
 

  csvlook
 

  csvlook是其中的工具csvkit,可讓您以表格形式顯示和預(yù)覽CSV文件。csvlook artworks.csv將顯示整個數(shù)據(jù)集,這很麻煩進行探索。讓我們來代替管stdout的head -5 artworks.csv,以csvlook探索前5行:

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
 

  這是代表管道的圖:

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
 

  盡管現(xiàn)在輸出更容易閱讀,但仍然很難探索。現(xiàn)在,讓我們學習如何使用csvcut僅選擇一些列并顯示它們。

 

  csvcut
 

  csvcut是其中的一種工具csvkit,稱為數(shù)據(jù)解剖刀,因為它允許您切片和修改CSV中的列。首先使用-n標記列出所有列:

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
 

  然后,我們可以使用該-c標志來指定所需的列。csvcut -c 1,2,3 artworks.csv | csvlook將返回前3列。您也可以自己使用列名稱:csvcut -c Artist,ArtistBio,Date。運行這兩個命令將顯示整個數(shù)據(jù)集的3列,因此我們需要利用管道系統(tǒng)來查看僅幾行。
 

  我們可以查閱csvkit 文檔以了解csvkit實用程序之間的管道:
 

  所有csvkit實用程序都接受輸入文件作為“標準輸入”,以及文件名。這意味著我們可以使一個csvkit實用程序的輸出成為下一個的輸入。
 

  這意味著我們可以管stdout的csvcut到stdin的csvlook!我們可以建立以下管道:
 

  1)僅10使用提取第一行head

  2)3使用 僅過濾到第一列csvcut

  3)使用干凈的方式顯示 csvlook

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
 

  csvgrep
 

  在使用歷史數(shù)據(jù)集時,我們需要確保日期和時間列的格式正確(甚至基本的時間序列圖都無法使用)。讓我們探索Date和DateAcquired列:

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
 

  雖然前20個值DateAcquired看起來不錯,但該Date列中的一些值在大多數(shù)數(shù)據(jù)可視化工具(如)中無法很好地發(fā)揮作用1976-77。我們只需選擇范圍內(nèi)的第一年即可輕松解決這一問題(例如,1976從范圍內(nèi)1976-77)。在此之前,讓我們找出與該模式匹配的行數(shù)。
 

  我們可以使用該csvgrep工具提取與正則表達式匹配的一列(或多列)中的所有值。我們csvgrep使用-c標記指定要匹配的列。我們csvgrep使用-regex標志指定要使用的正則表達式。正則表達式^([0-9]*-[0-9]*)匹配以連字符(-)分隔的數(shù)字對。
 

  由于我們在列上搜索模式的實例,因此Date我們編寫以下代碼:

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
 

  讓我們修改并運行我們構(gòu)建為合并的管道csvgrep:

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
 

  csvstat
 

  精彩!現(xiàn)在我們知道它可以工作,讓我們將正則表達式應(yīng)用于整個Date列(而不只是前10行),并確定有多少行與該模式匹配。該csvstat工具將CSV作為輸入(stdin),并計算摘要統(tǒng)計信息。我們可以使用該--count標志來指定只需要行數(shù)。
 

  我們也可以刪除csvcut,head和,csvlook因為我們不需要顯示輸出。

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
 

  看起來有18,073行與該模式匹配?,F(xiàn)在計算一下:
 

  1)多少行與4位數(shù)字年份模式匹配

  2)數(shù)據(jù)集包含多少行
 

  我們可以使用正則表達式(^[0-9]{4}$)查找所有4位數(shù)字的年份值并將結(jié)果通過管道傳遞給csvstat:

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
 

  最后,要獲取數(shù)據(jù)集的總行數(shù),我們可以將wc命令與-l標志一起使用(僅顯示行數(shù)):

大數(shù)據(jù)分析如何使用命令行和csvkit清潔CSV數(shù)據(jù)
 

  如果將與4位數(shù)字的年份正則表達式(76263)相匹配的行數(shù)與與年份范圍的正則表達式(18073)相匹配的行數(shù)相結(jié)合,則會得到(94336)行。鑒于總共有137,382行,這是我們分析的一個很好的起點!


 

預(yù)約申請免費試聽課

填寫下面表單即可預(yù)約申請免費試聽!怕錢不夠?可先就業(yè)掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業(yè)?一地學習,可推薦就業(yè)!

?2007-2021/北京漫動者教育科技有限公司版權(quán)所有
備案號:京ICP備12034770號

?2007-2022/ lb577.com 北京漫動者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號

網(wǎng)站地圖