2017最流行的十大Python庫
年末是你需要思考過去一年的成就的時候。對於程式設計師來說,這通常是回顧今年釋出的或者最近流行的開源庫,因為它們是解決特定問題的絕佳工具。
在過去的兩個多年中,我們都會在部落格中選取我們認為在Python社群最有用的庫。今年也是如此。
這一次,這份列表基本都是機器學習(ML)的庫。請非ML庫的作者而且能夠諒解,這都怪我們的偏見。希望在讀到本文的人能評論並提出一些被我們忽略的偉大的庫幫助我們矯正它。
那麼,讓我們開始盤點吧!
1. Pipenv
連結:https://github.com/pypa/pipenv
我們為今年年初發布的這個工具排到榜首,它有能力影響每個Python開發者的工作流程,它已經成為Python管理依賴項的官方推薦工具。
https://packaging.python.org/tutorials/managing-dependencies/#installing-pipenv
Pipenv最初是由Kenneth Reitz創立的一個週末專案,旨在將其他包管理者(如npm或yarn)的創意帶入Python中。不再去安裝virtualenv,virtualenvwrapper,管理requirements.txt檔案,並確保對依賴項的依賴版本的再現性(https://www.kennethreitz.org/essays/a-better-pip-workflow)。使用Pipenv,你可以在Pipfile中指定所有的依賴關係(通常使用命令新增,刪除或更新依賴關係)。該工具可以生成一個Pipfile.lock檔案,使你的構建deterministic,幫助你避免那些因為你不知道是否需要的模糊依賴產生的難以捕捉的bug。
當然,Pipenv還有很多其他的特性,並且它的文件非常好,所以一定要看一下,並且在你所有的Python專案中使用它,就像我們在Tryolabs中做的那樣。
2. PyTorch
連結:http://pytorch.org/
說到今年流行,尤其是在深度學習(DL)社群流行的庫,那就要提到今年Facebook推出的DL框架PyTorch。
PyTorch構建並改進了流行的Torch框架,與Lua不同它是基於Python的。由於最近幾年人們大多轉向使用Python進行資料科學研究,它是讓DL更容易接近的重要一步。
最值得注意的是,PyTorch已經成為眾多研究人員的首選框架之一,因為它實現了動態計算圖(Dynamic Computational Graph)正規化。當使用TensorFlow,CNTK或MXNet等其他框架編寫程式碼時,必須首先定義計算圖。該圖指定了我們的程式碼執行的所有操作,這些操作稍後會被編譯並可能被框架優化,以便能夠在GPU上並行執行得更快。這個正規化被稱為靜態計算圖,因為你可以利用各種優化,而且這個圖形一旦建成,就有可能執行在不同的裝置上(因為執行與構建分離)。然而,在自然語言處理等許多工中,工作的量通常是可變的:在將影象提供給演算法之前,可以將影象調整為固定的解析度,但不能對可變長度的句子進行相同的處理。這是PyTorch和動態圖的亮點,通過在程式碼中使用標準的Python控制指令,圖在執行時被定義,給了你很多這對於一些任務來說必不可少的自由。
當然,PyTorch也為你計算梯度(就像你期望從任何現代的DL框架中獲得的那樣),速度非常快,而且是可擴充套件的,所以為什麼不試試呢?
3. caffe2
連結:https://caffe2.ai/
這可能聽起來很瘋狂,但Facebook今年也釋出了另一個很棒的DL框架。
原來的Caffe框架已被大眾使用多年,以無與倫比的效能和久經考驗的程式碼庫而聞名。然而,最近DL的趨勢使這個框架在某些方面停滯不前。Caffe2是將Caffe帶入“現代世界”的嘗試。
它支援分散式訓練,部署(即使在移動平臺上),最新的CPU並且支援CUDA的硬體。雖然PyTorch可能更適合研究,但Caffe2適合在Facebook上看到的大規模部署。
另外,請看看近期的ONNX。你可以在PyTorch中構建和訓練模型,同時使用Caffe2進行部署!
4. Pendulum
連結:https://github.com/sdispater/pendulum
去年,Arrow被列入榜單,它旨在通過使用Python的datetime讓你生活輕鬆一些。而今年,我們輪到Pendulum了。
Pendulum的優點之一是它是Python標準datetime類嵌入式的替代品,因此可以輕鬆地將其與現有程式碼整合,並且只有在實際需要時才使用它的功能。者已經特別注意確保正確地處理時區,預設每個例項的timezone-aware和UTC。你也將得到一個擴充套件timedelta,使datetime演算法更簡單。
與其他現有的庫不同,它努力使API具有可預測的行為,所以你知道會發生什麼。如果你正在做任何與datetimes有關的重要工作,這會讓你更快樂!(檢視更多:https://pendulum.eustace.io/docs/)。
5. Dash
https://plot.ly/products/dash/
如果你正在做資料科學,你會使用Python生態系統中的優秀工具,比如Pandas和scikit-learn。並在工作流程使用Jupyter Notebooks,這對你和你的同事來說非常棒。但是,你如何與那些不知道如何使用這些工具的人分享這項工作呢?你如何建立一個介面,使人們可以輕鬆地使用資料,視覺化過程?過去,你需要一個前端團隊,用Javascript知識來構建這些GUI。但現在不用了。
今年宣佈的Dash是一個用於構建Web應用程式的Python開源庫,尤其是那些充分利用資料視覺化的Web應用程式。它建立在Flask,Plotly.js和React的基礎上,並提供了抽象,使你不必學習這些框架,更高效的研發。這些應用程式可以在瀏覽器中呈現並響應,因此在移動裝置中也能使用。
瞭解更多關於Dash:https://plot.ly/dash/gallery
6.PyFlux
Python中有許多庫用來做資料科學和ML,但是當你的資料點是隨著時間的推移而變化的度量(例如股票價格,從儀表中獲得的度量等等)時,這樣的庫就很少了。
PyFlux是一個專門為時間序列而開發的 Python開源庫。時間序列研究是統計學和計量經濟學的一個分支,目標可以描述時間序列的表現(依據隱藏元件或特徵),也能預測時間序列未來的表現。
PyFlux允許用於時間序列建模的概率方法,並且已經實現了幾個像GARCH這樣的現代時間序列模型。
7.Fire
https://github.com/google/python-fire
通常情況下,你需要為自己的專案製作命令列介面(CLI)。除了傳統的argparse,Python中還有click或docopt可用。谷歌今年宣佈的Fire,在解決同樣的問題上提出了不同的方法。
Fire是一個開源的庫,可以為任何Python專案自動生成一個CLI。沒錯,是自動的:你幾乎不需要編寫任何程式碼或文件來構建你的CLI!想完成你的CLI,只需要呼叫一個Fire
方法並把它傳遞給一個CLI:一個函式,一個物件,一個類,一個字典,甚至你可以不傳遞任何引數(這會將你的整個程式碼轉換為一個CLI)。這個庫可以為你節省很多時間。
8.imbalanced-learn
https://github.com/scikit-learn-contrib/imbalanced-learn
在一個完美世界的裡,我們會有完美平衡的資料集,我們將它們都拿來將訓練模型,多麼美好。可惜現實世界不是這樣的,某些任務更傾向於不平衡的資料。例如,在預測信用卡交易中的欺詐行為時,你會預測絕大多數交易(+ 99.9%)實際上是合法的。如果我們簡單的訓練ML演算法會出現令人沮喪的效能,所以在處理這些型別的資料集時需要特別小心。
幸運的是,這是一個已經被研究過的問題,存在各種各樣解決的技術。Imbalanced-learn是一個Python包,它提供了關於這些技術的實現。它與scikit-learn相容,是scikit-learn-contrib專案的一部分。
9. FlashText
https://github.com/vi3k6i5/flashtext
如果您需要搜尋某些文字並將其替換為其他內容(如大多數資料清理工作),則通常將其轉為正則表示式。他們能很好地完成這項工作,但是有時會發生這樣的情況:需要搜尋的數以千計的內容,正則表示式可能會非常緩慢。
為此,FlashText是一個更好的選擇。它使整個操作的執行時間大大提高了。FlashText的優點在於無論搜尋條件有多少,執行時都是一樣的,而正則表示式中執行時幾乎是隨著條件數呈線性增長。
FlashText證明了演算法和資料結構設計的重要性,即使對於簡單的問題,更好的演算法也可以很容易地勝過最快的cpu執行簡單的實現。
10. Luminoth
https://luminoth.ai/
現在,影象無處不在,理解它的內容對於許多應用程式來說至關重要。值得慶幸的是,由於DL的進步,影象處理技術已經進步了很多。
Luminoth是一個使用TensorFlow和Sonnet構建的用於計算機視覺的開源Python工具包。目前,它可以支援以Faster R-CNN模型的形式進行物件檢測。
但是Luminoth不僅是一個特定模型的實現。它是被構建為模組化和可擴充套件,所以可以直接定製現有的部分或者將其擴充套件為新的模型來處理不同的問題,儘可能多地複用程式碼。它提供的工具可以輕鬆完成構建DL模型所需的工程工作:將資料(在本例中為影象)轉換合適的格式輸送到資料管道(TensorFlow的tfrecords)中,執行資料增強,在一個或多個gpu上執行訓練(使用大型資料集時必須進行分散式培訓),執行評估度量,輕鬆地在TensorBoard中視覺化 並用簡單的API或瀏覽器介面部署訓練號的模型,以便人們使用。
此外,Luminoth直接與Google Cloud的ML Engine整合,所以即使你沒有強大的GPU,也可以使用命令在雲端進行訓練。