2017年資料科學15個最好用的Python庫

大資料文摘發表於2017-07-12

2017年資料科學15個最好用的Python庫

導讀:隨著近幾年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)”: 一維陣列

2017年資料科學15個最好用的Python庫

“資料框(Data Frames)” :二維陣列

2017年資料科學15個最好用的Python庫

例如,當你想從這兩種資料結構中得到一個新的資料框,把一個數列作為新的一行新增至資料框,你就能得到一個如圖所示的資料框。

2017年資料科學15個最好用的Python庫

下面列出的只是你可以用Pandas做的事情的一小部分:

●     輕鬆新增或刪除資料框中的數列

●     將其他資料結構轉換為資料框

●     處理缺失的資料,比如用NaN表示它們

●     強大的高效分組功能

下圖:核心庫的Google Trends歷史記錄

2017年資料科學15個最好用的Python庫

圖片來源:trends.google.com

下圖:核心庫的GitHub下載請求歷史記錄

2017年資料科學15個最好用的Python庫

圖片來源:datascience.com/trends



視覺化類



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還有一些其他庫能讓視覺化變得更加容易。

下圖:使用Matplotlib製作的圖表展示

2017年資料科學15個最好用的Python庫

5. Seaborn(Github提交次數:1699,貢獻者人數:71)

Seaborn主要關注統計模型的視覺化,包括熱分佈圖(用來總結資料及描繪資料的整體分佈)。 Seaborn是基於且高度依賴於Matplotlib的一個python庫。

下圖:使用Seaborn製作的圖表展示

2017年資料科學15個最好用的Python庫

6. Bokeh(Github提交次數:15724,貢獻者人數:223)

還有一個強大的視覺化庫叫做Bokeh,其目的是互動式的視覺化。 與Seaborn不同,Bokeh獨立於Matplotlib。 如上所述,Bokeh的賣點是互動性,它通過資料驅動文件(d3.js)風格的新式瀏覽器來呈現圖表。

下圖:使用Bokeh製作的圖表展示

2017年資料科學15個最好用的Python庫

7. Plotly(Github提交次數:2486,貢獻者人數:33)

Plotly是一個基於Web來構建視覺化的的工具箱。它有好幾種程式語言(其中包括Python)的API,並在plot.ly網站上提供一些強大的、開箱即用的圖表。 要使用Plotly,您先需要設定您的Plotly API金鑰。Plotly將在其伺服器端處理圖表,並將結果在網際網路上釋出。此外,它也提供了一種不需要使用其伺服器和網路的offline方法。

下圖:使用Plotly製作的圖表展示

2017年資料科學15個最好用的Python庫

下圖:python視覺化庫的Google趨勢記錄

2017年資料科學15個最好用的Python庫

圖片來源:trends.google.com



機器學習類


8. SciKit-Learn(Github提交次數:21793,貢獻者人數:842)

Scikits是SciPy Stack的另一庫,它專為某些特殊功能(如影像處理和機器學習輔助)而設計。對於機器學習而言,SciKit-Learn是其中最突出的一個是庫。SciKit-Learn建立在SciPy之上,並大量使用SciPy進行數學操作。

scikit-learn為常見的機器學習演算法設計了一個簡潔通用的介面,使得在生產系統使用機器學習變的十分簡單。 該庫有著高質量的程式碼和文件,效能高,容易使用,是使用Python進行機器學習的行業實踐標準。

深度學習類 - Keras / TensorFlow / Theano


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

9.Theano. (提交:25870次,貢獻者:300個)

首先我們來談談Theano.

Theano同Numpy類似,是一款定義多維矩陣並含有數學運算子和表示式的Python包。通過編譯這個庫可以在任何環境下有效的執行。由蒙特利爾大學的機器學習小組最初開發,它主要用於滿足機器學習的需要。

很重要的一點是要注意到,Theano在低階別運算子上同NumPy緊密的結合在一起。並且這個庫優化了GPU和CPU的使用,使其在處理大資料運算時的表現更為迅速。

效率和穩定性的調整,使得即使是非常小的值也能得到更精確的結果,例如,即使給一個非常小的x值,計算log(1 + x)也能給出一個可是別的結果。

10.TensorFlow (提交:16785次,貢獻者:795個)

2017年資料科學15個最好用的Python庫

這是一個由Google的程式設計師開發,為機器學習打造的資料流影像計算開源庫。設計它的目的是為了滿足Google環境中對訓練神經網路的迫切需求。其前身是DistBelief,一個基於神經網路的機器學習系統。而且TensorFlow並非嚴格受制於Google的框架——它可以廣泛地適用於多種真實世界的應用中。

TensorFlow的主要特點是他的多層節點系統,可以在大資料上快速的訓練人工神經網路。這點為Google的語音識別以及影像識別提供了助力。

11.Keras (提交:3519次,貢獻者:428個)

最後,來看一看Keras,這是一個Python開源庫,用於在高階介面上建立神經網路。它簡約且直接,並擁有很強的延展性。它使用Theano 和 TensorFlow作為其終端,並且微軟正在試圖將CNTK(微軟自己的認知工具包)結合進去成為一個新的終端。

這種簡約的設計方式旨通過緊湊型系統建立來實現更加快捷和簡單的操作。

Keras極易上手,並且在使用的過程中有很多快速原型可供參考。它完全用Python寫的庫,並且本身就非常高階。Keras非常模組化並有很強的擴充性。儘管Keras簡易,有高層次定位。Keras仍然擁有足夠的深度和力量來進行嚴肅的建模。

Keras的核心理念是“層級”,一切都是圍繞著層級建立的。資料在張量(tensors)中處理好,第一層負責張量的輸入,最後一層負責輸出,而模型則在這之間建立。

谷歌Trends歷史記錄

2017年資料科學15個最好用的Python庫

trends.google.com

Github合併請求(pull requests)歷史紀錄

2017年資料科學15個最好用的Python庫

datascience.com/trends

自然語言處理


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),之類的演算法。這些演算法都是非監督性的——不需要任何的引數,唯一的輸入就是語料庫。

谷歌Trends歷史記錄

2017年資料科學15個最好用的Python庫

圖片來源:trends.google.com

Github下載請求歷史紀錄

2017年資料科學15個最好用的Python庫

圖片來源:datascience.com/trends

資料探勘與統計


14.  Scrapy(提交:6325次,貢獻者:243個)

Scrapy是一個製做爬蟲程式的庫,也被稱作“蜘蛛機器人”(spider bots)。旨在提取結構化資料,例如從網頁聯絡資訊,或網址連結。

它是開源並由Python寫的庫。正如其名,它最開始只是為了扒網頁所設計,然而現在他已經進化成為一個擁有從API上獲取資料並且,用途廣泛的爬蟲程式。

這個庫一直貫徹其“不要在介面設計上重複你自己”的宗旨——鼓勵使用者寫出廣泛適用並可重複使用的程式碼,從而製造強大的爬蟲軟體。

整個Scrapy的結構都是圍繞蜘蛛類建造的,該類封裝了爬蟲跟蹤的一組指令。

15. Statsmodels (提交: 8960, 貢獻: 119)

你可能已經從它的名字猜到了,statsmodels是一個讓使用者通過多種估計方式和統計模型,進行資料探索和統計分析的Python庫。

實用的特徵有:統計描述,線性迴歸模型,廣義線性模型,離散選擇模型,穩健線性模型,時間序列分析以及多種迴歸子。

這個庫同樣提供大量為統計分析專門設計的畫圖方程,並且為更好的展示大資料進行了專門的調整。

結論


以上這些就是由資料科學家和工程師們公認的值得你一探究竟的Python庫。

這是每個庫在Github上動向的詳細資料:

2017年資料科學15個最好用的Python庫

來源:https://docs.google.com/spreadsheets/d/1wLOtLLJ65QMbLumc3F2Mop_4uPIFbyJ6iDZwOp0cXrQ

當然這不是最終極全面的總結。也有其他的庫和框架,同樣值得為了特殊的任務進行適當的關注。一個很好的例子是另一個程式包SciKit,它重點針對一些特別的領域。像SciKit-Image就針對於影像處理。


作者:Igor Bobriakov

編譯:朱璇、衛青、萬如苑

相關文章