自Towardsdatascience
作者:Pranjal Chaubey
機器之心編譯
參與:Nurchachu Null、張倩
深藍主題、Conda 環境自由切換、一鍵生成目錄、一鍵隱藏代碼單元……有沒有想過 Jupyter Notebook 還可以這么玩?
對全世界的 Python 高手而言,Jupyter Notebook 是目前最流行的編程環境,尤其是對那些從事機器學習和數據科學的人而言。數月前我第一次開始認真研究機器學習時發現了 Jupyter Notebook。剛開始,我因這一切可以在我的瀏覽器中運行而感到驚訝和開心。但是,不久后我就失望了,老套的 Jupyter Notebook 的界面非?;A,缺乏很多有用的功能。那時候我就決定去尋找一些 Jupyter Notebook 的黑客技術。
在這篇文章中,我展示了一些 Jupyter Notebook 的附件/擴展,以及一些能夠增強 Jupyter Notebook 和提高生產力的命令。簡言之,就是要增強你的 Jupyter Notebook。
如果你按照下面的指示去做,你的 Jupyter Notebook 會擁有下面這些令人驚嘆的功能(如果你愿意,還能獲得更多):
是時候增強我們的 jupyter notebook 了!
炫酷的深藍午夜主題
首先,要保證我們的 notebook 有一個漂亮的黑色主題,這樣我們的眼睛就會舒服一些。如果你每天要工作很長時間,那固有的白色背景會讓你眼睛很難受。無論如何,一旦你換成了黑色,就永遠不會想換回來。
使用下面的命令安裝黑色的主題,
# Kill and exit the Notebook server # Make sure you are in the base conda environment conda activate base# install jupyterthemes pip install jupyterthemes # upgrade to latest version pip install --upgrade jupyterthemes
主題包安裝和更新好之后,運行下面的命令,將原來白色主題的 Jupyter Notebook 換成一款深藍午夜主題。你的眼睛會喜歡這款主題的。
# Enable Dark Mode jt -t onedork -fs 95 -altp -tfs 11 -nfs 115 -cellw 88% -T
Conda 環境自由切換
接下來,看一下我們是否已經把 Anaconda 中創建的所有定制環境作為核心添加在了 Jupyter Notebook 中。這樣我們就能簡單地利用 Kernel 按鈕切換環境。換核的時候不需要重啟 notebook。
假設你的 Anaconda 環中有兩個自定義的環境 my_NLP 和 gym。按照下面的步驟將這些添加到你的 Jupyter Notebook 中。
# Stop and exit your Jupyter Notebook server first # Activate your environment in the terminal conda activate my_NLP # Install the IPython Kernel pip install ipykernel # Link your environment with Jupyter python -m ipykernel install --user --name=my_NLP# Repeat steps for the other environment, gym. conda activate gym pip install ipykernel python -m ipykernel install --user --name=gym
現在打開你的 Jupyter Notebook,找到 kernel 按鈕下的 Change Kernel 選項,接下來就是見證奇跡的時刻:所有的核都被列舉出來了,你可以通過簡單地點擊來激活一個服務核。
這便是最新添加的 Kernel 的展現形式。請注意這款舒緩的午夜藍主題。
其他炫酷功能
關于我在上面提及的其他炫酷功能,需要安裝一些叫做 nbextensions for Jupyter Notebooks 的東西。
安裝地址:https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/install.html
安裝 nbextensions 是很容易的,簡單地遵循下面的步驟就行:
# Stop and exit your Jupyter Notebook server # Make sure you are in the base environment conda activate base# Install the nbextensions pip install jupyter_contrib_nbextensions # Install the necessary JS and CSS files jupyter contrib nbextension install --system
啟動 Jupyter notebook 服務,你可以在起始頁看到第四個叫做 Nbextensions 的選項。點擊這個選項,然后就可以看到極妙的功能集,這些都是你一直希望在 Jupyter Notebooks 中擁有的。
Nbextensions 標簽!
正如你在上面看到的,這個擴展列表十分龐大,甚至第一眼看上去有些嚇人。但并不是所有的都有用,下面是我用到的一些功能:
上述列表包含了我常用的擴展功能,但是我鼓勵你去嘗試一下其余的擴展功能。一些有意思的功能包括 ScrollDown、table_beautifier 以及 Hinterland。
Snippet 擴展和 Table of Contents generation 擴展在工作中同時使用。
Scratchpad 擴展
原文鏈接:https://towardsdatascience.com/supercharging-jupyter-notebooks-e22f5ad7ca18
要:基于 Graph Explorer 在 Jupyter 上進行圖探索,可以大大降低編碼成本,豐富 JupyterLab 的數據表現力。
本文分享自華為云社區《將Graph Explorer搬上JupyterLab:使用GES4Jupyter連接GES并進行圖探索-云社區-華為云》,作者: 蜉蝣與海 。
GES4Jupyter 是一款可以在 JupyterLab 中連接訪問 GES 并可視化的工具。工具中封裝了部分 GES 業務面接口,并提供對返回數據的可視化能力?;谠摴ぞ咴?Jupyter 上進行圖探索,可以大大降低編碼成本,豐富 JupyterLab 的數據表現力。
在使用華為云服務之前您需要注冊華為云帳號。通過此帳號,只需為使用的服務付費,即可使用所有華為云服務。
注冊華為云賬號步驟請點擊:《華為云注冊介紹》
注冊成功后即可自動登錄華為云,您需要完成 “實名認證” 才可以正常使用服務。
OBS 即對象存儲服務(Object Storage Service),GES 將 OBS 作為數據源導入數據。
數據若想導入圖引擎服務 GES,需要先上傳至 OBS。詳情參考:華為云圖引擎服務 GES 實戰——創圖
使用 GES4Jupyter 前,需要在圖引擎服務控制臺創建一個 GES 圖實例,并且導入數據。本例中使用的數據源是新冠患者軌跡追溯數據集 v2,可以從 AI Gallery 中下載。詳情參考:華為圖引擎文檔 - 快速入門和華為云圖引擎服務 GES 實戰 —— 創圖
調用 GES API 需要輸入 token 鑒權信息,認證鑒權能力依賴華為云統一身份認證服務 IAM。獲取 Token 需要用戶名密碼、圖所在區域等信息。詳情查看:華為圖引擎文檔 - 業務面 API 認證鑒權和調用 GES 服務業務面 API 相關參數的獲取
從華為云首頁進入 ModelArts 控制臺,點擊 CodeLab 新建一個 Jupyter Notebook,并等待資源初始化完成。
新建一個 Notebook,使用下列代碼獲取 GES4Jupyter 程序和資源文件。
import moxing as mox
mox.file.copy('obs://obs-aigallery-zc/GES/ges4jupyter/beta/ges4jupyter.py', 'ges4jupyter.py')
mox.file.copy('obs://obs-aigallery-zc/GES/ges4jupyter/beta/ges4jupyter.html', 'ges4jupyter.html')復制
在 Notebook 中輸入代碼后,將該段文本配置為代碼,然后點擊左側的運行按鈕,并等待運行完成。
點擊左上角的 “+” 號新建代碼片段,輸入下列代碼段并運行,完成 GES4Jupyter 的初始化。
from ges4jupyter import GESConfig, GES4Jupyter, read_csv_config
eip=''
project_id=''
graph_name=''
iam_url=''
user_name=''
password=''
domain_name=''
project_name=''
port=80
eip, project_id, graph_name, iam_url, user_name, password, domain_name, project_name, port=read_csv_config('cn_north_4_graph.csv')
config=GESConfig(eip, project_id, graph_name,
iam_url=iam_url,
user_name=user_name,
password=password,
domain_name=domain_name,
project_name=project_name,
port=port)
ges_util=GES4Jupyter(config, True);復制
上面代碼中涉及的字段含義基本分為兩大類,簡單介紹下:
除了手動輸入這部分參數,也可以將參數構造為一個 csv 文件上傳至 CodeLab 平臺,而后執行圖示 read_csv_config 方法,一鍵獲取所有參數。
如圖為一個區域為北京四的圖的示例文件,關鍵信息(如 ip、projectId、圖名、賬戶名、密碼、iam 子賬號名)通過馬賽克隱藏。
對于新創的圖,使用下列代碼段可以創建點邊索引,方便使用 cypher:
print('開始創建點索引:')
job_id=ges_util.build_vertex_index()
job_result=ges_util.get_job(job_id)
if 'errorCode' not in job_result:
for i in range(100):
if job_result['status']=='success':
break
else:
time.sleep(1)
job_result=ges_util.get_job(job_id)
print('點索引創建完成')
print('開始創建邊索引:')
job_id=ges_util.build_edge_index()
job_result=ges_util.get_job(job_id)
if 'errorCode' not in job_result:
for i in range(100):
if job_result['status']=='success':
break
else:
time.sleep(1)
job_result=ges_util.get_job(job_id)
print('邊索引創建完成')復制
如果圖比較大,且沒有基于 label 過濾方面的訴求,也可以關閉 cypher 的索引開關。
ges_util.cypher_query("call dbms.parameter('needNodeIndex', false)");
ges_util.cypher_query("call dbms.parameter('needEdgeIndex', false)");復制
執行 summary 方法可以看到點邊分布:
GES4Jupyter 支持調用 cypher 語句,并可視化 cypher 的結果。在初始化完成 GES4Jupyter 后,使用下列代碼可以執行并可視化 cypher 查詢:
cypher_result=ges_util.cypher_query("match (n)-[r]->(m) return n,r,m limit 10",formats=['row','graph']);
ges_util.format_cypher_result(cypher_result)復制
在 Notebook 中輸入該段代碼,點擊運行,可以看到 Notebook 中效果:
同時,工具還提供了其他選項卡,不僅可以看到可視化 Graph 結構,還可以看到表格數據、以及原始的 json 數據。
GES4Jupyter 也提供了能力對 gremlin 語言返回的點邊數據進行可視化。
gremlin_result=ges_util.gremlin_query("g.V().outE().bothV().path().limit(2)");
ges_util.format_gremlin_result(gremlin_result)復制
同時,對于 ges 的 path-query 接口,當返回數據為 tree 格式時,GES4Jupyter 也能提供較好的支持。
result=ges_util.path_query({
"repeat": [
{
"operator": "bothV",
"vertex_filter": {
"property_filter": {
"leftvalue": {
"id": ""
},
"predicate": "NOTIN",
"rightvalue": {
"value": ["北京"]
}
}
}
}
],
"until": [
{
"vertex_filter": {
"property_filter": {
"leftvalue": {
"id": ""
},
"predicate": "=",
"rightvalue": {
"value": ["額濟納旗"]
}
}
}
}
],
"times": 5,
"queryType": "Tree",
"vertices": ["北京病例2"]
})
ges_util.format_path_query(result)復制
本文的數據集取自華為云圖引擎官網 “新冠患者軌跡追溯” 數據集,notebook 代碼取自 “新冠患者軌跡追溯” 案例,在圖引擎官方網站上,還有其他動手實踐案例,配套 ModelArts 的 CodeLab,可以實現 “開箱即用”,提供豐富的場景和大家一起認識圖、了解圖、使用圖。
參考項目:https://github.com/merqurio/neo4jupyter
點擊下方,第一時間了解華為云新鮮技術~
華為云博客_大數據博客_AI博客_云計算博客_開發者中心-華為云
Jupyter Notebook 簡介
Jupyter Notebook 是一個開源的 Web 應用程序,可以用來創建和共享包含動態代碼、方程式、可視化及解釋性文本的文檔。
其應用于包括:數據整理與轉換,數值模擬,統計建模,機器學習等等。
更多信息請見 官網 。
http://jupyter.org/
檢查 Python 環境
CentOS 7.2 中默認集成了 Python 2.7,可以通過下面命令檢查 Python 版本:
python --version
安裝 pip
pip 是一個 Python 包管理工具,我們使用 yum 命令來安裝該工具:
yum -y install python-pip
使用下面命令升級 pip 到最新版本:
pip install --upgrade pip
安裝相關依賴
安裝 Jupyter 過程中還需要其他一些依賴,我們使用以下命令安裝他們:
yum -y groupinstall "Development Tools" yum -y install python-deve
配置虛擬環境
安裝 virtualenv
我們將為 Jupyter 創建一個獨立的虛擬環境,與系統自帶的 Python 隔離開來。為此,先安裝 virtualenv 庫:
pip install virtualenv
創建虛擬環境
創建一個專門的虛擬環境,并直接激活進入該環境:
virtualenv venv source venv/bin/activate
使用 pip 安裝 Jupyter
我們使用 pip 命令安裝 Jupyter:
pip install jupyter
建立項目目錄
我們先為 Jupyter 相關文件準備一個目錄:
mkdir /data/jupyter cd /data/jupyter
再建立一個目錄作為 Jupyter 運行的根目錄:
mkdir /data/jupyter/root
準備密碼密文
由于我們將以需要密碼驗證的模式啟動 Jupyter,所以我們要預先生成所需的密碼對應的密文。
生成密文
使用下面的命令,創建一個密文的密碼:
python -c "import IPython;print IPython.lib.passwd()"
執行后需要輸入并確認密碼,然后程序會返回一個 'sha1:...'的密文,我們接下來將會用到它。
修改配置
生成配置文件
我們使用 --generate-config
來參數生成默認配置文件:
jupyter notebook --generate-config --allow-root
生成的配置文件在 /root/.jupyter/
目錄下
修改配置
然后在配置文件最下方加入以下配置:
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'
其中:
你也可以直接配置或使用 Nginx
將服務代理到 80 或 443 端口。
c.NotebookApp.password
請將上一步中密文填入此項,包括 sha: 部分。
直接啟動
使用以下指令啟動 Jupyter Notebook:
jupyter notebook
此時,訪問 地址 即可進入 Jupyter 首頁。
創建 Notebook
進入【首頁】
首先需要輸入前面步驟中設置的密碼。
然后點擊右側的【 new 】
,選擇 Python2 新建一個 notebook,這時跳轉至編輯界面。
現在我們可以看到 /data/jupyter/root/ 目錄中出現了一個 Untitled.ipynb
文件,這就是我們剛剛新建的 Notebook 文件。我們建立的所有 Notebook 都將默認以該類型的文件格式保存。
后臺運行
直接以 jupyter notebook
命令啟動 Jupyter 的方式在連接斷開時將會中斷,所以我們需要讓 Jupyter 服務在后臺常駐。
先按下 Ctrl + C
并輸入 y
停止 Jupyter 服務,然后執行以下命令:
nohup jupyter notebook > /data/jupyter/jupyter.log 2>&1 &
該命令將使得 Jupyter 在后臺運行,并將日志寫在 /data/jupyter/jupyter.log 文件中。
準備后續步驟的 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
接下來的步驟中如遇到步驟檢查未通過,請按下 Ctrl + S 保存,等待步驟檢查器確認。
編輯界面
點擊這里打開 first.ipynb 編輯界面。
Jupyter Notebook 的編輯界面主要由 工具欄 和 內容編輯區 構成。
下方編輯區,由 Cell 組成。每個 notebook 由多個 Cell 構成,每個 Cell 都可以有不同的用途。
Code Cell
新建的 notebook 中包含一個代碼 Cell(Code Cell),以 [ ]
開頭,在該類型的 Cell 中,可以輸入任意代碼并執行。如輸入:
1 + 1
然后按下 Shift + Enter
鍵, Cell 中代碼就會被執行,光標也會移動至下個新 Cell 中。我們接著輸入:
print('Hello Jupyter')
再次按下 Shift + Enter
,可以看到這次沒有出現 Out[..]
這樣的文字。這是因為我們只打印出來了某些值,而沒有返回任何的值。
按下 Ctrl + S 保存,等待步驟檢查器確認。
Heading Cell *
新版本中已經沒有獨立的 Heading Cell
,現在標題被整合在 Markdown Cell
之中。
如果我們想在頂部添加一個的標題。選中第一個 Cell,然后點擊 Insert -> Insert Cell Above
。
你會發現,文檔頂部馬上就出現了一個新的 Cell。點擊在工具欄中 Cell 類型(默認為 Code),將其變成 Markdown。接著在 Cell 中寫下:
# My First Notebook
然后按下 Shift + Enter
鍵,便可以看到生成了一行一級標題。
與 Markdown 語法相同,使用多個#將改變標題級別。
Markdown Cell
上一步中我們已經嘗試了使用了 Markdown Cell
。在該 Cell 中,除標題外其他語法同樣支持。比如,我們在一個新的 Cell 中插入以下文本:
This is a **table**: | Name | Value | |:----:|:-----:| | A | 1 | | B | 2 | | C | 3 |
然后按下 Shift + Enter
,即可渲染出相應內容。
高級用法 - 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
,即可渲染出圖片。
高級用法 - LaTex
Markdown Cell 還支持 LaTex 語法。在 Cell 中插入以下文本:
$$int_0^{+infty} x^2 dx$$
同樣按下 Shift + Enter
,即可渲染出公式。
導出
notebook 支持導出導出為 HTML、Markdown、PDF 等多種格式。
如點擊 File -> Download as -> HTML(.html)
,即可下載到 HTML 版本的 notebook。
導出 PDF
其中,導出 PDF 需要其他包的支持,我們需要使用以下命令安裝這些依賴:
yum -y install pandoc texlive-*
注:直接導出 PDF 時 Jupyter 可能會忽略一些 Cell,建議先導出為 HTML,然后使用瀏覽器將其轉為 PDF。
Matplotlib 是 Python 中最常用的可視化工具之一,可以非常方便地創建許多類型的 2D 圖表和基本的 3D 圖表。
安裝 Matplotlib
我們使用 pip 來安裝 Matplotlib:
pip install matplotlib
測試 Matplotlib
我們使用另一個 notebook (matplotlib.ipynb)來測試 Matplotlib。
點擊這里打開 matplotlib.ipynb 編輯界面。
魔法命令
在第一個 Cell 中,我們插入并執行:
%matplotlib inline
這是指定 matplotlib 圖表的顯示方式的魔法命令。inline 表示將圖表嵌入到 notebook 中。
測試
在接下來 Cell 中,我們插入幾個官方示例測試:
1.plot_bmh:地址:https://matplotlib.org/examples/style_sheets/plot_bmh.html
示列代碼:plot_bmh.py
執行 Cell,即可看到繪制出的圖像。
2.whats_new_99_mplot3d:
whats_new_99_mplot3d.py
同樣執行 Cell,即可看到繪制出的圖像。
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,即可看到繪制出的圖像。
2.whats_new_99_mplot3d:地址:https://matplotlib.org/examples/pyplots/whats_new_99_mplot3d.html
示例代碼:/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,即可看到繪制出的圖像。
關于 Matplotlib 的使用請移步其官網。
動手試試
最后,我們來嘗試繪制一個二次函數圖像,你可以自行實現,也可以參考下面代碼:
TensorFlow? 是一個采用數據流圖,用于數值計算的開源軟件庫。它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),服務器,移動設備等等。
TensorFlow 最初由 Google 大腦小組的研究員和工程師們開發出來,用于機器學習和深度神經網絡方面的研究,但這個系統的通用性使其也可廣泛用于其他計算領域。
安裝 TensorFlow
我們使用 pip 安裝相關依賴及 Tensorflow
pip install protobuf pip install tensorflow
測試 TensorFlow
點擊這里打開 tensorflow.ipynb 編輯界面。
在 Cell 中加入以下代碼(整理自官網 MNIST 教程):
示例代碼:/tensorflow.py
按下 Shift + Enter,學習過程結束后可以看到輸出了準確率(92% 左右)
關于 TensorFlow 的使用請移步其官網,這里只是測試其在 Jupiter 中是否可用。
恭喜!您已經成功搭建起了一個云端的 Jupyter Notebook 環境。感謝大家耐心的看完,新年到,小桀在這里祝大家新年快樂、心想事成、技術更上一層樓!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。