1. 使用 RMarkdown 的 child 参数,进行文档拼接。
  2. 这样拼接以后的笔记方便复习。
  3. 相关问题提交到 Issue

nbdev1 和 nbconvert 完成 Python 上的文学编程,两种都是基于 jupyter notebook,因此以下涉及三部分内容。

3 新建函数

notebook 开头申明

会保存函数lib_name/core.py

产生函数

4 产生 docs 静态页面

样例参考

5 nbconvert

5.1 转成 markdown

指定位置

nbdev 转 md 不行。

UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 1293: illegal multibyte sequence

有 Unicode 的问题。

jupyter notebook convert to markdown using command line

5.6 md 不要 output

## [1] "jupyter nbconvert --to markdown --output-dir tmp --TemplateExporter.exclude_output=True *.ipynb"

6 blackcellmagic

format code in Jupyter Notebook

参考 https://github.com/csurfer/blackcellmagic

申明%load_ext blackcellmagic 然后在 block 中加上%%black run 以后,代码就 reformat 好了。

1

全部 reformat 代码,但是容易报错。

7 notedown

%% 针对的是 block 且是第一行,% 针对的是一行。

“Jupyter Notebooks run on the browser on the localhost. Therefore, they’re OS-independent. In other words, the experience will be the same regardless of whether you’re on a Mac, a PC, or a Linux box.” (Banik 2018)

OS 独立是 Jupyter Notebook 优于 RStudio 等的地方。

8 安装 Jupyter

9 打开 Jupyter Notebook

10 修改打开的默认路径

比如使用Win7系统,文件存C盘,电脑会很卡。 因此如何放到D盘呢? 参考这篇日志cmd中输入命令 jupyter notebook --generate-config2,创建一个.py文档,里面全部是string格式的,也就是不执行任何命令。 打开这个文件, 路径为C:\Users\username\.jupyter\jupyter_notebook_config.py,搜索关键词## The directory to use for notebooks and kernels.,意思是用于notebook的路径,下方有一串代码, #c.NotebookApp.notebook_dir = u'', 先变成 #c.NotebookApp.notebook_dir = u'D:\jupyter', 注意这里放到了D盘的一个文件夹。 然后再变成 c.NotebookApp.notebook_dir = u'D:\jupyter'。 相当于执行这条命令。 这样就修改好了。

注意参考 Stack Overflow 路径不能写成 'D:\jupyter\',这里识别成\''了。

或者直接

11 显示目录

12 重要的快捷键

  • 数字键:将单元格变为标题类型,数字越大标题越小

  • L: 显示代码的行号

  • m: 将单元格变为 markdown 类型,在 markdown 类型的单元格内可以编写文档

    每个输入框按键盘左上角的esc键,再按m键,进入markdown模式。

    • # 表示一级标题
    • ## 表示二级标题
  • y: 将单元格变为代码类型,在代码类型的单元格中输入 Python 代码

  • d: 按两下 d 按键删除单元格

  • z: 撤销最后删除单元格操作

    If you go to “Edit”, there’s an option for “Undo Delete Cells”. (Stack Overflow)

  • a: 在当前单元格之上创建一个新的单元格

  • b: 在当前单元格之下创建一个新的单元格

  • x: 剪切当前单元格

  • c: 复制当前单元格

  • v: 在当前单元格之下粘贴剪切板中的单元格

  • shift+k: 将当前单元格上移

  • shift+j: 将当前单元格下移

  • shift+m: 与下面的单元合并

  • ctrl+/: 让多条代码 comment 化 Stack Overflow

13 Toggle code功能

收起代码,留下markdown、正文、图。

15 调用外部Python脚本

针对 %run%load

%run can execute python code from .py files – this is well-documented behavior. Lesser known is the fact that it can also execute other jupyter notebooks, which can quite useful. (Rogozhnikov 2016) This will replace the contents of the cell with an external script. You can either use a file on your computer as a source, or alternatively a URL. (Rogozhnikov 2016)

%run 既可以执行 Python 脚本,也可以执行 notebook。 这是一个 well-documented behavior,我可以要求大家长期养成这个习惯。

two-hists

two-hists

15.2 Notebook之间传对象

The %store command lets you pass variables between two different notebooks. (Rogozhnikov 2016)

节省相同代码,适合 code smell。

16 查询当前对象

The %who command without any arguments will list all variables that existing in the global scope. Passing a parameter like str will list only variables of that type. (Rogozhnikov 2016)

打印当前的变量,和dir差不多。

17 查询当前 block 执行时间

%%time will give you information about a single run of the code in your cell. (Rogozhnikov 2016)

time.time 包方便,可以进行 code smell 了。

%%timeit uses the Python timeit module which runs a statement 100,000 times (by default) and then provides the mean of the fastest three times. (Rogozhnikov 2016)

只针对一行,且会重复,慎用,不然很慢。

18 导出 block

Using the %%writefile magic saves the contents of that cell to an external file. %pycat does the opposite, and shows you (in a popup) the syntax highlighted contents of an external file. (Rogozhnikov 2016)

非常方便 notebook 导出Python脚本,给调用。

20 rmarkdown convert_ipynb

参考 https://rmarkdown.rstudio.com/docs/reference/convert_ipynb.html

  • Notebook 转 Rmd 可以替代 notedown

启动 R Kernel

Then, you will have to make Jupyter see the newly installed R kernel by installing a kernel spec. To install system-wide, set user to False in the installspec command (Phuriphanvichai 2019)

23 Preview Notebook

  1. 一种是 jupyter nbconvert 出 md 文档,方便大家在 GitHub 上面预览
  2. 一种是打开 GitHub Pages 权限,定义在 master,然后按照文件路径 加上 github.io 在 nbviewer 里面打开

25 快速打开路径和界面

Ctrl + F + Ctrl + Enter快速在 jupyter notebook 界面打开文件和路径。

27 Pair Notebook

参考 https://jupytext.readthedocs.io/en/latest/paired-notebooks.html

Paired notebooks Jupytext can write a given notebook to multiple files. In addition to the original notebook file, Jupytext can save the input cells to a text file — either a script or a Markdown document. Put the text file under version control for a clear commit history. Or refactor the paired script, and reimport the updated input cells by simply refreshing the notebook in Jupyter.

可以保持同一路径里面 py 文件,新生成一个 ipynb 文件。 这样的好处是当 py 文件修改时,ipynb 会自动更新,并且保存 output,方便我们查阅。 同时我们可以在 Jupyter Notebook 执行 py 文件。 并且方便我们在 GitHub 里面讨论 py 文件。notebook 是 JavaScript 不方便讨论。 当然 GitHub 上面有付费的服务,但是我们还不到那个量级,因此先这样折中解决。

在 jupyter notebook,点击 File -> jupytext -> Pair Notebook with ipynb document

29 nbdime

Notebook Merge 反应较慢,但是还不错。

local base remote 三者之间进行选择,他们的关系是

参考文献

abarnert. 2018. “AttributeError: Module ’Attr’ Has No Attribute ’S’.” Stack Overflow. 2018. https://stackoverflow.com/a/49228822/862522.

Banik, Rounak. 2018. Hands-on Recommendation Systems with Python. Packt Publishing.

Masnick, Max. 2015. “How to Hide Code from Cells in Ipython Notebook Visualized with Nbviewer?” 2015. https://stackoverflow.com/questions/27934885/how-to-hide-code-from-cells-in-ipython-notebook-visualized-with-nbviewer.

Phuriphanvichai, Jirapongse. 2019. “Using R on Jupyter Notebook.” Big Data Zone. 2019. https://dzone.com/articles/using-r-on-jupyternbspnotebook.

Rogozhnikov, Alex. 2016. “28 Jupyter Notebook Tips, Tricks, and Shortcuts.” Dataquest Labs, Inc. 2016. https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/.

李中梁. 2019. “Python编程神器Jupyter Notebook使用的28个秘诀.” 机器学习算法工程师. 2019. https://mp.weixin.qq.com/s/TCErnnnJkcPkEK3kf7gF2A.


  1. 从 Jupyter Notebook 上实现,使用 fastai 的 nbdev包。参考 https://github.com/fastai/nbdev

  2. 这里Mac的设置方式一样的。