2017 年最流行的 15 個資料科學 Python 庫

朱朝陽發表於2017-05-20

Python 近幾年在資料科學行業獲得了人們的極大青睞,各種資源也層出不窮。資料科學解決方案公司 ActiveWizards 近日根據他們自己的應用開發經驗,總結了資料科學家和工程師將在 2017 年最常使用的 Python 庫。

核心庫

1)NumPy

地址:http://www.numpy.org

當使用 Python 開始處理科學任務時,不可避免地需要求助 Python 的 SciPy Stack,它是專門為 Python 中的科學計算而設計的軟體的集合(不要與 SciPy 混淆,它只是這個 stack 的一部分,以及圍繞這個 stack 的社群)。這個 stack 相當龐大,其中有十幾個庫,所以我們想聚焦在核心包上(特別是最重要的)。

NumPy(代表 Numerical Python)是構建科學計算 stack 的最基礎的包。它為 Python 中的 n 維陣列和矩陣的操作提供了大量有用的功能。該庫還提供了 NumPy 陣列型別的數學運算向量化,可以提升效能,從而加快執行速度。

2)SciPy

地址:https://www.scipy.org

SciPy 是一個工程和科學軟體庫。除此以外,你還要了解 SciPy Stack 和 SciPy 庫之間的區別。SciPy 包含線性代數、優化、整合和統計的模組。SciPy 庫的主要功能建立在 NumPy 的基礎之上,因此它的陣列大量使用了 NumPy。它通過其特定的子模組提供高效的數值例程操作,比如數值積分、優化和許多其他例程。SciPy 的所有子模組中的函式都有詳細的文件,這也是一個優勢。

3)Pandas

地址:http://pandas.pydata.org

Pandas 是一個 Python 包,旨在通過「標記(labeled)」和「關係(relational)」資料進行工作,簡單直觀。Pandas 是 data wrangling 的完美工具。它設計用於快速簡單的資料操作、聚合和視覺化。庫中有兩個主要的資料結構:

image.png

Series:一維

1-oKycB6NgLgPJG31fiGwpUA.png

Data Frames:二維

例如,當你要從這兩種型別的結構中接收到一個新的「Dataframe」型別的資料時,你將通過傳遞一個「Series」來將一行新增到「Dataframe」中來接收這樣的 Dataframe:

1-oKycB6NgLgPJG31fiGwpUA.png

這裡只是一小撮你可以用 Pandas 做的事情:

  • 輕鬆刪除並新增「Dataframe」中的列
  • 將資料結構轉換為「Dataframe」物件
  • 處理丟失資料,表示為 NaN(Not a Number)
  • 功能強大的分組

視覺化

4)Matplotlib

地址:https://matplotlib.org

Matplotlib 是另一個 SciPy Stack 核心軟體包和另一個 Python 庫,專為輕鬆生成簡單而強大的視覺化而量身定製。它是一個頂尖的軟體,使得 Python(在 NumPy、SciPy 和 Pandas 的幫助下)成為 MatLab 或 Mathematica 等科學工具的顯著競爭對手。然而,這個庫比較底層,這意味著你需要編寫更多的程式碼才能達到高階的視覺化效果,通常會比使用更高階工具付出更多努力,但總的來說值得一試。花一點力氣,你就可以做到任何視覺化:

  • 線圖
  • 散點圖
  • 條形圖和直方圖
  • 餅狀圖
  • 莖圖
  • 輪廓圖
  • 場圖
  • 頻譜圖

還有使用 Matplotlib 建立標籤、網格、圖例和許多其他格式化實體的功能。基本上,一切都是可定製的。

該庫支援不同的平臺,並可使用不同的 GUI 工具套件來描述所得到的視覺化。許多不同的 IDE(如 IPython)都支援 Matplotlib 的功能。

還有一些額外的庫可以使視覺化變得更加容易。

image (2).png

5)Seaborn

地址:https://seaborn.pydata.org

Seaborn 主要關注統計模型的視覺化;這種視覺化包括熱度圖(heat map),可以總結資料但也描繪總體分佈。Seaborn 基於 Matplotlib,並高度依賴於它。

image (3).png

6)Bokeh

地址:http://bokeh.pydata.org

Bokeh 也是一個很好的視覺化庫,其目的是互動式視覺化。與之前的庫相反,這個庫獨立於 Matplotlib。正如我們已經提到的那樣,Bokeh 的重點是互動性,它通過現代瀏覽器以資料驅動文件(D3.js)的風格呈現。

image (4).png

7)Plotly

地址:https://plot.ly

最後談談 Plotly。它是一個基於 Web 的工具箱,用於構建視覺化,將 API 呈現給某些程式語言(其中包括 Python)。在 plot.ly 網站上有一些強大的、開箱即用的圖形。為了使用 Plotly,你需要設定你的 API 金鑰。圖形處理會放在伺服器端,並在網際網路上釋出,但也有一種方法可以避免這麼做。

image (5).png

機器學習

8)SciKit-Learn

地址:http://scikit-learn.org

Scikits 是 SciPy Stack 的附加軟體包,專為特定功能(如影像處理和輔助機器學習)而設計。在後者方面,其中最突出的一個是 scikit-learn。該軟體包構建於 SciPy 之上,並大量使用其數學操作。

scikit-learn 有一個簡潔和一致的介面,可利用常見的機器學習演算法,讓我們可以簡單地在生產中應用機器學習。該庫結合了質量很好的程式碼和良好的文件,易於使用且有著非常高的效能,是使用 Python 進行機器學習的實際上的行業標準。

深度學習:Keras / TensorFlow / Theano

在深度學習方面,Python 中最突出和最方便的庫之一是 Keras,它可以在 TensorFlow 或者 Theano 之上執行。讓我們來看一下它們的一些細節。

9)Theano

地址:https://github.com/Theano

首先,讓我們談談 Theano。Theano 是一個 Python 包,它定義了與 NumPy 類似的多維陣列,以及數學運算和表示式。該庫是經過編譯的,使其在所有架構上能夠高效執行。這個庫最初由蒙特利爾大學機器學習組開發,主要是為了滿足機器學習的需求。

要注意的是,Theano 與 NumPy 在底層的操作上緊密整合。該庫還優化了 GPU 和 CPU 的使用,使資料密集型計算的效能更快。

效率和穩定性調整允許更精確的結果,即使是非常小的值也可以,例如,即使 x 很小,log(1+x) 也能得到很好的結果。

10)TensorFlow

地址:https://www.tensorflow.org

TensorFlow 來自 Google 的開發人員,它是用於資料流圖計算的開源庫,專門為機器學習設計。它是為滿足 Google 對訓練神經網路的高要求而設計的,是基於神經網路的機器學習系統 DistBelief 的繼任者。然而,TensorFlow 並不是谷歌的科學專用的——它也足以支援許多真實世界的應用。

TensorFlow 的關鍵特徵是其多層節點系統,可以在大型資料集上快速訓練人工神經網路。這為 Google 的語音識別和影像識別提供了支援。

11)Keras

地址:https://keras.io

最後,我們來看看 Keras。它是一個使用高層介面構建神經網路的開源庫,它是用 Python 編寫的。它簡單易懂,具有高階可擴充套件性。它使用 Theano 或 TensorFlow 作為後端,但 Microsoft 現在已將 CNTK(Microsoft 的認知工具包)整合為新的後端。

其簡約的設計旨在通過建立緊湊型系統進行快速和容易的實驗。

Keras 極其容易上手,而且可以進行快速的原型設計。它完全使用 Python 編寫的,所以本質上很高層。它是高度模組化和可擴充套件的。儘管它簡單易用且面向高層,但 Keras 也非常深度和強大,足以用於嚴肅的建模。

Keras 的一般思想是基於神經網路的層,然後圍繞層構建一切。資料以張量的形式進行準備,第一層負責輸入張量,最後一層用於輸出。模型構建於兩者之間。

自然語言處理

12)NLTK

地址:http://www.nltk.org

這套庫的名稱是 Natural Language Toolkit(自然語言工具包),顧名思義,它可用於符號和統計自然語言處理的常見任務。NLTK 旨在促進 NLP 及相關領域(語言學、認知科學和人工智慧等)的教學和研究,目前正被重點關注。

NLTK 允許許多操作,例如文字標記、分類和 tokenizing、命名實體識別、建立語語料庫樹(揭示句子間和句子內的依存性)、詞幹提取、語義推理。所有的構建塊都可以為不同的任務構建複雜的研究系統,例如情緒分析、自動摘要。

13)Gensim

地址:http://radimrehurek.com/gensim

這是一個用於 Python 的開源庫,實現了用於向量空間建模和主題建模的工具。這個庫為大文字進行了有效的設計,而不僅僅可以處理記憶體中內容。其通過廣泛使用 NumPy 資料結構和 SciPy 操作而實現了效率。它既高效又易於使用。

Gensim 的目標是可以應用原始的和非結構化的數字文字。Gensim 實現了諸如分層 Dirichlet 程式(HDP)、潛在語義分析(LSA)和潛在 Dirichlet 分配(LDA)等演算法,還有 tf-idf、隨機投影、word2vec 和 document2vec,以便於檢查一組文件(通常稱為語料庫)中文字的重複模式。所有這些演算法是無監督的——不需要任何引數,唯一的輸入是語料庫。

資料探勘與統計

14)Scrapy

地址:https://scrapy.org

Scrapy 是用於從網路檢索結構化資料(如聯絡人資訊或 URL)的爬蟲程式(也稱為 spider bots)的庫。它是開源的,用 Python 編寫。它最初是為 scraping 設計的,正如其名字所示的那樣,但它現在已經發展成了一個完整的框架,可以從 API 收集資料,也可以用作通用的爬蟲。

該庫在介面設計上遵循著名的 Don』t Repeat Yourself 原則——提醒使用者編寫通用的可複用的程式碼,因此可以用來開發和擴充套件大型爬蟲。

Scrapy 的架構圍繞 Spider 類構建,該類包含了一套爬蟲所遵循的指令。

15)Statsmodels

地址:http://www.statsmodels.org

statsmodels 是一個用於 Python 的庫,正如你可能從名稱中猜出的那樣,其讓使用者能夠通過使用各種統計模型估計方法以及執行統計斷言和分析來進行資料探索。

許多有用的特徵是描述性的,並可通過使用線性迴歸模型、廣義線性模型、離散選擇模型、穩健的線性模型、時序分析模型、各種估計器進行統計。

該庫還提供了廣泛的繪圖函式,專門用於統計分析和調整使用大資料統計資料的良好效能。

結論

這個列表中的庫被很多資料科學家和工程師認為是最頂級的,瞭解和熟悉它們是很有價值的。這裡有這些庫在 GitHub 上活動的詳細統計:

image (6).png

當然,這並不是一份完全詳盡的列表,還有其它很多值得關注的庫、工具包和框架。比如說用於特定任務的 SciKit 包,其中包括用於影像的 SciKit-Image。如果你也有好想法,不妨與我們分享。

相關文章