Jupyter Notebook 的 28 个技巧(下)

共 6501字,需浏览 14分钟

 ·

2020-08-11 13:14

我们继续接着上篇文章进行,分享后面的 14 条实用小技巧。

15. IPython Magic - 高分辨率的图形输出

IPython 的魔术命令只需要一行代码,就可以让你的图形输出在 Retina 屏幕(例如新款的 MacBook)上获得双倍的精度。「注意:下面这个例子在非 Retina 的屏幕上不会生效」

x = range(1000)
y = [i ** 2 for i in x]
plt.plot(x,y)
plt.show();
%config InlineBackend.figure_format ='retina'
plt.plot(x,y)
plt.show();

16. 抑制函数的输出内容

有时候在最后一行抑制函数的输出是很方便的,例如在绘图时。要实现整个目标,你只需要在最后添加一个分号就可以。

%matplotlib inline
from matplotlib import pyplot as plt
import numpy
x = numpy.linspace(011000)**1.5
# 这样执行会得到下面的输出和图形。
plt.hist(x)
(array([ 216.126.106.95.87.81.77.73.71.68.]), array([ 0. , 0.10.20.30.40.50.60.70.80.91. ]),
10 Patch objects>)
# 通过添加一个分号在后面,就可以抑制这段输出。
plt.hist(x);

17. 执行 shell 命令

从你的 notebook 中执行 shell 命令是很简单的。你可以直接使用下面的命令去检查当前文件夹中可用的数据集:

!ls *.csv
nba_2016.csv titanic.csv pixar_movies.csv whitehouse_employees.csv

或者去检查和管理包。

!pip install numpy !pip list | grep pandas
Requirement already satisfied (use --upgrade to upgrade): numpy in /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages pandas (0.18.1)

18. 使用 LaTeX 编辑公式

当你在一个 Markdown 的块中写 LaTeX 代码时,它可以使用 MathJax 渲染成目标公式。

这个:

$P(A \mid B) = \frac{P(B \mid A)P(A)}{P(B)}$

将会变成这个:

jupyter-notebook-latex

Markdown 在 notebook 中是很重要的一部分内容,所以不要忘记去使用它丰富的表现能力。

19. 在 notebook 中使用不同的内核运行代码

只要你想,你就可以将不同内核上的代码结合到一个 notebook 中来。

你只需要在每个代码的开始处使用 IPython 的魔术命令,命令内容为你想要使用的内核的名称。

  • %%bash
  • %%HTML
  • %%python2
  • %%python3
  • %%ruby
  • %%perl
%%bash
for i in {1..5}
do echo "i is $i"
done
is 1
is 2
is 3
is 4
is 5

20. 为 Jupyter 安装其它内核

Jupyter 有一个非常好的特性就是可以为不同语言运行内核。举个栗子,下面就是如何去安装和运行 R 内核。

简单选项:使用 Anaconda 安装 R

如果你是使用 Anaconda 来管理你的环境,那么安装 R 就是很简单的事情。只需要运行下面的代码就可以:

conda install -c r r-essentials
复杂选项:手动安装 R 内核

如果你没有使用 Anaconda,这个过程会略微复杂一点。首先,如果你没有安装 R 的话先从 CRAN 中安装 R。

完成上面的安装后,启动 R 控制台并运行下面的命令:

install.packages(c('repr''IRdisplay''crayon''pbdZMQ''devtools'))
devtools::install_github('IRkernel/IRkernel')
IRkernel::installspec() # to register the kernel in the current R installation

21. 在同一个 notebook 中同时运行 R 和 Python

最好的解决方案就是安装 rpy2(还需要一个 R 的工作版本),具体实现可以用 pip 很轻松的完成:

pip install rpy2

你可以同时使用两种语言,甚至在内部传递变量:

%load_ext rpy2.ipython
%R require(ggplot2)
array([1], dtype=int32)
import pandas as pd 
df = pd.DataFrame({
'Letter': ['a''a''a''b''b''b''c''c''c'],
'X': [435217759],
'Y': [043671011913],
'Z': [123123123]
})
%%R -i df ggplot(data = df) + geom_point(aes(x = X, y= Y, color = Letter, size = Z))

实例出处 Revolutions Blog[1]

22. 用另外一种语言写函数

有时候 numpy 的速度还是不太够,我需要去写一些更快的代码。

原则上,你可以在动态库中编译函数并编写 python 装饰器...

但是当这个无聊的部分已经为你完成时,是不是会感觉非常棒?

你可以在 cython 或者 fortran 中写你的函数,然后直接在 python 代码中使用它们。

首先,你需要安装:

!pip install cython fortran-magic
%load_ext Cython
%%cython
def myltiply_by_2(float x):
return 2.0 * x
myltiply_by_2(23.)

我个人比较喜欢使用 fortran,因为当写一些数字运算的函数时非常方便。更多的fortran使用细节[2]你可以在这里查阅。

%load_ext fortranmagic
%%fortran subroutine compute_fortran(x, y, z)
real, intent(in) :: x(:), y(:)
real, intent(out) :: z(size(x, 1))
z = sin(x + y)
end subroutine compute_fortran
compute_fortran([123], [456])

同样还有一些其它系统方法可以加速你的 python 代码。更多的例子点击这里查看:加速python细节[3]

23.  多行光标操作

Jupyter 支持多光标操作,类似于 Sublime Text。按下 Alt 键的同时,直接点击并拖动鼠标选取。

多行光标操作

24. Jupyter-contrib extensions

Jupyter-contrib extensions[4] 是一个扩展包集合,给 Jupyter 提供了更多的功能,例如包括拼写检查和代码格式。

下面的命令将会安装扩展包,和一个基于菜单的配置程序,帮助你在 Jupyter 的主屏幕浏览和启动扩展包。

!pip install https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tarball/master !pip install jupyter_nbextensions_configurator !jupyter contrib nbextension install --user !jupyter nbextensions_configurator enable --user
nbextensions 配置程序

25. 从 Jupyter notebook 创建一个展示结果

Damian Avila 的作品 RISE[5] 可以让你从已有的 notebook 中创建一个 PPT 风格的展示结果。

你可以使用 conda 安装 RISE:

conda install -c damianavila82 rise

或者换成 pip 安装:

pip install RISE

然后运行下面的命令来安装和启用这个扩展包:

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

26. Jupyter 的输出系统

notebook 显示为 HTML,并且代码块的输出也可以是 HTML,因此你可以在输出时返回任何结果:视频/音频/图片。

在这个例子中,我扫描了仓库中包含图片的一个文件夹,并且展示了前五幅缩略图:

import os
from IPython.display import display, Image 
names = [f for f in os.listdir('../images/ml_demonstrations/'if f.endswith('.png')]
for name in names[:5]:
 display(Image('../images/ml_demonstrations/' + name, width=100))

我们可以用 bash 命令创建一个同样的 list,因为魔术命令和 bash 调用返回 python 变量:

names = !ls ../images/ml_demonstrations/*.png names[:5]
['../images/ml_demonstrations/colah_embeddings.png',
'../images/ml_demonstrations/convnetjs.png',
'../images/ml_demonstrations/decision_tree.png',
'../images/ml_demonstrations/decision_tree_in_course.png',
'../images/ml_demonstrations/dream_mnist.png']

27. 大数据分析

有许多方法在查询/处理大数据时是可用的:

  • ipyparallel (以前的 ipython 集群)[6] 在处理 python 中的 map-reduce 操作时,是一个很好的选择。我们在 rep[7] 中使用它并行训练机器学习模型。
  • pyspark[8]
  • spark-sql 魔术命令 %%sql[9]

28. 分享 notebook

分享你的 notebook 最简单的方法就是使用 notebook 文件(.ipynb),但是对那些不使用 Jupyter 的人来说,你仍然有一些其它选择:

  • 使用 File > Download as > HTML 菜单选项来将你的 notebook 转化为 HTML 文件。
  • 上传你的 .ipynb 文件到 Google Colab[10]
  • 以 gists 的形式分享你的 notebook 文件或者上传到 GitHub,无论哪种方式都可以渲染你的 notebook。看这个 git 分享的例子[11]
    • 如果你选择将 notebook 上传到 GitHub 上,你可以使用 mybinder[12] 服务来允许某人有权限访问你的仓库。
  • 利用 jupyterhub[13] 来设置你自己的系统,当你有一个微课或者讲座,但是没有时间去关注学生的机器状况时,这是一个很方便的方法。
  • 把你的 notebook 保存起来(例如 dropbox),然后把链接放到 nbviewer[14]。无论你保存的主机是什么,nbviewer 都会渲染你的 notebook。
  • 使用 File > Download as > PDF 菜单选项来将你的 notebook 保存为一个 PDF。如果你选择这种路线,那我强烈建议你阅读一下这篇 Julius Schulz 的优秀文章:Making publication ready Python notebooks[15]

Reference

[1]

Revolutions Blog: http://blog.revolutionanalytics.com/2016/01/pipelining-r-python.html

[2]

fortran使用细节: http://arogozhnikov.github.io/2015/11/29/using-fortran-from-python.html

[3]

加速python细节: http://arogozhnikov.github.io/2015/09/08/SpeedBenchmarks.html

[4]

Jupyter-contrib extensions: https://github.com/ipython-contrib/jupyter_contrib_nbextensions

[5]

RISE: https://github.com/damianavila/RISE

[6]

ipyparallel (以前的 ipython 集群): https://github.com/ipython/ipyparallel

[7]

rep: https://github.com/yandex/rep

[8]

pyspark: http://www.cloudera.com/documentation/enterprise/5-5-x/topics/spark_ipython.html

[9]

%%sql: https://github.com/jupyter-incubator/sparkmagic

[10]

Google Colab: https://colab.research.google.com/notebooks/intro.ipynb

[11]

git 分享的例子: https://github.com/dataquestio/solutions/blob/master/Mission202Solution.ipynb

[12]

mybinder: http://mybinder.org/

[13]

jupyterhub: https://github.com/jupyterhub/jupyterhub

[14]

nbviewer: http://nbviewer.jupyter.org/

[15]

Making publication ready Python notebooks: http://blog.juliusschulz.de/blog/ultimate-ipython-notebook


长按扫码添加Python小助手进入 

←_←  PY交流群  →_→


▼点击成为社区会员   喜欢就点个在看吧

浏览 14
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报