1. 程式人生 > >這10個Python最新又好用的庫,你用過幾個

這10個Python最新又好用的庫,你用過幾個

推薦:10個Python最新又好用的庫,你熟悉幾個?

對於碼農來說,關注的永遠是新近有什麼流行的、既能解決問題又好用的利器。本文就為你盤點十大新開源Python庫。

本文福利:加vx ;tanzhouyiwan 免費領取Python學習資料

1、Pipenv

第一名非它莫屬,這個工具2017年初才釋出,但它已經能夠影響每個Python開發者的工作流了,更別提現在連Python.org都官方推薦它作為支援庫的管理工具!

Pipenv最開始不過是大神Kenneth Reitz搞的週末專案,本意是將npm或yarn這些包管理器的閃光點引入Python世界。別管什麼安裝virtualenv、virtualenvwrapper,管理requirements.txt檔案,更別提根據支援庫的版本來確保複用性了。有了Pipenv,再也不需要用命令來增加、刪除或更新支援庫了,一個Pipfile檔案就能搞定所有的支援庫。這個工具會生成一個Pipfile.lock檔案,確保編譯的庫都是最終版,還能避免因為漏掉一些邊邊角角的支援庫而導致的bug。

當然,Pipenv還有其他不少好功能,並且它的文件也很贊。趕緊去了解一下,用它來支援你的Python專案吧,我們已經在Tryolabs上用上啦:)

2、PyTorch

推薦:10個Python最新又好用的庫,你熟悉幾個?

要說2017年深度學習社群裡面哪個庫實現了大爆發,那必須是PyTorch,這個深度學習框架是Facebook 2017年才推出的。

PyTorch是基於流行一時的Torch框架構建和改進的,與Lua相比,它是基於Python的。近幾年,越來越多的人開始用Python開展資料科學工作,PyTorch讓深度學習變得更加平易近人了。

值得注意的是,採用了全新動態計算圖正規化的PyTorch已經成為很多研究者的專用框架之一。使用TensorFlow、CNTK和MXNet等框架寫程式碼時,必須先定義計算圖,這個計算圖指定了程式碼執行的所有操作,隨後在框架中進行編譯與優化,使它能進行GPU並行處理,運算速度更快,這種正規化被稱為靜態計算圖。它的好處在於可以利用各種優化,而且,因為構建與執行是分開進行的,此圖一旦被構建即可在不同裝置上執行。然而,對於諸如自然語言處理等任務,其工作量是可變的。將圖片應用於演算法前,可以將圖片調整為固定尺寸,但是無法將不同長度的句子進行類似的處理。PyTorch和動態圖的又是在於可在程式碼中使用標準Python控制指令,在執行指令時定義動態圖,這就給了你更多自由,對於多工,這點至關重要。

和其他現代深度學習框架一樣,PyTorch還可以進行梯度計算,它的執行速度極快,還可以擴充套件,既然如此,幹嘛不試試?

3、Caffe2

推薦:10個Python最新又好用的庫,你熟悉幾個?

聽上去有點不可思議,但是Facebook 2017年還發布了另一款重磅深度學習框架。

多年前,Caffe框架就已被廣泛應用,並以無可比擬的效能和實戰檢測的程式碼庫著稱。然而,深度學習的最新趨勢使得這個框架在某些方向陷入了停滯。Caffe2試圖將Caffe引入現代世界。

它支援分散式訓練及部署,包括多種移動平臺、最新的CPU與CUDA適配的硬體。PyTorch更適合研究,Caffe2則適用於Facebook那種大規模部署。

還可以瞭解一下ONNX(微軟與Facebook共同推出的開源專案,全稱為Open Neural Network Exchange)近期的努力。用PyTorch構建和訓練模型,再用Caffe2進行部署!是不是挺棒?

4、Pendulum

推薦:10個Python最新又好用的庫,你熟悉幾個?

2016年,Arrow榮登本榜,這個庫是為了讓Python處理datetimes更簡單。2017年,輪到Pendulum了。

Pendulum的一大優勢是內嵌式取代Python的datetime類,可以輕易地將它整合進現有程式碼,並且可以在需要它的時候才進行呼叫。作者精心調校了時區,確保時區的正確,還讓每個例項都對時區敏感,並且預設使用UTC。還有就是提供了擴充套件的timedelta,使datetime計算更加容易。

與現有的其他庫不同,它提供了一個可預測行為的API,這樣就可以知道後面會發生什麼。如果你正開發使用datetimes的複雜專案,這個庫能讓你更輕鬆!想要了解更多,請查閱文件。

5、Dash

推薦:10個Python最新又好用的庫,你熟悉幾個?

從事資料科學工作,少不了使用Pandas、scikit-learn這些Python生態系統中的利器,還有就是控制工作流的Jupyter Notebooks,沒的說,你和同事都愛用。但是,要想將工作成果分享給不會用這些工具的人,那該怎麼辦?怎麼才能構建一個人人能夠輕鬆上手的介面,來操控資料和視覺化?以前,為實現這一目的,需要一個精通Javascript的前端專職團隊來搭建GUI,以後就用不著啦。

2017年釋出的Dash是一個在純Python環境中構建資料視覺化網站應用的開源庫。基於Flask、Plotly.js和React構建,提供抽象層,無需學習上述框架即可快速上手開發。它在瀏覽器中渲染和響應,因此適用移動端。

如果你想知道Dash都能實現什麼效果,這個樣例庫可以讓你大飽眼福。

6、PyFlux

很多Python庫都適用於資料科學和機器學習,但當資料點是隨著時間進化的矩陣時,比如股價或從裝置獲取的測量資料等,這就是另一回事兒了。

PyFlux是專門處理時間序列的Python開源庫。時間序列是統計學與計量經濟學的子域,其目標是描述時間序列行為(主要是關於潛在成分或利息特徵),並且預測未來它們如何演化。

PyFlux允許通過概率方式進行時間序列建模,並且實現了幾個像GARCH這樣的現代時間序列模型。是個不錯的好東西。

7、Fire

做專案的時候經常需要製作命令列介面(Command Line Interface~CLI)。除了傳統的argparse,Python還有類似click或docopt等工具。谷歌今年釋出的Fire,使用另一個視角來解決同樣的問題。

Fire是一個為任意Python專案自動生成命令列介面的開源庫。請注意,重點是自動構建命令列介面,基本上不需要再寫程式碼或文件說明啦。只需要呼叫一個Fire方法,把它傳輸給需要生成命令列介面的內容即可,比如,函式、物件、類、字典,就算沒有引數都可以,這樣Fire就會為所有程式碼生成一個命令列介面(CLI)。

請仔細閱讀此指南,通過例子理解它如何運作。密切關注這個庫,它絕對能給你節省不少時間。

8、imbalance-learn

理想狀態下,我們有均衡的資料集可以用來訓練模型,一切都很如意。可惜,真實世界不是這樣的,現實任務更多是非均衡資料。比如,在預測偽造信用卡交易時,預期超過99.9%的絕大多數交易是合法的。如果只是訓練樸素機器學習演算法會讓你很糟心,因此需要格外關注這類資料集。

好在這個問題已經解決了,還有各種不同的技術解決方案。Imbalanced-learn 這個Python包提供了多種技術解決方案,可以讓開發工作變得更輕鬆。它與scikit-learn相容,並且是scikit-learn-contrib專案的一部分。有用!

9、FlashText

一般來說,查詢或替換文字可以使用正則表示式。正則表示式能妥妥的完成這項任務。但是,需要查詢幾千個術語時,正則表示式就慢死了。

FlashText能夠更好地解決這個問題。在作者最初的基準測試中,它大幅提高了整個操作執行時間,從5天縮減到5分鐘。

FlashText的美妙之處在於不論查詢多少術語,其執行時間都是一樣的,而正則表示式的執行時間則會隨著術語數量的增加而線性增加。

FlashText證明了演算法和資料結構設計的重要性,由此可知,即便是簡單的問題,更好的演算法也可以比更強的CPU有效。

10、Luminoth

宣告:本庫是由Tryolab的研發中心開發的。

當今世界圖片滿天飛,一些應用急需理解這些圖片的內容。多虧深度學習技術的發展,影象處理技術也取得了長足的進步。

Luminoth是基於TensorFlow和Sonnet構建的一個處理計算機視覺的Python工具箱。目前,它通過快速R-CNN模型支援物件檢測。

Luminoth不僅實現了這個特定模型,它還是基於模組化構建的,可以擴充套件。因此,自定義現有元件或結合新的模型來解決複雜問題是可行的,好好複用這些程式碼吧。在構建深度學習模型時,它提供了必要的開發工具:轉換影象資料為適用的格式,以供資料管道(TensorFlow的tfrecords)處理,進行資料增強,在一個或多個GPU上進行訓練(在處理大型資料集時,必須使用分散式訓練)。執行評估指標,輕鬆地在TensorFlow中實現視覺化,通過簡單的API或瀏覽器介面部署訓練模型,供人操作。

還有,Luminoth可以很簡單地整合谷歌雲的機器學習引擎,就算你沒有強大的GPU,也可以和在本機一樣,輕鬆一個指令就能在雲端進行模型訓練。

更多優秀庫:這些也不錯

PyVips

可能你從沒聽說過libvips這個庫。這麼說吧,它是個像Pillow或ImageMagick這樣的影象處理庫,並且支援很多圖片格式。然而,和其他庫相比,libvips更快,佔用記憶體更少。比如說,基準測試顯示它比ImageMagick快3倍,佔用記憶體僅為1/15。有關libvips的優勢,請點此查閱。

PyVips是近期釋出的Python版libvips,相容Python2.7和3.6,還有PyPy。使用pip安裝,內嵌式相容繫結的老版本,無需修改程式碼。

如果在APP中進行影象處理,那一定要關注它。

Requestium

宣告:本庫為Tryolabs釋出。

有時,你可能會在網上實現一些自動化操作。比如抓取網站,進行應用測試,或在網上填表,但又不想使用API,這時自動化就變得很必要。Python提供了非常優秀的Requests庫,可以輔助進行這些操作。可惜,很多網站採用基於JavaScript的重客戶端,這就意味著Requests獲取的HTML程式碼中,根本就沒有想要用於自動化操作的表單,更別提自動填表了!它取回的基本上都是React或Vue這些現代前端庫在瀏覽器中生成的空DIV這類的程式碼。

可以通過反向工程處理JavaScript生成的程式碼,但是這需要花幾個小時來編譯,處理這些醜陋的JS程式碼。謝謝,還是算了吧。還有一個方法就是使用Selenium庫,允許以程式化的方式和瀏覽器進行互動,並執行JavaScript程式碼。用了這個庫就沒啥問題了,但是它比佔用資源很少的Requests慢太多了。

如果能以Requests為主,只有在需要Selenium的時候才無縫呼叫,這樣不是更好?看看Requestium吧,它以內嵌方式取代Requests,而且乾的不錯。它還整合了Parsel,用它編寫的頁面查詢元素選擇器程式碼特別清晰。它還為諸如點選元素和確保在DOM中渲染內容這些通用操作提供了幫助。又一個網頁自動化省時利器!

skorch

喜歡scikit-learn的API,但又得用PyTorch來進行工作?別擔心,skorch這個打包器為PyTorch提供了像sklearn一樣的介面。只要你熟悉這些庫,就會覺得它的句法直白易懂。有了skorch,就可以將一些程式碼抽象化,從而把精力集中在真正重要的事上,比如干點兒資料科學。

你喜歡那個呢?

推薦:10個Python最新又好用的庫,你熟悉幾個?

本文福利:加vx;tanzhouyiwan免費領取Python學習資料