Jupyter Notebook 是我编程、数据分析和教学的首选。而大多数人常用的功能只停留在运行单元和绘制图表。然而, Jupyter 有一个更深层次的功能很容易被忽略,只要能用好他们,我敢保证可以节省时间并优化你的工作流程。所以我不允许你到现在还不知道!
以下是接下来要分享的十个强大的功能——专业人士使用但很少被拿出来分享的功能。下面我们就一起来看看吧,觉得有用,不妨点个赞支持下云朵君!
1. 真正有用的魔法命令
魔法命令(以%
或 开头%%
)是 Jupyter IPython 内核内置的快捷键。大家都知道%matplotlib inline
,但不妨试试%timeit
。它可以对代码执行时间进行基准测试。想比较排序算法?它能%timeit my_sort(data)
提供真正的见解,无需套用任何样板代码。
更厉害的是:你可以使用%%bash在一个单元格中编写完整的 Bash 脚本。例如需要在Notebook中途检查磁盘空间,只需执行以下操作:
%% bash
df -h
无需切换终端,非常方便。
2. 交互式小部件,无需 JavaScript
使用ipywidgets
,你可以将函数转换为交互式工具。只需用 interact()
包裹它们,即可立即显示滑块或下拉菜单。
from ipywidgets import interact
def f(x):
return x**2
interact(f, x=10)
你敢相信,我曾经在 15 分钟内构建了一个参数调优仪表板。可以看出在快速探索方面,它胜过静态图表。甚至可以将小部件导出为 HTML 并进行分享。
3. 使用 %autoreload 实时重新加载代码
使用 Jupyter 时编辑外部.py
文件似乎是一件非常痛苦又麻烦的事情 ,因此我推荐你直接使用 %autoreload
。
%load_ext autoreload
%autoreload 2
现在,当文件更改时,导入的内容会自动更新。无需每次调整utils.py
后都重新启动内核。
4. 即时文档,无需联网搜索
通常我们在想查看一个函数的含义或使用方法时,此时就需要函数方面的帮助,请在末尾添加一个?。例如:
pd.DataFrame?
想要查看源代码吗?使用??
。
np.linalg.inv??
当我忘记参数或想了解函数功能时,我会经常使用它。相信你应该会使用这个功能的!
5. 可折叠部分 = 更简洁的Notebook
我们通常会在一个 Notebook 中编写了大量的代码,此时大Notebook太乱了。你滚动浏览输出、Markdown、代码块……感觉不堪重负。
安装nbextensions
:
pip install jupyter_contrib_nbextensions
然后启用可折叠标题。现在,你可以使用 Markdown 标题像手风琴一样折叠各个部分。建模时隐藏 EDA。
6. 在一个Notebook中混合多种语言
虽说 Python 很棒,但有时你还是需要 R 或 Julia。只要有合适的内核,Jupyter 就能支持所有这些语言。
我使用 Python 进行数据整理,用 R 进行 ggplot 可视化——所有这些都在一个Notebook里完成。运行起来出奇地流畅。
7. 自定义键盘快捷键
虽然 Jupyter 的默认快捷方式很好,但你也可以创建自己的快捷方式。下面我们看下如何创建。
前往:帮助 → 编辑键盘快捷键
我设置了Ctrl+Shift+R
重启内核(因为我经常这么做)。根据你的工作流程和习惯定制快捷键是非常有必要的。
8. 导出Notebook
共享原始
.ipynb
文件对用户来说稍微有点麻烦,尤其是分享给那些非程序员,如领导,产品经理等等。此时我们就需要想到用于nbconvert
导出干净的PPT报告。
jupyter nbconvert my_notebook.ipynb --to html
你将获得一个精美的 HTML 文件,无需在另一端进行任何设置。你还可以转换为 PDF 或幻灯片。我使用:bash
将杂乱的原型变成了实时幻灯片。
jupyter nbconvert my_notebook.ipynb --to slides --post serve
比 PowerPoint 快得多。
9. 使用 %pdb 进行实时调试
打印语句没问题——直到不行为止。用于%pdb on
启用调试器。
%pdb
当出现错误时,你可以进入交互式 shell。逐步遍历变量。实时检查混乱情况。当你追踪棘手的错误时,这是一个巨大的进步。
10. 在远程服务器上运行 Notebook
工作繁重?别搞坏你的笔记本电脑。在远程机器上运行Notebook,然后将其隧道传输到你的浏览器。
在服务器上:
jupyter notebook --no-browser --port=8889
在你的机器上:
ssh -L 8889:localhost:8889 user@yourserver
在浏览器中打开localhost:8889
。现在,你正在使用具有本地界面的强大服务器。
这些功能不会像新框架那样一闪而过,但它们会提升你使用 Jupyter 的方式。编码更快,调试更智能,呈现更出色。