jupyter使用技巧

 

本文包括如下内容

  • 快捷键
  • 魔法命令
  • 扩展
  • 主题设置
  • 制作slides
  • 小工具
  • 其他技巧

基于windows10操作系统。

快捷键

快捷键规律

  • 对文本进行操作的快捷键都是Ctrl Shift Alt等,比如Ctrl + C/V/X/Z/A
  • 对Cell(即jupyter中的单元格)进行操作的快捷键都是Esc,比如Esc + C/V//X/Z

还有一个差别在于,用Ctrl必须和字母同时按下生效,而Esc可以先按,再按字母。

最常用快捷键

Esc + A/B         在上/下方添加Cell
Esc + M           Cell模式设置为 markdown
Esc + D + D       删除单元格
Esc + 1/2/<num>   设置为一/二/n级标题

Ctrl  + Enter     运行当前Cell,选中当前Cell
Shift + Enter     运行当前Cell,选中下一个Cell
Alt   + Enter     运行当前Cell,创建新的Cell并进入编辑模式

Ctrl + /          批量注释与取消注释
Tab               代码提示
Shift + M         合并选中单元格
Shift + Tab       查看函数帮助文档(点击加号可以看详细内容)
Ctrl + F          全局搜索,其实就像在其他网页里搜索一样
Alt + left/right  光标移动到行首/尾

按住Alt拖动鼠标              多行编辑、矩形选框
按住Ctrl在多个位置点击鼠标    多处同时编辑

不那么常用快捷键

Esc + Y           Cell模式设置为 code
Esc + F           Cell内查找和替换
Ctrl + Shift + -  在光标所在位置拆分单元格
Enter             从选中Cell模式进入编辑模式
                  比如Ctrl+Enter后就是选中Cell的模式,再按一下Enter就进入了编辑模式
                  或者Esc+B新建了一个Cell,或Esc+M后,要按一下Enter进入编辑模式

查看更多快捷键可以在菜单栏中选择Help-Keyboard Shortcuts

魔法命令

魔法命令规律

  • 单个百分号表示对这一行有效,放在单行行首
  • 两个百分号表示对这一个Cell有效,放在Cell最开头,单独一行

比如time计算程序运行时间

  1. %time

一个Cell中写入

import time
%time time.sleep(0.5)

输出结果

Wall time: 500 ms

也可以这样

import time
for i in range(10):
    %time time.sleep(0.1)
  1. %%time

一个Cell中写入

%%time
import time
for i in range(10):
    time.sleep(0.1)

运行输出整个Cell的运行时间。

常用的魔法命令

1.matplotlib绘图

%matplotlib inline,一个notebook中只需要运行一次,则之后用matplotlib库作图不需要plt.show()即可把图展示出来。

2.运行py文件

%run hello.py,运行这个文件,就相当于把文件中的代码复制过来跑一遍。文件中导入的库、定义过的变量、函数都会进入到notebook的环境中,这和import不同。

3.调用系统命令

系统命令只需要在前面加一个!即可在jupyter cell中运行,比如windows的cmd命令

!where python

在linux系统中,则可以使用!ls!wget等命令。

也可以用%%bash运行整个Cell的shell命令。

4.导入模块自动更新

有时我们自己写了一个模块,用import导入使用。但是这个模块需要重复修改。修改后重新import是无效的,而每次reload非常麻烦,所以jupyter给我们提供了一个自动更新修改的方式。在笔记本开头运行下面两条命令

%load_ext autoreload
%autoreload 2

则只要模块中函数被更改,再在notebook中调用时,就会自动使用更新后的版本。具体效果可以参考官网

5.列出全局变量

有三个查看当前所有变量的命令

%who      列出所有变量
%who_ls   以列表形式列出所有变量
%whos     展示所有变量更详细的信息

也可以只列出某种类型的变量

%who list
%who function
%who int

个人不那么常用的魔法命令

%lsmagic                展示所有魔法命令
%timeit                 运行100000次测试运行时间(比%time更加准确,避免了单次运行的偶然性)
%qtconsole              调出新的ipython窗口,和当前notebook之间变量可以共享
%prun  %%prun           展示每一步代码的运行时间
%load hello.py          将hello.py这个文件中的代码导入这个Cell
%pycat hello.py         查看hello.py文件内容
%%writefile hello.py    将当前Cell中代码写入hello.py文件中

还有一个%store,可以在两个notebook之间传递变量

在一个notebook中运行

a = 1
%store a

在另一个notebook中运行

%store -r a

则可以在新notebook中调用a变量。

更多命令参考官网

扩展

jupyter的扩展包含着非常多实用功能,在命令行中运行下面一条命令即可完成安装

conda install -c conda-forge jupyter_contrib_nbextensions

安装完成后打开jupyter会发现界面多了extension选项卡

里面有非常多扩展可以选择。点击其中一项,下方会展示该扩展的介绍,勾选前面的框则启用该功能。

个人认为有必要一个一个尝试这些扩展,因为绝大多数都很有用,可以根据使用习惯选择其中一部分。下面列举一些我常用的扩展(按重要性排序)

Table of Contents          侧边栏展示目录 
Collapsible Headings       折叠标题
Snippets                   代码片段
Hightlight selected word   高亮和选中词相同的词
Codefolding                代码折叠
Scratchpad                 可以用Ctrl+B调出一个单独的窗口
Notify                     运行比较久的代码,运行结束时提示
zenmode                    更专注的模式
Limit Output               限制输出字符数
2to3 Converter             将python2代码转化为python3

还有许多其他好用的扩展,如Variable Inspector变量查看器,Hinterland动态代码提示,ExecuteTime展示程序运行时间等等,读者可以自己多多挖掘。

选择扩展时如果不小心取消了Nbextensions dashboard tab,则会发现下一次进入jupyter不会显示extension选项卡,因此也难以再设置回来。要调出这个界面,就在浏览器中输入这个链接http://localhost:8888/nbextensions

主题设置

1.jupyterthemes

如果觉得jupyter默认的颜色比较难看,可以更换主题,用jupyterthemes库,有哪些主题可以参考官网

用下面一条命令安装这个库

pip install jupyterthemes

更换主题是在命令行中使用jt这个命令,各种主题的安装详情参考官网,读者可以多尝试,选择自己喜欢的主题。下面是我选择的主题。

jt -t grade3 -T -N

2.更改CSS

换主题后可能还是对一些细节不够满意,这时可以通过修改CSS样式来实现。比如想减小代码行间距和字体,就可以在.jupyter/custom/custom.css文件文件中找到div.CodeMirror pre,修改如下

div.CodeMirror pre {
 font-family: consolas, consolas;
 font-size: 11.5pt;
 line-height: 120%;
 color: #303030;
}

 

制作slides

在notebook中选择view-->cell toolbar-->slideshow,这样每个cell的右上角都可以选择类型

  • Slide配合一级标题,单页作为章标题。通过左右切换
  • Sub-Slide配合二级标题,作为页标题。通过上下切换
  • -直接显示的内容
  • Fragment需要点击才显示的内容(实现动态效果)
  • Skip在生成的slides中不显示
  • Notes备忘,不再slides中显示

制作完成后,比如是abc.ipynb文件,则在该文件所在文件夹中打开命令行输入

jupyter-nbconvert --to slides abc.ipynb --reveal-prefix  'https://cdn.bootcss.com/reveal.js/3.5.0' --output abc

即生成了abc.slides.html文件,这就是可以用于展示的slides文件。

不过这样制作slides有一个缺陷,就是文本字体太小,代码字体太大,而且难以调节(无法通过在浏览器中缩放来调整)。

除此之外可以使用扩展RISE,随时预览,且可以在展示时编辑。

小工具

1.进度条

安装tqdm

pip install tqdm

在Cell中运行下面代码

from tqdm import tnrange, tqdm_notebook
from time import sleep

l = list(range(5))

for i in tqdm_notebook(l, desc='first'):
    for j in tnrange(5, desc='second', leave=True):
        sleep(0.1)

会发现每一次循环都有一个进度条。

2.数据科学交互式工具

主要有这两个工具

详细使用方法请参考官网。

3. 嵌入网页/pdf

在Cell中运行下面代码

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

会发现维基百科的页面被嵌入到了notebook里,而且里面的链接都可以在output里跳转,感觉非常酷!

但是有很多网页都无法通过这种方式访问,比如知乎、github、stackoverflow等。

pdf也是可以嵌入的

from IPython.display import IFrame
IFrame('https://arxiv.org/pdf/1512.03385.pdf', width=800, height=450)

其他技巧

1. 不用print即可输出多个变量

比如下面一段代码

a, b = 1, 2
a
b

运行结果只会展示b的值,如果要同时展示a b的值,需要使用print,如下所示

a, b = 1, 2
print(a)
print(b)

如果希望不需要print即可同时输出a b的值,则可以先运行下面这两行代码,则之后在这个笔记本中执行代码都不需要print

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

如果不喜欢这个配置,要改回来只需要

InteractiveShell.ast_node_interactivity = "last"

更多选项参见官网

题外话:如果想直接打变量名不输出,只需要在后面加一个;,这个在plt.hist()的使用中比较有用。

2. 默认执行代码

本节分为两个部分:修改默认配置,默认执行代码。

像上一节的print配置,如果希望对所有notebook都适用,不用每次都重新指定,可以在配置文件中修改。只需要在~/.ipython/profile_default/ipython_config.py文件中添加

c = get_config()
c.InteractiveShell.ast_node_interactivity = "all"

保存后重新打开notebook会发现这些配置自动生效。

(如果该路径下没有这个文件则创建一个,用这条命令ipython profile create

配置这个文件的另一个功能是执行默认代码,即有一些代码希望在每一个notebook都默认执行时,可以像这样写入配置文件

c.InteractiveShellApp.exec_lines = [
 'import sys; sys.path.append("C:\\Miniconda3\\Lib\\site-packages")',
 'import matplotlib.pyplot as plt; %matplotlib inline'
]

3. 将ipynb文件转化为py文件

文本内容全部变成注释

ipython nbconvert --to python abc.ipynb

另一种方式:在notebook页面菜单中选择 File-->Download as-->py

4.自定义快捷键:复制当前行到下一行

用文本编辑器时可能对一个快捷键产生了习惯:Shift + Alt + Up/Down,可以将当前行复制到上一行或下一行。而在jupyter中自定义快捷键不是很方便,目前找到了下面一种实现方法。

~/.jupyter/custom/custom.js这个文件中加入

CodeMirror.keyMap.pcDefault["Shift-Alt-Down"] = function(cm){

    // get a position of a current cursor in a current cell
    var current_cursor = cm.doc.getCursor();

    // read a content from a line where is the current cursor
    var line_content = cm.doc.getLine(current_cursor.line);

    // go to the end the current line
    CodeMirror.commands.goLineEnd(cm);

    // make a break for a new line
    CodeMirror.commands.newlineAndIndent(cm);

    // filled a content of the new line content from line above it
    cm.doc.replaceSelection(line_content);

    // restore position cursor on the new line
    cm.doc.setCursor(current_cursor.line + 1, current_cursor.ch);
};

即可实现Shift + Alt + Down,将当前行复制到下一行。这部分是参考的stackoverflow

另外,jupyter中是可以通过javascript自定义快捷键的,详情参考官网

  • 12
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值