Jupyter Notebook編程環境

出自集智百科
跳轉到: 導覽搜尋

目錄

Jupyter Notebooks是什麼

Jupyter Notebook是一個Web應用程序,允許你把所有的說明性文字,數學公式,代碼和可視化內容結合在一個可輕鬆共享的文檔里。例如,這是我最近特別喜歡共享的Notebook之一,激光干涉引力波觀測站(LIGO)對從兩個碰撞黑洞發出引力波的檢波實驗的分析。你可以下載數據,在Notebook上運行代碼和重複分析,實際上你可以自己檢測引力波。

在使用數據時,Notebooks很快成為了必不可少的工具,你會發現它們被用於數據清理和探索,可視化,機器學習大數據分析。這是一個我為自己的個人博客製作的Notebook,展示了Notebook的許多特性。通常你會在一個終端做這項工作,無論是普通的Python shell還是IPython,您的可視化將在單獨的窗口,任何文檔以及各種腳本的功能和類將在單獨的文檔。但是用Notebook,所有的這些都在一個地方,很容易一起閱讀。

Notebooks也在Github上自動呈現。這是一個偉大的功能,讓你輕鬆的分享你的工作。也有http://nbviewer.jupyter.org 能夠很好地展現你存在Github repo或別處的Notebook文檔。

文藝編程(Literate programming)

Notebook是唐納德·克努特(高德納)在1984年提出的一種文藝編程形式。有了文藝編程,我們就可以將文檔編輯為一種敘述性的文字伴隨著代碼的形式,而不是單純的代碼。用唐納德·克努特的話來說,與其說我們的主要任務是為了指導電腦做什麼,還不如將我們的精力集中在給人類解釋我們正在讓電腦做什麼。

畢竟,代碼是為人類編寫的,而不是電腦。Notebook就很好地提供了這種功能。你能夠將編寫文檔作為敘事文本,以及代碼。這不僅對人們閱讀你的Notebook有幫助,而且對未來的你想回頭做一些分析也很有用。還有:最近,這個文藝編程的想法已經擴展到一種整體編程語言:Eve

Notebook如何工作

Jupyter notebooks 是由Fernando Perez開發,在IPython基礎上形成的項目。IPython是一個python交互環境,類似於Python自帶的交互環境,卻具有極棒的例如語法高亮和代碼自動完成等特性。起初,notebook通過從Web應用程序發送消息(在瀏覽器中查看notebook)到IPython內核(在後台運行的IPython應用)。內核執行代碼,然後把它送回notebook。當前的體系結構是類似的,如下所示。

未標題-1.png

關鍵點在於notebook的伺服器。你通過你的瀏覽器以及notebook鏈接到伺服器使其作為一個web應用程序來呈現。你在web應用程序中編寫的代碼通過伺服器發送到內核。內核運行代碼並將其發送回伺服器,然後任何輸出都會呈現的瀏覽器上。當你保存notebook的時候,它將會以JSON文件以及.ipynb的文件擴展名來寫入伺服器。

這個架構的優點在於內核不需要運行Python。由於notebook和內核是分開的,任何形式的代碼都可以在它們之間傳送。例如,兩個早期版本的非Python的內核就是為R和Julia語言設計的。在R內核中,用R語言編寫的代碼將會被送到R內核執行,等同於Python代碼在Python內核里運行。因為notebooks的含義並不是很清楚,所以人們將早期的Ipython notebooks重新命名了。新名稱Jupyter來自於與Julia,Python和R的結合。如果你感興趣,這裡有一個可用內核的表。

另一個好處是伺服器可以通過互聯網在任何地方運行和訪問。通常,你將會在儲存了所有數據和notebook文件的自己的機器上來運行伺服器。但是,你也可以設置一個遠程機器或者一個像Amazon』s EC2的雲實例。然後,你可以在世界任何地方訪問你瀏覽器中的notebooks。

安裝Jupyter Notebook

目前安裝Jupyter最簡便的方式是使用Anaconda,其自帶了Jupyter notebooks工具包,用戶可以在默認環境下使用notebooks。 要在conda環境中安裝Jupyter notebooks,請使用conda install jupyter notebook。同樣可以通過pip命令完成Jupyter notebooks的安裝:pip install jupyter notebook。 要啟動notebook伺服器,請在終端或控制台中輸入jupyter notebook,隨後將在您運行命令的目錄中啟動伺服器,這意味著任何notebook文件都會儲存在這個目錄下。通常情況下,您希望在notebooks的目錄下啟動伺服器。您可以通過文件系統瀏覽到notebook所在的位置。

啟動notebook伺服器

當您運行那個命令(自己嘗試!),伺服器主頁將在您的瀏覽器中打開。

Notebook-server.png


默認情況下,notebook伺服器運行在http://localhost:8888埠。

如果您對此不熟悉,localhost意味著您的計算機,8888是伺服器正在通信的埠。

只要伺服器仍在運行,您隨時可以返回,只要你在瀏覽器中訪問http://localhost:8888即可。

如果您需要啟動另外一個伺服器,它會先嘗試使用埠8888。由於埠已經被佔用,新的伺服器將在埠8889上運行。然後,您會連接到http://localhost:8889。每新增一個notebook伺服器都會使得這個埠號遞增1:

您可在此處的列表中看到一些文件和文件夾,這取決於您從哪裡啟動伺服器。在右側,您可以單擊「新建」創建新的notebook、文本文件、文件夾或終端。

「Notebooks」下的列表顯示您已安裝的內核。

Conda-environments.png

這裡我在Python 3環境中運行伺服器,所以我有一個Python 3內核可用。 您可在這裡看到Python 2。

我還為列表中的Scala 2.10和2.11安裝了內核。 如果從conda環境運行Jupyter notebook伺服器,您還可以從其他任何環境中選擇內核(見下文)。 要創建新的notebook,請單擊要使用的內核。

頂部導航有文件,執行和集群的選項。點擊文件將顯示當前目錄下的所有的文件夾及文件。

點擊running將列出所有正在執行的腳本並可以進行管理操作。

群組原本的作用是顯示已創建的用於並行計算的多CPU核,現在由於已被ipyoaraller代所以並沒有什麼用處。

如果你從conda環境運行腳本伺服器,將可以看到一個「Conda」按鈕。用此按鈕你可以從Jupyter裡面管理環境。你可以創建新環境,安裝包,升級包和導出環境等。

Conda-tab.png

關閉Jupyter

要關閉單個腳本,你可以在伺服器主頁處勾選對應腳本然後點擊關閉。 請在關閉前確保已經保存!因為關閉後,你的所有修改都將會丟失。下一次你執行腳本時仍然需要重新運行代碼。

Notebook-shutdown.png

你也可以在終端按兩次「control + C」來關閉整個伺服器,再次強調在作出關閉動作前請保證做好保存,因為該動作會立即關閉所有的在運行的腳本。

Server-shutdown.png

Notebook 操作界面

用 notebook新建一個筆記,你將會看見下面的界面:

操作界面notebook.jpg

notebook以cell格子的形式存儲和展示各種信息,包括代碼。分為一下幾種: 代碼格:你在這裡編輯和運行的你的代碼。 Markdown文本格:以 Markdown 規則顯示的文本內容。可以方便的編輯標題和字體格式、插入圖片等等。

其他操作: 在文件最頂端你可以看見文檔的標題,默認值是「Untitled」。點擊標題可以進行重命名。

QQ截圖20170226203001.png重啟內核,之前的變數將會丟失。

notebooks每間隔一段時間會自動保存當前編輯的內容。你也可以手動保存文檔。

在"File" 菜單, 你可以下載你編輯的文檔。你可以下載HTML/py/pdf等不同的格式。

code代碼格

你在notebooks里的工作大部分將會通過代碼格來實現。這裡是寫代碼和執行代碼的地方。 在代碼格,你可以寫入任何代碼:定義變數,定義函數和類,或者載入其他代碼包等等。 任何一個代碼格中的代碼,都可以引用到其他格子中的代碼。

MarkDown文本格

就像代碼格一樣,你按下 Shift + 回車 或者 Control + Enter 就可以運行Markdown文本格,他們會以Mardown語法渲染文本。

Markdown語法主要分為以下幾種:

Headers頭部

每一行的開始用#表示標題的層級。一個#是1級標題,兩個#是2級標題,以此類推。

 # Header 1
 ## Header 2
 ### Header 3

Links 超鏈接

超鏈接適用如下格式: [Udacity's home page](https://www.udacity.com) 中括弧內是超鏈接顯示文字,小括弧內輸入超鏈接地址即可。

Emphasis重點

加粗的文本可以用2個星號(*)或下劃線(_)把文本夾在中間。 例如 **aardvark** 或者 __aardvark__ 將會顯示成 aardvark

Code代碼

有兩種方式用於顯示代碼。 用 符號 ` 包含文本,例如`string.punctuation` 如果是多行代碼,則用3個符號`來包含文本。例如:

   ```
   import requests
   response = requests.get('https://www.udacity.com')
   ```

另一種方式是在代碼前面加入4個空格,使代碼產生縮進。


Math expressions 數學表達式

你可以在 Markdown文本格使用 LaTeX 符號創建數學表達式。Notebooks 使用 MathJax 把 LaTeX 符號渲染成數學表達式。 在一行內可以使用符號$包含表達式,例如

 $y = mx + b$  

多行的數學表達可以用2個符號$包含多個表達式,例如:

 $$
 y = \frac{a}{b+c}
 $$


示例

該鏈接是一個包含Markdown所有格式的示例。



Magic keywords 快捷命令

快捷命令是在格子中運行的控制notebook本身或系統的特定代碼。例如你可以使用 %matplotlib 這個命令,在單元格內嵌入matplotlib顯示結果.


Timing code 時間代碼

你可以使用 timeit 這個命令顯示一個函數的運行時間。如下圖:

5107d13d-ebbb-4cce-bd.png

你可以使用 %%timeit 這個命令顯示整個代碼格的運行時間。如下圖:

222.png

Embedding visualizations in notebooks 可視化嵌入

  %config InlineBackend.figure_format = 'retina' 

代碼之後寫入

  %matplotlib inline to render higher resolution images.

可以在格子中顯示:

333.png


debug

你可以使用 %pdb 命令交互的調用debugger。

Debugging in a notebook.png

有用的快捷鍵

  • Esc + F 在代碼中查找、替換,忽略輸出。
  • Esc + O 在cell和輸出結果間切換。
  • 選擇多個cell:
Shift + J 或 Shift + Down 選擇下一個cell。
Shift + K 或 Shift + Up 選擇上一個cell。
一旦選定cell,可以批量刪除/拷貝/剪切/粘貼/運行。當你需要移動notebook的一部分時這個很有用。
  • Shift + M 合并cell.

Converting notebooks

Notebooks 是一個龐大的擴展名為 .ipynb的 JSON 文件。

11111.png

如果對嵌入式的顯示方法不滿,可以利用nbconvert工具將 .ipynb 文件轉換成 html 或 Markdown 格式,再放入網頁中。

例如你可以把 notebook 轉換成 HTML 文件,使用下面的命令:

 jupyter nbconvert --to html notebook.ipynb

2322.png

創建幻燈片

在菜單欄,點擊 View > Cell Toolbar > Slideshow ,給格子增加幻燈片類型。

33233.png

之後,你就可以在格子類型里選擇幻燈片類型了。

344433.png

運行幻燈片

要在notebook創建幻燈片文件,你需要使用 nbconvert:

 jupyter nbconvert notebook.ipynb --to slides

希望轉換後立刻看見結果,使用:

 jupyter nbconvert notebook.ipynb --to slides --post serve
個人工具
名字空間
動作
導覽
工具箱