數據科學和機器學習,Jupyter Notebook入門指南
來自專欄論智16 人贊了文章
作者:PRANAV DAR
編譯:Bot
註:本文最初於29日發佈於論智公眾號。
編者按:對於機器學習和數據科學的入門者來說,「有什麼好用的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. 實踐和技巧
1. 什麼是Jupyter Notebook?
Jupyter Notebook是一個開源的Web應用程序,旨在方便開發者創建和共享代碼文檔。
它提供了一個環境,用戶可以在裡面寫代碼、運行代碼、查看結果,並在其中可視化數據。鑒於這些優點,Jupyter Notebook成了數據科學家眼裡的一款人見人愛的工具,它能幫助他們便捷地執行各種端到端任務,如數據清洗、統計建模、構建/訓練機器學習模型等。
而對於初學者,Jupyter Notebook也獨具魅力。它的一個特色是允許把代碼寫入獨立的cell中,然後單獨執行。這樣做意味著用戶可以在測試項目時單獨測試特定代碼塊,無需從頭開始執行代碼。雖然其他的IDE環境(如RStudio)也提供了這種功能,但就個人使用情況來看,Jupyter Notebook的單元結構是設計的最好的。
這個筆記本的優勢還體現在靈活性和交互性上。Jupyter Notebook支持的編程語言數量高達40餘種,除了最基礎的Python,它還允許用戶在上面運行R語言和SQL等語言。由於它比IDE平台更具交互性,用戶也更樂於在各種教程中用它展示代碼。
2. 如何安裝Jupyter Notebook?
Jupyter Notebook原來也叫iPython Notebook,顧名思義,它和Python關係緊密。如果要在PC上安裝筆記本,首先你要確保自己已經安裝了Python(2.7/3.3或更高),這是必備條件。
Anaconda
官方在文檔中強烈建議新用戶用Anaconda打包安裝Python和Anaconda——所謂懶人方法,小白必備。其實除了提到的兩個工具,Anaconda還包含數據科學和機器學習中經常需要用到的各種軟體包,只需下載、解壓、安裝,所有工具就都一步到位了。
下載地址。
pip
如果你很欣賞自己,或者因為某些因素就是不想用Anaconda,你也可以用pip。當然首先,你得確保自己的機器上有pip的最新版本。
#Linux和OSXpip install -U pip setuptools#Windowspython -m pip install -U pip setuptools
然後,安裝Jupyter Notebook:
#Python2用戶看這裡pip install jupyter#Python3用戶不要跑pip3 install jupyter
如果還是有疑問,請看官方文檔(英)、官方文檔翻譯(中)。
3. 入門
安裝完成後,如果要運行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里的一個語法,用兩個#表示。
4. Jupyter Notebook的魔術命令
作為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)
以上只是兩個最簡單的示例,你可以試著自己運行這些命令,看看其中有什麼區別。
5. 不僅限於Python
之前也提到了,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
小部件的基本類型是典型的基於輸入和按鈕的文本輸入。你可以參考下面這幅動圖,了解互動式小部件的外觀:
7. 快捷鍵
既然Jupyter Notebook的主打優勢是便捷,那它自然少不了方便操作的快捷鍵。事實上,當你想運行任意代碼塊時,只需按下Ctrl + Enter就可以了。
下面是本文挑選的一些實用快捷鍵,有需要的讀者可以視情況逐個閱讀+嘗試,如果今後你會經常用到Jupyter Notebook,那不會這些組合鍵的你就幾乎已經是條鹹魚了。
Jupyter Notebook提供了兩種不同的鍵盤輸入模式——Command和Edit。其中Command模式是將鍵盤和計算機命令綁定在一起,這時單元框線是灰色的(左側藍色粗線)。Edit模式允許你將文本(或代碼)鍵入活動單元,這時單元框線是綠色的。
用Esc和Enter分別在Command和Edit模式之間跳轉。
更多快捷鍵介紹(中文):blog.csdn.net/lawme/article/details/51034543
8. 有用的擴展
添加擴展是提高Jupyter Notebook效率的一種非常有效的方式,那麼安裝和使用擴展哪家強?這裡我們推薦Nbextensions。
先是安裝(pip):
pip install jupyter_contrib_nbextensions
安裝關聯的JavaScript和CSS文件:
jupyter contrib nbextension install --user
完成此操作後,你會在Jupyter Notebook主頁頂部看到一個』Nbextensions』選項卡。
如果要啟用一個擴展,只需點擊來激活。下面是4個比較有用的擴展。
- Code prettify:它可以讓你的代碼更美觀。
- Printview:生成預覽,新增的按鈕叫jupyter nbconvert。
- Scratchpad:生成一個實驗環境(副本)跑代碼,不會對筆記本代碼造成影響。
- Table of Contents (2):抓取所有標題,並顯示在浮動窗口中。
此外,小編也曾經寫過一篇《Top 5:五大最實用的Jupyter Notebook擴展插件》,介紹了另外5種好用的擴展,有興趣的讀者可以一起看一看。
9. 保存和共享你的筆記本
這是Jupyter Notebook中最重要和最棒的功能之一。有過寫博客經歷的讀者也許知道這種痛,當你一腔熱血想把自己的成果分享給別人時,可能代碼格式還沒轉完你就放棄了。大多數筆記本都採用json格式,它不是很適合共享,也不利於在博客中發布不同的單元塊。
但Jupyter Notebook不一樣,點擊進入「file」後,你會看到一個「Download as」:
看到這7個選項後你就很開心了,其中最常用的是.ipynb文件。你也可以用nbconvert選項手動將筆記本轉換為不同的格式,如HTML和PDF。
此外,你還可以使用jupyterhub,它允許你在其伺服器上託管筆記本並與多個用戶共享。許多頂尖的研究項目都把這作為協作方式。
10. JupyterLab
JupyterLab是今年2月推出的一個工具,從某種程度上來說,它是Jupyter Notebook的一個發展——擁有同樣的組件,但允許更靈活和更強大的項目工作方式。換句話說,它的用戶體驗更好。
JupyterLab的特色是允許用戶在一個窗口內安排筆記本、終端、文本文件和輸出的工作區。你可以把窗口拖到你想要的位置,也可以通過實時預覽編輯常用文件格式,如Markdown、CSV和JSON,實時查看項目進展。
11. 實踐和技巧
雖然自己鑽研很有趣,但無論是學習還是工作,大部分時候你是在一個團隊中工作的。在這種情況下,你要規範自己的操作和實踐,確保筆記本中的代碼和注釋都是正確的,方便其他人閱讀、理解。以下是一些實踐指標,僅供參考:
- 對每個程序員來說最重要的事:要好好注釋!
- 確保你保存了代碼文檔。
- 形成一套命名體系,並在實踐中落到實處,方便自己和他人理解。
- 在剛開始的時候導入所需的庫,並在旁邊注釋導入目的。
- 確保代碼行距合適,你也不想別人因為看不懂你的循環和函數瘋掉,對吧?
- 當代碼越來越多時,隱藏不重要代碼,確保乾淨整潔。
此外,當你需要把成果演示給別人看時(是的你又要做該死的PPT了),你是可以偷懶直接在Jupyter Notebook里做演示的。
找到「View」,點開其中的「Cell Toolbar」,然後是「Slideshow」。每個代碼塊都在右側顯示一個名為「Slide Type」的下拉選項:
具體效果如何,請自己嘗試。
結語
寫到這裡,本文也就已經差不多結束了,雖然在一篇文章內塞進這麼多內容可能會影響閱讀體驗,但我們還是真誠地希望新手能從中找到一些有用的東西。
最後,如果你看到了最後,我們再向你推薦一個Github,這是一個Jupyter/IPython筆記本的精選集合,相信你一定能從中找到不少有用的東西!
推薦閱讀:
※Kaggle比賽教你最快速度入門文本分類(經典方法篇)
※2.8 資訊理論
※YOLO_Online 將深度學習最火的目標檢測做成在線服務實戰乾貨經驗分享
※機器學習基石筆記15-16:小結和雜談
※SVM問題定義、推導
TAG:數據挖掘 | 機器學習 | 深度學習DeepLearning |