前兩天我們?yōu)榇蠹铱偨Y(jié)了一下AI在2018年的發(fā)展以及對(duì)2019年AI應(yīng)用的展望,今天我們便將回歸到技術(shù)博客的本質(zhì),為大家講講為什么我對(duì)Jupyter Notebook如此推崇,以及為什么Jupyter Notebook與機(jī)器學(xué)習(xí)/數(shù)據(jù)分析是完美的搭配組合。
在講為什么之前,先來(lái)介紹一下什么是Jupyter Notebook(以下簡(jiǎn)稱Jupyter)。簡(jiǎn)單來(lái)說(shuō),它是一種模塊化的Python編輯器(現(xiàn)在也支持R等多種語(yǔ)言),即在Jupyter中,你可以把大段的Python代碼碎片化處理,分開(kāi)每一段來(lái)運(yùn)行。在軟件開(kāi)發(fā)中,Jupyter可能顯得并沒(méi)有那么好用,這個(gè)模塊化的功能反而會(huì)破壞掉程序的整體性;但是當(dāng)你在做數(shù)據(jù)處理、分析、建模、觀察結(jié)果等的時(shí)候,Jupyter模塊化的功能不僅會(huì)為你提供更好地視覺(jué)體驗(yàn),更能大大縮小運(yùn)行代碼及調(diào)試代碼的時(shí)間,同時(shí)還會(huì)讓你整個(gè)處理和建模的過(guò)程變得異常清晰,接下來(lái)我將為大家一一詳細(xì)講述Jupyter的這些優(yōu)點(diǎn)。
Jupyter Notebook將Python的交互式特點(diǎn)發(fā)揮到了極致
熟悉Python的同學(xué)一定對(duì)Python的交互式功能感觸頗深。當(dāng)工作后有一次和一個(gè)做嵌入式好友聊起Python時(shí),同學(xué)表示他被Python的易讀性和交互性所震驚了。做嵌入式用的C和C++每次都要經(jīng)過(guò)編譯,而且每一行的代碼沒(méi)有辦法單獨(dú)運(yùn)行。與之不同的是,Python的每一行都像是人類交流所用的文字一樣,簡(jiǎn)單易懂且有交互性,所謂交互性,就是有問(wèn)有答,你輸入一句,它便返回一句的結(jié)果。但在一般的IDE中(如PyCharm),Python的這一交互功能被極大地限制,通常我們會(huì)將程序整段編寫(xiě)之后一起運(yùn)行。而在Jupyter當(dāng)中,我們可以每寫(xiě)幾行或者每完成一個(gè)小的模塊便運(yùn)行一次。也許對(duì)于軟件工程師們來(lái)說(shuō),這個(gè)功能并沒(méi)有多大的吸引力;但是對(duì)身為機(jī)器學(xué)習(xí)工程師的我們來(lái)說(shuō),這個(gè)功能可以說(shuō)是我們的大救星。
熟悉機(jī)器學(xué)習(xí)和數(shù)據(jù)分析的朋友一定知道,分析和建模是非常碎片化的工作,而每一塊的碎片又有著非常強(qiáng)的獨(dú)立性,甚至可以說(shuō)除了數(shù)據(jù)本身之外,每一塊的代碼之間并沒(méi)有很強(qiáng)的關(guān)聯(lián)性。數(shù)據(jù)分析和處理的過(guò)程往往是一個(gè)不斷試驗(yàn)的過(guò)程,我們需要一次又一次的改變預(yù)處理的方式、嘗試不同的特征工程處理、一遍又一遍的調(diào)整著模型參數(shù)等等等等。每一部分的工作都需要反復(fù)試驗(yàn)反復(fù)修改,而下一模塊需要用到的只不過(guò)是上一模塊輸出的數(shù)據(jù)。通過(guò)Jupyter,我們可以最快的得知自己做出的調(diào)整是好還是壞,并盡快進(jìn)入到下一次的試驗(yàn)當(dāng)中。
以下是Jupyter Notebook與其他IDE輸出結(jié)果的對(duì)比:
說(shuō)到Jupyter Notebook,就不得不提到Anaconda。Anaconda是一款便捷的環(huán)境管理工具,利用Anaconda可以輕松創(chuàng)建虛擬環(huán)境,快速下載安裝Python中的各種函數(shù)庫(kù)。Anaconda中集成了1400數(shù)據(jù)科學(xué)/機(jī)器學(xué)習(xí)的函數(shù)庫(kù),目前這些庫(kù)適配于Python 3.6,Python 3.7,以及Python 2.7三個(gè)版本。Anaconda讓機(jī)器學(xué)習(xí)在Jupyter中更容易實(shí)現(xiàn),也更容易去觀測(cè)。
以下是部分Anaconda中的函數(shù)庫(kù):
Jupyter Notebook更利于匯報(bào)和教學(xué)
Jupyter在工作匯報(bào)和教學(xué)方面也是非常的優(yōu)秀。由于Jupyter本身的模塊化和內(nèi)容的清晰化,使得其天生具有如PPT一般的展示工作成果的功能。
如上圖所示,由于Jupyter中可以將輸出結(jié)果嵌套在Notebook中,并且支持Markdown語(yǔ)句的操作,這樣使得你可以在Jupyter中輸入任何你需要展示的內(nèi)容,并且這些內(nèi)容都會(huì)以一種有組織有層次的樣子排列出來(lái)。
而當(dāng)Jupyter被應(yīng)用于教學(xué)時(shí),老師可以利用這個(gè)特點(diǎn)設(shè)置相應(yīng)的題目以及部分的講解內(nèi)容,而學(xué)生則負(fù)責(zé)填滿老師所留的空白,以達(dá)到老師作業(yè)的要求。目前Jupyter已經(jīng)被各大慕課(MOOC)平臺(tái)廣泛應(yīng)用。