Python 2015年度十佳第三方庫
新的一年就要到來,我們常常會坐下來回想一下,在 2015 年我們都完成了些什么。如果沒有開源社區的出色工作,提供了這些穩健的庫,我們很多項目是無法完成的。
似乎很多人都在搞 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。