Jupyter DashBoards 另類全家桶

概述

今天看到一個非常好的功能 Jupyter DashBoards

基于Jupyter的儀表盤,非常Nice的功能,可以實現定制化,可視化與代碼的分離

然后在這個基礎上依次修正以及補充,基于Jupyter的一些誤區(qū)和知識

本機的環(huán)境是 py3jupyter

感覺今天最大的收貨是對學會看 docker 的配置文件 + 學會查找 github issue

插件-nb extensions

Git項目地址是,nbextensions 以及 nbextensions_configurator。前者是各類型有用的插件,后者是能夠直接在Jupyter 上圖形話調節(jié)界面的功能。

這里今天得到的收獲主要是基于虛擬環(huán)境的一個配置問題

在官網上,安裝完 nbextensions 之后,本質是將一
大堆插件放在下面目錄下

/Users/{user}/Library/Jupyter/extensions

接下來進行插件激活和路徑指定,官網上的提示使用的是

jupyter contrib nbextension install --user

如果這么操作的話,是在用戶目錄 例如 /home/user/.jupyter 下面生成 nbextensions 的配置, 這會導致環(huán)境不隔離的情況。

正確的做法,切換到新的環(huán)境下的jupyter,執(zhí)行

jupyter contrib nbextension install --sys-prefix

這樣就做到只影響該環(huán)境下的Jupyter,在某環(huán)境下的 /etc/jupyter 文件夾下產生對應的配置文件,nb的 和 notebook的都有,如果對于 notebook的配置有特殊的配置,可以寫在這里,例如密碼,token等。

如果要刪除該內容,install 替換為 uninstall。

如果因為選擇的是 users 會導致的問題是 no module named nbextensions,某些和root 環(huán)境不一致的環(huán)境找不到配置文件

jupynter 版本的問題

2017年06月04日,jupyter notebook 的版本已經升級到了5.0,但是通過 pip 安裝的 nbextensions 的插件所寫的代碼,是4.x的程序,這個通過找 github issues, 發(fā)現作者已經在 master 分支上做了修改,nbextensions.py 這個文件,修改如下代碼即可

try:
    # notebook > 4.2
    from notebook.nbextensions import _get_nbextension_dir as get_nbext_dir
except:
    # notebook <= 4.2
    from notebook.nbextensions import _get_nbext_dir as get_nbext_dir

Jupyter DashBoard

代碼組成

這是一個非常另類的套裝, 由以下幾個部分組成

jupyter/dashboards, notebook 插件將代碼轉化為可定制的 dashboard

dashboards_bundlers,notebook 插件將定制好的dashboard 輸出到 server端

dashboards_server,nodejs web框架,主要作用是與juypter server 通信展示只讀功能的dashboard

kernel_gateway,一個中間的類似于代理的web框架,用于和dashboard server 通信

dashboards_setup ,一套基于docker的服務范例,講解各個服務如何配置

架構流程如下圖:

image.png

整完這一套,模型開發(fā)人員,兩行代碼就一套定制化的BI系統(tǒng)。這套系統(tǒng)搭建的時候最難的地方是連接

dashboard 連接

  • Jupyter Notebook

這個是一端,啟動的時候需要配置一下啟動token和Server 的端口,方便和另一端加密驗證。

# token 的配置寫在了配置文件里
# 端口設置在環(huán)境變量中
jupyter notebook
  • Dashboard Server

用于HTML展示。有兩個主要輸入,一個是token作為加密驗證的功能,一個是 gateway的地址 http://host:port 即可

# 和 kernal 指定的ip 一致
# token 設置在了環(huán)境變量里
jupyter-dashboards-server --KERNEL_GATEWAY_URL=http://{kernal}:8888
  • kernal gateway

這個是在 dashboard_server 和 jupyter server 之間的一道橋梁。它和jupyter server的連接方式比較神奇,應該是通過jupyter 內核來通信,也就是?二者需要在同一臺機器上即可。

但是最合理的方式是,kernal gateway 和 jupyter 在同一目錄下,統(tǒng)一端口上啟動,否則將會有一些模板加載等小錯,這里更神奇的是同一端口。

jupyter kernelgateway --KernelGatewayApp.ip=0.0.0.0
  • 環(huán)境變量

除了命令行直接傳進去的配置,為了保持獨立性,還需要在環(huán)境變量中增加兩項的設置

export DASHBOARD_SERVER_URL=http://{dash_server_host}:3000
export KG_AUTH_TOKEN='xxxxxxxxxxxxxxxxxxxx' # 與Jupyter Notebook 的驗證Token保持一致

環(huán)境隔離

在安裝這些工具的時候,他們很多是 nbextension,所以啟用的時候注意環(huán)境的隔離
例如 dashboard的啟動方式 jupyter dashboards quick-setup --sys-prefix
這樣就做到與環(huán)境隔離了

Docker當文檔

這一部分,其實我是感覺最精華的一部分。

首先我大概了解了一下 docker是什么

相當于 一臺機器上的 一個 container 容器,虛擬機,跟本機系統(tǒng)環(huán)境無關,能在docker的鏡像中跑成功的程序,一定能在其他機器上跑成功。

我自己按照 dashboards_setup的教程,在本地拉了三個鏡像服務,然后啟動,結果耗時兩小時,發(fā)現可以跑成功

看是看懂了MakeFile的意義,我直接去看了這三個鏡像分別干了什么,notebook 和 dserver 都和我想的一樣

后來發(fā)現困擾我最久的kernal的啟動方式,真實跪了總體配置

kernel_gateway:
   build:
     context: .
     dockerfile: Dockerfile.kernel
     args:
       # pip versioning by default
       # Replace with local tarballs like /src/jupyter_declarativewidgets-someversion.tar.gz
       DECLWIDGETS_PKG: 'jupyter_declarativewidgets==0.7.*'
       IPYWIDGETS_PKG: 'ipywidgets==5.1.*'
   volumes_from:
     - notebook
   environment:
     KG_ALLOW_ORIGIN: '*'

得出的結論是 和 notebook 共享啟動地址

在看具體配置

# run kernel gateway, not notebook server
CMD ["jupyter", "kernelgateway", "--KernelGatewayApp.ip=0.0.0.0"]

得出的結論是用默認端口號,共享端口

之后我再本地按照這種方式啟動了,kernal 直接成功

這件事情讓我得到了很大的啟示,docker 真的很強大,這是最清楚的文檔,能讓機器看懂的文檔,人更能看懂

其他

這個主要是參考,「工具控」| TL001. 裝扮你的Jupyter
, 學了很厲害的幾個小技巧

magic

只要在 notebook 執(zhí)行 %% magic 就能看到介紹
例如

%timeit range(1000)

%env PATH

ipython kernal 預加載

創(chuàng)建配置文件,就能在內核中添加一些預加載的代碼了

ipython profile create

自己添加的代碼如下:

c.InteractiveShellApp.exec_lines = [
        "import pandas as pd",
        "import numpy as np",
        "import scipy.stats as spstats",
        "import scipy as sp",
        "import matplotlib.pyplot as plt",
        "import matplotlib",
        "matplotlib.style.use('ggplot')",
       "%load_ext autoreload",
616    "%autoreload 2"
]

c.IPKernelApp.matplotlib = 'inline'

c.InlineBackend.figure_format = 'retina'



jupyter notebook

jupyter notebook 的配置文件,分為兩種一種是全局的,一種是環(huán)境的,環(huán)境的上面講過了,主要是在 etc 環(huán)境下,全局的就是按照官網的生成文件的方式就能搞定。

jupyter-themes

這是一個很厲害的插件,能實現將Jupyter 設置各種 背景,但是繪圖比較蛋疼,還是以白底jupyter 為主吧

這個知道怎么玩酷炫就好了

# 設置黑色背景
jt -t chesterish
# 恢復原樣
jt -r
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,619評論 15 147
  • 原文鏈接翻譯版鏈接 Jupyter Notebook Jupyther notebook ,也就是一般說的 Ipy...
    Mingooo閱讀 16,466評論 0 36
  • 寫作群里有人推薦未來簡史,微信公號里也有看到未來簡史的讀后感,偶然聽邏輯思維羅胖也說了一嘴。是這個節(jié)目或者是他說的...
    Maria_X閱讀 193評論 4 3
  • 人生有幾次畢業(yè) 幼兒 小學 中學 大學 似乎已完成了學業(yè) 但果真如此嗎? 其實社會大學 永不會畢業(yè) 除非你已不在 ...
    黃土高坡上的風姑娘閱讀 123評論 0 0