机器学习:软件工程方法与实现
上QQ阅读APP看书,第一时间看更新

2.1.3 Jupyter Notebook基础使用和示例

Jupyter Notebook是进行数据分析和探索的非常便利的开发工具,它可以将代码、图表和文档完美集成到一个Web文档中。

1.Jupyter Notebook简介

Jupyter脱胎于IPython项目,近年专注于Python的项目,至今已支持多种编程语言,它使我们从写出让机器读懂的代码过渡到向人们表达想法。Jupyter中除了代码,更多的是叙述性的想法、图表等内容,这正是从事数据相关工作人员需要的开发风格。Jupyter Notebook有众多优点,如下所示。

1)适合数据探索和分析,可以将代码、图表和文档完美集成在一起。

2)支持Python、Julia、R、Ruby、Scala、Go等语言。默认运行内核是Python。如果想使用R语言来做数据分析,或者想用MATLAB,只需要安装相对应的核(kernel)即可。Jupyer支持的核见https://github.com/jupyter/jupyter/wiki/Jupyter-kernels

3)分享便捷:支持以网页形式的分享,在GitHub上支持Notebook展示,也支持nbviewer分享。同时,也支持导出HTML、Markdown、PDF等多种格式的文档。

4)远程运行:可以通过网络链接远程控制Web服务器来操作,官方提供了一个测试环境https://jupyter.org/try作为体验。

5)交互式展示:不仅可以输出图片、视频、数学公式,甚至可以呈现一些互动的可视化内容,比如可以缩放的地图或者可以旋转的三维模型。这就需要交互式插件(Interactive widgets)来支持,更多内容请参考https://jupyter.org/widgets.html

2.Jupyter Notebook的使用

上小节对Jupyter Notebook进行了简单介绍,下面讲解一下Jupyter Notebook服务的启动和基本使用方法。

(1)启动服务

我们可以从命令行(jupyter-notebook)或操作界面启动Jupyter Notebook服务。打开Web浏览器的URL浏览器(默认情况下为http://localhost:8888),如果没有异常,我们会看到如图2-1所示的Jupyter主界面。

图2-1 Jupyter Notebook主界面

Jupyter Notebook主界面顶部的3个选项卡是Files(文件)、Running(运行)和Clusters(集群):

·Files(文件)显示当前“notebook工作文件夹”中的所有文件和文件夹。

·Running(运行)会列出所有正在运行的notebook,可以在该选项卡中管理这些notebook,例如选择对应文件,点击Shutdown按键即可关闭运行的notebook。

·Clusters(集群)一般不会用到,因为过去需要在Clusters中创建多个用于并行计算的内核,而现在这项工作已经由ipyparallel接管了。

点击主界面右上角的New下拉框,选择notebook下Python版本即可创建对应Python版本的notebook文件。创建成功后,在Files(文件)里会展示新创建的notebook文件,点击对应的notebook文件即可运行。

(2)Notebook界面

点击对应的notebook文件即可进入notebook开发界面,如图2-2所示。

notebook文件界面主要构成如下所示。

·notebook文件名称:页面顶部显示的名称(Jupyter标签旁边)反映了.ipynb文件的名称点击其名称会弹出一个对话框,允许重命名它。

·菜单栏:显示可用于操纵notebook功能的不同选项。

·工具栏:通过点击图标,工具栏可以快速执行notebook中最常用的操作。

·代码单元:这里是编写代码的地方,通过快捷键Shift+Enter运行代码,其结果显示在本单元下方。

·Markdown单元:在这里对文本进行编辑,采用markdown的语法规范,可以设置文本格式,插入链接、图片甚至数学公式。同样使用快捷键Shift+Enter运行markdown单元来显示格式化的文本。

图2-2 notebook界面

notebook中有两种模式。

·编辑模式:编辑文本和代码。选中单元并按Enter键进入编辑模式,此时单元左侧显示绿色竖线。

·命令模式:用于执行键盘输入的快捷命令。通过Esc键进入命令模式,此时单元左侧显示蓝色竖线,然后按相应的快捷键实现对文档的操作。比如切换成代码单元(Y键)或markdown单元(M键),在本单元的下方增加一单元(B键),查看所有快捷命令可以按H键。更多操作命令请查看官方文档https://jupyter-notebook.readthedocs.io/en/stable/notebook.html

3.Jupyter多用户

上述的Jupyter是单实例服务,可多人共享,容易造成文件误删或改动,这时候可以考虑使用Jupyter的多用户版本JupyterHub。在安装JupyterHub之前,需要确认如下环境:

·基于Linux或UNIX的系统。

·Python 3.5或更高版本。

·使用操作系统的软件包管理器安装node.js和npm。

·用于HTTPS通信的TLS证书和密钥。

·域名。

安装和启动JupyterHub服务步骤如下所示。

1)执行如下命令安装,确认安装成功。


(base) [root@rule anconda] conda install -c conda-forge jupyterhub 
(base) [root@rule anconda]# jupyterhub -h
Start a multi-user Jupyter Notebook server
......
Arguments that take values are actually convenience aliases to full
Configurables, whose aliases are listed on the help line. For more information
on full configurables, see '--help-all'.
--debug
    set log level to logging.DEBUG (maximize logging output)
--generate-config
    generate default config file

2)创建配置文件。


(base) [root@rule anconda]# jupyterhub --generate-config
Writing default config to: jupyterhub_config.py

3)修改配置文件,根据注释提示,填写相关信息。


(base) [root@rule anconda]# vim jupyterhub_config.py 
c.JupyterHub.ip = '192.168.1.2'    #IP地址
c.JupyterHub.port = 8000           #端口
c.PAMAuthenticator.encoding = 'utf8'
c.LocalAuthenticator.create_system_users = True
c.Authenticator.whitelist = {'user1', 'user2'}    #白名单 
c.Authenticator.admin_users = {'user1'}           #管理员用户 
c.JupyterHub.statsd_prefix = 'jupyterhub'

4)要允许多个用户登录Hub服务器,必须以特权用户身份启动Jupyterhub,例如root。


(base) [root@rule anconda]# nohup jupyterhub --no-ssl > jupyterhub.log &
[1] 14544
(base) [root@rule anconda]# nohup: ignoring input and redirecting stderr to stdout

5)用配置文件里的IP+端口进行访问。更多配置和功能需求请参考官方文档https://jupyterhub.readthedocs.io/en/latest/getting-started/index.html