數據科學和機器學習,Jupyter Notebook入門指南

數據科學和機器學習,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

小部件的基本類型是典型的基於輸入和按鈕的文本輸入。你可以參考下面這幅動圖,了解互動式小部件的外觀:

來源:Dominodatalab

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 |