干货收藏!一文看懂8个常用Python库从安装到应用
導(dǎo)讀:Python本身的數(shù)據(jù)分析功能并不強,需要安裝一些第三方擴展庫來增強其相應(yīng)的功能。本文將對NumPy、SciPy、Matplotlib、pandas、StatsModels、scikit-learn、Keras、Gensim等庫的安裝和使用進行簡單的介紹。
作者:張良均 譚立云 劉名軍 江建明
來源:大數(shù)據(jù)DT(ID:hzdashuju)
如果讀者安裝的是Anaconda發(fā)行版,那么它已經(jīng)自帶了以下庫:NumPy、SciPy、Matplotlib、pandas、scikit-learn。
本文主要是對這些庫進行簡單的介紹,讀者也可以到官網(wǎng)閱讀更加詳細的使用教程。
NumPy:提供數(shù)組支持以及相應(yīng)的高效的處理函數(shù)
SciPy:提供矩陣支持以及矩陣相關(guān)的數(shù)值計算模塊
Matplotlib:強大的數(shù)據(jù)可視化工具、作圖庫
pandas:強大、靈活的數(shù)據(jù)分析和探索工具
StatsModels:統(tǒng)計建模和計量經(jīng)濟學(xué),包括描述統(tǒng)計、統(tǒng)計模型估計和推斷
scikit-learn:支持回歸、分類、聚類等強大的機器學(xué)習(xí)庫
Keras:深度學(xué)習(xí)庫,用于建立神經(jīng)網(wǎng)絡(luò)以及深度學(xué)習(xí)模型
Gensim:用來做文本主題模型的庫,文本挖掘可能會用到
01 NumPy
Python并沒有提供數(shù)組功能。雖然列表可以完成基本的數(shù)組功能,但它不是真正的數(shù)組,而且在數(shù)據(jù)量較大時,使用列表的速度就會很慢。為此,NumPy提供了真正的數(shù)組功能以及對數(shù)據(jù)進行快速處理的函數(shù)。
NumPy還是很多更高級的擴展庫的依賴庫,我們后面介紹的SciPy、Matplotlib、pandas等庫都依賴于它。值得強調(diào)的是,NumPy內(nèi)置函數(shù)處理數(shù)據(jù)的速度是C語言級別的,因此在編寫程序的時候,應(yīng)當(dāng)盡量使用其內(nèi)置函數(shù),避免效率瓶頸的(尤其是涉及循環(huán)的問題)出現(xiàn)。
在Windows操作系統(tǒng)中,NumPy的安裝跟普通第三方庫的安裝一樣,可以通過pip命令進行,命令如下:
pip?install?numpy也可以自行下載源代碼,然后使用如下命令安裝:
python?setup.py?install在Linux操作系統(tǒng)下,上述方法也是可行的。此外,很多Linux發(fā)行版的軟件源中都有Python常見的庫,因此還可以通過Linux系統(tǒng)自帶的軟件管理器安裝,如在Ubuntu下可以用如下命令安裝:
sudo?apt-get?install?python-numpy安裝完成后,可以使用NumPy對數(shù)據(jù)進行操作,如代碼清單2-27所示。
代碼清單2-27 使用NumPy操作數(shù)組
NumPy是Python中相當(dāng)成熟和常用的庫,因此關(guān)于它的教程有很多,最值得一看的是其官網(wǎng)的幫助文檔,其次還有很多中英文教程,讀者遇到相應(yīng)的問題時,可以查閱相關(guān)資料。
參考鏈接:
http://www.numpy.org
http://reverland.org/python/2012/08/22/numpy
02 SciPy
如果說NumPy讓Python有了MATLAB的味道,那么SciPy就讓Python真正成為半個MATLAB了。NumPy提供了多維數(shù)組功能,但它只是一般的數(shù)組,并不是矩陣,比如當(dāng)兩個數(shù)組相乘時,只是對應(yīng)元素相乘,而不是矩陣乘法。SciPy提供了真正的矩陣以及大量基于矩陣運算的對象與函數(shù)。
SciPy包含的功能有最優(yōu)化、線性代數(shù)、積分、插值、擬合、特殊函數(shù)、快速傅里葉變換、信號處理和圖像處理、常微分方程求解和其他科學(xué)與工程中常用的計算,顯然,這些功能都是挖掘與建模必需的。
SciPy依賴于NumPy,因此安裝之前得先安裝好NumPy。安裝SciPy的方式與安裝NumPy的方法大同小異,需要提及的是,在Ubuntu下也可以用類似的命令安裝SciPy,安裝命令如下:
sudo?apt-get?install?python-scipy安裝好SciPy后,使用SciPy求解非線性方程組和數(shù)值積分,如代碼清單2-28所示。
代碼清單2-28 使用SciPy求解非線性方程組和數(shù)值積分
參考鏈接:
http://www.scipy.org
http://reverland.org/python/2012/08/24/scipy
03 Matplotlib
不論是數(shù)據(jù)挖掘還是數(shù)學(xué)建模,都要面對數(shù)據(jù)可視化的問題。對于Python來說,Matplotlib是最著名的繪圖庫,主要用于二維繪圖,當(dāng)然也可以進行簡單的三維繪圖。它不僅提供了一整套和MATLAB相似但更為豐富的命令,讓我們可以非常快捷地用Python可視化數(shù)據(jù),而且允許輸出達到出版質(zhì)量的多種圖像格式。
Matplotlib的安裝并沒有什么特別之處,可以通過“pip install matplotlib”命令安裝或者自行下載源代碼安裝,在Ubuntu下也可以用類似的命令安裝,命令如下:
sudo?apt-get?install?python-matplotlib需要注意的是,Matplotlib的上級依賴庫相對較多,手動安裝的時候,需要逐一把這些依賴庫都安裝好。安裝完成后就可以牛刀小試了。下面是一個簡單的作圖例子,如代碼清單2-29所示,它基本包含了Matplotlib作圖的關(guān)鍵要素,作圖效果如圖2-5所示。
代碼清單2-29 Matplotlib作圖示例
▲圖2-5 Matplotlib的作圖效果展示
如果讀者使用的是中文標簽,就會發(fā)現(xiàn)中文標簽無法正常顯示,這是因為Matplotlib的默認字體是英文字體,解決方法是在作圖之前手動指定默認字體為中文字體,如黑體(Sim-Hei),命令如下:
plt.rcParams['font.sans-serif']?=?['SimHei']??#?用來正常顯示中文標簽其次,保存作圖圖像時,負號有可能不能顯示,對此可以通過以下代碼解決:
plt.rcParams['axes.unicode_minus']?=?False????#?解決保存圖像是負號'-'顯示為方塊的問題這里有一個小建議:有時間多去Matplotlib提供的“畫廊”欣賞用它做出的漂亮圖片,也許你就會慢慢愛上Matplotlib作圖了。
畫廊網(wǎng)址:
http://matplotlib.org/gallery.html
參考鏈接:
http://matplotlib.org
http://reverland.org/python/2012/09/07/matplotlib-tutorial
04 pandas
pandas是Python下最強大的數(shù)據(jù)分析和探索工具。它包含高級的數(shù)據(jù)結(jié)構(gòu)和精巧的工具,使得用戶在Python中處理數(shù)據(jù)非常快速和簡單。
pandas建造在NumPy之上,它使得以NumPy為中心的應(yīng)用使用起來更容易。pandas的名稱來自于面板數(shù)據(jù)(Panel Data)和Python數(shù)據(jù)分析(Data Analysis),它最初作為金融數(shù)據(jù)分析工具被開發(fā),由AQR Capital Management于2008年4月開發(fā)問世,并于2009年底開源出來。
pandas的功能非常強大,支持類似SQL的數(shù)據(jù)增、刪、查、改,并且?guī)в胸S富的數(shù)據(jù)處理函數(shù);支持時間序列分析功能;支持靈活處理缺失數(shù)據(jù);等等。事實上,單純地用pandas這個工具就足以寫一本書,讀者可以閱讀pandas的主要作者之一Wes Mc-Kinney寫的《利用Python進行數(shù)據(jù)分析》來學(xué)習(xí)更詳細的內(nèi)容。
1. 安裝
pandas的安裝相對來說比較容易一些,只要安裝好NumPy之后,就可以直接安裝了,通過pip install pandas命令或下載源碼后通過python setup.py install命令安裝均可。
由于我們頻繁用到讀取和寫入Excel,但默認的pandas還不能讀寫Excel文件,需要安裝xlrd(讀)度和xlwt(寫)庫才能支持Excel的讀寫。為Python添加讀取/寫入Excel功能的命令如下:
pip?install?xlrd??????????#?為Python添加讀取Excel的功能 pip?install?xlwt??????????#?為Python添加寫入Excel的功能2. 使用
在后面的章節(jié)中,我們會逐步展示pandas的強大功能,而在本節(jié),我們先以簡單的例子一睹為快。
首先,pandas基本的數(shù)據(jù)結(jié)構(gòu)是Series和DataFrame。Series顧名思義就是序列,類似一維數(shù)組;DataFrame則相當(dāng)于一張二維的表格,類似二維數(shù)組,它的每一列都是一個Series。
為了定位Series中的元素,pandas提供了Index這一對象,每個Series都會帶有一個對應(yīng)的Index,用來標記不同的元素,Index的內(nèi)容不一定是數(shù)字,也可以是字母、中文等,它類似于SQL中的主鍵。
類似的,DataFrame相當(dāng)于多個帶有同樣Index的Series的組合(本質(zhì)是Series的容器),每個Series都帶有一個唯一的表頭,用來標識不同的Series。pandas中常用操作的示例如代碼清單2-30所示。
代碼清單2-30?pandas中的常用操作
由于pandas是本書的主力工具,在后面將會頻繁使用它,因此這里不再詳細介紹,后文會更加詳盡地講解pandas的使用方法。
參考鏈接:
http://pandas.pydata.org/pandas-docs/stable/
05 StatsModels
pandas著重于數(shù)據(jù)的讀取、處理和探索,而StatsModels則更加注重數(shù)據(jù)的統(tǒng)計建模分析,它使得Python有了R語言的味道。StatsModels支持與pandas進行數(shù)據(jù)交互,因此,它與pandas結(jié)合成為Python下強大的數(shù)據(jù)挖掘組合。
安裝StatsModels相當(dāng)簡單,既可以通過pip命令安裝,又可以通過源碼安裝。對于Windows用戶來說,官網(wǎng)上甚至已經(jīng)有編譯好的exe文件可供下載。如果手動安裝的話,需要自行解決好依賴問題,StatsModels依賴于pandas(當(dāng)然也依賴于pandas所依賴的庫),同時還依賴于Pasty(一個描述統(tǒng)計的庫)。
使用StatsModels進行ADF平穩(wěn)性檢驗,如代碼清單2-31所示。
代碼清單2-31?使用StatsModels進行ADF平穩(wěn)性檢驗
參考鏈接:
http://statsmodels.sourceforge.net/stable/index.html
06 scikit-learn
從該庫的名字可以看出,這是一個與機器學(xué)習(xí)相關(guān)的庫。不錯,scikit-learn是Python下強大的機器學(xué)習(xí)工具包,它提供了完善的機器學(xué)習(xí)工具箱,包括數(shù)據(jù)預(yù)處理、分類、回歸、聚類、預(yù)測、模型分析等。
scikit-learn依賴于NumPy、SciPy和Matplotlib,因此,只需要提前安裝好這幾個庫,然后安裝scikit-learn基本上就沒有什么問題了,安裝方法跟前幾個庫的安裝一樣,可以通過pip install scikit-learn命令安裝,也可以下載源碼自行安裝。
使用scikit-learn創(chuàng)建機器學(xué)習(xí)的模型很簡單,示例如代碼清單2-32所示。
代碼清單2-32?使用scikit-learn創(chuàng)建機器學(xué)習(xí)模型
1. 所有模型提供的接口有
對于訓(xùn)練模型來說是model.fit(),對于監(jiān)督模型來說是fit(X, y),對于非監(jiān)督模型是fit(X)。
2. 監(jiān)督模型提供如下接口
model.predict(X_new):預(yù)測新樣本。
model.predict_proba(X_new):預(yù)測概率,僅對某些模型有用(比如LR)。
model.score():得分越高,fit越好。
3. 非監(jiān)督模型提供如下接口
model.transform():從數(shù)據(jù)中學(xué)到新的“基空間”。
model.fit_transform():從數(shù)據(jù)中學(xué)到新的基并將這個數(shù)據(jù)按照這組“基”進行轉(zhuǎn)換。
Scikit-learn本身提供了一些實例數(shù)據(jù)供我們上手學(xué)習(xí),比較常見的有安德森鳶尾花卉數(shù)據(jù)集、手寫圖像數(shù)據(jù)集等。
安德森鳶尾花卉數(shù)據(jù)集有150個鳶尾花的尺寸觀測值,如萼片長度和寬度,花瓣長度和寬度;還有它們的亞屬:山鳶尾(iris setosa)、變色鳶尾(iris versicolor)和維吉尼亞鳶尾(iris virginica)。導(dǎo)入iris數(shù)據(jù)集并使用該數(shù)據(jù)訓(xùn)練SVM模型,如代碼清單2-33所示。
代碼清單2-33?導(dǎo)入iris數(shù)據(jù)集并訓(xùn)練SVM模型
參考鏈接:
http://scikit-learn.org/stable/
07 Keras
scikit-learn已經(jīng)足夠強大了,然而它并沒有包含這一強大的模型—人工神經(jīng)網(wǎng)絡(luò)。人工神經(jīng)網(wǎng)絡(luò)是功能相當(dāng)強大但是原理又相當(dāng)簡單的模型,在語言處理、圖像識別等領(lǐng)域都有重要的作用。近年來逐漸流行的“深度學(xué)習(xí)”算法,實質(zhì)上也是一種神經(jīng)網(wǎng)絡(luò),可見在Python中實現(xiàn)神經(jīng)網(wǎng)絡(luò)是非常必要的。
本書用Keras庫來搭建神經(jīng)網(wǎng)絡(luò)。事實上,Keras并非簡單的神經(jīng)網(wǎng)絡(luò)庫,而是一個基于Theano的強大的深度學(xué)習(xí)庫,利用它不僅可以搭建普通的神經(jīng)網(wǎng)絡(luò),還可以搭建各種深度學(xué)習(xí)模型,如自編碼器、循環(huán)神經(jīng)網(wǎng)絡(luò)、遞歸神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)等。由于它是基于Theano的,因此速度也相當(dāng)快。
Theano也是Python的一個庫,它是由深度學(xué)習(xí)專家Yoshua Bengio帶領(lǐng)的實驗室開發(fā)出來的,用來定義、優(yōu)化和高效地解決多維數(shù)組數(shù)據(jù)對應(yīng)數(shù)學(xué)表達式的模擬估計問題。它具有高效實現(xiàn)符號分解、高度優(yōu)化的速度和穩(wěn)定性等特點,最重要的是它還實現(xiàn)了GPU加速,使得密集型數(shù)據(jù)的處理速度是CPU的數(shù)十倍。
用Theano就可以搭建起高效的神經(jīng)網(wǎng)絡(luò)模型,然而對于普通讀者來說門檻還是相當(dāng)高的。Keras正是為此而生,它大大簡化了搭建各種神經(jīng)網(wǎng)絡(luò)模型的步驟,允許普通用戶輕松地搭建并求解具有幾百個輸入節(jié)點的深層神經(jīng)網(wǎng)絡(luò),而且定制的自由度非常大,讀者甚至因此驚呼:搭建神經(jīng)網(wǎng)絡(luò)可以如此簡單!
1. 安裝
安裝Keras之前首先需要安裝NumPy、SciPy和Theano。安裝Theano之前首先需要準備一個C++編譯器,這在Linux系統(tǒng)下是自帶的。因此,在Linux系統(tǒng)下安裝Theano和Keras都非常簡單,只需要下載源代碼,然后用python setup.py install安裝就行了,具體可以參考官方文檔。
可是在Windows系統(tǒng)下就沒有那么簡單了,因為它沒有現(xiàn)成的編譯環(huán)境,一般而言是先安裝MinGW(Windows系統(tǒng)下的GCC和G++),然后再安裝Theano(提前裝好NumPy等依賴庫),最后安裝Keras,如果要實現(xiàn)GPU加速,還需要安裝和配置CUDA。
值得一提的是,在Windows系統(tǒng)下的Keras速度會大打折扣,因此,想要在神經(jīng)網(wǎng)絡(luò)、深度學(xué)習(xí)做深入研究的讀者,請在Linux系統(tǒng)下搭建相應(yīng)的環(huán)境。
參考鏈接:
http://deeplearning.net/software/theano/install.html#install
2. 使用
用Keras搭建神經(jīng)網(wǎng)絡(luò)模型的過程相當(dāng)簡單,也相當(dāng)直觀,就像搭積木一般,通過短短幾十行代碼,就可以搭建起一個非常強大的神經(jīng)網(wǎng)絡(luò)模型,甚至是深度學(xué)習(xí)模型。簡單搭建一個MLP(多層感知器),如代碼清單2-34所示。
代碼清單2-34?搭建一個MLP(多層感知器)
要注意的是,Keras的預(yù)測函數(shù)跟scikit-learn有所差別,Keras用model.predict()方法給出概率,用model.predict_classes()給出分類結(jié)果。
參考鏈接:
https://keras.io/
08 Gensim
在Gensim官網(wǎng)中,它對自己的簡介只有一句話:topic modelling for humans!
Gensim用來處理語言方面的任務(wù),如文本相似度計算、LDA、Word2Vec等,這些領(lǐng)域的任務(wù)往往需要比較多的背景知識。
在這一節(jié)中,我們只是提醒讀者有這么一個庫的存在,而且這個庫很強大,如果讀者想深入了解這個庫,可以去閱讀官方幫助文檔或參考鏈接。
值得一提的是,Gensim把Google在2013年開源的著名的詞向量構(gòu)造工具Word2Vec編譯好了,作為它的子庫,因此需要用到Word2Vec的讀者也可以直接使用Gensim,而無須自行編譯了。
Gensim的作者對Word2Vec的代碼進行了優(yōu)化,所以它在Gensim下的表現(xiàn)比原生的Word2Vec還要快。(為了實現(xiàn)加速,需要準備C++編譯器環(huán)境,因此,建議使用Gensim的Word2Vec的讀者在Linux系統(tǒng)環(huán)境下運行。)
下面是一個Gensim使用Word2Vec的簡單例子,如代碼清單2-35所示。
代碼清單2-35?Gensim使用Word2Vec的簡單示例
參考鏈接:
http://radimrehurek.com/gensim/
關(guān)于作者:張良均,資深大數(shù)據(jù)挖掘與分析專家、模式識別專家、AI技術(shù)專家。有10余年大數(shù)據(jù)挖掘與分析經(jīng)驗,擅長Python、R、Hadoop、Matlab等技術(shù)實現(xiàn)的數(shù)據(jù)挖掘與分析,對機器學(xué)習(xí)等AI技術(shù)驅(qū)動的數(shù)據(jù)分析也有深入研究。
本文摘編自《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》(第2版),經(jīng)出版方授權(quán)發(fā)布。
延伸閱讀《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》
點擊上圖了解及購買
轉(zhuǎn)載請聯(lián)系微信:DoctorData
推薦語:暢銷書全新升級,第1版銷售超過10萬冊,被國內(nèi)100余所高等院校采用為教材,同時被廣大數(shù)據(jù)科學(xué)工作者奉為經(jīng)典,是該領(lǐng)域公認的事實標準。作者在大數(shù)據(jù)挖掘與分析等領(lǐng)域有10余年的工程實踐、教學(xué)和創(chuàng)辦企業(yè)的經(jīng)驗,不僅掌握行業(yè)的最新技術(shù)和實踐方法,而且洞悉學(xué)生和老師的需求與痛點。
有話要說????
Q:?你常用哪些庫?
歡迎留言與大家分享
猜你想看????
月薪30k-50k、面試通過率90%,這個職位到底是在做什么?
大數(shù)據(jù)殺熟又來了?千人千面的個性化推薦,你喜歡嗎?
豆瓣7.6,這部被低估的科幻片告訴你,通過圖靈測試的AI有多可怕!
什么是大數(shù)據(jù)「實時流計算」?深度解析它的4大應(yīng)用及4個特點
更多精彩????
在公眾號對話框輸入以下關(guān)鍵詞
查看更多優(yōu)質(zhì)內(nèi)容!
PPT?|?讀書?|?書單?|?硬核?|?干貨?
大數(shù)據(jù)?|?揭秘?|?Python?|?可視化
AI?|?人工智能?|?5G?|?中臺
機器學(xué)習(xí)?|?深度學(xué)習(xí)?|?神經(jīng)網(wǎng)絡(luò)
合伙人?|?1024?|?大神?|?數(shù)學(xué)
據(jù)統(tǒng)計,99%的大咖都完成了這個神操作
????
總結(jié)
以上是生活随笔為你收集整理的干货收藏!一文看懂8个常用Python库从安装到应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 终于有人把幸存者偏差讲明白了
- 下一篇: Python、数据分析、机器学习、区块链