Python 近幾年在數(shù)據(jù)科學(xué)行業(yè)獲得了人們的極大青睞,各種資源也層出不窮。數(shù)據(jù)科學(xué)解決方案公司 ActiveWizards 近日根據(jù)他們自己的應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn),總結(jié)了數(shù)據(jù)科學(xué)家和工程師將在 2017 年最常使用的 Python 庫(kù)。
?
核心庫(kù)
1)NumPy
當(dāng)使用 Python 開(kāi)始處理科學(xué)任務(wù)時(shí),不可避免地需要求助 Python 的 SciPy Stack,它是專(zhuān)門(mén)為 Python 中的科學(xué)計(jì)算而設(shè)計(jì)的軟件的集合(不要與 SciPy 混淆,它只是這個(gè) stack 的一部分,以及圍繞這個(gè) stack 的社區(qū))。這個(gè) stack 相當(dāng)龐大,其中有十幾個(gè)庫(kù),所以我們想聚焦在核心包上(特別是最重要的)。
NumPy(代表 Numerical Python)是構(gòu)建科學(xué)計(jì)算 stack 的最基礎(chǔ)的包。它為 Python 中的 n 維數(shù)組和矩陣的操作提供了大量有用的功能。該庫(kù)還提供了 NumPy 數(shù)組類(lèi)型的數(shù)學(xué)運(yùn)算向量化,可以提升性能,從而加快執(zhí)行速度。
2)SciPy
SciPy 是一個(gè)工程和科學(xué)軟件庫(kù)。除此以外,你還要了解 SciPy Stack 和 SciPy 庫(kù)之間的區(qū)別。SciPy 包含線性代數(shù)、優(yōu)化、集成和統(tǒng)計(jì)的模塊。SciPy 庫(kù)的主要功能建立在 NumPy 的基礎(chǔ)之上,因此它的數(shù)組大量使用了 NumPy。它通過(guò)其特定的子模塊提供高效的數(shù)值例程操作,比如數(shù)值積分、優(yōu)化和許多其他例程。SciPy 的所有子模塊中的函數(shù)都有詳細(xì)的文檔,這也是一個(gè)優(yōu)勢(shì)。
3)Pandas
Pandas 是一個(gè) Python 包,旨在通過(guò)「標(biāo)記(labeled)」和「關(guān)系(relational)」數(shù)據(jù)進(jìn)行工作,簡(jiǎn)單直觀。Pandas 是 data wrangling 的完美工具。它設(shè)計(jì)用于快速簡(jiǎn)單的數(shù)據(jù)操作、聚合和可視化。庫(kù)中有兩個(gè)主要的數(shù)據(jù)結(jié)構(gòu):
Series:一維
Data Frames:二維
例如,當(dāng)你要從這兩種類(lèi)型的結(jié)構(gòu)中接收到一個(gè)新的「Dataframe」類(lèi)型的數(shù)據(jù)時(shí),你將通過(guò)傳遞一個(gè)「Series」來(lái)將一行添加到「Dataframe」中來(lái)接收這樣的 Dataframe:
這里只是一小撮你可以用 Pandas 做的事情:
輕松刪除并添加「Dataframe」中的列
將數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為「Dataframe」對(duì)象
處理丟失數(shù)據(jù),表示為 NaN(Not a Number)
功能強(qiáng)大的分組
可視化
4)Matplotlib
Matplotlib 是另一個(gè) SciPy Stack 核心軟件包和另一個(gè) Python 庫(kù),專(zhuān)為輕松生成簡(jiǎn)單而強(qiáng)大的可視化而量身定制。它是一個(gè)頂尖的軟件,使得 Python(在 NumPy、SciPy 和 Pandas 的幫助下)成為 MatLab 或 Mathematica 等科學(xué)工具的顯著競(jìng)爭(zhēng)對(duì)手。然而,這個(gè)庫(kù)比較底層,這意味著你需要編寫(xiě)更多的代碼才能達(dá)到高級(jí)的可視化效果,通常會(huì)比使用更高級(jí)工具付出更多努力,但總的來(lái)說(shuō)值得一試?;ㄒ稽c(diǎn)力氣,你就可以做到任何可視化:
線圖
散點(diǎn)圖
條形圖和直方圖
餅狀圖
莖圖
輪廓圖
場(chǎng)圖
頻譜圖
還有使用 Matplotlib 創(chuàng)建標(biāo)簽、網(wǎng)格、圖例和許多其他格式化實(shí)體的功能?;旧希磺卸际强啥ㄖ频?。
該庫(kù)支持不同的平臺(tái),并可使用不同的 GUI 工具套件來(lái)描述所得到的可視化。許多不同的 IDE(如 IPython)都支持 Matplotlib 的功能。
還有一些額外的庫(kù)可以使可視化變得更加容易。
5)Seaborn
Seaborn 主要關(guān)注統(tǒng)計(jì)模型的可視化;這種可視化包括熱度圖(heat map),可以總結(jié)數(shù)據(jù)但也描繪總體分布。Seaborn 基于 Matplotlib,并高度依賴于它。
6)Bokeh
Bokeh 也是一個(gè)很好的可視化庫(kù),其目的是交互式可視化。與之前的庫(kù)相反,這個(gè)庫(kù)獨(dú)立于 Matplotlib。正如我們已經(jīng)提到的那樣,Bokeh 的重點(diǎn)是交互性,它通過(guò)現(xiàn)代瀏覽器以數(shù)據(jù)驅(qū)動(dòng)文檔(d3.js)的風(fēng)格呈現(xiàn)。
7)Plotly
最后談?wù)?Plotly。它是一個(gè)基于 Web 的工具箱,用于構(gòu)建可視化,將 API 呈現(xiàn)給某些編程語(yǔ)言(其中包括 Python)。在 plot.ly 網(wǎng)站上有一些強(qiáng)大的、開(kāi)箱即用的圖形。為了使用 Plotly,你需要設(shè)置你的 API 密鑰。圖形處理會(huì)放在服務(wù)器端,并在互聯(lián)網(wǎng)上發(fā)布,但也有一種方法可以避免這么做。
機(jī)器學(xué)習(xí)
8)SciKit-Learn
Scikits 是 SciPy Stack 的附加軟件包,專(zhuān)為特定功能(如圖像處理和輔助機(jī)器學(xué)習(xí))而設(shè)計(jì)。在后者方面,其中最突出的一個(gè)是 scikit-learn。該軟件包構(gòu)建于 SciPy 之上,并大量使用其數(shù)學(xué)操作。
scikit-learn 有一個(gè)簡(jiǎn)潔和一致的接口,可利用常見(jiàn)的機(jī)器學(xué)習(xí)算法,讓我們可以簡(jiǎn)單地在生產(chǎn)中應(yīng)用機(jī)器學(xué)習(xí)。該庫(kù)結(jié)合了質(zhì)量很好的代碼和良好的文檔,易于使用且有著非常高的性能,是使用 Python 進(jìn)行機(jī)器學(xué)習(xí)的實(shí)際上的行業(yè)標(biāo)準(zhǔn)。
深度學(xué)習(xí):Keras / TensorFlow / Theano
在深度學(xué)習(xí)方面,Python 中最突出和最方便的庫(kù)之一是 Keras,它可以在 TensorFlow 或者 Theano 之上運(yùn)行。讓我們來(lái)看一下它們的一些細(xì)節(jié)。
9)Theano
首先,讓我們談?wù)?Theano。Theano 是一個(gè) Python 包,它定義了與 NumPy 類(lèi)似的多維數(shù)組,以及數(shù)學(xué)運(yùn)算和表達(dá)式。該庫(kù)是經(jīng)過(guò)編譯的,使其在所有架構(gòu)上能夠高效運(yùn)行。這個(gè)庫(kù)最初由蒙特利爾大學(xué)機(jī)器學(xué)習(xí)組開(kāi)發(fā),主要是為了滿足機(jī)器學(xué)習(xí)的需求。
要注意的是,Theano 與 NumPy 在底層的操作上緊密集成。該庫(kù)還優(yōu)化了 GPU 和 CPU 的使用,使數(shù)據(jù)密集型計(jì)算的性能更快。
效率和穩(wěn)定性調(diào)整允許更精確的結(jié)果,即使是非常小的值也可以,例如,即使 x 很小,log(1+x) 也能得到很好的結(jié)果。
10)TensorFlow
TensorFlow 來(lái)自 Google 的開(kāi)發(fā)人員,它是用于數(shù)據(jù)流圖計(jì)算的開(kāi)源庫(kù),專(zhuān)門(mén)為機(jī)器學(xué)習(xí)設(shè)計(jì)。它是為滿足 Google 對(duì)訓(xùn)練神經(jīng)網(wǎng)絡(luò)的高要求而設(shè)計(jì)的,是基于神經(jīng)網(wǎng)絡(luò)的機(jī)器學(xué)習(xí)系統(tǒng) DistBelief 的繼任者。然而,TensorFlow 并不是谷歌的科學(xué)專(zhuān)用的——它也足以支持許多真實(shí)世界的應(yīng)用。
TensorFlow 的關(guān)鍵特征是其多層節(jié)點(diǎn)系統(tǒng),可以在大型數(shù)據(jù)集上快速訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)。這為 Google 的語(yǔ)音識(shí)別和圖像識(shí)別提供了支持。
11)Keras
最后,我們來(lái)看看 Keras。它是一個(gè)使用高層接口構(gòu)建神經(jīng)網(wǎng)絡(luò)的開(kāi)源庫(kù),它是用 Python 編寫(xiě)的。它簡(jiǎn)單易懂,具有高級(jí)可擴(kuò)展性。它使用 Theano 或 TensorFlow 作為后端,但 Microsoft 現(xiàn)在已將 CNTK(Microsoft 的認(rèn)知工具包)集成為新的后端。
其簡(jiǎn)約的設(shè)計(jì)旨在通過(guò)建立緊湊型系統(tǒng)進(jìn)行快速和容易的實(shí)驗(yàn)。
Keras 極其容易上手,而且可以進(jìn)行快速的原型設(shè)計(jì)。它完全使用 Python 編寫(xiě)的,所以本質(zhì)上很高層。它是高度模塊化和可擴(kuò)展的。盡管它簡(jiǎn)單易用且面向高層,但 Keras 也非常深度和強(qiáng)大,足以用于嚴(yán)肅的建模。
Keras 的一般思想是基于神經(jīng)網(wǎng)絡(luò)的層,然后圍繞層構(gòu)建一切。數(shù)據(jù)以張量的形式進(jìn)行準(zhǔn)備,第一層負(fù)責(zé)輸入張量,最后一層用于輸出。模型構(gòu)建于兩者之間。
自然語(yǔ)言處理
12)NLTK
這套庫(kù)的名稱(chēng)是 Natural Language Toolkit(自然語(yǔ)言工具包),顧名思義,它可用于符號(hào)和統(tǒng)計(jì)自然語(yǔ)言處理的常見(jiàn)任務(wù)。NLTK 旨在促進(jìn) NLP 及相關(guān)領(lǐng)域(語(yǔ)言學(xué)、認(rèn)知科學(xué)和人工智能等)的教學(xué)和研究,目前正被重點(diǎn)關(guān)注。
NLTK 允許許多操作,例如文本標(biāo)記、分類(lèi)和 tokenizing、命名實(shí)體識(shí)別、建立語(yǔ)語(yǔ)料庫(kù)樹(shù)(揭示句子間和句子內(nèi)的依存性)、詞干提取、語(yǔ)義推理。所有的構(gòu)建塊都可以為不同的任務(wù)構(gòu)建復(fù)雜的研究系統(tǒng),例如情緒分析、自動(dòng)摘要。
13)Gensim
這是一個(gè)用于 Python 的開(kāi)源庫(kù),實(shí)現(xiàn)了用于向量空間建模和主題建模的工具。這個(gè)庫(kù)為大文本進(jìn)行了有效的設(shè)計(jì),而不僅僅可以處理內(nèi)存中內(nèi)容。其通過(guò)廣泛使用 NumPy 數(shù)據(jù)結(jié)構(gòu)和 SciPy 操作而實(shí)現(xiàn)了效率。它既高效又易于使用。
Gensim 的目標(biāo)是可以應(yīng)用原始的和非結(jié)構(gòu)化的數(shù)字文本。Gensim 實(shí)現(xiàn)了諸如分層 Dirichlet 進(jìn)程(HDP)、潛在語(yǔ)義分析(LSA)和潛在 Dirichlet 分配(LDA)等算法,還有 tf-idf、隨機(jī)投影、word2vec 和 document2vec,以便于檢查一組文檔(通常稱(chēng)為語(yǔ)料庫(kù))中文本的重復(fù)模式。所有這些算法是無(wú)監(jiān)督的——不需要任何參數(shù),唯一的輸入是語(yǔ)料庫(kù)。
數(shù)據(jù)挖掘與統(tǒng)計(jì)
14)Scrapy
Scrapy 是用于從網(wǎng)絡(luò)檢索結(jié)構(gòu)化數(shù)據(jù)(如聯(lián)系人信息或 URL)的爬蟲(chóng)程序(也稱(chēng)為 spider bots)的庫(kù)。它是開(kāi)源的,用 Python 編寫(xiě)。它最初是為 scraping 設(shè)計(jì)的,正如其名字所示的那樣,但它現(xiàn)在已經(jīng)發(fā)展成了一個(gè)完整的框架,可以從 API 收集數(shù)據(jù),也可以用作通用的爬蟲(chóng)。
該庫(kù)在接口設(shè)計(jì)上遵循著名的 Don』t Repeat Yourself 原則——提醒用戶編寫(xiě)通用的可復(fù)用的代碼,因此可以用來(lái)開(kāi)發(fā)和擴(kuò)展大型爬蟲(chóng)。
Scrapy 的架構(gòu)圍繞 Spider 類(lèi)構(gòu)建,該類(lèi)包含了一套爬蟲(chóng)所遵循的指令。
15)Statsmodels
statsmodels 是一個(gè)用于 Python 的庫(kù),正如你可能從名稱(chēng)中猜出的那樣,其讓用戶能夠通過(guò)使用各種統(tǒng)計(jì)模型估計(jì)方法以及執(zhí)行統(tǒng)計(jì)斷言和分析來(lái)進(jìn)行數(shù)據(jù)探索。
許多有用的特征是描述性的,并可通過(guò)使用線性回歸模型、廣義線性模型、離散選擇模型、穩(wěn)健的線性模型、時(shí)序分析模型、各種估計(jì)器進(jìn)行統(tǒng)計(jì)。
該庫(kù)還提供了廣泛的繪圖函數(shù),專(zhuān)門(mén)用于統(tǒng)計(jì)分析和調(diào)整使用大數(shù)據(jù)統(tǒng)計(jì)數(shù)據(jù)的良好性能。
結(jié)論
這個(gè)列表中的庫(kù)被很多數(shù)據(jù)科學(xué)家和工程師認(rèn)為是最頂級(jí)的,了解和熟悉它們是很有價(jià)值的。這里有這些庫(kù)在 GitHub 上活動(dòng)的詳細(xì)統(tǒng)計(jì):
當(dāng)然,這并不是一份完全詳盡的列表,還有其它很多值得關(guān)注的庫(kù)、工具包和框架。比如說(shuō)用于特定任務(wù)的 SciKit 包,其中包括用于圖像的 SciKit-Image。
評(píng)論
查看更多