2020年10個(gè)不錯的Python庫
這是第六屆年度 Python 庫排行榜。這個(gè)排行榜的依據是什么?規則很簡(jiǎn)單。我們尋找的庫需要滿(mǎn)足下列條件:
它們是在 2020 年推出或普及的。
它們從發(fā)布后就一直有良好的維護。
它們非常炫酷,很值得一看。
免責聲明:今年,我們的選擇受到機器學(xué)習 / 數據科學(xué)庫的極大影響,雖然有些庫對非數據科學(xué)家來(lái)說(shuō)確實(shí)很有用。另外,盡管我們有 10 個(gè)主要的精選(以及一個(gè)獎勵),但我們還是決定增加一個(gè)新的“榮譽(yù)提名”部分,以便公平對待我們發(fā)現但又不能遺漏的其他庫。
1.Typer
你不必總是要編寫(xiě) CLI 應用程序,但是在編寫(xiě) CLI 時(shí),最好是無(wú)障礙的體驗。繼 FastAPI 巨大成功之后,Sebastián Ramírez 用同樣的原則為我們帶來(lái)了 Typer:一個(gè)新的庫,通過(guò)利用 Python 3.6+ 的類(lèi)型提示功能,可以編寫(xiě)命令行界面。
這個(gè)設計確實(shí)使 Typer 脫穎而出。除確保你的代碼被正確地記錄下來(lái)外,你還可以通過(guò)最少的努力來(lái)獲得一個(gè)帶有驗證的 CLI 接口。使用類(lèi)型提示,你可以在 Python 編輯器中獲得自動(dòng)完成功能(比如 VSCode),從而提高工作效率。
為增強 Typer 功能,它的內部是基于 Click 開(kāi)發(fā)的,Click 是非常著(zhù)名的,并且已經(jīng)通過(guò)了實(shí)戰檢驗。這意味著(zhù),它可以利用其所有的優(yōu)點(diǎn)、社區和插件,同時(shí)用較少的樣板代碼從簡(jiǎn)單的開(kāi)始,并在需要時(shí)添加更多的復雜性。
一如既往,它的文檔真的很出色,可以作為其他項目的典范。這絕對是不容錯過(guò)的作品。
GitHub 項目地址:https://github.com/tiangolo/typer
2. Rich
接著(zhù) CLI 的話(huà)題,誰(shuí)說(shuō)終端應用程序必須是單調的白色,如果你是一個(gè)真正的 hacker,就必須是綠色的?那黑色呢?
你想為你的終端輸出加上顏色和樣式嗎?在一瞬間打開(kāi)復雜的表格?輕松地展示華麗的進(jìn)度條?Markdown?Emojis?Rich 都能滿(mǎn)足你的要求。請看下面的截圖,來(lái)了解一下它的功能。
毫無(wú)疑問(wèn),這個(gè)庫將終端應用的使用體驗提高到了一個(gè)全新的水平。
GitHub 項目地址:https://github.com/willmcgugan/rich
3. Dear PyGui
就像我們看到的那樣,終端應用可以做到很華麗,但有時(shí)候這還不夠,你需要一個(gè)真正的 GUI。為此,Dear PyGui 應運而生,它是流行的 Dear ImGui C++ 項目的 Python 移植。
Dear PyGui 使用了一種被稱(chēng)為即時(shí)模式的范例,它在電子游戲中很流行。這基本上意味著(zhù)動(dòng)態(tài) GUI 是逐幀獨立繪制的,無(wú)需持久化任何數據。這樣,這個(gè)工具與其他 Python GUI 框架就有了本質(zhì)上的區別。它性能優(yōu)異,并用計算機的 GPU 來(lái)促進(jìn)高動(dòng)態(tài)界面的構建,這在工程、模擬、游戲或數據科學(xué)應用中是經(jīng)常需要的。
不需要非常陡峭的學(xué)習曲線(xiàn),Dear PyGui 就能使用,并且可以在 Windows 10(DirectX 11)、Linux(OpenGL 3)和 MacOS(Metal)上運行。
GitHub 項目地址:https://github.com/hoffstadt/DearPyGui
4. PrettyErrors
簡(jiǎn)單的樂(lè )趣。這是讓你思考的庫之一:為什么以前沒(méi)有人想到這個(gè)問(wèn)題?
PrettyErrors 只做一件事,而且做到了極致。在支持彩色輸出的終端中,它將隱秘的棧跟蹤轉換為更適合人類(lèi)眼睛解析的東西。再也不用掃描整個(gè)屏幕來(lái)尋找異常的罪魁禍首了……現在,你就可以一眼發(fā)現它!
GitHub 項目地址:https://github.com/onelivesleft/PrettyErrors
5. Diagrams
我們程序員喜歡解決問(wèn)題和編碼。但是有時(shí)候,我們需要把復雜的架構設計作為項目文檔的一部分來(lái)向其他同事解釋。傳統上,我們會(huì )求助于 GUI 工具,通過(guò)這種方式,我們就可以在圖表和可視化方面做一些努力,并將其用于演示和文檔。但是,這種方式并非唯一。
通過(guò)直接在 Python 代碼中繪制云系統架構, Diagrams 允許你不使用任何設計工具。AWS、 Azure、 GCP 等多個(gè)云供應商都可以輕松地使用它的一些圖標。這使得創(chuàng )建箭頭和組變得非常簡(jiǎn)單。真的,它只有幾行代碼!
基于代碼的 Diagrams 最好的地方是什么?通過(guò)標準 git,你可以跟蹤版本控制的更改!開(kāi)發(fā)人員將會(huì )非常高興。
GitHub 項目地址:https://github.com/mingrammer/diagrams
6. Hydra 與 OmegaConf
當進(jìn)行機器學(xué)習項目的研究和實(shí)驗時(shí),總是有無(wú)數的設置需要嘗試。配置管理可以變得非常復雜,并且在重要的應用程序中非??焖?。要是能找到處理這類(lèi)復雜問(wèn)題的結構方法該多好啊。
Hydra 是一種工具,它可以讓你以一種可組合的方式構建配置,并從命令行或配置文件中覆蓋某些部分。
為了說(shuō)明使用該庫所能簡(jiǎn)化的一些常見(jiàn)任務(wù),假設我們正在實(shí)驗的模型有一個(gè)基礎架構,并且有多種變體。通過(guò) Hydra,就可以定義一個(gè)基礎配置,然后使用它們的變體運行多個(gè)作業(yè)。
python train_model.py variation=option_a,option_b
Hydra 的表親 OmegaConf 為分層配置系統的基礎提供了一致的 API,支持 YAML、配置文件、對象和 CLI 參數等不同的源。
它們是 21 世紀進(jìn)行配置管理的必備之選。
7. PyTorch Lightning
任何能夠提高數據科學(xué)團隊生產(chǎn)力的工具都是價(jià)值連城。從事數據科學(xué)項目的人沒(méi)有理由每次都要“重新發(fā)明輪子”,反復思考怎樣才能更好地組織項目中的代碼,怎樣才能使用維護得不好的“PyTorch 樣本代碼”,怎樣才能用潛在的控制來(lái)?yè)Q取更高層次的抽象。
Lightning 通過(guò)將科學(xué)與工程脫鉤來(lái)幫助提高生產(chǎn)力。這有點(diǎn)像 TensorFlow 的 Keras,從某種程度上說(shuō),這可以讓代碼更簡(jiǎn)潔。但這并不會(huì )剝奪你的控制權。PyTorch 仍然是 PyTorch,可以使用常用 API。
這個(gè)庫可以幫助團隊利用軟件工程的良好實(shí)踐,組織組件并明確職責,構建高質(zhì)量的代碼,從而方便地擴展到多個(gè) GPU、 TPU 和 CPU 進(jìn)行訓練。
一個(gè)庫,可以幫助數據科學(xué)團隊中那些初級成員產(chǎn)生更好的結果,同時(shí),更有經(jīng)驗的成員也會(huì )喜歡它,因為它可以在不放棄控制權的情況下,提高整體生產(chǎn)力。
GitHub 項目地址:
https://github.com/PyTorchLightning/PyTorch-lightning
8. Hummingbird
并非所有的機器學(xué)習都是深度學(xué)習。很多時(shí)候,你的模型由 scikit-learn 中實(shí)現的比較傳統的算法組成(比如隨機森林),或者你使用梯度提升方法,比如流行的 LightGBM 和 XGBoost。
但是,在深度學(xué)習領(lǐng)域,已經(jīng)有了許多進(jìn)展。諸如 PyTorch 這樣的框架正在以驚人的速度發(fā)展,硬件設備也在優(yōu)化,以更快的速度進(jìn)行更低功耗的張量計算。如果我們能夠利用這些努力,使我們的傳統方法運行得更快更有效,豈不美哉?
這就是 Hummingbird 的用武之地。Microsoft 的這個(gè)新庫可以將你訓練好的傳統機器學(xué)習模型編譯成張量計算。這樣做非常好,因為這樣就無(wú)需重新設計模型。
截至目前,Hummingbird 支持向 PyTorch、TorchScript、ONNX 和 TVM,以及各種機器學(xué)習模型和矢量器的轉換。推理 API 也非常類(lèi)似于 Sklearn 范式,它可以讓你重用現有的代碼,但是將實(shí)現改為由 Hummingbird 生成。這是一個(gè)值得關(guān)注的工具,因為它獲得了對模式模型和格式的支持!
GitHub 項目地址:
https://github.com/microsoft/hummingbird
9. HiPlot
幾乎每一位數據科學(xué)家在其職業(yè)生涯中都會(huì )在某些時(shí)候處理高維數據。遺憾的是,人類(lèi)的大腦并沒(méi)有足夠的能力來(lái)直觀(guān)地處理這類(lèi)數據,所以我們必須借助其他技術(shù)。
今年年初,Facebook 發(fā)布了 HiPlot,這是一個(gè)幫助發(fā)現高維數據中的相關(guān)性和模式的庫,它使用平行圖和其他圖形方式來(lái)表示信息。這個(gè)概念在他們的發(fā)布博客文章中有過(guò)解釋?zhuān)沁@基本上是一個(gè)很好的方法來(lái)可視化和過(guò)濾高維數據。
HiPlot 是交互式的、可擴展的,你可以在標準 Jupyter Notebooks 中使用 HiPlot,也可以通過(guò)自己的服務(wù)器來(lái)使用 HiPlot。
GitHub 項目地址:
https://github.com/facebookresearch/hiplot
10. Scalene
隨著(zhù) Python 庫的生態(tài)系統越來(lái)越復雜,我們發(fā)現自己編寫(xiě)的代碼越來(lái)越依賴(lài)于 C 擴展和多線(xiàn)程代碼。當涉及到測量性能時(shí),這會(huì )成為一個(gè)問(wèn)題,因為 CPython 中內置的分析器不能正確處理多線(xiàn)程代碼和原生代碼。
這時(shí),Scalene 就來(lái)救場(chǎng)了。Scalene 是一個(gè) CPU 和內存分析器,它針對 Python 腳本,能夠正確地處理多線(xiàn)程代碼,并區分運行 Python 與原生代碼所花費的時(shí)間。無(wú)需修改代碼,只需要用 Scalene 從命令行運行你的腳本,它就會(huì )為你生成一個(gè)文本或 HTML 報告,顯示每行代碼的 CPU 和內存使用情況。
GitHub 項目地址:https://github.com/emeryberger/scalene
額外獎勵:Norfair
Norfair 是一個(gè)可定制的輕量級 Python 庫,用于實(shí)時(shí)對象跟蹤。換句話(huà)來(lái)說(shuō),它為每一個(gè)被檢測到的物體在不同的幀中分配了一個(gè)唯一的 id,允許你在它們隨時(shí)間移動(dòng)的過(guò)程中識別它們。有了 Norfair,只需要幾行代碼就可以為任何探測器添加跟蹤功能?!叭魏翁綔y器”?是的。無(wú)論對象的表現形式是什么樣的:一個(gè)包圍盒(4 個(gè)坐標),一個(gè)單點(diǎn)中心點(diǎn),人體姿態(tài)估計系統的輸出,或其他具有一定概率閾值以上變量的關(guān)鍵點(diǎn)的物體。
用于計算被跟蹤物體與檢測點(diǎn)之間距離的函數由用戶(hù)定義,如果你需要,完全可以自定義。
它的速度也很快,而且可以實(shí)時(shí)操作。然而,真正的優(yōu)勢在于它是非常模塊化的,你可以利用你現有的檢測代碼庫,只需幾行代碼即可添加跟蹤功能。
GitHub 項目地址:https://github.com/tryolabs/norfair
榮譽(yù)提名
quart:一個(gè)具有 Flask 兼容 API 的異步網(wǎng)絡(luò )框架。一些現有的 Flask 擴展甚至可以工作。
alibi-detect:監控生產(chǎn)模型中的異常值和分布漂移,適用于表格數據、文本、圖像和時(shí)間序列。
einops:einops 在 2020 年普及,可以讓你為可讀和可靠的代碼編寫(xiě)張量操作,支持 NumPy、PyTorch、TensorFlow 等。Karpathy 推薦的,你還需要什么嗎?
stanza:來(lái)自斯坦福的 60 多種語(yǔ)言的精確自然語(yǔ)言處理工具。多種可用的預訓練模型用于不同的任務(wù)。
datasets:來(lái)自 HuggingFace 的輕量級可擴展庫,可輕松共享和訪(fǎng)問(wèn)數據集,以及用于自然語(yǔ)言處理等評估指標。
pytorch-forecasting:在現實(shí)世界的案例和研究中,利用神經(jīng)網(wǎng)絡(luò )簡(jiǎn)化時(shí)間序列預測。
sktime:提供專(zhuān)門(mén)的時(shí)間序列算法和 scikit-learn 兼容工具,用于構建、調整和評估復合模型。也可以查看他們的配套 sktime-dl 包,用于基于深度學(xué)習的模型。
netron:一個(gè)用于神經(jīng)網(wǎng)絡(luò )、深度學(xué)習和機器學(xué)習模型的可視化工具。支持的格式比我所知道的還要多。
pycaret:封裝了幾個(gè)常見(jiàn)的機器學(xué)習庫,使工作效率大大提高,并節省了數百行代碼。
tensor-sensor:通過(guò)改進(jìn)錯誤信息和提供可視化,幫助你獲得張量數學(xué)的正確維度。