一份全面的初學者實用指南

杜佳豪發表於2018-03-03

Jupyter Notebooks 是資料科學/機器學習社群內一款非常流行的工具。Analytics Vidhya 的 Pranav Dar 近日發表了一篇上手使用 Jupyter Notebooks 的指南,從安裝到基本功能進行了簡潔清晰的介紹。

引言

應該使用哪個 IDE/環境/工具?這是人們在做資料科學專案時最常問的問題之一。可以想到,我們不乏可用的選擇——從 R Studio 或 PyCharm 等語言特定的 IDE 到 Sublime Text 或 Atom 等編輯器——選擇太多可能會讓初學者難以下手。

如果說有什麼每個資料科學家都應該使用或必須瞭解的工具,那非 Jupyter Notebooks 莫屬了(之前也被稱為 iPython 筆記本)。Jupyter Notebooks 很強大,功能多,可共享,並且提供了在同一環境中執行資料視覺化的功能。

Jupyter Notebooks 允許資料科學家建立和共享他們的文件,從程式碼到全面的報告都可以。它們能幫助資料科學家簡化工作流程,實現更高的生產力和更便捷的協作。由於這些以及你將在下面看到的原因,Jupyter Notebooks 成了資料科學家最常用的工具之一。

一份全面的初學者實用指南

在本文中,我們將介紹 Jupyter Notebooks 並深入瞭解它的功能和優勢。

讀完本文之後,你就知道你應該為你的機器學習專案使用 Jupyter Notebooks 的原因了。你也會知道為什麼人們會認為 Jupyter Notebooks 比該領域內的其它標準工具更好。

準備好學習了嗎?現在開始吧!

目錄

  • Jupyter Notebooks 是什麼?

  • 如何安裝 Jupyter Notebooks?

  • 開始上手!

  • 使用神奇的功能

  • 不只限於 Python——在 Jupyter Notebooks 中使用 R、Julia 和 JavaScript

  • Jupyter Notebooks 中的互動式儀表盤——何樂不為?

  • 鍵盤快捷鍵——節省時間且更有生產力!

  • 有用的 Jupyter Notebooks 擴充套件

  • 儲存和共享你的筆記本

  • JupyterLab——Jupyter Notebooks 的進化

  • 最佳實踐和技巧

Jupyter Notebooks 是什麼?

Jupyter Notebooks 是一款開源的網路應用,我們可以將其用於建立和共享程式碼與文件。

其提供了一個環境,你無需離開這個環境,就可以在其中編寫你的程式碼、執行程式碼、檢視輸出、視覺化資料並檢視結果。因此,這是一款可執行端到端的資料科學工作流程的便捷工具,其中包括資料清理、統計建模、構建和訓練機器學習模型、視覺化資料等等。

當你還處於原型開發階段時,Jupyter Notebooks 的作用更是引人注目。這是因為你的程式碼是按獨立單元的形式編寫的,而且這些單元是獨立執行的。這讓使用者可以測試一個專案中的特定程式碼塊,而無需從專案開始處執行程式碼。很多其它 IDE 環境(比如 RStudio)也有其它幾種方式能做到這一點,但我個人覺得 Jupyter 的單個單元結構是最好的。

正如你將在本文中看到的那樣,這些筆記本非常靈活,能為資料科學家提供強大的互動能力和工具。它們甚至允許你執行 Python 之外的其它語言,比如 R、SQL 等。因為它們比單純的 IDE 平臺更具互動性,所以它們被廣泛用於以更具教學性的方式展示程式碼。

如何安裝 Jupyter Notebooks?

你可能已經猜到了,你首先需要在你的機器上安裝 Python。Python 2.7 或 Python 3.3(或更新版本)都可以。

1.Anaconda

對新使用者而言,一般的共識是你應該使用 Anaconda 發行版來安裝 Python 和 Jupyter Notebooks。

Anaconda 會同時安裝這兩個工具,並且還包含相當多資料科學和機器學習社群常用的軟體包。你可以在這裡下載最新版的 Anaconda:https://www.anaconda.com/download 

2.pip 方法

如果你因為某些原因不願意使用 Anaconda,那麼你需要確保你的機器執行著最新版的 pip。該怎麼做呢?如果你已經安裝了 Python,那麼就已經有 pip 了。你可以使用以下程式碼升級到最新版的 pip:

#Linux and OSX
pip install -U pip setuptools

#Windows
python -m pip install -U pip setuptools

pip 安裝好之後,繼續安裝 Jupyter:

#For Python2
pip install jupyter

#For Python3
pip3 install jupyter

你可以在這裡檢視官方的 Jupyter 安裝文件:https://jupyter.readthedocs.io/en/latest/install.html 

開始上手!

現在你已經知道這些筆記本是什麼以及如何將其安裝到你的機器上了。現在開始使用吧!

要執行你的 Jupyter Notebooks,只需在命令列輸入以下命令即可!

jupyter notebook

完成之後,Jupyter Notebooks 就會在你的預設網路瀏覽器開啟,地址是:

http://localhost:8888/tree

在某些情況下,它可能不會自動開啟。而是會在終端/命令列生成一個 URL,並帶有令牌金鑰提示。你需要將包含這個令牌金鑰在內的整個 URL 都複製並貼上到你的瀏覽器,然後才能開啟一個筆記本。

開啟筆記本後,你會看到頂部有三個選項卡:Files、Running 和 Clusters。其中,Files 基本上就是列出所有檔案,Running 是展示你當前開啟的終端和筆記本,Clusters 是由 IPython 並行提供的。

要開啟一個新的 Jupyter 筆記本,點選頁面右側的「New」選項。你在這裡會看到 4 個需要選擇的選項:

  • Python 3

  • Text File

  • Folder

  • Terminal

選擇 Text File,你會得到一個空皮膚。你可以新增任何字母、單詞和數字。其基本上可以看作是一個文字編輯器(類似於 Ubuntu 的文字編輯器)。你可以在其中選擇語言(有很多語言選項),所以你可以在這裡編寫指令碼。你也可以查詢和替換該檔案中的詞。

選擇 Folder 選項時,你會建立一個新的資料夾,你可以在其中放入檔案,重新命名或刪除它。各種操作都可以。

Terminal 完全類似於在 Mac 或 Linux 機器上的終端(或 Windows 上的 cmd)。其能在你的網路瀏覽器內執行一些支援終端會話的工作。在這個終端輸入 python,你就可以開始寫你的 Python 指令碼了!

但在本文中,我們重點關注的是筆記本,所以我們從 New 選項中選擇 Python 3。你會看到下面的螢幕:

一份全面的初學者實用指南

然後你可以從匯入最常見的 Python 庫開始:pandas 和 numpy。在程式碼上面的選單中,你有一些操作各個單元的選項:新增、編輯、剪下、向上和向下移動單元、執行單元內的程式碼、停止程式碼、儲存工作以及重啟 kernel。

一份全面的初學者實用指南

在上圖所示的下拉選單中,你還有 4 個選項:

  • Code——不言而喻,就是寫程式碼的地方。

  • Markdown——這是寫文字的地方。你可以在執行一段程式碼後新增你的結論、新增註釋等。

  • Raw NBConvert——這是一個可將你的筆記本轉換成另一種格式(比如 HTML)的命令列工具。

  • Heading——這是你新增標題的地方,這樣你可以將不同的章節分開,讓你的筆記本看起來更整齊更清晰。這個現在已經被轉換成 Markdown 選項本身了。輸入一個「##」之後,後面輸入的內容就會被視為一個標題。

使用 Jupyter Notebooks 的神奇功能

Jupyter Notebooks 的開發者已經在其中內建了一些預定義的神奇功能,能讓你的生活更輕鬆,讓你的工作更具互動性。你可以執行下面的命令來檢視功能列表(注:% 符號通常不需要,因為自動補齊功能通常是開啟的):

%lsmagic

你會看到列出了很多選擇,你甚至可能能認出其中一些!%clear、%autosave、%debug 和 %mkdir 等功能你以前肯定見過。現在,神奇的命令可以以兩種方式執行:

  • 逐行方式

  • 逐單元方式

顧名思義,逐行方式是執行單行的命令,而逐單元方式則是執行不止一行的命令,而是執行整個單元中的整個程式碼塊。

在逐行方式中,所有給定的命令必須以 % 字元開頭;而在逐單元方式中,所有的命令必須以 %% 開頭。我們看看下列示例以便更好地理解:

逐行方式:

%time a = range(10)

逐單元方式:

%%timeit a = range (10)
min(a)

我建議你執行這些程式碼,親自看看它們的不同之處!

不只限於 Python——在 Jupyter Notebooks 中使用 R、Julia 和 JavaScript

神奇之處可不止這點。你甚至能在你的筆記本中使用其它語言,比如 R、Julia、JavaScript 等。我個人很喜歡 R 中的 ggplot2 軟體包,所以使用它來進行探索性的資料分析具有很大很大的優勢。

要在 Jupyter 中啟用 R,你需要 IRKernel。這是針對 R 的專用 kernel,你可以在 GitHub 上獲取。這需要 8 個步驟,已經有詳細的解釋了,另外還有截圖指導,參閱:https://discuss.analyticsvidhya.com/t/how-to-run-r-on-jupyter-ipython-notebooks/5512

如果你是一位 Julia 使用者,你也能在 Jupyter Notebooks 中使用 Julia!你可以檢視這篇為 Julia 使用者學習資料科學而編寫的全面介紹文章,其中有一個章節就是關於如何在 Jupyter 環境中使用 Julia:https://www.analyticsvidhya.com/blog/2017/10/comprehensive-tutorial-learn-data-science-julia-from-scratch/

如果你更偏愛 JavaScript,那麼我推薦使用 IJavascript kernel。這個 GitHub 庫包含了在不同作業系統上安裝這個 kernel 的各個步驟:https://github.com/n-riesco/ijavascript。注意,在使用它之前,你必需要先安裝好 Node.js 和 npm。

Jupyter Notebooks 中的互動式儀表盤——何樂不為?

在你考慮新增小部件之前,你需要匯入 widgets 軟體包:

from ipywidgets import widgets

小部件的基本型別有典型的文字輸入小部件、基於輸入的小部件和按鈕小部件。下面的例子來自 Dominodatalab,給出了互動式小部件的一些外觀:

一份全面的初學者實用指南

關於小部件的完整指南,請參閱:https://blog.dominodatalab.com/interactive-dashboards-in-jupyter/ 

鍵盤快捷鍵——節省時間且更有生產力!

快捷方式是 Jupyter Notebooks 最大的優勢之一。當你想執行任意程式碼塊時,只需要按 Ctrl+Enter 就行了。Jupyter Notebooks 提供了很多鍵盤快捷鍵,可以幫助我們節省很多時間。

下面是我們手動選擇的一些對你的上手會有莫大幫助的快捷方式。我強烈建議你在閱讀本文時逐一嘗試一下。未來你會離不開它們的!

Jupyter Notebooks 提供了兩種不同的鍵盤輸入模式——命令和編輯。命令模式是將鍵盤和筆記本層面的命令繫結起來,並且由帶有藍色左邊距的灰色單元邊框表示。編輯模式讓你可以在活動單元中輸入文字(或程式碼),用綠色單元邊框表示。

你可以分別使用 Esc 和 Enter 在命令模式和編輯模式之間跳躍。現在就試試看吧!

進入命令模式之後(此時你沒有活躍單元),你可以嘗試以下快捷鍵:

  • A 會在活躍單元之上插入一個新的單元,B 會在活躍單元之下插入一個新單元。

  • 連續按兩次 D,可以刪除一個單元。

  • 撤銷被刪除的單元,按 Z。

  • Y 會將當前活躍的單元變成一個程式碼單元。

  • 按住 Shift +上或下箭頭可選擇多個單元。在多選模式時,按住 Shift + M 可合併你的選擇。

  • 按 F 會彈出「查詢和替換」選單。

處於編輯模式時(在命令模式時按 Enter 會進入編輯模式),你會發現下列快捷鍵很有用:

  • Ctrl + Home 到達單元起始位置。

  • Ctrl + S 儲存進度。

  • 如之前提到的,Ctrl + Enter 會執行你的整個單元塊。

  • Alt + Enter 不止會執行你的單元塊,還會在下面新增一個新單元。

  • Ctrl + Shift + F 開啟命令皮膚。

要檢視鍵盤快捷鍵完整列表,可在命令模式按「H」或進入「Help > Keyboard Shortcuts」。你一定要經常看這些快捷鍵,因為常會新增新的。

有用的 Jupyter Notebooks 擴充套件

擴充套件/附加元件是一種非常有生產力的方式,能幫你提升在 Jupyter Notebooks 上的生產力。我認為安裝和使用擴充套件的最好工具之一是 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):這個很棒的擴充套件可以收集你的筆記本中的所有標題,並將它們顯示在一個浮動視窗中。

這只是少量幾個擴充套件。我強烈建議你檢視完整擴充套件列表並實驗它們的功能。

儲存和共享你的筆記本

這是 Jupyter Notebooks 最重要且最出色的功能之一。當我必須寫一篇部落格文章時,我的程式碼和評論都會在一個 Jupyter 檔案中,我需要首先將它們轉換成另一個格式。記住這些筆記本是 json 格式的,這在進行共享時不會很有幫助。我總不能在電子郵件和部落格上貼上不同單元塊,對不對?

進入「Files」選單,你會看到「Download As」選項:

一份全面的初學者實用指南

你可以用 7 種可選格式儲存你的筆記本。其中最常用的是 .ipynb 檔案和 .html 檔案。使用 .ipynb 檔案可讓其他人將你的程式碼複製到他們的機器上,使用 .html 檔案能以網頁格式開啟(當你需要儲存嵌入在筆記本中的圖片時會很方便)。

你也可以使用 nbconvert 選項手動將你的筆記本轉換成 HTML 或 PDF 等格式。

你也可以使用 jupyterhub,地址:https://github.com/jupyterhub/jupyterhub。其能讓你將筆記本託管在它的伺服器上並進行多使用者共享。很多頂級研究專案都在使用這種方式進行協作。

JupyterLab——Jupyter Notebooks 的進化

JupyterLab 是今年二月份推出的,被認為是 Jupyter Notebooks 的進一步發展。其支援更加靈活和更加強大的專案操作方式,但具有和 Jupyter Notebooks 一樣的元件。JupyterLab 環境與 Jupyter Notebooks 環境完全一樣,但具有生產力更高的體驗。

一份全面的初學者實用指南

JupyterLab 讓你能在一個視窗中排布你的筆記本、終端、文字檔案和輸出結果工作區!你只需拖放你需要的單元即可。你也可以編輯 Markdown、CSV 和 JSON 等常用檔案格式並實時預覽修改所造成的影響。

如果你想在你的機器上試用 JupyterLab,可檢視安裝說明:http://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html。JupyterLab 的開發者的長期目標是最終替代 Jupyter Notebooks。但目前來看這還需要一些時間。

最佳實踐

儘管獨自工作可能很有趣,但大多數時候你都是團隊的一員。在這種情況下,遵循指導原則和最佳實踐是很重要的,能確保你的程式碼和 Jupyter Notebooks 都有適當的註釋,以便與你的團隊成員保持一致。這裡我列出了一些最佳實踐指標,你在 Jupyter Notebooks 上工作時一定要遵守:

  • 對任何程式設計師而言都是最重要的事情之一——總是確保你為你的程式碼新增了適當的註釋!

  • 確保你的程式碼有所需的文件。

  • 考慮一個命名方案並貫徹始終。這能讓其他人更容易遵循。

  • 不管你的程式碼需要什麼庫,都在你的筆記本起始處匯入它們。(並在旁邊新增註釋說明你載入它們的目的)

  • 確保你的程式碼有適當的行距。你不要將你的迴圈和函式放在同一行——否則如果後面要引用它們,會讓人抓狂的!

  • 有時候你的檔案中有非常大量的程式碼。看看能不能將你認為不重要的某些程式碼隱藏起來,之後再引用。這能讓你的筆記本看起來整潔清晰,這是非常可貴的。

  • 檢視這個在 matplotlib 上的筆記本,看看可以如何簡練地進行呈現:http://nbviewer.jupyter.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-4-Matplotlib.ipynb

另一個額外技巧!在你想建立一個簡報時,你可能首先想到的工具是 PowerPoint 和 Google Slides。其實你的 Jupyter Notebooks 也能建立幻燈片!還記得我說過 Jupyter Notebooks 很靈活嗎?我可沒有誇大其辭。

要將你的筆記本轉換成幻燈片,進入「View→Cell Toolbar」,然後點選「Slideshow」。現在,每個程式碼塊右邊都顯示了一個「Slide Type」下拉選項。你能看到下列的 5 個選項:

一份全面的初學者實用指南

你最好試試每個選項,以便更好地理解它們。這能改變你展示程式碼的方式!

結語

注意,這篇文章遠沒有完全覆蓋 Jupyter Notebooks 的功能。還有很多東西要在你使用得更多之後才會用到。功能雖多,但關鍵在於實踐出真知。

這個 GitHub 庫包含了一些有趣迷人的 Jupyter Notebooks:https://github.com/jupyter/jupyter/wiki/A-gallery-of-interesting-Jupyter-Notebooks

這份指南只是你的資料科學旅程的起點,我很高興能與你一起前行!

原文地址:https://www.analyticsvidhya.com/blog/2018/05/starters-guide-jupyter-notebook/

相關文章