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