2015年十佳第三方 Python 庫

"null"發表於2016-01-18

新年到來時,我們常常會坐下來回想一下,過去一年我們都完成了些什麼。如果沒有開源社群的出色工作,提供了這些穩健的庫,我們很多專案是無法完成的。

似乎很多人都在搞 Top10 排名,我們也來做一個自己的排名。下面是我們在 2015 年使用過 Python 庫的十大排名,排名不分先後。我們儘量避開已經被廣泛接受的庫,例如 Django、Flask、Django Rest Framework 等,介紹一些可能不是那麼出名的庫。繫好安全帶,老司機要開車了!

1. jupyter

如果畫家無法立即看到他作畫的內容,這對畫家來說可真是太難了。『Jupyter Notebooks』 讓我們更容易與程式碼、繪圖和結果進行互動,它正逐漸成為一款資料科學家們所喜愛的工具。這些 Notebook 是結合了實時程式碼(live code)和說明文件的文件。由於這個原因,它可以快速建立原型或者教程。

雖然我們只使用 Jupyter 來寫 Python,不過它最近增加了對不少程式語言的支援,例如 Julia 或者 Haskell。

2. retrying

『Retrying』庫可以幫你避免重複勞動:它實現了『重試』行為。它提供了一個通用的 decorator,這個 decorator 可以很容易給方法增添重試的能力,而且還可以設定一系列的屬性,如最大重試次數、延時、退避休眠(backoff sleeping)和錯誤條件(error conditions)等,以此來獲得你想要的重試行為。簡單輕便。

3. aiohttp

2015年有很多非常重要的庫都被移植到 Python 3,所以我們也要開始擁抱它了。在使用協程寫併發程式碼的時候,我們非常喜歡用 asyncio,所以需要一個使用相同併發模式的 HTTP 客戶端(比如 requests)和伺服器。而『aiohttp』就是這樣一個庫,它為 asyncio 提供了簡潔易用的 HTTP 客戶端和伺服器。

4. plumbum

為了在 Python 程式中呼叫其他指令碼或者可執行程式,我們嘗試過很多『subprocess』的封裝,但『plumbum』模式很輕鬆就擊敗了它們。它提供了非常易用的語法,可以輕鬆地以跨平臺的方式執行本地或者遠端命令,獲取輸出或者錯誤程式碼。如果這還不夠,你還可以組合它們(shell 管道的方式),而且它還提供了建立命令列應用的介面。試試吧!

5. phonenumbers

處理和驗證電話號碼是一件非常痛苦的事情,因為需要考慮一大堆國際字首和區域碼,還可能遇到某個國家的特殊情形。這個叫做 『phonenumbers』的 Python 庫,是從 Google 的『libphonenumbers』庫移植而來,後者極大的簡化了這項工作。它可以用來解析、格式化或者驗證電話號碼,而且需要寫的程式碼非常少。最重要的是,『phonenumbers』可以判斷一個電話號碼是否是唯一的(遵照 E.164 格式)。它同時支援 Python 2 和 Python 3。

我們已經在很多專案中廣泛使用這個庫了,主要是調整 django-phonenumber-field,用它來解決這個經常遇到的枯燥問題。

6. networkx

在很多工中,圖形和網路是非常常用的工具,比如組織資料、顯示它們的流動或者展示實體之間的關聯。『NetworkX』允許建立、操作圖形和網路,它所使用的演算法很容易擴充,並且在處理大型圖形時非常理想。除此之外,它提供了很多對圖形進行著色的選項,這也讓它變成了一種非常棒的視覺化工具。

7. influxdb

如果你要按照時間順序儲存一批資料,那你一定要考慮一下用 InfluxDB。InfluxDB 是一個時間序列資料庫,我們用它來儲存不同時間的測量值。通過 RESTFul API(譯註:REST,表現層狀態轉化,是一種軟體架構風格,目前主流的 Web 服務實現方案之一,符合 REST 設計風格的 Web API 稱為 RESTful API),它變得極其易用而且高效,這在處理海量資料時是非常必要的。另外,由於其內建了聚類功能,因此對資料的檢索和分組也變得十分輕鬆。這個官方的客戶端通過 API 呼叫抽象掉了大部分工作,不過我們也確實希望它能再改進一下,不要直接寫 JSON,而是使用查詢這種更符合 Python 風格的方式。

8. elasticsearch-dsl

如果你曾經用過 Elasticsearch,那你想必被那些特別長的 JSON 格式的查詢摧殘過,而且把大把的時間浪費在了檢查哪裡有解析錯誤上。『Elasticsearch DSL』是一個建立在 Elasticsearch 官方客戶端基礎之上的客戶端,它讓你不必再為 JSON 擔心:你只需要用一個 Python 類或者類 queryset 表示式把需要的東西寫好。同時它還提供了將文件轉換成 Python 物件、對映等的介面。

9. keras

深度學習是一個新的趨勢,這正是『keras』的閃光點。它可以在 Theano 之上執行,並且可以利用多種神經網路架構進行快速實驗。它極其精簡而且高度模組化,可以在 CPU 和 GPU 上無縫執行。類似『keras』這樣的庫是我們在 2015 年處理 R&D 專案的關鍵所在。

10. gensim

如果你對 NLP(自然語言處理)很感興趣卻從沒有聽說過『Gensim』……火星人你好。它提供了一些常用演算法,例如 tf-idf、word2vec、doc2vec、LSA 等的快速、可擴充(記憶體無關)實現,同時還提供了簡單易用的藉口和完善的文件。

福利:MonkeyLearn Python

最後,還有絕對不能錯過的 MonkeyLearn。這是 Tryolabs 公司的產品的一個分支,它通過簡單易用的 RESTFul API 提供了雲端的文字挖掘功能。通過它你可以對文字有更加深入的理解,比如文字中的情感、最重要的關鍵字,可以對文字進行話題檢測,還可以使用自定義的文字分類器進行其他任何處理。『MonkeyLearn Python』是這個 API 的官方 Python 客戶端,同時支援 Python 2 和 Python 3。

相關文章