本文有 6437 字,40 截屏
建议阅读 35 分钟
在公众号对话框回复 JNB
获取完整 Jupyter Notebook
0
引言
JuPyteR是三大编程语言Julia、Python 和 R 的缩写,即可以在 Jupyter NoteBook (JNB) 里面编写这三种语言,除此之外,JNB 还支持轻量级别标记语言(Markdown)的功能。本帖结合 Python 语言来介绍 JNB 里面的玩法。
如下图所示,JNB 界面就是一组 cell,在每个 cell 里可以写代码(选 code 模式),也可以写标记语言(选 markdown 模式)。
Code 和 Markdown 模式之间可以用 Ctrl + Y 和 Ctrl + M 快捷键来替换。两者包括的内容总结如下图。
我们分别从代码(code)和标记语言(Markdown)来介绍:
代码:
Python 代码
Shell 指令
Magic 指令
+ 各种骚操作
标记语言:
字体(font)
链接(link)
公式(formula)
图片(image)
视频(video)
网页(HTML)
+ 各种骚操作
首先展示一下在 Markdown Cell 里如何编辑目录,左图是 markdown 语言,右图的最终效果,从语言到最终效果需要按下 Enter 键。
从上图已经可以看出某些符号可产生哪些效果了,比如
# → 标题
** → 粗体
1.2.3 → 要点
等等。别慌,后面都有介绍。
1
Markdown 类操作
1.1
要点
标记语言
解释
第 1 行
第 2 行点击超链接(#toc)回到目录,目录被标记为 "toc"。
第 4 行同样创建超链接将此处标记为 "CV",在后面点击链接会跳到此处。
第 6-12 行用 - 符号来创建非数字型要点。
第 16-19 行用 1,2,3 来创建数字型要点。
最终效果
1.2
公式
标记语言
解释
语法和 Latex 里的一样,只需记得两点:
在文本中加入公式用 $...$
单独加入公式用 \begin{equation}...\end{equation}
最终效果
1.3
字体
字体大小
标记语言
解释
没啥好解释的,几个 # 就是几级标题。
最终效果
字体格式
标记语言
解释
也没啥好解释的,上图讲的够清楚了,记住就行了。
最终效果
字体颜色
标记语言
解释
用 'str'>,str 代表什么颜色的英文单词,调出来的字体就是什么颜色。
最终效果
字体特征
标记语言
解释
用 'str1', size = n, color = 'str2'>,其中
face 控制字体类型
size 控制字体大小
color 控制字体颜色
最终效果
1.4
引用
标记语言
解释
无需解释,记住用 > 就行了,几个 > 就是几层引用。
最终效果
1.5
表格
标记语言
| 内容 | 百分比 |
|---------------|:-------:|
| Python Basic | 10% |
| NumPy | 15% |
| Pandas | 15% |
| SciPy | 10% |
| Matplotlib | 10% |
| Seaborn | 5% |
| PyEcharts | 5% |
| Scikit-Learn | 20% |
最终效果
1.6
图片
插入图片有两种方法:
在 Markdown Cell 里用 img 函数,我们以插入硬盘里图片举例
在 Code Cell 里用 Image 函数,我们以插入网上的图片举例
在 Markdown Cell 里用 img
标记语言
解释
第 1 行在 src 参数设定图片的完整名称,确保图片存在路径中。
第 2 行在 style 参数设定图片的宽和高,注意用 px 作为单位。
第 3 行在 align 参数设定图片位置。最终效果 (不要脸的发了张本人的书的封面)
在 Code Cell 里用 Image()
标记语言
from IPython.display import Image
Image(url= "http://img51.ddimg.cn/99999990102599841.jpg",
width=500, height=1000)
解释
第 1 行引用 Ipython.display 里的 Image 库。
第 2 行在 url 参数设定图片的网址。
第 3 行在 width 和 height 参数设定图片的宽和高。
最终效果 (再不要脸一次)
1.7
视频
标记语言
from IPython.display import YouTubeVideo
YouTubeVideo('9RrMcq-zJcU')
解释
第 1 行引用 Ipython.display 里的 YouTubeVideo 库。
第 2 行调用 YouTubeVideo,并传入视频的链接最后一部分无规律的字符串,如下图。
最终效果(我崇拜的达利奥)
1.8
HTML
标记语言
from IPython.display import HTML
HTML('''
''' +
''.join(['' +
''.join([f'{row},{col} '
for col in range(5)]) +
' ' for row in range(5)]) +
'''
''')
解释
没啥好解释的,记住就完了。不想记也可以,反正用的地方不多。
最终效果
1.9
链接
外链接
标记语言
- Python - https://www.python.org/
- Anaconda - https://anaconda.org/
- NumPy - https://numpy.org/
- Pandas - https://pandas.pydata.org/
- SciPy - https://www.scipy.org/
- Matploitlib - https://matplotlib.org/
- Seaborn - https://seaborn.pydata.org/
- PyEcharts - https://pyecharts.org/#/
- Scikit-Learn - https://scikit-learn.org/stable/
最终效果
内链接
标记语言
[返回个人介绍](#CV)
最终效果
个人介绍处用创建超链接。 [返回个人介绍] 后用(#CV) 形成链接。
2
Code 类操作
2.1
Python 代码
以检查系统和 Python 常用包的版本为例。
# system
import sys
print('System: %s' %sys.version)
# numpy
import numpy
print('numpy: %s' % numpy.__version__)
# pandas
import pandas
print('pandas: %s' % pandas.__version__)
# scipy
import scipy
print('scipy: %s' % scipy.__version__)
# matplotlib
import matplotlib
print('matplotlib: %s' % matplotlib.__version__)
# seaborn
import seaborn
print('seaborn: %s' % seaborn.__version__)
# pyecharts
import pyecharts
print('pyecharts: %s' % pyecharts.__version__)
# scikit-learn
import sklearn
print('sklearn: %s' % sklearn.__version__)
System: 3.7.3 (default, Mar 27 2019, 17:13:21) [MSC v.1915 64 bit (AMD64)]
numpy: 1.17.4
pandas: 0.25.3
scipy: 1.3.1
matplotlib: 3.1.1
seaborn: 0.9.0
pyecharts: 1.3.1
sklearn: 0.22
2.2
Shell 指令
用感叹号 ! 作为前缀,我们用 !cd 和 !dir 来查看路径和其所有文件名。
!cd
C:\Users\oawsy\Desktop\Steven - Business\Python Course\code
!dir
2.3
Magic 指令
用感叹号 % 或 %% 作为前缀,我们可以使用 line magic 和 cell magic。首先用 %lsmagic 来查看所有魔法指令。
%lsmagic
line magic (%)
%timeit L = [n ** 2 for n in range(1000)]
520 µs ± 37.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
cell magic (%%)
%%timeit
L = []
for n in range(1000):
L.append(n ** 2)
571 µs ± 45.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
2.4
查询指令
查询指令可用 ? 和 ?? 前缀,区别是用 ? 可查询某个函数或变量的信息,而用 ?? 还可查询到函数的源代码。
查询内置函数
print?
用 print?? 得到同样结果。由于内置函数的源代码太长,通常不会显示出来。
查询变量
首先定义一个列表
L = [1, 2, 3]
我们可以查询变量的信息。
L?
我们还可以查询变量中方法的信息。
L.insert??
查询自定义函数
定义一个函数 shout() 并带上 docstring '''将 s 喊出来'''
def shout( s='武汉加油' ):
'''将 s 喊出来'''
print(s)
运行得到
shout()
武汉加油
单问号 ? 查询不到自定义函数的源代码。
shout?
双问号 ?? 可查询到自定义函数的源代码。
shout??
2.5
自动完成键
TAB 键
首先定义一个列表
L = [1, 2, 3]
接着我们使用
如果只写个 L. +
如果我们想用 count,但是不知道整个单词怎么拼,可以写 L.c +
如果记得前两个字母,L.co +
如果记得前三个字母,L.cou +
* 通配符
当你只记得某个对象或者其方法的首几位字母,
比如我们想知道 Python 里面所有错误的类型,我们知道它们都是以 Error 结尾,因此写成 *Error,其中 * 代表 0 或 n 个字符。
*Error?
ArithmeticError
AssertionError
AttributeError
...
ValueError
WindowsError
ZeroDivisionError
再比如你想查询 str 中以 r 开头的所有方法,用 r*。
str.r*?
str.replace
str.rfind
str.rindex
str.rjust
str.rpartition
str.rsplit
str.rstrip
再比如你想查询 str 中含 rs 的所有方法,用 *rs*。
str.*rs*?
str.rsplit
str.rstrip
2.6
快捷键
JNB 里面的快捷键太多了,我们列出一些常用的好用的。快捷键分为命令模式(command mode)和编辑模式(edit mode),细分如下:
Ctrl + Enter:运行选的 Cell,运行完选择当前 Cell
Shift + Enter:运行选的 Cell,运行完选择下个 Cell
Alt + Enter:运行选的 Cell,运行在下面插入新的 Cell
Esc + Y: 将 cell 转成 Code 模式
Esc + M: 将 cell 转成 Markdown 模式
Esc + Shift + K(up): 选上面的 cell
Esc + Shift + J(down): 选下面的 cell
Esc + A: 在上面插入新的 cell
Esc + B: 在下面插入新的 cell
Esc + F:查找并替代
Ctrl + ]:缩进
Ctrl + [:取消缩进
Ctrl + /:注释/取消注释
Shift + TAB:提示框
在上面众多快捷键中,我认为 Shift + TAB 最有用,特别是和
假如我们想用 seaborn (sns) 下面的配对图 (pairplot)
首先函数名字都记不清楚,只知道有个 p 字,这时用 sns.p +
接着 pairplot 函数里面要放什么参数也不知道,这时将鼠标放在 pairplot() 的括号中间,按 Shift + TAB 会出来一个提示框,函数里面的参数定义和用法介绍的清清楚楚。
一动图胜千言,如下。
这样你都不需要查看任何外来资料,就凭着自己模糊的记忆一点一点把函数用对(根据个人经验是这样的)。
2.7
黑操作
In 和 Out 对象
注意:需要重启 Notebook 运行得到以下结果。
首先在三个 Cell 运行代码,注意下图左边的 In 和 Out 标注。并不是每个 In 都对应 Out,有些语句没有输出。
打印 In 发现是个列表,有 5 个元素。第 1 个是个空字符串,最后 1 个是 print(In) 本身,中间三个才是有用的。
print(In)
['', 'import math', 'math.exp(1)', 'math.sin(1)', 'print(In)']
打印 Out 发现是个字典,其键(key)就是第 n 个 In 对应的 n,其值(value)就是 Out[n] 对应的值。
print(Out)
{2: 2.718281828459045, 3: 0.8414709848078965}
我们可以对 In 和 Out 进行索引。
print( In[2], Out[2] )
math.exp(1) 2.718281828459045
Out[2] + Out[3]
3.5597528132669414
下划线 _ 保存最新产出
下划线 _ 能保存最新产出不知道把?
双下划线 __ 能保存第二新产出不知道把?
三下划线 ___ 能保存第三新产出不知道把?
看下面代码。
print(_)
3.5597528132669414
print(__)
0.8414709848078965
print(___)
2.718281828459045
由于 print() 函数不产生输出,即在 Cell 前面没有 Out 字眼。这时再打印 Out,发现只有在第 2, 3 和 7 In 才对应的产出。
Out
{2: 2.718281828459045,
3: 0.8414709848078965,
7: 3.5597528132669414}
我们还可以用下划线 _ 来代表 Out,用 _n 来代表 Out[n],代码如下:
_2
2.718281828459045
_7
3.5597528132669414
没问题,如果打印 _4 呢?
_4
报错了,因为 Out 里面没有一个键是 4,即上面第 4 个 In 没有产生 Out。验证一下,确实是这样的。
3
总结
在 Jupyter Notebook 里面我们可以编写 Code,也可以编写 Markdown。
在 Markdown Cell 中可以添加数学公式、表格、要点、链接、图片、视频等,使得整个 Notebook 内容丰富多彩。
在 Code Cell 中可用 Python 编程,还可以执行 Shell 命令和 Magic 命令,还可以玩一下用下划线 _ 和 In/Out 的骚操作。
如果你在编程时啥都记不住,又不想查外部资料,建议你要记住几个操作:
重要假设:你还是能稍微记住一些东西的,比如大概知道 numpy 里面有重塑函数叫 res_p__ 什么的。啥都记不住我建议你不要编程了。
用
用 ?或 ?? 来查看这个函数的 docstring。
用 Shift + TAB 调出提示框,查询函数里每个参数是如何调用的。
You will thank me later!