【我們為什麼挑選這篇文章】找最多人用的,就對了。正是因為 Github 的功能這麼方便,很容易就知道全世界的工程師到底都在用哪些 Python 庫。本文囊括各種核心庫、可視化、機器學習等實用的 Python 庫,趕快回家按照需求裝起來玩玩看吧!(責任編輯:陳君毅)
作者:Igor Bobriakov;編譯:朱璇、衛青、萬如苑
隨著近幾年 Python 已成為數據科學行業中大火的編程語言,我們將根據以往的經驗來為大家總結一下數據科學家和工程師幾個最實用的 Python 庫。如果你是正在學習 Python 的學生,也許根據這個表單能夠幫你更好地找到學習的重心。
因為所有的 Python 庫都是開源的,所以我們還列出了每個庫的提交次數、貢獻者人數和其他一些來自 Github 可以代表 Python 庫流行度的指標。
1. NumPy 核心庫 (Github 提交次數:15980,貢獻者人數:522)
在用 Python 處理科學任務時,我們常常需要使用 Python 的 SciPy Stack。
SciPyStack 是一個專門為用 Python 處理科學計算而設計的軟件集(注意不要把 SciPy Stack 和 SciPy 庫搞混啦;SciPy 庫只是 SciPy Stack 的一部分)。讓我們來看看 SciPy Stack 裡面都包括什麼:SciPy Stack 其實相當龐大,包括了十幾個庫。
其中 NumPy 庫是它的核心庫(特別是最重要的幾個庫)中的明星。
NumPy(來自 NumericalPython)是構建科學計算代碼集的最基礎的庫。它提供了許多用 Python 進行 n 維數組和矩陣操作的功能。該庫提供了 NumPy 數組類型的數學運算向量化,可以改善性能,從而加快執行速度。
2. SciPy 核心庫 (Github 提交次數:17213,貢獻者人數:489)
SciPy 是一個針對工程和科學庫。再次提醒大家 SciPyStack 不等於 SciPy 庫: SciPy Stack 包括線性代數、優化、整合和統計等模塊,而 SciPy 庫的主要功能是建立在 NumPy 基礎之上,因此它使用了大量的 NumPy 數組結構。SciPy 庫通過其特定的子模塊提供高效的數學運算功能,例如數值積分、優化等。值得一提的是 SciPy 子模塊中的所有功能都附有詳細的文檔可供查閱。
3. Pandas 核心庫 (Github 提交次數:15089,貢獻者人數:762)
Pandas 是一個簡單直觀地應用於「帶標記的」和「關係性的」的數據的 Python 庫。它是探索數據的完美工具,能快速簡單地進行數據操作、聚合和可視化。
「數列(Series)」: 一維數組
「數據框(Data Frames)」:二維數組
例如,當你想從這兩種數據結構中得到一個新的數據框,把一個數列作為新的一行添加至數據框,你就能得到一個如圖所示的數據框。
下面列出的只是你可以用 Pandas 做的事情的一小部分:
● 輕鬆添加或刪除數據框中的數列
● 將其他數據結構轉換為數據框
● 處理缺失的數據,比如用 NaN 表示它們
● 強大的高效分組功能
4. 可視化類 Matplotlib(Github 提交次數:21754,貢獻者人數:588)
MatPlotlib 是另一個 SciPy Stack 的核心庫。它是為能輕鬆生成簡單而強大的可視化圖標而量身定制。MatPlotlib 是一個超酷的庫,它和 NumPy,SciPy 以及 Pandas 一起使 Python 成為像 MatLab、Mathematica 這樣的科學工具的強力競爭者。
然而,MatPlotlib 是一個低端庫。這意味著您需要編寫更多的代碼才能達到高級的可視化效果;換句話說,和使用其他高級工具相比,使用 MatPlotlib 你需要投入更多的精力,但總體來說 MatPlotlib 還是值得一試的。
付出一些努力,您就用 MatPlotlib 做任何您想做的可視化圖表:
● 線路圖
● 散點圖
● 條形圖和直方圖
● 餅狀圖
● 莖圖
● 輪廓圖
● 矢量場圖
● 頻譜圖
Matplotlib 還可用來創建標籤、網格、圖例和許多其他樣式圖。基本上,一切圖表都可以通過 Matplotlib 來定制。
Matplotlib 庫還能支持不同的平台,並能使用不同的 GUI 套件來展示所得到的可視化圖表。各種 IDE(比如 IPython)都支持 Matplotlib 的功能。
除了 Matplotlib,Python 還有一些其他庫能讓可視化變得更加容易。
5. 可視化類 Seaborn(Github 提交次數:1699,貢獻者人數:71)
Seaborn 主要關注統計模型的可視化,包括熱分佈圖(用來總結數據及描繪數據的整體分佈)。Seaborn 是基於且高度依賴於 Matplotlib 的一個 Python 庫。
6. Bokeh(Github 提交次數:15724,貢獻者人數:223)
還有一個強大的可視化庫叫做 Bokeh,其目的是互動式的可視化。與 Seaborn 不同,Bokeh 獨立於 Matplotlib。如上所述,Bokeh 的賣點是互動性,它通過數據驅動文檔(d3.js)風格的新式瀏覽器來呈現圖表。
7. 可視化類 Plotly(Github 提交次數:2486,貢獻者人數:33)
Plotly 是一個基於 Web 來構建可視化的的工具箱。它有好幾種編程語言(其中包括 Python)的 API,並在 plot.ly 網站上提供一些強大的、開箱即用的圖表。要使用 Plotly,您先需要設置您的 Plotly API 密鑰。Plotly 將在其服務器端處理圖表,並將結果在互聯網上發布。此外,它也提供了一種不需要使用其服務器和網絡的 offline 方法。
8. 機器學習類 SciKit-Learn(Github 提交次數:21793,貢獻者人數:842)
Scikits 是 SciPy Stack 的另一庫,它專為某些特殊功能(如圖像處理和機器學習輔助)而設計。對於機器學習而言,SciKit-Learn 是其中最突出的一個是庫。SciKit-Learn 建立在 SciPy 之上,並大量使用 SciPy 進行數學操作。
scikit-learn 為常見的機器學習算法設計了一個簡潔通用的界面,使得在生產系統使用機器學習變的十分簡單。該庫有著高質量的代碼和文檔,性能高,容易使用,是使用 Python 進行機器學習的行業實踐標準。
9. 深度學習類 Theano. (提交:25870 次,貢獻者:300 個)
首先我們來談談 Theano。
Theano 同 Numpy 類似,是一款定義多維矩陣並含有數學運算符和表達式的 Python 包。通過編譯這個庫可以在任何環境下有效的運行。由蒙特利爾大學的機器學習小組最初開發,它主要用於滿足機器學習的需要。
很重要的一點是要注意到,Theano 在低級別運算符上同 NumPy 緊密的結合在一起。並且這個庫優化了 GPU 和 CPU 的使用,使其在處理大數據運算時的表現更為迅速。
效率和穩定性的調整,使得即使是非常小的值也能得到更精確的結果,例如,即使給一個非常小的 x 值,計算 log(1 + x)也能給出一個可是別的結果。
10. 深度學習類 TensorFlow (提交:16785 次,貢獻者:795 個)
這是一個由 Google 的程序員開發,為機器學習打造的數據流圖像計算開源庫。設計它的目的是為了滿足 Google 環境中對訓練神經網絡的迫切需求。其前身是 DistBelief,一個基於神經網絡的機器學習系統。而且 TensorFlow 並非嚴格受制於 Google 的框架——它可以廣泛地適用於多種真實世界的應用中。
TensorFlow 的主要特點是他的多層節點系統,可以在大數據上快速的訓練人工神經網絡。這點為 Google 的語音識別以及圖像識別提供了助力。
11. 深度學習類 Keras(提交:3519 次,貢獻者:428 個)
最後,來看一看 Keras,這是一個 Python 開源庫,用於在高級界面上建立神經網絡。它簡約且直接,並擁有很強的延展性。它使用 Theano 和 TensorFlow 作為其終端,並且微軟正在試圖將 CNTK(微軟自己的認知工具包)結合進去成為一個新的終端。
這種簡約的設計方式旨通過緊湊型系統建立來實現更加快捷和簡單的操作。
Keras 極易上手,並且在使用的過程中有很多快速原型可供參考。它完全用 Python 寫的庫,並且本身就非常高級。Keras 非常模塊化並有很強的拓展性。儘管 Keras 簡易,有高層次定位。Keras 仍然擁有足夠的深度和力量來進行嚴肅的建模。
Keras 的核心理念是「層級」,一切都是圍繞著層級建立的。數據在張量(tensors)中處理好,第一層負責張量的輸入,最後一層負責輸出,而模型則在這之間建立。
12. 自然語言處理 NLTK(提交:12449 次,貢獻者:196 個)
這個庫的名字是 Natural Language Toolkit(自然語言工具)的縮寫。正如其名,它被用於由象徵性與統計性自然語言處理的一般任務。NLTK 旨在用於自然語言處理的教學與研究等的相關領域(語義學,認知人工智能科學,等等)並現在它的使用受到了很大的關注。
NLTK 在功能上允許很多操作,例如文字標籤,歸類,標記解釋,名稱識別;通過建立語料樹(corpus tree)來解釋句子的內外聯繫,詞根提取以及語義推理。所有這些內置模塊都允許為不同的任務建造複雜研究系統。
13. 自然語言處理 Gensim(提交:2878 次,貢獻者:179 個)
這是一個開源的 Python 庫,為人們提供向量空間建模和主題建模的工具。這個庫的設計旨在高效處理大規模文本:除了允許內存中處理,效率的主要來源在於廣泛使用 NumPy 的數據結構和 SciPy 的運算符號,這兩個使用起來都十分的高效和簡單。
Gensim 主要被用於未加工的非結構化的數字文本。Gensim 使用了諸如:分層狄式流程(hierarchical Dirichlet processes),潛在語義分析(latent semantic analysis),潛在狄氏分佈(latent Dirichlet allocation)以及文檔頻次(tf-idf,term frequency-inverse document frequency),隨機映射,文字/文檔向量化(word2vec,document2vec)檢測多個文檔文字中詞語出現的頻次,通常被成為語料庫(corpus),之類的算法。這些算法都是非監督性的——不需要任何的參數,唯一的輸入就是語料庫。
14. 數據挖掘與統計 Scrapy(提交:6325 次,貢獻者:243 個)
Scrapy 是一個製做爬蟲程序的庫,也被稱作「蜘蛛機器人」(spider bots)。旨在提取結構化數據,例如從網頁聯絡信息,或網址鏈接。
它是開源並由 Python 寫的庫。正如其名,它最開始只是為了扒網頁所設計,然而現在他已經進化成為一個擁有從 API 上獲取數據並且,用途廣泛的爬蟲程序。
這個庫一直貫徹其「不要在界面設計上重複你自己」的宗旨——鼓勵用戶寫出廣泛適用並可重複使用的代碼,從而製造強大的爬蟲軟件。
整個 Scrapy 的結構都是圍繞蜘蛛類建造的,該類封裝了爬蟲跟踪的一組指令。
15. 數據挖掘與統計 Statsmodels (提交: 8960;貢獻: 119)
你可能已經從它的名字猜到了,statsmodels 是一個讓用戶通過多種估計方式和統計模型,進行數據探索和統計分析的 Python 庫。
實用的特徵有:統計描述,線性回歸模型,廣義線性模型,離散選擇模型,穩健線性模型,時間序列分析以及多種回歸子。
這個庫同樣提供大量為統計分析專門設計的畫圖方程,並且為更好的展示大數據進行了專門的調整。
結論
以上這些就是由數據科學家和工程師們公認的值得你一探究竟的 Python 庫。
這是每個庫在 Github 上動向的詳細數據:
當然這不是最終極全面的總結。也有其他的庫和框架,同樣值得為了特殊的任務進行適當的關注。一個很好的例子是另一個程序包 SciKit,它重點針對一些特別的領域。像 SciKit-Image 就針對於圖像處理。
——
(本文經 大數據文摘微信公眾平台(ID:BigDataDigest) 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈 2017 年數據科學 15 個最好用的 Python 庫 〉,原文鏈接 ,首圖來源:wiki, CC Licensed。)
延伸閱讀
要追,就追最好的!全球 AI 社群最具影響力的意見領袖、品牌、知識社群總整理
只花六秒滅掉整個產業,中國螞蟻金服 AI 服務預告大眾失業潮
如何成為好的資料學家?亞馬遜資料科學家的四個建議:把課本丟了,去實做
你對製作這些科技趨勢內容有興趣嗎? 想從 TO 讀者變成 TO 製作者嗎? 對內容策展有無比興趣的你,快加入我們的編輯團隊吧! TechOrange 社群編輯擴大徵才中 >> 詳細內容 意者請提供履歷自傳以及文字作品,寄至 jobs@fusionmedium.com 來信主旨請註明:【應徵】TechOrange 職缺名稱:您的大名