自Towardsdatascience
作者:Pranjal Chaubey
机器之心编译
参与:Nurchachu Null、张倩
深蓝主题、Conda 环境自由切换、一键生成目录、一键隐藏代码单元……有没有想过 Jupyter Notebook 还可以这么玩?
对全世界的 Python 高手而言,Jupyter Notebook 是目前最流行的编程环境,尤其是对那些从事机器学习和数据科学的人而言。数月前我第一次开始认真研究机器学习时发现了 Jupyter Notebook。刚开始,我因这一切可以在我的浏览器中运行而感到惊讶和开心。但是,不久后我就失望了,老套的 Jupyter Notebook 的界面非常基础,缺乏很多有用的功能。那时候我就决定去寻找一些 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小时内与您取得联系。