玩轉 Jupyter Notebook (CentOS)


玩轉 Jupyter Notebook (CentOS)

Jupyter Notebook 簡介

Jupyter Notebook 是一個開源的 Web 應用程序,可以用來創建和共享包含動態代碼、方程式、可視化及解釋性文本的文檔。其應用於包括:數據整理與轉換,數值模擬,統計建模,機器學習等等。更多信息請見官網

1. 檢查 Python 環境

1.1 查看 Python 版本

CentOS 7.2 中默認集成了 Python 2.7,可以通過下面命令檢查 Python 版本:
python --version

1.2 安裝 pip

pip 是一個 Python 包管理工具,我們使用 yum 命令來安裝該工具:yum -y install python-pip;使用下面命令升級 pip 到最新版本:pip install --upgrade pip

1.3 安裝相關依賴

安裝 Jupyter 過程中還需要其他一些依賴,我們使用以下命令安裝他們:

yum -y groupinstall "Development Tools"

yum -y install python-devel

2. 配置虛擬環境

2.1 安裝 virtualenv

我們將為 Jupyter 創建一個獨立的虛擬環境,與系統自帶的 Python 隔離開來。為此,先安裝 virtualenv 庫:
pip install virtualenv

2.2 創建虛擬環境

創建一個專門的虛擬環境,並直接激活進入該環境:

virtualenv venv

source venv/bin/activate

2.3 安裝 Jupyter

使用pip進行安裝:pip install jupyter

3. 配置 Jupyter Notebook

3.1 建立項目目錄

我們先為 Jupyter 相關文件准備一個目錄:

mkdir /data/jupyter

cd /data/jupyter

再建立一個目錄作為 Jupyter 運行的根目錄:

mkdir /data/jupyter/root

3.2 准備密碼密文

由於我們將以需要密碼驗證的模式啟動 Jupyter,所以我們要預先生成所需的密碼對應的密文。

生成密文,使用下面的命令,創建一個密文的密碼:

python -c "import IPython;print IPython.lib.passwd()"

執行后需要輸入並確認密碼,然后程序會返回一個'sha1:...'的密文,我們接下來將會用到它。

3.3 修改配置

3.3.1 生成配置文件

我們使用 --generate-config 來參數生成默認配置文件:

jupyter notebook --generate-config --allow-root

生成的配置文件在 /root/.jupyter/ 目錄下,可以點此編輯配置。

3.3.2 修改配置

然后在配置文件最下方加入以下配置:

c.NotebookApp.ip = '*'
c.NotebookApp.allow_root = True
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888
c.NotebookApp.password = u'剛才生成的密文(sha:...)'
c.ContentsManager.root_dir = '/data/jupyter/root'

其中:c.NotebookApp.password 請將上一步中密文填入此項,包括 sha: 部分。

你也可以直接配置或使用 Nginx 將服務代理到 80 或 443 端口。

4. 啟動 Jupyter Notebook

4.1 直接啟動

使用以下指令啟動 Jupyter Notebook:

jupyter notebook

此時,訪問“http://<您的 CVM IP 地址>:8888”即可進入 Jupyter 首頁。

4.2 創建 Notebook

進入【首頁】首先需要輸入前面步驟中設置的密碼。

然后點擊右側的【 new 】,選擇 Python2 新建一個 notebook,這時跳轉至編輯界面。

現在我們可以看到 /data/jupyter/root/ 目錄中出現了一個 Untitled.ipynb 文件,這就是我們剛剛新建的 Notebook 文件。我們建立的所有 Notebook 都將默認以該類型的文件格式保存。

4.3 后台運行

直接以 jupyter notebook 命令啟動 Jupyter 的方式在連接斷開時將會中斷,所以我們需要讓 Jupyter 服務在后台常駐。

先按下 Ctrl + C 並輸入 y 停止 Jupyter 服務,然后執行以下命令:

nohup jupyter notebook > /data/jupyter/jupyter.log 2>&1 &

該命令將使得 Jupyter 在后台運行,並將日志寫在 /data/jupyter/jupyter.log 文件中。

4.4 准備后續步驟的 Notebook

為了后面實驗中實驗室的步驟檢查器能夠更好的工作,此時我們使用以下命令預先創建幾份 ipynb 文件:

cd /data/jupyter/root
cp Untitled.ipynb first.ipynb
cp Untitled.ipynb matplotlib.ipynb
cp Untitled.ipynb tensorflow.ipynb
rm -f Untitled.ipynb

5. 使用 Jupyter Notebook

5.1 打開 first.ipynb 編輯界面

接下來的步驟中如遇到步驟檢查未通過,請按下 Ctrl + S 保存,等待步驟檢查器確認。
編輯界面

  • Jupyter Notebook 的編輯界面主要由 工具欄 和 內容編輯區 構成。

  • 下方編輯區,由 Cell 組成。每個 notebook 由多個 Cell 構成,每個 Cell 都可以有不同的用途。

5.2 Code Cell

新建的 notebook 中包含一個代碼 Cell(Code Cell),以“[ ]”開頭,在該類型的 Cell 中,可以輸入任意代碼並執行。如輸入:
1 + 1

然后按下 Shift + Enter 鍵, Cell 中代碼就會被執行,光標也會移動至下個新 Cell 中。我們接着輸入:print('Hello Jupyter')

再次按下 Shift + Enter ,可以看到這次沒有出現 “Out[..]” 這樣的文字。這是因為我們只打印出來了某些值,而沒有返回任何的值。

按下 Ctrl + S 保存,等待步驟檢查器確認。

5.3 Heading Cell

新版本中已經沒有獨立的 Heading Cell,現在標題被整合在 Markdown Cell 之中。

如果我們想在頂部添加一個的標題。選中第一個 Cell,然后點擊 Insert -> Insert Cell Above 。

你會發現,文檔頂部馬上就出現了一個新的 Cell。點擊在工具欄中 Cell 類型(默認為 Code),將其變成 Markdown。接着在 Cell 中寫下:# My First Notebook然后按下 Shift + Enter 鍵,便可以看到生成了一行一級標題。

與 Markdown 語法相同,使用多個#將改變標題級別。

5.4 Markdown Cell

上一步中我們已經嘗試了使用了 Markdown Cell。在該 Cell 中,除標題外其他語法同樣支持。比如,我們在一個新的 Cell 中插入以下文本:

This is a **table**:
| Name | Value |
|:----:|:-----:|
|    A |     1 |
|    B |     2 |
|    C |     3 |

然后按下 Shift + Enter,即可渲染出相應內容。

5.5 高級用法 - HTML

Markdown Cell 中同樣接受 HTML 代碼。這樣,你就可以實現更加豐富的樣式及結構、添加圖片等等。

例如,如果想在 notebook 中添加 Jupyter 的 logo,並且添加 2px 的黑色邊框,放置在單元格左側,可以這樣編寫:
<img src="http://jupyter.org/assets/nav_logo.svg" style="border: 2px solid black; float:left" />
然后按下 Shift + Enter,即可渲染出圖片。

5.6 高級用法 - LaTex

Markdown Cell 還支持 LaTex 語法。在 Cell 中插入以下文本:$$int_0^{+infty} x^2 dx$$同樣按下 Shift + Enter,即可渲染出公式。

5.7 導出

notebook 支持導出導出為 HTML、Markdown、PDF 等多種格式。

如點擊 File -> Download as -> HTML(.html),即可下載到 HTML 版本的 notebook。

5.8 導出 PDF

其中,導出 PDF 需要其他包的支持,我們需要使用以下命令安裝這些依賴:yum -y install pandoc texlive-*

  • 注:直接導出 PDF 時 Jupyter 可能會忽略一些 Cell,建議先導出為 HTML,然后使用瀏覽器將其轉為 PDF。

6. 集成 Matplotlib(可選)

Matplotlib 是 Python 中最常用的可視化工具之一,可以非常方便地創建許多類型的 2D 圖表和基本的 3D 圖表。

6.1 安裝 Matplotlib

我們使用 pip 來安裝 Matplotlib:pip install matplotlib

6.2 測試 Matplotlib

我們使用另一個 notebook (matplotlib.ipynb)來測試 Matplotlib。

點擊這里打開 matplotlib.ipynb 編輯界面。

魔法命令:在第一個 Cell 中,我們插入並執行:%matplotlib inline

這是指定 matplotlib 圖表的顯示方式的魔法命令。inline 表示將圖表嵌入到 notebook 中。

7. 測試

關於 Matplotlib 的使用請移步其官網。在接下來 Cell 中,我們插入幾個官方示例測試:

7.1 plot_bmh:

示例代碼:/plot_bmh.py

from numpy.random import beta
import matplotlib.pyplot as plt
plt.style.use('bmh')

def plot_beta_hist(ax, a, b):
    ax.hist(beta(a, b, size=10000), histtype="stepfilled",
            bins=25, alpha=0.8, normed=True)

fig, ax = plt.subplots()
plot_beta_hist(ax, 10, 10)
plot_beta_hist(ax, 4, 12)
plot_beta_hist(ax, 50, 12)
plot_beta_hist(ax, 6, 55)
ax.set_title("'bmh' style sheet")

plt.show()

按 Shift + Enter 執行 Cell,即可看到繪制出的圖像。

7.2 whats_new_99_mplot3d:

示例代碼:/whats_new_99_mplot3d.py

import random

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.viridis)

plt.show()

同樣執行 Cell,即可看到繪制出的圖像。

7.3 動手試試

最后,我們來嘗試繪制一個二次函數圖像,你可以自行實現,也可以參考下面代碼:

示例代碼:/my.py

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-10, 11)
y = x**2

plt.plot(x, y)
plt.show()

8. 搭配 TensorFlow(可選)

TensorFlow™ 是一個采用數據流圖,用於數值計算的開源軟件庫。它靈活的架構讓你可以在多種平台上展開計算,例如台式計算機中的一個或多個CPU(或GPU),服務器,移動設備等等。

TensorFlow 最初由 Google 大腦小組的研究員和工程師們開發出來,用於機器學習和深度神經網絡方面的研究,但這個系統的通用性使其也可廣泛用於其他計算領域。

8.1 安裝 TensorFlow

我們使用 pip 安裝相關依賴及 Tensorflow

pip install protobuf

pip install tensorflow

8.2 測試 TensorFlow

關於 TensorFlow 的使用請移步其TensorFlow官網,這里只是測試其在 Jupiter 中是否可用

打開 tensorflow.ipynb 編輯界面。在 Cell 中加入以下代碼(整理自官網 MNIST 教程):

示例代碼:/tensorflow.py

from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf

# The MNIST Data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# Regression
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)

# Training
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.05).minimize(cross_entropy)

sess = tf.InteractiveSession()

tf.global_variables_initializer().run()

for _ in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

# Evaluating
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

按下 Shift + Enter,學習過程結束后可以看到輸出了准確率(92% 左右)。

恭喜!您已經成功搭建起了一個雲端的 Jupyter Notebook 環境。你可以選擇保留已經運行的服務,繼續進行 Jupyter Notebook 的使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM