干貨 | 20個(gè)最有用的Python數(shù)據(jù)科學(xué)庫(kù)
核心庫(kù)與統(tǒng)計(jì)
1. NumPy(提交:17911,貢獻(xiàn)者:641)
一般我們會(huì)將科學(xué)領(lǐng)域的庫(kù)作為清單打頭,NumPy 是該領(lǐng)域的主要軟件庫(kù)之一。它旨在處理大型的多維數(shù)組和矩陣,并提供了很多高級(jí)的數(shù)學(xué)函數(shù)和方法,因此可以用它來(lái)執(zhí)行各種操作。
在過(guò)去一年,開(kāi)發(fā)團(tuán)隊(duì)對(duì)該庫(kù)進(jìn)行了大量改進(jìn)。除了錯(cuò)誤修復(fù)和解決兼容性問(wèn)題之外,關(guān)鍵的變更還包括樣式改進(jìn),即 NumPy 對(duì)象的打印格式。此外,一些函數(shù)現(xiàn)在可以處理任意編碼的文件,只要這些編碼受 Python 支持。
2. SciPy(提交:19150,貢獻(xiàn)者:608)
另一個(gè)科學(xué)計(jì)算核心庫(kù) SciPy,基于 NumPy 而構(gòu)建,并擴(kuò)展了 NumPy 的功能。SciPy 的主要數(shù)據(jù)結(jié)構(gòu)是多維數(shù)組,使用 Numpy 實(shí)現(xiàn)。該庫(kù)提供了一些用于解決線性代數(shù)、概率論、積分計(jì)算等任務(wù)的工具。
SciPy 通過(guò)與不同的操作系統(tǒng)進(jìn)行持續(xù)集成的方式帶來(lái)了重大改進(jìn),比如新的函數(shù)和方法,更重要的是——最新的優(yōu)化器。此外,開(kāi)發(fā)團(tuán)隊(duì)對(duì)很多新的 BLAS 和 LAPACK 函數(shù)進(jìn)行了包裝。
3.Pandas(提交:17144,貢獻(xiàn)者:1165)
Pandas 是一個(gè) Python 庫(kù),提供了高級(jí)的數(shù)據(jù)結(jié)構(gòu)和各種分析工具。該庫(kù)的一大特色是能夠?qū)⑾喈?dāng)復(fù)雜的數(shù)據(jù)操作轉(zhuǎn)換為一兩個(gè)命令。Pandas 提供了很多內(nèi)置的方法,用于分組、過(guò)濾和組合數(shù)據(jù),還提供了時(shí)間序列功能。所有這些方法的執(zhí)行速度都很快。
新發(fā)布的 pandas 庫(kù)還提供了數(shù)百個(gè)新特性、功能增強(qiáng)、錯(cuò)誤修復(fù)和 API 變更。這些改進(jìn)與 Pandas 對(duì)數(shù)據(jù)進(jìn)行分組和排序的能力有關(guān),支持自定義類型操作。
4. StatsModels(提交:10067,貢獻(xiàn)者:153)
Statsmodels 是一個(gè) Python 模塊,為統(tǒng)計(jì)數(shù)據(jù)分析提供了很多可能性,例如統(tǒng)計(jì)模型估計(jì)、運(yùn)行統(tǒng)計(jì)測(cè)試等。你可以借助它來(lái)實(shí)現(xiàn)很多機(jī)器學(xué)習(xí)方法,并探索不同的繪圖可能性。
該庫(kù)在不斷演化,帶來(lái)了更多的可能性。今年帶來(lái)了時(shí)間序列改進(jìn)和新的計(jì)數(shù)模型 GeneralizedPoisson、零膨脹模型和 NegativeBinomialP,以及新的多變量方法因子分析、MANOVA 和 ANOVA 的重復(fù)測(cè)量。
可視化
5. Matplotlib(提交:25747,貢獻(xiàn)者:725)
Matplotlib 是一個(gè)用于創(chuàng)建二維圖表和圖形的低級(jí)庫(kù)。你可以用它來(lái)構(gòu)建各種圖表,從直方圖和散點(diǎn)圖到非笛卡爾坐標(biāo)圖。此外,很多流行的繪圖庫(kù)都為 Matplotlib 預(yù)留了位置,可與 Matplotlib 結(jié)合在一起使用。
該庫(kù)在繪圖樣式方面做出了很多變更,如顏色、尺寸、字體、圖例等。例如,坐標(biāo)軸圖例的自動(dòng)對(duì)齊和對(duì)色盲患者更友好的色環(huán)。
6. Seaborn(提交:2044,貢獻(xiàn)者:83)
Seaborn 實(shí)際上是基于 matplotlib 庫(kù)構(gòu)建的高級(jí) API。它為處理圖表提供了更恰當(dāng)?shù)哪J(rèn)選項(xiàng)。此外,它還提供了一組豐富的可視化圖庫(kù),包括時(shí)間序列、聯(lián)合圖和小提琴圖等復(fù)雜的類型。
Seaborn 的更新主要是問(wèn)題修復(fù)。不過(guò),F(xiàn)acetGrid(或 PairGrid)與增強(qiáng)的交互式 matplotlib 后端之間的兼容性有所改進(jìn),為可視化添加了參數(shù)和選項(xiàng)。
7. Plotly(提交:2906,貢獻(xiàn)者:48)
Plotly 是一個(gè)可以幫助你輕松構(gòu)建復(fù)雜圖形的流行庫(kù)。該庫(kù)適用于交互式 Web 應(yīng)用程序,它提供了很多很棒的可視化效果,包括輪廓圖形、三元圖和 3D 圖表。
這個(gè)庫(kù)在持續(xù)地增強(qiáng)和改進(jìn),帶來(lái)新的圖形和特性,支持“多鏈接視圖”、動(dòng)畫(huà)和串?dāng)_集成。
8. Bokeh(提交:16983,貢獻(xiàn)者:294)
Bokeh 庫(kù)使用 JavaScript 小部件在瀏覽器中創(chuàng)建交互式和可伸縮的可視化圖形。該庫(kù)提供了多種圖形、樣式、鏈接圖形式的交互能力、添加小部件、定義回調(diào)以及更多有用的功能。Bokeh 改進(jìn)的交互式功能值得稱贊,例如可旋轉(zhuǎn)的分類刻度標(biāo)簽,以及小型的縮放工具和自定義工具提示字段增強(qiáng)。
9. Pydot(提交:169,貢獻(xiàn)者:12)
Pydot 是一個(gè)用于生成面向復(fù)雜圖形和非面向復(fù)雜圖形的庫(kù)。它作為面向 Graphviz 的一個(gè)接口,使用 Python 編寫(xiě)。我們可以借助它來(lái)顯示圖形的結(jié)構(gòu),這在構(gòu)建神經(jīng)網(wǎng)絡(luò)和基于決策樹(shù)的算法時(shí)經(jīng)常會(huì)用到。
機(jī)器學(xué)習(xí)
10. Scikit-learn(提交:22753,貢獻(xiàn)者:1084)
這個(gè)基于 NumPy 和 SciPy 的 Python 模塊是處理數(shù)據(jù)的最佳庫(kù)之一。它為很多標(biāo)準(zhǔn)的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘任務(wù)提供算法,例如聚類、回歸、分類、降維和模型選擇。
該庫(kù)有很多增強(qiáng)功能。交叉驗(yàn)證已經(jīng)獲得更新,現(xiàn)在可以使用多個(gè)指標(biāo)。一些訓(xùn)練方法(如鄰近取樣和邏輯回歸等)得到一些小改進(jìn)。它的主要更新之一是完成了通用術(shù)語(yǔ)和 API 元素詞匯表。
11. XGBoost/LightGBM/CatBoost(提交:3277/1083/1509,貢獻(xiàn)者:280/79/61)
梯度提升是最流行的機(jī)器學(xué)習(xí)算法之一,它的核心原理在于構(gòu)建連續(xù)精煉的基本模型的集合,即決策樹(shù)。因此,有些專門(mén)的庫(kù)被設(shè)計(jì)用于方便快速地實(shí)現(xiàn)該方法。我們認(rèn)為 XGBoost、LightGBM 和 CatBoost 是值得關(guān)注的。它們都是解決常見(jiàn)問(wèn)題最強(qiáng)有力的工具,而且使用方式幾乎一樣。我們可以使用這些庫(kù)快速實(shí)現(xiàn)高度優(yōu)化且可擴(kuò)展的梯度提升,所以它們?cè)跀?shù)據(jù)科學(xué)家和 Kaggle 競(jìng)爭(zhēng)者中非常受歡迎,他們?cè)谶@些算法的幫助下贏得了很多比賽。
12. Eli5(提交:922,貢獻(xiàn)者:6)
通常情況下,機(jī)器學(xué)習(xí)模型的預(yù)測(cè)結(jié)果并不完全是清晰的,這個(gè)時(shí)候可以借助 Eli5 來(lái)解決這個(gè)問(wèn)題。它是一個(gè)用于可視化和調(diào)試機(jī)器學(xué)習(xí)模型的庫(kù),可以逐步跟蹤算法的執(zhí)行過(guò)程。它支持 scikit-learn、XGBoost、LightGBM、lightning 和 sklearn-crfsuite 庫(kù),并可以為每個(gè)庫(kù)執(zhí)行不同的任務(wù)。
深度學(xué)習(xí)
13. TensorFlow(提交:33339,貢獻(xiàn)者:1469)
TensorFlow 是一個(gè)流行的深度學(xué)習(xí)和機(jī)器學(xué)習(xí)框架,由 Google Brain 開(kāi)發(fā)。它支持在人工神經(jīng)網(wǎng)絡(luò)中使用多個(gè)數(shù)據(jù)集。最受歡迎的 TensorFlow 應(yīng)用場(chǎng)景包括物體識(shí)別、語(yǔ)音識(shí)別等。還有很多基于 TensorFlow 構(gòu)建的庫(kù),例如 tflearn、tf-slim、skflow 等。
這個(gè)庫(kù)發(fā)布新版本的速度很快,引入了很多新功能。最新的修復(fù)包括潛在的安全漏洞和改進(jìn)的 TensorFlow 與 GPU 的集成,現(xiàn)在可以在單臺(tái)計(jì)算機(jī)的多個(gè) GPU 上運(yùn)行 Estimator 模型。
14. PyTorch(提交:11306,貢獻(xiàn)者:635)
PyTorch 是一個(gè)大型框架,可用它基于 GPU 加速執(zhí)行張量計(jì)算、創(chuàng)建動(dòng)態(tài)計(jì)算圖以及自動(dòng)計(jì)算梯度。此外,PyTorch 還提供了豐富的 API,用于解決與神經(jīng)網(wǎng)絡(luò)相關(guān)的應(yīng)用。
該庫(kù)基于 Torch 而構(gòu)建,使用 C 語(yǔ)言實(shí)現(xiàn),并包含了使用 Lua 編寫(xiě)的包裝器。它的 Python API 于 2017 年推出,從那時(shí)起,該框架越來(lái)越受歡迎,并吸引了越來(lái)越多的數(shù)據(jù)科學(xué)家。
15. Keras(提交:4539,貢獻(xiàn)者:671)
Keras 是一個(gè)用于處理神經(jīng)網(wǎng)絡(luò)的高級(jí)庫(kù),運(yùn)行在 TensorFlow 或 Theano 之上,現(xiàn)在發(fā)布的新版本可以使用 CNTK 或 MxNet 作為后端。它簡(jiǎn)化了很多特定任務(wù),并大大減少了樣板代碼的數(shù)量,但它可能不適用于某些復(fù)雜的事情。
該庫(kù)在性能、可用性、文檔和 API 方面進(jìn)行了改進(jìn),并推出了一些新特性,如 Conv3DTranspose 層、新的 MobileNet 應(yīng)用程序和自我規(guī)范化網(wǎng)絡(luò)。
分布式深度學(xué)習(xí)
16. dist-keras/elephas/spark-deep-learning(提交:1125/170/67,貢獻(xiàn)者:5/13/11)
深度學(xué)習(xí)問(wèn)題變得越來(lái)越重要,因?yàn)樵絹?lái)越多的場(chǎng)景要求更多的時(shí)間和成本。而像 Apache Spark 這樣的分布式計(jì)算系統(tǒng)可以更輕松地處理大量數(shù)據(jù),這反過(guò)來(lái)又為深度學(xué)習(xí)帶來(lái)更多的可能性。dist-keras、elephas 和 spark-deep-learning 變得越來(lái)越流行,并正在迅速發(fā)展演化。很難說(shuō)它們當(dāng)中哪個(gè)更好,因?yàn)樗鼈兌际菫榻鉀Q一些相同的任務(wù)而設(shè)計(jì)的。這些庫(kù)和 Keras 可以直接用在 Apache Spark 中,用以訓(xùn)練神經(jīng)網(wǎng)絡(luò)。spark-deep-learning 還提供了工具用于為 Python 神經(jīng)網(wǎng)絡(luò)創(chuàng)建管道。
自然語(yǔ)言處理
17. NLTK(提交:13041,貢獻(xiàn)者:236)
NLTK 是一組庫(kù)的集合,一個(gè)完整的自然語(yǔ)言處理平臺(tái)。你可以借助 NLTK 以各種方式處理和分析文本,如標(biāo)記、打標(biāo)簽、提取信息等。NLTK 還用于原型設(shè)計(jì)和構(gòu)建研究性系統(tǒng)。
該庫(kù)的增強(qiáng)還包括 API 和兼容性的微小變更以及面向 CoreNLP 的新接口。
18. SpaCy(提交:8623,貢獻(xiàn)者:215)
SpaCy 是一個(gè)自然語(yǔ)言處理庫(kù),包含了優(yōu)秀的示例、API 文檔和演示應(yīng)用程序。該庫(kù)使用 Cython(Python 的 C 擴(kuò)展)編寫(xiě)。它支持將近 30 種語(yǔ)言,可以方便地與深度學(xué)習(xí)集成,并保證健壯性和高準(zhǔn)確率。SpaCy 有一個(gè)為處理整個(gè)文檔而設(shè)計(jì)的架構(gòu),在處理文檔時(shí)不需要將它分成短語(yǔ),這也是 SpaCy 的一個(gè)重要特性。
19. Gensim(提交:3603,貢獻(xiàn)者:273)
Gensim 基于 Numpy 和 Scipy 而構(gòu)建,是一個(gè)用于語(yǔ)義分析、主題建模和向量空間建模的 Python 庫(kù)。它提供了主流的 NLP 算法實(shí)現(xiàn),例如 word2vec。Gensim 有自己的 models.wrappers.fasttext 實(shí)現(xiàn),不過(guò)仍然可以使用 fasttext 庫(kù)進(jìn)行單詞表示的高效學(xué)習(xí)。
數(shù)據(jù)抓取
20. Scrapy(提交:6625,貢獻(xiàn)者:281)
Scrapy 是一個(gè)用于創(chuàng)建掃描網(wǎng)站頁(yè)面并收集結(jié)構(gòu)化數(shù)據(jù)的爬蟲(chóng)的庫(kù)。此外,Scrapy 可以從 API 中提取數(shù)據(jù)。因?yàn)榫邆淞己玫目蓴U(kuò)展性和可移植性,該庫(kù)使用起來(lái)非常方便。
該庫(kù)在過(guò)去一年里的變化包括代理服務(wù)器的若干次升級(jí)以及改進(jìn)的錯(cuò)誤通知和問(wèn)題識(shí)別系統(tǒng)。用在元數(shù)據(jù)設(shè)置中的 Scrapy 解析也有了新的特性。
結(jié)論
這些是我們列出的 2018 年數(shù)據(jù)科學(xué) Python 庫(kù)的集合。與去年相比,一些新的庫(kù)越來(lái)越受歡迎,而那些經(jīng)典庫(kù)也正在不斷改進(jìn)。
下面的表格顯示了這些庫(kù)在 Github 上的活動(dòng)統(tǒng)計(jì)信息。
各個(gè)庫(kù)的鏈接地址:
NumPy:http://www.numpy.org/
SciPy:https://scipy.org/scipylib/
Pandas:https://pandas.pydata.org/
StatsModels:http://www.statsmodels.org/devel/
Matplotlib:https://matplotlib.org/index.html
Seaborn:https://seaborn.pydata.org/
Plotly:https://plot.ly/python/
Bokeh:https://bokeh.pydata.org/en/latest/
Pydot:https://pypi.org/project/pydot/
Scikit-learn:http://scikit-learn.org/stable/
XGBoost:http://xgboost.readthedocs.io/en/latest/
LightGBM:http://lightgbm.readthedocs.io/en/latest/Python-Intro.html
CatBoost:https://github.com/catboost/catboost
Eli5:https://eli5.readthedocs.io/en/latest/
TensorFlow:https://www.tensorflow.org/
PyTorch:https://pytorch.org/
Keras:https://keras.io/
dist-keras:http://joerihermans.com/work/distributed-keras/
elephas:https://pypi.org/project/elephas/
spark-deep-learning:https://databricks.github.io/spark-deep-learning/site/index.html
NLTK:https://www.nltk.org/
SpaCy:https://spacy.io/
Gensim:https://radimrehurek.com/gensim/
Scrapy:https://scrapy.org/