大数据程序员

Jupyter DashBoards 另类全家桶

2017-06-11  本文已影响1405人  ClarkMMM

概述

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

基于Jupyter的仪表盘,非常Nice的功能,可以实现定制化,可视化与代码的分离

然后在这个基础上依次修正以及补充,基于Jupyter的一些误区和知识

本机的环境是 py3jupyter

感觉今天最大的收货是对学会看 docker 的配置文件 + 学会查找 github issue

插件-nb extensions

Git项目地址是,nbextensions 以及 nbextensions_configurator。前者是各类型有用的插件,后者是能够直接在Jupyter 上图形话调节界面的功能。

这里今天得到的收获主要是基于虚拟环境的一个配置问题

在官网上,安装完 nbextensions 之后,本质是将一
大堆插件放在下面目录下

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

接下来进行插件激活和路径指定,官网上的提示使用的是

jupyter contrib nbextension install --user

如果这么操作的话,是在用户目录 例如 /home/user/.jupyter 下面生成 nbextensions 的配置, 这会导致环境不隔离的情况。

正确的做法,切换到新的环境下的jupyter,执行

jupyter contrib nbextension install --sys-prefix

这样就做到只影响该环境下的Jupyter,在某环境下的 /etc/jupyter 文件夹下产生对应的配置文件,nb的 和 notebook的都有,如果对于 notebook的配置有特殊的配置,可以写在这里,例如密码,token等。

如果要删除该内容,install 替换为 uninstall。

如果因为选择的是 users 会导致的问题是 no module named nbextensions,某些和root 环境不一致的环境找不到配置文件

jupynter 版本的问题

2017年06月04日,jupyter notebook 的版本已经升级到了5.0,但是通过 pip 安装的 nbextensions 的插件所写的代码,是4.x的程序,这个通过找 github issues, 发现作者已经在 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

整完这一套,模型开发人员,两行代码就一套定制化的BI系统。这套系统搭建的时候最难的地方是连接

dashboard 连接

这个是一端,启动的时候需要配置一下启动token和Server 的端口,方便和另一端加密验证。

# token 的配置写在了配置文件里
# 端口设置在环境变量中
jupyter notebook

用于HTML展示。有两个主要输入,一个是token作为加密验证的功能,一个是 gateway的地址 http://host:port 即可

# 和 kernal 指定的ip 一致
# token 设置在了环境变量里
jupyter-dashboards-server --KERNEL_GATEWAY_URL=http://{kernal}:8888

这个是在 dashboard_server 和 jupyter server 之间的一道桥梁。它和jupyter server的连接方式比较神奇,应该是通过jupyter 内核来通信,也就是�二者需要在同一台机器上即可。

但是最合理的方式是,kernal gateway 和 jupyter 在同一目录下,统一端口上启动,否则将会有一些模板加载等小错,这里更神奇的是同一端口。

jupyter kernelgateway --KernelGatewayApp.ip=0.0.0.0

除了命令行直接传进去的配置,为了保持独立性,还需要在环境变量中增加两项的设置

export DASHBOARD_SERVER_URL=http://{dash_server_host}:3000
export KG_AUTH_TOKEN='xxxxxxxxxxxxxxxxxxxx' # 与Jupyter Notebook 的验证Token保持一致

环境隔离

在安装这些工具的时候,他们很多是 nbextension,所以启用的时候注意环境的隔离
例如 dashboard的启动方式 jupyter dashboards quick-setup --sys-prefix
这样就做到与环境隔离了

Docker当文档

这一部分,其实我是感觉最精华的一部分。

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

相当于 一台机器上的 一个 container 容器,虚拟机,跟本机系统环境无关,能在docker的镜像中跑成功的程序,一定能在其他机器上跑成功。

我自己按照 dashboards_setup的教程,在本地拉了三个镜像服务,然后启动,结果耗时两小时,发现可以跑成功

看是看懂了MakeFile的意义,我直接去看了这三个镜像分别干了什么,notebook 和 dserver 都和我想的一样

后来发现困扰我最久的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 执行 %% magic 就能看到介绍
例如

%timeit range(1000)

%env PATH

ipython kernal 预加载

创建配置文件,就能在内核中添加一些预加载的代码了

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 的配置文件,分为两种一种是全局的,一种是环境的,环境的上面讲过了,主要是在 etc 环境下,全局的就是按照官网的生成文件的方式就能搞定。

jupyter-themes

这是一个很厉害的插件,能实现将Jupyter 设置各种 背景,但是绘图比较蛋疼,还是以白底jupyter 为主吧

这个知道怎么玩酷炫就好了

# 设置黑色背景
jt -t chesterish
# 恢复原样
jt -r
上一篇下一篇

猜你喜欢

热点阅读