Jupyter Notebook 的 28 个技巧(下)
我们继续接着上篇文章进行,分享后面的 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(0, 1, 1000)**1.5
# 这样执行会得到下面的输出和图形。
plt.hist(x)
(array([ 216., 126., 106., 95., 87., 81., 77., 73., 71., 68.]), array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]),
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)}$
将会变成这个:
Markdown 在 notebook 中是很重要的一部分内容,所以不要忘记去使用它丰富的表现能力。
19. 在 notebook 中使用不同的内核运行代码
只要你想,你就可以将不同内核上的代码结合到一个 notebook 中来。
你只需要在每个代码的开始处使用 IPython 的魔术命令,命令内容为你想要使用的内核的名称。
%%bash
%%HTML
%%python2
%%python3
%%ruby
%%perl
%%bash
for i in {1..5}
do echo "i is $i"
done
i is 1
i is 2
i is 3
i is 4
i 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': [4, 3, 5, 2, 1, 7, 7, 5, 9],
'Y': [0, 4, 3, 6, 7, 10, 11, 9, 13],
'Z': [1, 2, 3, 1, 2, 3, 1, 2, 3]
})
%%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([1, 2, 3], [4, 5, 6])
同样还有一些其它系统方法可以加速你的 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
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
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交流群 →_→
▼点击成为社区会员 喜欢就点个在看吧