1. 程式人生 > >史上最詳細、最完全的jupyter notebook使用教程,Python使用者必備!——ipython系列之三

史上最詳細、最完全的jupyter notebook使用教程,Python使用者必備!——ipython系列之三

一、什麼是jupyter

1、簡介:

jupyter notebook是一種 Web 應用,能讓使用者將說明文字、數學方程、程式碼和視覺化內容全部組合到一個易於共享的文件中。它可以直接在程式碼旁寫出敘述性文件,而不是另外編寫單獨的文件。也就是它可以能將程式碼、文件等這一切集中到一處,讓使用者一目瞭然。

Jupyter這個名字是它要服務的三種語言的縮寫:Julia,PYThon和R,這個名字與“木星(jupiter)”諧音。Jupyter Notebook 已迅速成為資料分析,機器學習的必備工具。因為它可以讓資料分析師集中精力向用戶解釋整個分析過程。我們可以通過Jupyter notebook寫出了我們的學習筆記。但是jupyter遠遠不止支援上面的三種語言,目前能夠使用的語言他基本上都能支援,包括C、C++、C#,java、Go等等。

jupyter notebook和我們前面所講的兩篇系列文章ipython其實都是來自同一個產品族,它的前身叫做ipython notebook,至於後面為什麼更名這不得而知,這也就是為什麼很多文章總是預設將ipython就說成是ipython notebook的原因了。但是既然已經更名了,我們還是區別對待ipython和jupyter notebook。

2、安裝與開啟

安裝這裡就不說了,使用過anaconda的人都清楚,在安裝anaconda的時候會一起打包安裝,如果想要自己安裝,可以通過pip或者是conda安裝,

怎麼開啟也很簡單,可以直接在anaconda的選單裡面開啟jupyter notebook,也可以通過命令列,輸入jupyter notebook或者是jupyter-notebook都可以。

我們說了,jupyter notebook會在瀏覽器中中開啟,是一種Web應用,故而有web路徑和埠號了,我的開啟之後,在瀏覽器的位址列會顯示如下:

當一次開啟多個jupyter notebook的時候,埠號會依次遞增8889,8890依次遞增。

3、jupyter的作用

前面說了一大堆,也不清楚jupyter到底有啥好的啊,到底有一些什麼功能呢?

在介紹 Jupyter Notebook 的功能之前,讓我們先來看一個概念:文學程式設計 ( Literate programming ),這是由 Donald Knuth 提出的程式設計方法。傳統的結構化程式設計,人們需要按計算機的邏輯順序來編寫程式碼;與此相反,文學程式設計則可以讓人們按照自己的思維邏輯來開發程式。

簡單來說,文學程式設計的讀者不是機器,而是人。 我們從寫出讓機器讀懂的程式碼,過渡到向人們解說如何讓機器實現我們的想法,其中除了程式碼,更多的是敘述性的文字、圖表等內容。這麼一看,這不正是資料分析人員所需要的編碼風格麼?不僅要當好一個程式設計師,還得當好一個作家。那麼 Jupyter Notebook 就是不可或缺的一款集程式設計和寫作於一體的效率工具。

以下列舉了 Jupyter Notebook 的眾多優點:

(1)極其適合資料分析想象一下如下混亂的場景:你在終端中執行程式,視覺化結果卻顯示在另一個視窗中,包含函式和類的指令碼存在其他文件中,更可惡的是你還需另外寫一份說明文件來解釋程式如何執行以及結果如何。此時 Jupyter Notebook 從天而降,將所有內容收歸一處,你是不是頓覺靈臺清明,思路更加清晰了呢?

(2)支援多語言也許你習慣使用 R 語言來做資料分析,或者是想用學術界常用的 MATLAB 和 Mathematica,這些都不成問題,只要安裝相對應的核(kernel)即可。這裡列出了 Jupyter 支援的所有語言,供您參考。

分享便捷,支援以網頁的形式分享,GitHub 中天然支援 Notebook 展示,也可以通過 nbviewer 分享你的文件。當然也支援匯出成 HTML、Markdown 、PDF 等多種格式的文件。

(3)遠端執行,在任何地點都可以通過網路連結遠端伺服器來實現運算

(4)互動式展現,不僅可以輸出圖片、視訊、數學公式,甚至可以呈現一些互動的視覺化內容,比如可以縮放的地圖或者是可以旋轉的三維模型。這就需要互動式外掛(Interactive widgets)來支援,更多內容請參考這裡。

常見的一些jupyter高階應用如:

數學公式編輯

幻燈片製作

魔術關鍵字

二、jupyter notebook的簡單使用

1、常用的jupyter notebook一些命令如下:指的是在cmd中使用jupyter命令

(1)檢視jupyter notebook的相關幫助

jupyter-notebook --help

jupyter-notebook --help-all (會顯示更詳細的資訊)

jupyter-notebook -h (只有一個橫槓噢,熟悉命令使用的小夥伴都知道)

(2)jupyter notebook常用的子命令——subcommand

list :列出當前的所開啟的jupyter notebook的一些資訊,比如:

(base) C:\Users\lenovo>jupyter-notebook list
Currently running servers:
http://localhost:8888/?token=5751bd2f4a5675c59c15c9cdfaa7ecbe431ba68b7d23a3c7 :: C:\Users\lenovo
http://localhost:8889/?token=a9f1a6a33a5b0fa93f51552aecbb99a3dec321fdd5e0e74a :: C:\Users\lenovo

 這裡我打開了兩個jupyter notebook,一個埠為8888,一個為8889

stop:關閉所給定的埠號的那一個jupyter

(base) C:\Users\lenovo>jupyter-notebook stop 8888
Shutting down server on port 8888 ...

(base) C:\Users\lenovo>jupyter notebook list
Currently running servers:
http://localhost:8889/?token=a9f1a6a33a5b0fa93f51552aecbb99a3dec321fdd5e0e74a :: C:\Users\lenovo

關閉了8888,只剩下一個8889了。
password :給某一個開啟的jupyter notebook 服務設定密碼,後面直接輸入所要新增的密碼即可。

(3)jupyter notebook命令的常用選項,下面進介紹一些常用的,想要知道所有的詳細使用可以使用

jupyter notebook --help-all 檢視jupyter命令的詳細資訊:

--generate-config  產生預設的配置檔案()這個是重點,後面會講到)

--no-browser 啟動jupyter notebook之後不開啟瀏覽器(預設情況下是會開啟一個瀏覽器介面的)

--pylab 同前面講解ipython的時候很類似,在jupyter notebook裡面整合,也可以在jupyter notebook裡面使用

            %pylab 或者是%matplotlib魔術命令(這是最常用的,後面也會講到)

--config=<Unicode>  制定一個完全路徑的配置檔名稱,關於配置檔案後面會詳解,預設是default,即系統指定的預設配置檔案


--ip=<Unicode>  預設是: 'localhost',從前面的現實中也可以看出來,表示的是notebook伺服器會監聽的IP地址,我們也可以手動指定
--port=<Int>  指定jupyter notebook開啟瀏覽器的埠號,預設是: 8888,也可以手動輸入

--notebook-dir=<Unicode> 預設使用預設的目錄,表示的是notebook和kernels的目錄

--browser=<Unicode> 還可以指定某一個特定的瀏覽器開啟,預設使用系統預設的瀏覽器開啟,是可以自己選定瀏覽器的。
 

2、jupyter的簡單使用

當我們開啟jupyter notebook(不管用什麼樣的方式開啟,使用選單開啟或者是命令列開啟是一樣的)會在預設的瀏覽器中看到這樣的介面:

但是每一臺不同的電腦開啟之後的介面是不同的,仔細觀察就會發現,這裡面現實的一些資料夾就是電腦使用者目錄下面的資料夾,這是為什麼呢?那是因為jupyter notebook在啟動的時候總是有一個預設的目錄,一般情況下,使使用者的目錄。

那怎麼檢視預設目錄,或者是我想要修改預設目錄該怎麼做呢?

實際上,jupyter的一些預設設定都設定在一個預設的配置檔案中,我們可以檢視並且修改配置檔案中的內容

(1)檢視配置檔案

在cmd中使用如下命令:jupyter-notebook --generate-config

(base) C:\Users\lenovo>jupyter-notebook --generate-config
Writing default config to: C:\Users\lenovo\.jupyter\jupyter_notebook_config.py

可見我的預設配置檔案在:C:\Users\lenovo\.jupyter\jupyter_notebook_config.py中,現在我們檢視配置檔案的資訊。得到如下:

開啟之後發現,這本質上應該是一個python的 py檔案,但是實際上全部都是用井號#開頭的,這不是意味著這都是一些註釋嗎?可以這麼說,但實際上觀察會發現,有的有兩個井號開頭 ##,這才是註釋文字,而那些以一個井號#開頭的實際上就是預設的配置資訊,也就是我們要修改的。當然這個檔案很長,我不會一個一個講解每一個配置資訊是什麼意思,我指將如何自定義預設目錄。

我們通過編輯器,搜尋directory定位到如下位置:

## The directory to use for notebooks and kernels.
#c.NotebookApp.notebook_dir = ''

這句話就是設定jupyter的目錄的,可見預設值是沒有的,我們現在比如要使它指定到我們自己的目錄,比如我要讓它指定到F盤中的myjupyter資料夾,則修改如下:

## The directory to use for notebooks and kernels.
c.NotebookApp.notebook_dir = 'F:\myjupyter'

儲存修改的檔案並關閉!然後再開啟,發現如下資訊,從下面的資訊可以看見這樣一句話:

Serving notebooks from local directory: F:\myjupyter  

這就說明修改成功。 

(base) C:\Users\lenovo>jupyter-notebook
[I 14:17:57.432 NotebookApp] JupyterLab beta preview extension loaded from D:\ProgramData\Anaconda3\lib\site-packages\jupyterlab
[I 14:17:57.432 NotebookApp] JupyterLab application directory is D:\ProgramData\Anaconda3\share\jupyter\lab
[I 14:18:00.231 NotebookApp] Serving notebooks from local directory: F:\myjupyter
[I 14:18:00.232 NotebookApp] 0 active kernels
[I 14:18:00.232 NotebookApp] The Jupyter Notebook is running at:
[I 14:18:00.232 NotebookApp] http://localhost:8888/?token=ad2aa0097b0687bbd8b5b11909101533630e781e7c28753b
[I 14:18:00.232 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 14:18:00.234 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=ad2aa0097b0687bbd8b5b11909101533630e781e7c28753b&token=ad2aa0097b0687bbd8b5b11909101533630e781e7c28753b
[I 14:18:00.786 NotebookApp] Accepting one-time-token-authenticated connection from ::1

注意事項:

第一、資料夾必須先建立好,比如這裡F盤下面的myjupyter資料夾要先建立好;不然會jupyter初始化時會找不到目錄

第二、要取消註釋,c前面的#要去掉(我還不知道這是為什麼?哪位知道望告知!)

第三、要注意檔名不可以是數字

除此之外,上面的這些操作,推薦全部使用anaconda自帶的Anaconda Promp進行操作,因為它提供了非常好的環境管理功能,而在系統自身的cmd中操作,可能因為環境變數設定等相關的一些原因,不成功。比如我在多個環境中都安裝了jupyter,但是cmd中環境變數所指向的那個是A,我們修改的可能是B的配置檔案,這樣通過cmd啟動jupyter發現依然未改變。

現在開啟,則發現web介面變成了如下:

三、jupyter執行環境的配置——一python執行環境為例

jupyter notebook本質上是一個web應用程式,我們可以在上面書寫程式碼,但是程式碼本身的執行環境是需要自己安裝的,沒有執行環境,即使是在jupyter notebook裡面書寫的程式碼怡然沒有辦法執行。因為程式碼本身,web應用程式是不認識的。

幸運的是,在使用anaconda安裝的時候,會預設將安裝jupyter,而且會安裝一個Python的執行環境,所以開啟jupyter的時候,可以直接看見這個執行環境,在jupyter裡面稱之為核心kernel,如下所示:

在右上角點選下拉按鈕,會得到如圖所示的結果,

第一個python3 ,表示的就是預設的python3 kernel,它是隨著anaconda一起安裝的;

Text File ,表示的是新建一個文字檔案

Folder ,表示的是新建一個資料夾

Terminal ,表示的是在瀏覽器中新建一個使用者終端,即類似於cmd的shell。

但是,這是遠遠不夠的,因為我不可能所有的程式都是使用這一個python kernel,使用過TensorFlow的人都知道如何建立一個新的執行環境,打包TensorFlow所依賴的各種包。本文以python為例,我還有另外兩個環境,一個是TensorFlow,一個是pytorch,還有一個是,mxnet。他們都是使用conda建立的python執行環境。其實就一句話:

conda create -n tensorflow python=3.6

conda建立執行環境的方法這裡就不詳細說明了,可以參閱相關文章。注意:因為anaconda的伺服器在國外,上面的執行速度實在是太慢,甚至等了半天,然後連線失敗,所以,我們可以使用清華大學的映象進行下載,在使用上面執行命令之前,新增一句:conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

再使用:conda create -n tensorflow python=3.6

這會快非常多!!!

1、原始的方法解決多個Python執行環境問題

就是走在每一個python的執行環境裡面都使用conda install notebook 安裝一個與之對應的notebook,然後我在做開發的時候,需要用什麼環境,我就在每一個Python環境中的script資料夾下面開啟對應的哪個jupyter notebook,這當然沒問題。但這樣做不是很高階,我需要安裝很多次,而且每次在使用jupyter notebook的時候都只能使用一個環境,侷限性很大。

2、更高階的辦法

現在,比如我已經在anaconda裡面建立了一個名為tensorflow的環境,但是,怎麼把它新增到jupyter裡面呢?

(1)方法一:

首先在anaconda prompt裡面啟用我們需要的環境,然後執行下面一個命令:

(base) C:\Users\lenovo>activate python27

(python27) C:\Users\lenovo>python -m ipykernel install --name python27
Installed kernelspec python27 in C:\ProgramData\jupyter\kernels\python27

(base) C:\Users\lenovo>activate tensorflow

(tensorflow) C:\Users\lenovo>python -m ipykernel install --name tensorflow
Installed kernelspec tensorflow in C:\ProgramData\jupyter\kernels\tensorflow

總結:兩步走,

第一步:啟用相應的環境

第二部分:執行命令 python -m ipykernel install --name 環境名稱

現在開啟我們的jupyter notebook,檢視python環境如下:

補充:也有人用下面的方法:

先啟用某一個Python環境:然後再執行下面兩個語句:

conda install -n 環境名稱 ipykernel

python -m ipykernel install --user  

注意:上面這種方式都是可以的,但問題是還是需要針對每一個環境安裝一次ipykernel,而且有時候不知怎麼回事,總是會遇見一些亂七八糟的錯誤,我還沒搞清楚是為什麼,如果誰知道,望告知。

(2) 方法二——一步到位的方法

在我建立完我需要的執行環境之後,然後只需要在base執行環境中執行一個命令即可。

(base) C:\Users\lenovo>conda install nb_conda

將會將所有的kernel全部新增進去,這種方法是最快的,而且最不容易出錯,推薦使用。

全文總結:關於ipython系列的文章到這裡就結束了,三篇文章,從ipython到jupyter notebook,希望對於一些有需要的小夥伴有所幫助,本來還打算寫一篇關於jupyter notebook的使用的,但是這種教程網上實在太多了,就不在這裡畫蛇添足了。