關(guān)于Python數(shù)據(jù)分析的入門指南
有一個(gè)朋友最近問(wèn)到這個(gè)問(wèn)題,我覺(jué)得把它公開(kāi)出來(lái)對(duì)其他人也會(huì)有幫助。這是給完全不了解Python而想找到從零到一的最簡(jiǎn)單的路徑的人的建議:
1. 在這里(https://www.continuum.io/downloads)下載適用于你的操作系統(tǒng)的Python 3.X的Anaconda發(fā)行版本。這個(gè)預(yù)先捆綁的發(fā)行版會(huì)幫助你避開(kāi)很多跟安裝相關(guān)的頭疼問(wèn)題。有很多重要的數(shù)據(jù)分析包都會(huì)被預(yù)先安裝好。
2. 等你安裝好之后,測(cè)試一下,確認(rèn)默認(rèn)的Python解釋器是你剛剛安裝的版本。這非常重要,因?yàn)榭赡茉谀愕南到y(tǒng)里已經(jīng)安裝了一個(gè)版本的Python,但是它并不會(huì)包含Anaconda發(fā)行版中的所有東西,所以你得確保新的版本才是默認(rèn)版本。在Mac/Linux系統(tǒng)上,你可以在終端輸入which python,或者你也可以運(yùn)行Python的解釋器并且確保版本跟你下載的是相符的。如果這一切運(yùn)行良好,在安裝的時(shí)候就應(yīng)該被設(shè)置成默認(rèn)的版本。如果并非如此,你就得停下來(lái)并且解決它。
3. 在命令解釋器(Shell)中輸入jupyter notebook命令,這會(huì)打開(kāi)一個(gè)瀏覽器窗口。如果沒(méi)有的話,打開(kāi)瀏覽器,在地址欄輸入:http://localhost:8888。在你打開(kāi)這個(gè)頁(yè)面之后,創(chuàng)建一個(gè)新的Python筆記本(Python notebook)。
4. 點(diǎn)擊http://www.kaggle.com/最上面菜單欄中的kernels,并在新打開(kāi)的頁(yè)面中的語(yǔ)言過(guò)濾器中選擇Python(https://www.kaggle.com/kernels?language=Python)。這里大部分都是其他人利用Kaggle上免費(fèi)公開(kāi)的數(shù)據(jù)集做分析或者組建模型時(shí)使用的Jupyter筆記本(Jupyter Notebook)。在其中尋找標(biāo)題里包含類似EDA(Exploratory Data Analysis,探索性數(shù)據(jù)分析)的筆記本,而不是那些創(chuàng)建預(yù)測(cè)模型的筆記本。找一個(gè)你覺(jué)得有趣的,并且在你的筆記本中再現(xiàn)它。
注意: 你會(huì)發(fā)現(xiàn),當(dāng)你再現(xiàn)某些分析的時(shí)候,你會(huì)遭遇導(dǎo)入錯(cuò)誤(Import error)。這常常是因?yàn)榉治稣甙惭b了并沒(méi)有包含在Anaconda發(fā)行版中的包。你最終會(huì)需要學(xué)習(xí)如何跟conda包管理器(Conda package manager)交互,這將是你最終會(huì)走入的許多兔子洞之一。通常而言,事情都非常簡(jiǎn)單,你只需要用到conda install <package name>就可以了,但是你需要找出正確的包的名稱,有時(shí)候,你還得確認(rèn)一些其他的細(xì)節(jié)。還有的時(shí)候你可能得用到pip install <package name>,遲一點(diǎn)你都會(huì)學(xué)到的。
高級(jí)庫(kù)總結(jié)
這里是對(duì)你會(huì)經(jīng)常接觸的重要的庫(kù)的簡(jiǎn)要總結(jié):
NumPy:擁有大量的科學(xué)計(jì)算的核心功能。由于它的內(nèi)部運(yùn)算是通過(guò)C語(yǔ)言實(shí)現(xiàn)的,所以比用Python寫成的同樣的函數(shù),它的速度會(huì)快許多。但它并不是最用戶友好的包。
SciPy:跟NumPy非常相似,但是有更多的方式來(lái)從分布中取樣,計(jì)算檢驗(yàn)統(tǒng)計(jì)量,等等。
MatPlotLib:主要的畫(huà)圖框架。不太討喜,但卻是必備的包。
Seaborn:在導(dǎo)入MatPlotLib包之后導(dǎo)入Seaborn包,默認(rèn)地,它會(huì)使你的繪圖變得漂亮許多。它也有一些獨(dú)特的功能,但是我發(fā)現(xiàn)它最酷炫的功能運(yùn)行起來(lái)實(shí)在太慢了。
Pandas:基本上是對(duì)NumPy/SciPy進(jìn)行輕量的包裝,使它們更用戶友好一些。對(duì)于和表格數(shù)據(jù)交互非常理想,Pandas中把表格數(shù)據(jù)稱為數(shù)據(jù)框(DataFrame)。對(duì)畫(huà)圖功能也有一些包裝,使得無(wú)需使用MPL(Meta-Programming Library,元編程庫(kù))就可以快速實(shí)現(xiàn)畫(huà)圖。我使用Pandas而非其他的工具來(lái)操作數(shù)據(jù)。
Scikit-learn:包含大量的監(jiān)督和非監(jiān)督機(jī)器學(xué)習(xí)算法,以及許多做模型選擇的度量工具,是一個(gè)優(yōu)秀的預(yù)處理庫(kù)。這個(gè)預(yù)處理庫(kù)可以做主成分分析(Principal Component Analysis),對(duì)分類變量進(jìn)行編碼,等等。
小技巧
1. 在Jupyter筆記本中,在運(yùn)行代碼塊(Cell)前,于任何一個(gè)對(duì)象前放置一個(gè)問(wèn)號(hào),它會(huì)為你打開(kāi)這個(gè)對(duì)象的文檔。在你遺忘了你所使用的函數(shù)的細(xì)節(jié)的時(shí)候,這是非常方便的。比如說(shuō),my_dataframe.apply會(huì)解釋pandas.DataFrame對(duì)象中的apply方法,而這個(gè)my_dataframe是pandas.DataFrame的一個(gè)實(shí)例。
2. 無(wú)論你在使用什么庫(kù),你通常都需要一直查閱文檔,那么就干脆一直在瀏覽器中打開(kāi)它。可選變量以及細(xì)微的差別實(shí)在是太多了。
3. 當(dāng)你遇到無(wú)可避免的故障檢修的時(shí)候,stackoverflow上也許已經(jīng)有了問(wèn)題的答案。
4. 接受這個(gè)事實(shí)吧:你正在做并不是完全理解的事情,又或者你會(huì)被并不重要的細(xì)節(jié)拖入泥淖。某一天你也許需要理解虛擬環(huán)境,它并沒(méi)有那么困難,只是會(huì)有一些彎路給新手增加一些不必要的痛苦而已。
5. 閱讀別人的代碼。這是***的方式,可以學(xué)習(xí)到規(guī)范,也是***的實(shí)踐。這就是Kaggle kernels能夠幫助你的地方。Github同樣也支持在瀏覽器中展示Jupyter筆記本。互聯(lián)網(wǎng)上有大量的例子可供參考學(xué)習(xí)。