Jupyter Notebooks数据科学最佳实践指南

2019 年 3 月 4 日 AI研习社

本文为 AI 研习社编译的技术博客,原标题 :

Bringing the best out of Jupyter Notebooks for Data Science

作者 | Parul Pandey

翻译 | 孙稚昊2           

校对 | 邓普斯•杰弗        审核 | 酱番梨       整理 | 立鱼王

原文链接:

https://towardsdatascience.com/bringing-the-best-out-of-jupyter-notebooks-for-data-science-f0871519ca29

注:本文的相关链接请访问文末二维码



                            照片由 Aaron Burden 在Unsplash上提供

让我们重新审视Jupyter notebook是什么和能解决什么问题

Netflix 致力于为1亿3千万用户提供个性化内容。Netflix的数据科学家和工程师的一个与数据有效交互的工具是Jupyter notebook。Notebook 提供了可合作,可延伸,可扩展,和可复现的数据科学。对于我们来说,Jupyter notebook 是快速制作原型和探索分析的首选。然后,有很多我们没有注意到的东西。许多Jupyter的功能都没被发现,并未被充分使用。然后来看看Jupyter Notebook的许多好功能,它们能提高我们的效率。

内容列表

1. 执行Shell命令

2. Jupyter 主题

3. Notebook 插件

4. Jupyter 组件

5. Qgrid

6. 幻灯片展示

7. 插入URL, PDF 和 Youtube 视频


  1.执行命令行命令

Notebook是新的命令行窗口。

命令行是用文本和电脑交互的手段。最有名的Unix 命令行是 Bash (Bourne Again Shell )。Bash 是大部分现有的Unix系统和Windows的类似Unix 工具里面的默认命令行。

现在,当我们使用python解释器时,我们需要不停地在命令行和IDE 之间切换,当我们需要使用命令行工具时。不过,Jupyter Notebook给了我们在notebook中运行shell命令的能力,在指令前多放一个!就行了。任何命令行的指令都可以在IPython 中运行,只要前面多一个!。

In [1]: !ls
example.jpeg list tmp

In [2]: !pwd
/home/Parul/Desktop/Hello World Folder'

In [3]: !echo "Hello World"
Hello World

我们可以像下面这样把值传入和传出shell 命令:

In [4]: files= !ls

In [5]: print(files)
['example.jpeg', 'list', 'tmp']

In [6]: directory = !pwd

In [7]: print(directory)
['/Users/Parul/Desktop/Hello World Folder']

In [8]: type(directory)
IPython.utils.text.SList

注意,返回结果的数据类型并不是list。


  2. Jupyter 主题

改变你的Jupyter notebook的主题!

如果你厌倦顶着Jupyter notebook的白背景,这些主题会很适合你。有的主题可以突出现实代码。你可以在这里找到Jupyter 的主题。我们来看看。

安装:

pip install jupyterthemes

列出所有主题

现在,可用的主题包括 chesterish, grade3, gruvboxd, gruvboxl monokai, oceans16, onedork, solarizedd ,solarizedl。

# selecting a particular theme

jt -t <name of the theme>
# reverting to original Theme
jt -r
jt -t <name of the theme>
# reverting to original Theme
jt -r

每次更换主题后,你都需要刷新jupyter notebook页面来使主题生效。

同样的指令也可以在Jupyter notebook内执行,只要在前面加上!




左:原本| 中间: Chesterish主题 | 右:solarizedl 主题



  3. Notebook 插件

拓展可能性

Notebook 插件可以让你用与众不同的方式使用Jupyter Notebooks. Notebook 插件 (也叫nbextensions)是在Notebook前端加载的Javascript 模块。这些插件可以修改用户体验和界面。

安装

用conda安装:

conda install -c conda-forge jupyter_nbextensions_configurator

或者用pip安装:

pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install

#incase you get permission errors on MacOS,

pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install --user

现在启动一个Jupyter notebook,你可以看到NBextension 标签,里面有很多选项。点击一个,你就可以看到神奇的事情。


以防你找不到这个标签,另一个小的nbextension选项在菜单的编辑 标签下。


让我们来看看几个有用的插件。

1. Hinterland

Hinterland 可以让你在每敲一次键盘时都弹出代码补全,而不是以前那样要按一次tab键。这使得Jupyter Notebook 的自动补全和主流IDE, 比如PyCharm相同。


2. 代码片段

这个插件在工具栏中增加了一个下拉框,它让你很容易地在代码单元格中插入代码片段。


3. 分割Notebook单元格

这个插件可以把一个单元格分割成左右相连的两个。


4. 内容表格

这个插件会收集所有的标题,并把他们在一个浮动的窗口中展示,作为一个左边框或者一个导航栏。这个插件还是可拖拽,,可缩小且可取消。


5. 标题

可折叠标题使得notebook拥有可以折叠的部分,用标题分割开。如果你有大量混乱的代码,你可以把他们折叠起来,以防不停地向下滑。


6. Autopep8

Autopep8 可以一键重新格式化/美化代码内容。如果你对不停按空格来美化代码感到厌烦,autopep8是你的救星。


   4.Jupyter 组件

让Notebook更具交互性

组件是python里面的事件性类,它们可以在浏览器中显示,经常可以用来做一些控制,比如滑动条,文本框等等。组件可以用来给Notebook制造交互性界面。

安装

# pip
pip install ipywidgets
jupyter nbextension enable --py widgetsnbextension

#
Conda
conda install -c conda-forge ipywidgets

#
Installing ipywidgets with conda automatically enables the extension

让我们来看看一些组件。完整的细节在这个Gtihub项目中。

交互

交互函数(ipywidgets.interact)可以自动地创建一个用户界面(UI)来控制对代码和数据的探索。它是最简单的IPython组件。

# Start with some imports!

from ipywidgets import interact
import ipywidgets as widgets

1.基本组件

def f(x):
return x

# Generate a slider
interact(f, x=10,);


# Booleans generate check-boxes
interact(f, x=True);


# Strings generate text areas
interact(f, x='Hi there!');


2. 高级组件

这里有一些有用的高级组件

播放组件

播放组件用来播放一些动画,通过以一定速度来遍历一列数据。滑动组件的值与播放器相关。

play = widgets.Play(
# interval=10,
value=50,
min=0,
max=100,
step=1,
description="Press play",
disabled=False
)
slider = widgets.IntSlider()
widgets.jslink((play, 'value'), (slider, 'value'))
widgets.HBox([play, slider])


日期选择器

日期选择组件在Chrome 和IE Edge 浏览器中有效。不过现在在Firefox 或者Safari中无效,因为他们不支持HTML 日期输入选项。

description='Pick a Date',
disabled=False
)


颜色选择器

widgets.ColorPicker(
concise=False,
description='Pick a color',
value='blue',
disabled=False
)


菜单

tab_contents = ['P0', 'P1', 'P2', 'P3', 'P4']
children = [widgets.Text(description=name) for name in tab_contents]
tab = widgets.Tab()
tab.children = children
for i in range(len(children)):
tab.set_title(i, str(i))
tab



  5. Qgrid

让数据格更具交互性

Qgrid也是一个Jupyter notebook的组件但主要用在数据格上。它用 SlickGrid 来在Jupyter notebook中生成pandas的DataFrame。这让你可以很直观地通过滑动,排序和过滤来探索数据,还有通过双击单元格来编辑Dataframe中的一条数据。这个Gtihub项目包含更多细节和例子。

安装

用pip来安装:

pip install qgrid
jupyter nbextension enable --py --sys-prefix qgrid

# only required if you have not enabled the ipywidgets nbextension yet
jupyter nbextension enable --py --sys-prefix widgetsnbextension

用conda 来安装:

# only required if you have not added conda-forge to your channels yet
conda config --add channels conda-forge

conda install qgrid



   6.幻灯片显示

代码是交流的有效工具。

Notebook是用来教授和编写可解释代码的有效工具。然而,当我们想要展示我们的作品时,我们要么展示整个notebook (全部的代码),或者借助powerpoint。不必再这样了。Jupyter notebooks 很容易被转化成幻灯片,我们可以很简单地选择哪些要展示,哪些藏起来。

有两种方式把notebook转化为幻灯片:

1. Jupyter Notebook的内置幻灯片选项

打开新的notebook,并打开菜单 View ->Cell Toolbar -> Slidesshow。一个浅灰色的选项在每个单元格上方显示,你可以自定义为幻灯片。


现在进入notebook所在的文件夹,并输入下面的代码

jupyter nbconvert *.ipynb --to slides --post serve

幻灯片在8000端口展示。还有一个.html 文件在同目录下生成,你可以在里面看到幻灯片。


改成黑色背景看起来更适于教课。让我们采用 “onedork”主题,然后再把notebook转化为幻灯片。


这些幻灯片有一个缺点:你可以看到代码,但你不能编辑。RISE插件能解决这个问题。

2. 使用 RISE 插件

RISE 是Reveal.js的缩写-- Jupyter/IPython幻灯片展示插件。它利用 reveal.js来运行幻灯片展示。这很有用,因为它让我们可以不用退出幻灯片模式就运行代码。

安装

  1. 使用conda (推荐):

conda install -c damianavila82 rise

2. 用pip (不推荐)

pip install RISE

然后下面两部来把JS和CSS安装到合适的地方:

jupyter-nbextension install rise --py --sys-prefix

#enable the nbextension:
jupyter-nbextension enable rise --py --sys-prefix

让我们用RISE来运行可交互的幻灯片模式。我们重新打开之前的Jupyter notebook。现在我们看到了一个新的插件叫“进入/退出RISE幻灯片”


点击它,然后就好啦,欢迎进入可交互幻灯片。


看这篇文档来获取更多信息。


   6. 插入链接,PDF文档,和YouTube视频

就在这里展示!

如果你用了IPython的  display 模块来在Jupyter Notebook中展示页面内容,你就没必要打开链接了。

链接

#Note that http urls will not be displayed. Only https are allowed inside the Iframe

from IPython.display import IFrame
IFrame('https://en.wikipedia.org/wiki/HTTPS', width=800, height=450)


PDF 文档

from IPython.display import IFrame
IFrame(', width=800, height=450)


Youtube 视频

from IPython.display import YouTubeVideo

YouTubeVideo('mJeNghZXtMo', width=800, height=300)



  结论

这些都是我从Jupyter Notebooks 中找到的一些有用且值得分享的功能。有些对你来说很浅显,有的可能很陌生。来试试看他们吧。希望它们能节省你的时间,并给你更好的体验。另外,欢迎在下面评论留言。

想要继续查看该篇文章相关链接和参考文献?

点击底部【阅读原文】或长按下方地址/二维码访问:

https://ai.yanxishe.com/page/TextTranslation/1388

登录查看更多
4

相关内容

Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示的程序。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
255+阅读 · 2020年6月10日
专知会员服务
165+阅读 · 2020年6月4日
【实用书】流数据处理,Streaming Data,219页pdf
专知会员服务
76+阅读 · 2020年4月24日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
211+阅读 · 2020年2月21日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
免费!Google Colab现已支持英伟达T4 GPU
新智元
5+阅读 · 2019年4月25日
已删除
将门创投
18+阅读 · 2019年2月18日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
深度学习 | 免费使用Google Colab的GPU云计算平台
沈浩老师
11+阅读 · 2018年2月4日
机器学习实践指南
Linux中国
8+阅读 · 2017年9月28日
Doubly Attentive Transformer Machine Translation
Arxiv
4+阅读 · 2018年7月30日
Arxiv
7+阅读 · 2018年3月22日
Arxiv
8+阅读 · 2018年1月19日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
255+阅读 · 2020年6月10日
专知会员服务
165+阅读 · 2020年6月4日
【实用书】流数据处理,Streaming Data,219页pdf
专知会员服务
76+阅读 · 2020年4月24日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
211+阅读 · 2020年2月21日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
相关资讯
免费!Google Colab现已支持英伟达T4 GPU
新智元
5+阅读 · 2019年4月25日
已删除
将门创投
18+阅读 · 2019年2月18日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
深度学习 | 免费使用Google Colab的GPU云计算平台
沈浩老师
11+阅读 · 2018年2月4日
机器学习实践指南
Linux中国
8+阅读 · 2017年9月28日
Top
微信扫码咨询专知VIP会员