導(dǎo)讀:隨著近幾年P(guān)ython已成為數(shù)據(jù)科學(xué)行業(yè)中大火的編程語言,我們將根據(jù)以往的經(jīng)驗(yàn)來為大家總結(jié)一下數(shù)據(jù)科學(xué)家和工程師幾個(gè)最實(shí)用的python庫。如果你是正在學(xué)習(xí)Python的學(xué)生,也許根據(jù)這個(gè)表單能夠幫你更好地找到學(xué)習(xí)的重心。 因?yàn)樗械膒ython庫都是開源的,所以我們還列出了每個(gè)庫的提交次數(shù)、貢獻(xiàn)者人數(shù)和其他一些來自Github可以代表Python庫流行度的指標(biāo)。 核心庫 1. NumPy(Github提交次數(shù):15980,貢獻(xiàn)者人數(shù):522) 在用Python處理科學(xué)任務(wù)時(shí),我們常常需要使用Python的SciPy Stack。SciPyStack是一個(gè)專門為用Python處理科學(xué)計(jì)算而設(shè)計(jì)的軟件集(注意不要把SciPy Stack和SciPy庫搞混啦;SciPy庫只是SciPy Stack的一部分)。 讓我們來看看SciPy Stack里面都包括什么:SciPy Stack其實(shí)相當(dāng)龐大,包括了十幾個(gè)庫。其中NumPy庫是它的核心庫(特別是最重要的幾個(gè)庫)中的明星。 NumPy(來自NumericalPython)是構(gòu)建科學(xué)計(jì)算代碼集的最基礎(chǔ)的庫。 它提供了許多用Python進(jìn)行n維數(shù)組和矩陣操作的功能。該庫提供了NumPy數(shù)組類型的數(shù)學(xué)運(yùn)算向量化,可以改善性能,從而加快執(zhí)行速度。 2. SciPy(Github提交次數(shù):17213,貢獻(xiàn)者人數(shù):489) SciPy是一個(gè)針對(duì)工程和科學(xué)庫。 再次提醒大家SciPyStack不等于SciPy庫: SciPy Stack包括線性代數(shù)、優(yōu)化、整合和統(tǒng)計(jì)等模塊,而 SciPy庫的主要功能是建立在NumPy基礎(chǔ)之上,因此它使用了大量的NumPy數(shù)組結(jié)構(gòu)。 SciPy庫通過其特定的子模塊提供高效的數(shù)學(xué)運(yùn)算功能,例如數(shù)值積分、優(yōu)化等。 值得一提的是SciPy子模塊中的所有功能都附有詳細(xì)的文檔可供查閱。 3. Pandas(Github提交次數(shù):15089,貢獻(xiàn)者人數(shù):762) Pandas是一個(gè)簡單直觀地應(yīng)用于“帶標(biāo)記的”和“關(guān)系性的”的數(shù)據(jù)的Python庫。它是探索數(shù)據(jù)的完美工具,能快速簡單地進(jìn)行數(shù)據(jù)操作、聚合和可視化。 “數(shù)列(Series)”:?一維數(shù)組 “數(shù)據(jù)框(Data Frames)” :二維數(shù)組 例如,當(dāng)你想從這兩種數(shù)據(jù)結(jié)構(gòu)中得到一個(gè)新的數(shù)據(jù)框,把一個(gè)數(shù)列作為新的一行添加至數(shù)據(jù)框,你就能得到一個(gè)如圖所示的數(shù)據(jù)框。 下面列出的只是你可以用Pandas做的事情的一小部分: ● 輕松添加或刪除數(shù)據(jù)框中的數(shù)列 ● 將其他數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為數(shù)據(jù)框 ● 處理缺失的數(shù)據(jù),比如用NaN表示它們 ● 強(qiáng)大的高效分組功能 下圖:核心庫的Google Trends歷史記錄 圖片來源:trends.google.com 下圖:核心庫的GitHub下載請(qǐng)求歷史記錄 圖片來源:datascience.com/trends 可視化類 4. Matplotlib(Github提交次數(shù):21754,貢獻(xiàn)者人數(shù):588) MatPlotlib是另一個(gè)SciPy Stack的核心庫。它是為能輕松生成簡單而強(qiáng)大的可視化圖標(biāo)而量身定制。 MatPlotlib是一個(gè)超酷的庫,它和NumPy,SciPy以及Pandas一起使Python成為像MatLab、Mathematica這樣的科學(xué)工具的強(qiáng)力競(jìng)爭(zhēng)者。 然而,MatPlotlib是一個(gè)低端庫。這意味著您需要編寫更多的代碼才能達(dá)到高級(jí)的可視化效果;換句話說,和使用其他高級(jí)工具相比,使用MatPlotlib你需要投入更多的精力,但總體來說MatPlotlib還是值得一試的。 付出一些努力,您就用MatPlotlib做任何您想做的可視化圖表: ● 線路圖 ● 散點(diǎn)圖 ● 條形圖和直方圖 ● 餅狀圖 ● 莖圖 ● 輪廓圖 ● 矢量場(chǎng)圖 ● 頻譜圖 Matplotlib還可用來創(chuàng)建標(biāo)簽、網(wǎng)格、圖例和許多其他樣式圖?;旧希磺袌D表都可以通過Matplotlib來定制。 Matplotlib庫還能支持不同的平臺(tái),并能使用不同的GUI套件來展示所得到的可視化圖表。 各種IDE(比如IPython)都支持Matplotlib的功能。 除了Matplotlib,python還有一些其他庫能讓可視化變得更加容易。 下圖:使用Matplotlib制作的圖表展示 5. Seaborn(Github提交次數(shù):1699,貢獻(xiàn)者人數(shù):71) Seaborn主要關(guān)注統(tǒng)計(jì)模型的可視化,包括熱分布圖(用來總結(jié)數(shù)據(jù)及描繪數(shù)據(jù)的整體分布)。 Seaborn是基于且高度依賴于Matplotlib的一個(gè)python庫。 下圖:使用Seaborn制作的圖表展示 6. Bokeh(Github提交次數(shù):15724,貢獻(xiàn)者人數(shù):223) 還有一個(gè)強(qiáng)大的可視化庫叫做Bokeh,其目的是互動(dòng)式的可視化。 與Seaborn不同,Bokeh獨(dú)立于Matplotlib。 如上所述,Bokeh的賣點(diǎn)是互動(dòng)性,它通過數(shù)據(jù)驅(qū)動(dòng)文檔(d3.js)風(fēng)格的新式瀏覽器來呈現(xiàn)圖表。 下圖:使用Bokeh制作的圖表展示 7. Plotly(Github提交次數(shù):2486,貢獻(xiàn)者人數(shù):33) Plotly是一個(gè)基于Web來構(gòu)建可視化的的工具箱。它有好幾種編程語言(其中包括Python)的API,并在plot.ly網(wǎng)站上提供一些強(qiáng)大的、開箱即用的圖表。 要使用Plotly,您先需要設(shè)置您的Plotly API密鑰。Plotly將在其服務(wù)器端處理圖表,并將結(jié)果在互聯(lián)網(wǎng)上發(fā)布。此外,它也提供了一種不需要使用其服務(wù)器和網(wǎng)絡(luò)的offline方法。 下圖:使用Plotly制作的圖表展示 下圖:python可視化庫的Google趨勢(shì)記錄 圖片來源:trends.google.com 機(jī)器學(xué)習(xí)類 8. SciKit-Learn(Github提交次數(shù):21793,貢獻(xiàn)者人數(shù):842) Scikits是SciPy Stack的另一庫,它專為某些特殊功能(如圖像處理和機(jī)器學(xué)習(xí)輔助)而設(shè)計(jì)。對(duì)于機(jī)器學(xué)習(xí)而言,SciKit-Learn是其中最突出的一個(gè)是庫。SciKit-Learn建立在SciPy之上,并大量使用SciPy進(jìn)行數(shù)學(xué)操作。 scikit-learn為常見的機(jī)器學(xué)習(xí)算法設(shè)計(jì)了一個(gè)簡潔通用的界面,使得在生產(chǎn)系統(tǒng)使用機(jī)器學(xué)習(xí)變的十分簡單。 該庫有著高質(zhì)量的代碼和文檔,性能高,容易使用,是使用Python進(jìn)行機(jī)器學(xué)習(xí)的行業(yè)實(shí)踐標(biāo)準(zhǔn)。 深度學(xué)習(xí)類 - Keras / TensorFlow / Theano 在深度學(xué)習(xí)方面,Keras是最杰出最方便的Python庫之一。它可以在TensorFlow或者Theano之上運(yùn)行。 下面讓我們來看一下它們的一些細(xì)節(jié): 9.Theano. (提交:25870次,貢獻(xiàn)者:300個(gè)) 首先我們來談?wù)凾heano. Theano同Numpy類似,是一款定義多維矩陣并含有數(shù)學(xué)運(yùn)算符和表達(dá)式的Python包。通過編譯這個(gè)庫可以在任何環(huán)境下有效的運(yùn)行。由蒙特利爾大學(xué)的機(jī)器學(xué)習(xí)小組最初開發(fā),它主要用于滿足機(jī)器學(xué)習(xí)的需要。 很重要的一點(diǎn)是要注意到,Theano在低級(jí)別運(yùn)算符上同NumPy緊密的結(jié)合在一起。并且這個(gè)庫優(yōu)化了GPU和CPU的使用,使其在處理大數(shù)據(jù)運(yùn)算時(shí)的表現(xiàn)更為迅速。 效率和穩(wěn)定性的調(diào)整,使得即使是非常小的值也能得到更精確的結(jié)果,例如,即使給一個(gè)非常小的x值,計(jì)算log(1 x)也能給出一個(gè)可是別的結(jié)果。 10.TensorFlow (提交:16785次,貢獻(xiàn)者:795個(gè)) 這是一個(gè)由Google的程序員開發(fā),為機(jī)器學(xué)習(xí)打造的數(shù)據(jù)流圖像計(jì)算開源庫。設(shè)計(jì)它的目的是為了滿足Google環(huán)境中對(duì)訓(xùn)練神經(jīng)網(wǎng)絡(luò)的迫切需求。其前身是DistBelief,一個(gè)基于神經(jīng)網(wǎng)絡(luò)的機(jī)器學(xué)習(xí)系統(tǒng)。而且TensorFlow并非嚴(yán)格受制于Google的框架——它可以廣泛地適用于多種真實(shí)世界的應(yīng)用中。 TensorFlow的主要特點(diǎn)是他的多層節(jié)點(diǎn)系統(tǒng),可以在大數(shù)據(jù)上快速的訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)。這點(diǎn)為Google的語音識(shí)別以及圖像識(shí)別提供了助力。 11.Keras (提交:3519次,貢獻(xiàn)者:428個(gè)) 最后,來看一看Keras,這是一個(gè)Python開源庫,用于在高級(jí)界面上建立神經(jīng)網(wǎng)絡(luò)。它簡約且直接,并擁有很強(qiáng)的延展性。它使用Theano 和 TensorFlow作為其終端,并且微軟正在試圖將CNTK(微軟自己的認(rèn)知工具包)結(jié)合進(jìn)去成為一個(gè)新的終端。 這種簡約的設(shè)計(jì)方式旨通過緊湊型系統(tǒng)建立來實(shí)現(xiàn)更加快捷和簡單的操作。 Keras極易上手,并且在使用的過程中有很多快速原型可供參考。它完全用Python寫的庫,并且本身就非常高級(jí)。Keras非常模塊化并有很強(qiáng)的拓展性。盡管Keras簡易,有高層次定位。Keras仍然擁有足夠的深度和力量來進(jìn)行嚴(yán)肅的建模。 Keras的核心理念是“層級(jí)”,一切都是圍繞著層級(jí)建立的。數(shù)據(jù)在張量(tensors)中處理好,第一層負(fù)責(zé)張量的輸入,最后一層負(fù)責(zé)輸出,而模型則在這之間建立。 谷歌Trends歷史記錄 trends.google.com Github合并請(qǐng)求(pull requests)歷史紀(jì)錄 datascience.com/trends 自然語言處理 12.NLTK (提交:12449次,貢獻(xiàn)者:196個(gè)) 這個(gè)庫的名字是Natural Language Toolkit(自然語言工具)的縮寫。正如其名,它被用于由象征性與統(tǒng)計(jì)性自然語言處理的一般任務(wù)。NLTK旨在用于自然語言處理的教學(xué)與研究等的相關(guān)領(lǐng)域(語義學(xué),認(rèn)知人工智能科學(xué),等等)并現(xiàn)在它的使用受到了很大的關(guān)注。 NLTK在功能上允許很多操作,例如文字標(biāo)簽,歸類,標(biāo)記解釋,名稱識(shí)別;通過建立語料樹(corpus tree)來解釋句子的內(nèi)外聯(lián)系,詞根提取以及語義推理。所有這些內(nèi)置模塊都允許為不同的任務(wù)建造復(fù)雜研究系統(tǒng)。 13.Gensim (提交:2878次,貢獻(xiàn)者:179個(gè)) 這是一個(gè)開源的Python庫,為人們提供向量空間建模和主題建模的工具。這個(gè)庫的設(shè)計(jì)旨在高效處理大規(guī)模文本:除了允許內(nèi)存中處理,效率的主要來源在于廣泛使用NumPy的數(shù)據(jù)結(jié)構(gòu)和SciPy的運(yùn)算符號(hào),這兩個(gè)使用起來都十分的高效和簡單。 Gensim主要被用于未加工的非結(jié)構(gòu)化的數(shù)字文本。Gensim使用了諸如:分層狄式流程(hierarchical Dirichlet processes),潛在語義分析(latent semantic analysis),潛在狄氏分布(latent Dirichlet allocation)以及文檔頻次(tf-idf,term frequency-inverse document frequency),隨機(jī)映射,文字/文檔向量化(word2vec,document2vec)檢測(cè)多個(gè)文檔文字中詞語出現(xiàn)的頻次,通常被成為語料庫(corpus),之類的算法。這些算法都是非監(jiān)督性的——不需要任何的參數(shù),唯一的輸入就是語料庫。 谷歌Trends歷史記錄 圖片來源:trends.google.com Github下載請(qǐng)求歷史紀(jì)錄 圖片來源:datascience.com/trends 數(shù)據(jù)挖掘與統(tǒng)計(jì) 14. Scrapy(提交:6325次,貢獻(xiàn)者:243個(gè)) Scrapy是一個(gè)制做爬蟲程序的庫,也被稱作“蜘蛛機(jī)器人”(spider bots)。旨在提取結(jié)構(gòu)化數(shù)據(jù),例如從網(wǎng)頁聯(lián)絡(luò)信息,或網(wǎng)址鏈接。 它是開源并由Python寫的庫。正如其名,它最開始只是為了扒網(wǎng)頁所設(shè)計(jì),然而現(xiàn)在他已經(jīng)進(jìn)化成為一個(gè)擁有從API上獲取數(shù)據(jù)并且,用途廣泛的爬蟲程序。 這個(gè)庫一直貫徹其“不要在界面設(shè)計(jì)上重復(fù)你自己”的宗旨——鼓勵(lì)用戶寫出廣泛適用并可重復(fù)使用的代碼,從而制造強(qiáng)大的爬蟲軟件。 整個(gè)Scrapy的結(jié)構(gòu)都是圍繞蜘蛛類建造的,該類封裝了爬蟲跟蹤的一組指令。 15. Statsmodels (提交: 8960, 貢獻(xiàn): 119) 你可能已經(jīng)從它的名字猜到了,statsmodels是一個(gè)讓用戶通過多種估計(jì)方式和統(tǒng)計(jì)模型,進(jìn)行數(shù)據(jù)探索和統(tǒng)計(jì)分析的Python庫。 實(shí)用的特征有:統(tǒng)計(jì)描述,線性回歸模型,廣義線性模型,離散選擇模型,穩(wěn)健線性模型,時(shí)間序列分析以及多種回歸子。 這個(gè)庫同樣提供大量為統(tǒng)計(jì)分析專門設(shè)計(jì)的畫圖方程,并且為更好的展示大數(shù)據(jù)進(jìn)行了專門的調(diào)整。 結(jié)論 以上這些就是由數(shù)據(jù)科學(xué)家和工程師們公認(rèn)的值得你一探究竟的Python庫。 這是每個(gè)庫在Github上動(dòng)向的詳細(xì)數(shù)據(jù): 來源:https://docs.google.com/spreadsheets/d/1wLOtLLJ65QMbLumc3F2Mop_4uPIFbyJ6iDZwOp0cXrQ 當(dāng)然這不是最終極全面的總結(jié)。也有其他的庫和框架,同樣值得為了特殊的任務(wù)進(jìn)行適當(dāng)?shù)年P(guān)注。一個(gè)很好的例子是另一個(gè)程序包SciKit,它重點(diǎn)針對(duì)一些特別的領(lǐng)域。像SciKit-Image就針對(duì)于圖像處理。 |
|