使用谷歌BigQuery更好地瞭解Python的生態系統

編程語言 Python Google GitHub Python部落 2017-04-07

Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。

談及編程,瞭解同行們正在使用的工具很重要。這不僅有助於瞭解行業發展趨勢,同時也能拓寬和其他程序員的共同語言。

由於我個人最近正在更多地用Python進行數據分析,這讓我也很好奇其他數據科學家最常用的包有哪些。當然,我可以用谷歌搜索“數據科學最好的Python軟件包”,但本著統計精神,我想通過數據而不是臆測來進行決斷。此外,我也發現谷歌的一個工具——BigQuery十分好用。

如果你想在大數據的海洋中暢遊,體驗谷歌的龐大資源,或只是練習SQL技巧,那麼BigQuery值得你一試。BigQuery公開的現有數據集含括了自2009年起紐約每輛出租車的行程,2008年起舊金山每通311報警電話,以及2016賽季美國職棒大聯盟每一場球賽。

而我經常從GitHub獲取相關公開數據集(其中包括超過1.45億次的提交以及1.6億個文件)。通過查詢這個數據集可以找到目前流行的擴展、通用文件以及常用包,也不需要單獨打開代碼就能領略編程之美。(谷歌的Felipe Hoffa,負責該數據集的推廣,並通過社區進行持續的分析記錄。)

我覺得應更加深入地瞭解這些Python文件而不僅僅只是檢驗。雖然數據科學越來越流行,但它依然只是當今最流行和多功能的語言之一的Python廣泛應用中的一隅。任何侷限於數據科學的認知都會被更通用的Python運用所取代。我其實更想搜索ipynb文件而不是.py文件,因為前者可用於Jupyter(原名IPython) notebook。

使用notebooks較之命令行運行Python腳本的主要優點是無需運行整個文件而可分塊執行代碼,同時還能內嵌顯示圖像。這種靈活性使得notebook能夠讓數據科學家進行即時可視化或大數據集操作,因此我想這些會體現在流行的ipynb包中。鑑於此,我在GitHub數據集上著手比較py文件和ipynb文件。

BigQuery可以用多種語言通過命令行或客戶端接入,但我偏向於Web UI界面(部分原因源於我用同一瀏覽器中搜索SQL和正則表達式語法…)。登入谷歌帳戶後,點擊GitHub數據集,便可查詢表“file”:

使用谷歌BigQuery更好地瞭解Python的生態系統

事實上,需要用到兩個表來完成查詢:選擇表contents並通過id和路徑名帶有.py後綴的表files子集鏈接:

使用谷歌BigQuery更好地瞭解Python的生態系統

要注意的是如果你使用谷歌的表做類似大數據量的查詢,根據規定,需要創建一個谷歌雲平臺帳戶,並綁定信用卡。處理前1TB的數據是免費的,但因為一些錯誤和無效查詢我還多花費了10美元。

查詢結果存入個人表格後,我也相應查詢了Jupyter notebooks(WHERE RIGHT(path, 6) = ".ipynb"),最後分別得到.py和.ipynb文件內容。

確定.py文件中十個最流行的包並不費力,尤其是參考了Google"s Francesc Campoy的指南後。通過SELECT SPLIT(content, " ") as line可以獲得以“import”或“from”開頭的文本行(兩個加載Python包的方法),再使用正則表達式就能抓取這兩個詞後的包名:

使用谷歌BigQuery更好地瞭解Python的生態系統

之後我得到了以下結果:


packagen
1os1048981
2sys829156
3__future__691222
4time424434
5logging404678
6re403193
7numpy394069
8datetime373272
9json282672
10unittest278512

沒什麼特別驚訝的。大多數包都是Python的標準庫,如os、sys和re,分別用於操作系統交互,系統變量訪問,正則表達式應用。這些非常“通用”的包的確非常流行,從而掩蓋了更具專業性的結果,如數據科學類的包。

處理Jupyter notebook的表則稍微複雜些。由於其支持多種cell形式(如代碼、註釋、markdown),每個文本內容的格式實際為JSON,因此需要一個比長字符串型更復雜的數據格式。

可能還有更加優雅的方法處理複雜的嵌套層,在這裡我通過JSON文本中的“ ”成功獲得了代碼的文本行。針對包標籤意外攜帶其他字符的情況,我也採取了特殊處理WHEN package LIKE "%\n",",最終結果是乾淨的:

使用谷歌BigQuery更好地瞭解Python的生態系統

結果如下:


packagen
1numpy9344
2matplotlib.pyplot5715
3pandas4469
4os1940
5matplotlib1714
6IPython.display1627
7sys1577
8__future__1244
9sklearn1162
10time1006

整體結果顯示Jupyter排名的量級小於第一張表,因為Notebook的應用相對並不普遍。不過流行包的順序卻頗有意味。numpy躍居第一,而數據分析工具pandas,可視化工具matplotlib以及機器學習庫sklearn緊隨其後,超過標準庫os。這些都是去掉與數據科學不相關的python代碼後排名靠前的流行庫。

我的直覺得到了很好的驗證,Jupyter notebook主要用於統計分析。但這個項目更有趣的地方則是運用BigQuery感受在僅僅幾秒內從海量的數據中篩選出結果的神奇。我鼓勵讀者朋友們自己通過GitHub數據集藉助BigQuery嘗試其他分析。在這3TB的數據中依然有很多值得探索...

英文原文:https://dev.to/walker/using-googles-bigquery-to-better-understand-the-python-ecosystem
譯者:luoshao23

相關推薦

推薦中...