編者按:對於機器學習和數據科學的入門者來說,「有什麼好用的IDE/環境/工具?」是他們提出的最常見的問題之一。這確實也是個不怎麼好回答的問題,因為它沒有具體選項——從面向特定語言的IDE(如R Studio、PyCharm)到Sublime Text、Atom等編輯器——它們都很優秀,所以如果你有選擇恐懼症,你最好讀讀論智的這篇文章,從Jupyter Notebook開始學起。
如果每個數據科學家都應該使用或必須使用一種工具,毫無疑問,它就是Jupyter Notebook(曾用名iPython Notebook)。Jupyter Notebook是一個交互式筆記本,它功能強大,支持40多種程式語言,可共享,並提供在同一環境中構建可視化應用的服務。
數據科學家可以在上面創建和共享自己的文檔,從實現代碼到全面報告,Jupyter Notebook大大簡化了開發者的工作流程,幫助他們實現更高的生產力和更簡單的多人協作。也正是因為如此,它一直以來都是數據科學家們最喜歡的工具之一。
本文將全面介紹筆記本的安裝、操作方法,並深入探討它的特性和優勢。當你讀完全文後,我們希望你能找到用Jupyter Notebook幫助自己實現機器學習項目的靈感,也能真正感受到,為什麼Jupyter Notebook會比其他工具更受歡迎!
1. 什麼是Jupyter Notebook?
2. 如何安裝Jupyter Notebook?
3. 入門
4. Jupyter Notebook的魔術命令
5. 不僅限於Python
6. Jupyter Notebook的交互式控制面板
7. 快捷鍵
8. 有用的擴展
9. 保存和共享你的筆記本
10. JupyterLab
11. 實踐和技巧
Jupyter Notebook是一個開源的Web應用程式,旨在方便開發者創建和共享代碼文檔。
它提供了一個環境,用戶可以在裡面寫代碼、運行代碼、查看結果,並在其中可視化數據。鑑於這些優點,Jupyter Notebook成了數據科學家眼裡的一款人見人愛的工具,它能幫助他們便捷地執行各種端到端任務,如數據清洗、統計建模、構建/訓練機器學習模型等。
而對於初學者,Jupyter Notebook也獨具魅力。它的一個特色是允許把代碼寫入獨立的cell中,然後單獨執行。這樣做意味著用戶可以在測試項目時單獨測試特定代碼塊,無需從頭開始執行代碼。雖然其他的IDE環境(如RStudio)也提供了這種功能,但就個人使用情況來看,Jupyter Notebook的單元結構是設計的最好的。
這個筆記本的優勢還體現在靈活性和交互性上。Jupyter Notebook支持的程式語言數量高達40餘種,除了最基礎的Python,它還允許用戶在上面運行R語言和SQL等語言。由於它比IDE平臺更具交互性,用戶也更樂於在各種教程中用它展示代碼。
Jupyter Notebook原來也叫iPython Notebook,顧名思義,它和Python關係緊密。如果要在PC上安裝筆記本,首先你要確保自己已經安裝了Python(2.7/3.3或更高),這是必備條件。
Anaconda
官方在文檔中強烈建議新用戶用Anaconda打包安裝Python和Anaconda——所謂懶人方法,小白必備。其實除了提到的兩個工具,Anaconda還包含數據科學和機器學習中經常需要用到的各種軟體包,只需下載、解壓、安裝,所有工具就都一步到位了。
下載地址:https://jupyter.readthedocs.io/en/latest/install.html
pip
如果你很欣賞自己,或者因為某些因素就是不想用Anaconda,你也可以用pip。當然首先,你得確保自己的機器上有pip的最新版本。
#Linux和OSX
pip install -U pip setuptools
#Windows
python -m pip install -U pip setuptools
然後,安裝Jupyter Notebook:
#Python2用戶看這裡
pip install jupyter
#Python3用戶不要跑
pip3 install jupyter
如果還是有疑問,請看官方文檔(英)、官方文檔翻譯(中)。
安裝完成後,如果要運行Jupyter Notebook,你只需在控制臺輸入以下命令:
jupyter notebook
你會看到筆記本打開了你的默認瀏覽器,網址為http:// localhost:8888/tree。
一般情況下,當你輸入命令行後,控制臺會出現一行「The Jupyter Notebook is running at……」,如果瀏覽器因為某些原因無法打開,你就需要複製這個URL,手動打開相應網址。
當筆記本打開後,它的頂部有Files、Running和Clusters三個選項。其中Files中列出了所有文件,Running顯示了你已經打開的終端和筆記本,Clusters則是IPython parallel提供的。
如果你想新建一個筆記本,單擊面板右側的「New」,它會跳出4個選項:
Python 3
Text File
Folder
Terminal
選擇Text File後,你會得到一個空白的頁面。它相當於一個文本編輯器(類似於Ubuntu上的應用程式),你可以在上面輸入任何字母、單詞和數字,所以選擇好程式語言後,你是可以在上面寫腳本的。此外,它還提供查找和替換文件中的單詞的功能。
選擇Folder後,你其實是在編輯文件夾列表。你可以創建一個新文件夾,把所需文檔放進裡面,或者修改它的名稱、直接把它刪除。
而Terminal的工作方式和Mac、Linux計算機上的Terminal一樣,都是在Web瀏覽器中創建終端支持。只需在終端輸入Python,一個Python腳本就寫好了。
由於本文重點介紹的是筆記本,下面我們會重點展示新建「Python 3」後的結果:
導入最常見的Python庫來啟動筆記本,如pandas和numpy。在代碼上方的菜單中,那些圖標依次表示添加、編輯、剪切、向上移動cell、向下移動cell、運行代碼、停止運行和撤銷。
這個下拉的列表提供了四個選項:
Code:這個不言自明,就是你寫代碼的地方;
Markdown:非常常見的輕量級標記語言,用來為代碼添加注釋和結論;
Raw NBConvert:一個命令行工具,可以把你的筆記本轉換成另一種格式,如HTML;
Heading:添加標題,使你的文檔看起來更乾淨整潔,它現在已經變成Markdown裡的一個語法,用兩個#表示。
作為iPython的繼承者,開發人員已經在Jupyter Notebook中加入預定義的魔術命令(magic function)。這是一種增加便捷性和互動性的工具,如果要查看命令列表,你可以輸入(註:通常不需要「%」):
%lsmagic
當看到那一串函數列表時,也許你能從中認出幾張老面孔,如%clear、%autosave、%debug和%mkdir。只要你以前寫過代碼,這些函數就幾乎是不可避免的。
在Jupyter Notebook中,魔術命令有兩種運行方式,一是Line-wise,而是Cell-wise。顧名思義,Line-wise就是當你想執行一個命令行的時候需要用到的,而Cell-wise面向的就不單單是一行了,它作用的是整個cell的代碼塊。
為了區分兩種運行方式,如果是Line-wise,所有命令必須以%字符打頭;如果是Cell-wise,則用%%。
Line-wise:
%time a = range(10)
Cell-wise:
%%timeit a = range (10)
min(a)
以上只是兩個最簡單的示例,你可以試著自己運行這些命令,看看其中有什麼區別。
之前也提到了,Jupyter Notebook的成功離不開它的靈活性,雖然Python在數據科學和機器學習中都佔局主導地位,但對於數據分析任務,其他語言也有各種各樣的特色和優勢,比如R語言的'ggplot2'軟體包就非常好用。在這一點上,Jupyter Notebook的態度是開放的。
如果想在Jupyter Notebook中啟用R,你需要先去GitHub上下載'IRKernel'(R的專用kernel),然後按以下8個步驟依次執行(附圖解地址):
步驟一:用Anaconda安裝Jupyter Notebook;
步驟二:完成下載後,打開Anaconda命令提示符;
步驟三:輸入ipython notebook新建ipython筆記本
步驟四:用conda update ipython-notebook這個命令行更新筆記本;
步驟五:輸入conda install -c r ipython-notebook r-irkernel安裝IRkernel;
步驟六:用R.exe打開R;
步驟七:輸入install.packages(c('rzmq','repr','IRkernel','IRdisplay'), repos = 'http://irkernel.github.io/', type = 'source')安裝必要軟體包;
步驟八:輸入IRkernel::installspec()後再輸入quit(),完成操作。
如果是Julia用戶,你也可以在Jupyter Notebook中「暢所欲言」。考慮到篇幅因素,有需要的讀者請前往www.analyticsvidhya.com/blog/2017/10/comprehensive-tutorial-learn-data-science-julia-from-scratch/查看圖文攻略。
和R語言一樣,JavaScript用戶也需要去Github先下載『IJavascript』 kernel:github.com/n-riesco/ijavascript。文檔裡已經明確寫出了安裝kernel所需的步驟,但要注意的是,記得先裝Node.js和npm,這是大前提!
6. Jupyter Notebook的交互式控制面板在添加小部件前,你需要先導入小部件包:
from ipywidgets import widgets
小部件的基本類型是典型的基於輸入和按鈕的文本輸入。你可以參考下面這幅動圖,了解交互式小部件的外觀:
來源:Dominodatalab既然Jupyter Notebook的主打優勢是便捷,那它自然少不了方便操作的快捷鍵。事實上,當你想運行任意代碼塊時,只需按下Ctrl + Enter就可以了。
下面是本文挑選的一些實用快捷鍵,有需要的讀者可以視情況逐個閱讀+嘗試,如果今後你會經常用到Jupyter Notebook,那不會這些組合鍵的你就幾乎已經是條鹹魚了。
Jupyter Notebook提供了兩種不同的鍵盤輸入模式——Command和Edit。其中Command模式是將鍵盤和計算機命令綁定在一起,這時單元框線是灰色的(左側藍色粗線)。Edit模式允許你將文本(或代碼)鍵入活動單元,這時單元框線是綠色的。
用Esc和Enter分別在Command和Edit模式之間跳轉。
更多快捷鍵介紹(中文):blog.csdn.net/lawme/article/details/51034543
添加擴展是提高Jupyter Notebook效率的一種非常有效的方式,那麼安裝和使用擴展哪家強?這裡我們推薦Nbextensions。
先是安裝(pip):
pip install jupyter_contrib_nbextensions
安裝關聯的JavaScript和CSS文件:
jupyter contrib nbextension install --user
完成此操作後,你會在Jupyter Notebook主頁頂部看到一個'Nbextensions'選項卡。
如果要啟用一個擴展,只需點擊來激活。下面是4個比較有用的擴展。
Printview:生成預覽,新增的按鈕叫jupyter nbconvert。
Scratchpad:生成一個實驗環境(副本)跑代碼,不會對筆記本代碼造成影響。
Table of Contents (2):抓取所有標題,並顯示在浮動窗口中。
此外,小編也曾經寫過一篇《Top 5:五大最實用的Jupyter Notebook擴展插件》,介紹了另外5種好用的擴展,有興趣的讀者可以一起看一看。
這是Jupyter Notebook中最重要和最棒的功能之一。有過寫博客經歷的讀者也許知道這種痛,當你一腔熱血想把自己的成果分享給別人時,可能代碼格式還沒轉完你就放棄了。大多數筆記本都採用json格式,它不是很適合共享,也不利於在博客中發布不同的單元塊。
但Jupyter Notebook不一樣,點擊進入「file」後,你會看到一個「Download as」:
看到這7個選項後你就很開心了,其中最常用的是.ipynb文件。你也可以用nbconvert選項手動將筆記本轉換為不同的格式,如HTML和PDF。
此外,你還可以使用jupyterhub,它允許你在其伺服器上託管筆記本並與多個用戶共享。許多頂尖的研究項目都把這作為協作方式。
JupyterLab是今年2月推出的一個工具,從某種程度上來說,它是Jupyter Notebook的一個發展——擁有同樣的組件,但允許更靈活和更強大的項目工作方式。換句話說,它的用戶體驗更好。
JupyterLab的特色是允許用戶在一個窗口內安排筆記本、終端、文本文件和輸出的工作區。你可以把窗口拖到你想要的位置,也可以通過實時預覽編輯常用文件格式,如Markdown、CSV和JSON,實時查看項目進展。
雖然自己鑽研很有趣,但無論是學習還是工作,大部分時候你是在一個團隊中工作的。在這種情況下,你要規範自己的操作和實踐,確保筆記本中的代碼和注釋都是正確的,方便其他人閱讀、理解。以下是一些實踐指標,僅供參考:
對每個程式設計師來說最重要的事:要好好注釋!
確保你保存了代碼文檔。
形成一套命名體系,並在實踐中落到實處,方便自己和他人理解。
在剛開始的時候導入所需的庫,並在旁邊注釋導入目的。
確保代碼行距合適,你也不想別人因為看不懂你的循環和函數瘋掉,對吧?
當代碼越來越多時,隱藏不重要代碼,確保乾淨整潔。
此外,當你需要把成果演示給別人看時(是的你又要做該死的PPT了),你是可以偷懶直接在Jupyter Notebook裡做演示的。
找到「View」,點開其中的「Cell Toolbar」,然後是「Slideshow」。每個代碼塊都在右側顯示一個名為「Slide Type」的下拉選項:
具體效果如何,請自己嘗試。
寫到這裡,本文也就已經差不多結束了,雖然在一篇文章內塞進這麼多內容可能會影響閱讀體驗,但我們還是真誠地希望新手能從中找到一些有用的東西。