Python·Jupyter Notebook各种使用方法记录·持续更新


一、 Jupyter NoteBook的安装

1.1 新版本Anaconda自带Jupyter

  • 目前,最新版本的Anaconda是自带Jupyter NoteBook的,不需要再单独安装 

1.2 老版本Anacodna需自己安装Jupyter

Jupyter Notebook安装的官方网站

  • 安装Jupyter Notebook的先决条件:已经安装了python(python 2.7 或者是python3.3)

  • 具体的安装方法:

    • 官方建议利用Anaconda安装Jupyter
    • 安装完成Anaconda后,如果该Anaconda并不自带Jupyter Noterbook,那么,打开cmd,输入:conda install jupyter
  • 这样安装完的jupyter不具有New a terminal的功能 
    经过各种查询才知道,原来是因为windows不具有terminal需要的TTY,所以,windows下的jupyter是不支持Terminal模式的,而且短期内也没有增加这种支持的计划

二、 更改Jupyter notebook的工作空间

2.1 Jupyter的工作空间在哪里指定?

在其配置文件ipython_notebook_config.py中,有如下一句

# The directory to use for notebooks and kernels.
# c.NotebookApp.notebook_dir = u''
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

该句就是用来指定其工作空间的,例如,默认的工作空间是:用户名文件夹,例如,现在想要将工作空间变为D:\Jupyter,那么,需要做如下更改(要记得删掉注释#)

# The directory to use for notebooks and kernels.
c.NotebookApp.notebook_dir = u'D:\Jupyter'
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

注意:路径最后一级后面不要加符号“\”

2.2 如何找到该配置文件?

  • 在cmd中输入jupyter notebook --generate-config
  • 如果该配置文件已经存在,那么,会出现如下信息,从中可以见到配置文件存在的位置,注意,此时,输入N,不要overwrite 
  • 如果该配置文件不存在,那么,将会初始化产生一个配置文件

在cmd中输入:ipython profile create 
可以找到关于jupyter的配置文件的位置

三、Jupyter的各种快捷键

  • 执行当前cell,并自动跳到下一个cell:Shift Enter

  • 执行当前cell,执行后不自动调转到下一个cell:Ctrl-Enter

  • 是当前的cell进入编辑模式:Enter

  • 退出当前cell的编辑模式:Esc

  • 删除当前的cell:双D

  • 为当前的cell加入line number:单L

  • 将当前的cell转化为具有一级标题的maskdown:单1

  • 将当前的cell转化为具有二级标题的maskdown:单2

  • 将当前的cell转化为具有三级标题的maskdown:单3

  • 为一行或者多行添加/取消注释:Crtl /

  • 撤销对某个cell的删除:z

  • 浏览器的各个Tab之间切换:Crtl PgUpCrtl PgDn

  • 快速跳转到首个cell:Crtl Home

  • 快速跳转到最后一个cell:Crtl End

四、Jupyter Notebook如何导入代码

即导入代码到jupyter notebook的cell中

4.1 将本地的.py文件load到jupyter的一个cell中

问题背景:有一个test.py文件,需要将其载入到jupyter的一个cell中 
test.py内容如下:

import caffe
SolverName = "/root/workspace"
sovler = caffe.AdamSolver(SolverName)
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

方法步骤: 
(1)在需要导入该段代码的cell中输入

%load test.py #test.py是当前路径下的一个python文件
  • 1
  • 1

(2)运行该cell 
利用快捷键“Shift+Enter”,可以看到如下结果: 

(3)可以看到,运行后,%load test.py被自动加入了注释符号#,test.py中的所有代码都被load到了当前的cell中

4.2 从网络load代码到jupyter

  • 在cell中输入%load http://.....,然后运行该cell,就会将load后面所对应地址的代码load到当前的cell中;

  • 下面给出一个例子,导入matplotlib中的一个小例子color example code

    • 首先,在想要导入该段代码的cell中输入

      %load test.py #test.py是当前路径下的一个python文件
      • 1
      • 1
    • 然后,Shift+Enter运行,可以看到如下结果: 

      可以看到,运行后,%load test.py被自动加入了注释符号#,test.py中的所有代码都被load到了当前的cell中

五、Jupyter运行python文件

  • 利用jupyter的cell是可以运行python文件的,即在cell中运行如下代码:
%run file.py
  • 1
  • 1

file.py为要运行的python程序,结果会显示在该cell中 

六、Jupyter一些其他琐碎用法

6.1 jupyter的cell可以作为unix command使用

具体方法为:在unitx command前面加入一个感叹号“!”

例子: 
查看python版本:!python --version 
运行python文件:!python myfile.py

6.2 Magic functions

还没有太明白,具体细节见The cell magics in IPython

6.3 获取current working directory

即当前运行的代码所在的路径 
具体方法:current_path = %pwd 
这样得到的current_path就是当前工作路径的字符转

6.4 使用Matplotlib绘图

在Jupyter Notebook中,如果使用Matplotlib绘图,有时是弹不出图像框的,此时,可以在开头加入

%matplotlib inline
  • 1
  • 1

七、Jupyter中的Markdown

参考1 
Markdown 语法手册 (完整整理版)参考

7.1 在jupyter中设置link,需要设置两部分:

  • 要跳到的位置(the destination) 
    需要在要跳转到的位置添加下面语句:

    <a id='the_destination'></a>
    • 1
    • 1

    这里的id取值任意赋值,下面在添加链接时要用

  • 需要添加链接的文字(an internal hyperlink to the destination),即点击该处可以跳转到the destination,在需要添加链接的文字后面加入:

    [需要添加连接的文字](#the_destination)
    • 1
    • 1
  • 下面是一个例子: 
    源码: 

    效果图: 

7.2 为Jupyter Notebook添加目录功能

  • 原始的Jupyter是不支持markdown添加目录功能的
  • 实际上,可以利用Jupyter notebook extensions去使得这种功能实现
  • 具体方法: 
    • 利用Anaconda安装Jupyter Notebook extensions 
      conda install -c conda-forge jupyter_contrib_nbextensions 
    • 打开Jupyter Notebook,在它的(新增的)Nbextensions标签下勾选“Table of Contents(2)” 
    • 打开一个.jpynb文件,发现,目录功能可用了! 

参考文献 
[1] 为Jupyter Notebook添加目录

在数据分析的道路上,你一定曾有过为新发现而激动不已的时刻,此时你急于将自己的发现告诉大家,却遇到了这样的问题:如何将我的分析过程清晰地表述出来呢?

为了能与同行们有效沟通,你需要重现整个分析过程,并将说明文字、代码、图表、公式、结论都整合在一个文档中。显然传统的文本编辑工具并不能满足这一需求,所以这儿隆重推荐一款神器 Jupyter Notebook,不仅能在文档中执行代码,还能以网页形式分享。

下图简单展示了Jupyter Notebook 文档的样式,更多示例可在 nbviewer 中找到。


Jupyter Notebook 文档示例

本文将按如下内容来展开:

一、Jupyter Notebook 介绍

  • 文学编程
  • 历史传承
  • 优点

二、Jupyter Notebook 使用入门

  • 安装
  • 运行
  • 界面

三、Jupyter Notebook 进阶功能

  • 数学公式编辑
  • 幻灯片制作
  • 魔术关键字

一、Jupyter Notebook 介绍

文学编程

在介绍 Jupyter Notebook 之前,让我们先来看一个概念:文学编程 ( Literate programming ),这是由 Donald Knuth 提出的编程方法。传统的结构化编程,人们需要按计算机的逻辑顺序来编写代码;与此相反,文学编程则可以让人们按照自己的思维逻辑来开发程序。

简单来说,文学编程的读者不是机器,而是人。 我们从写出让机器读懂的代码,过渡到向人们解说如何让机器实现我们的想法,其中除了代码,更多的是叙述性的文字、图表等内容。这么一看,这不正是数据分析人员所需要的编码风格么?不仅要当好一个程序员,还得当好一个作家。那么 Jupyter Notebook 就是不可或缺的一款集编程和写作于一体的效率工具。

历史传承

也许说到 Jupyter 你会觉得陌生,但想必你或多或少听过鼎鼎大名的 IPython。其实Jupyter 脱胎于 IPython 项目,IPython 顾名思义,是专注于 Python 的项目,但随着项目发展壮大,已经不仅仅局限于 Python 这一种编程语言了。Jupyter 的名字就很好地释义了这一发展过程,它是 Julia、Python 以及 R 语言的组合,字形相近于木星(Jupiter),而且现在支持的语言也远超这三种了。

优点

以下列举了 Jupyter Notebook 的众多优点:

  • 极其适合数据分析
    想象一下如下混乱的场景:你在终端中运行程序,可视化结果却显示在另一个窗口中,包含函数和类的脚本存在其他文档中,更可恶的是你还需另外写一份说明文档来解释程序如何执行以及结果如何。此时 Jupyter Notebook 从天而降,将所有内容收归一处,你是不是顿觉灵台清明,思路更加清晰了呢?
  • 支持多语言
    也许你习惯使用 R 语言来做数据分析,或者是想用学术界常用的 MATLAB 和 Mathematica,这些都不成问题,只要安装相对应的核(kernel)即可。这里列出了 Jupyter 支持的所有语言,供您参考。
  • 分享便捷
    支持以网页的形式分享,GitHub 中天然支持 Notebook 展示,也可以通过 nbviewer 分享你的文档。当然也支持导出成 HTML、Markdown 、PDF 等多种格式的文档。
  • 远程运行
    在任何地点都可以通过网络链接远程服务器来实现运算,这里给出一个远程运行的例子,可以体验一下 Jupyter Notebook。
  • 交互式展现
    不仅可以输出图片、视频、数学公式,甚至可以呈现一些互动的可视化内容,比如可以缩放的地图或者是可以旋转的三维模型。这就需要交互式插件(Interactive widgets)来支持,更多内容请参考这里。

二、Jupyter Notebook 使用入门

安装

对于初学者,最简单的方法是安装 Anaconda,因为它自带了 Jupyter Notebook。如果想进一步了解 Anaconda 的使用方法,可参考我的上一篇文章《致Python初学者们 – Anaconda入门使用指南》。

对于有经验的同学,自然使用命令行最为便捷。

如果在 conda 环境中,可以使用如下命令安装:

1
conda install jupyter notebook

或者直接通过 pip 安装:

1
pipinstalljupyternotebook

更多的安装说明请参考官网。

运行

如果使用 Anaconda,可以在其 Navigator 图形界面中点击打开 Notebook。但是最快捷的方法还是在命令行中输入:

1
jupyter notebook

此时你的 Web 浏览器被自动打开,显示文件目录。通过点击右上角的 new 创建新文档。


进入 notebook

而关闭 notebook 文档可以通过选择文件名前的复选框后,点击 Shutdown 按钮实现。如果要关闭整个服务,则在原来的终端中按 Control + C 两次。


退出 notebook

界面

Notebook 文档是由一系列单元(Cell)构成,主要有两种形式的单元:

  • 代码单元:这里是你编写代码的地方,通过按 Shift + Enter 运行代码,其结果显示在本单元下方。代码单元左边有 In [1]: 这样的序列标记,方便人们查看代码的执行次序。
  • Markdown 单元:在这里对文本进行编辑,采用 markdown 的语法规范,可以设置文本格式、插入链接、图片甚至数学公式。同样使用 Shift + Enter 运行 markdown 单元来显示格式化的文本。


Jupyter Notebook 编辑界面

类似于 Linux 的 Vim 编辑器,在 notebook 中也有两种模式:

  • 编辑模式:编辑文本和代码。选中单元并按 Enter 键进入编辑模式,此时单元左侧显示绿色竖线。
  • 命令模式:用于执行键盘输入的快捷命令。通过 Esc 键进入命令模式,此时单元左侧显示蓝色竖线。

如果要使用快捷键,首先按 Esc 键进入命令模式,然后按相应的键实现对文档的操作。比如切换成代码单元(Y)或 markdown 单元(M),或者在本单元的下方增加一单元(B)。查看所有快捷命令可以按H

尽管一开始需要花费一些学习成本,但熟练使用快捷键将大大提高工作效率。试想你在键盘上十指如飞时,如果还需要通过鼠标来操作文档,是不是很影响思考速度呢?


三、Jupyter Notebook 进阶功能

数学公式编辑

如果你曾做过严肃的学术研究,一定对 LaTeX 并不陌生,这简直是写科研论文的必备工具,不但能实现严格的文档排版,而且能编辑复杂的数学公式。在 Jupyter Notebook 的 markdown 单元中我们也可以使用 LaTeX 的语法来插入数学公式。

在文本行中插入数学公式,使用一对 $符号,比如质能方程 $E = mc^2$。如果要插入一个数学区块,则使用一对美元$符号。比如下面公式表示 z=x/y:

1
$$z=frac{x}{y}$$

如何在 notebook 中使用 LaTeX,可进一步参考 A Primer on Using LaTeX in Jupyter Notebooks 这篇文章。

幻灯片制作

既然Jupyter Notebook 擅长展示数据分析的过程,除了通过网页形式分享外,当然也可以将其制作成幻灯片的形式。这里有一个幻灯片示例供参考,其制作风格简洁明晰。

那么如何用 Jupyter Notebook 制作幻灯片呢?首先在 notebook 的菜单栏选择 View > Cell Toolbar > Slideshow,这时在文档的每个单元右上角显示了 Slide Type 的选项。通过设置不同的类型,来控制幻灯片的格式。有如下5中类型:

  • Slide:主页面,通过按左右方向键进行切换。
  • Sub-Slide:副页面,通过按上下方向键进行切换。
  • Fragment:一开始是隐藏的,按空格键或方向键后显示,实现动态效果。
  • Skip:在幻灯片中不显示的单元。
  • Notes:作为演讲者的备忘笔记,也不在幻灯片中显示。


Jupyter Notebook 幻灯片设置

当编写好了幻灯片形式的 notebook,如何来演示呢?这时需要使用 nbconvert

1
jupyternbconvertnotebook.ipynb--toslides--postserve

在命令行中敲入上述代码后,浏览器会自动打开相应的幻灯片。

魔术关键字

魔术关键字(magic keywords),正如其名,是用于控制 notebook 的特殊的命令。它们运行在代码单元中,以 % 或者 %% 开头,前者控制一行,后者控制整个单元。

比如,要得到代码运行的时间,则可以使用 %timeit;如果要在文档中显示 matplotlib 包生成的图形,则使用 % matplotlib inline;如果要做代码调试,则使用 %pdb。但注意这些命令大多是在Python kernel 中适用的,其他 kernel 大多不适用。有许许多多的魔术关键字可以使用,更详细的清单请参考 Built-in magic commands 。

左手程序员,右手作家:你必须会的Jupyter Notebook相关推荐

  1. 30岁程序员的转型思考

    我是程序员,也是老司机.我已过而立之年,也还没过而立之年--年纪是到了,却还没有立,不论是立德.立言还是立功.你问我慌不慌,我问你路在何方. 我当程序员数数日子,八年有余,自封老司机也不算太过分,至少 ...

  2. 程序员中的老司机们,30 后的路该开向哪里?----转自程序人生

    我是程序员,也是老司机.我已过而立之年,也还没过而立之年--年纪是到了,却还没有立,不论是立德.立言还是立功.你问我慌不慌,我问你路在何方. 我当程序员数数日子,八年有余,自封老司机也不算太过分,至少 ...

  3. 【转】30岁程序员的转型思考

    我是程序员,也是老司机.我已过而立之年,也还没过而立之年--年纪是到了,却还没有立,不论是立德.立言还是立功.你问我慌不慌,我问你路在何方. 我当程序员数数日子,八年有余,自封老司机也不算太过分,至少 ...

  4. 30了,程序员中的老司机们,30后的路该开向哪里?

    我是程序员,也是老司机.我已过而立之年,也还没过而立之年--年纪是到了,却还没有立,不论是立德.立言还是立功.你问我慌不慌,我问你路在何方. 我当程序员数数日子,八年有余,自封老司机也不算太过分,至少 ...

  5. 30了,程序员中的老司机们,30后的路该开向哪里

    原文:叶顺平 我是程序员,也是老司机.我已过而立之年,也还没过而立之年--年纪是到了,却还没有立,不论是立德.立言还是立功.你问我慌不慌,我问你路在何方. 我当程序员数数日子,八年有余,自封老司机也不 ...

  6. 10 年了,这个程序员社区终于被收购了!

    SegmentFault (思否)是一个面向中文开发者的专业技术社区,国内的程序员小伙伴应该都知道的,其原型来自于国外最大的程序员问答社区 StackOverflow. 2012 年 3 月,Segm ...

  7. 程序员生存观察:为什么非要谈理想?我就想挣点钱

    1024是2的十次方,也是二进制计数的基本计量单位之一.资料显示,中国程序员节的诞生是由于从业人员经常周末加班与工作日熬夜,因此部分互联网机构倡议每年10月24日为程序员节,并在这一天建议程序员拒绝加 ...

  8. 是程序员,就用python导出pdf

    为什么80%的码农都做不了架构师?>>>    这两天一直在做课件,我个人一直不太喜欢PPT这个东西--能不用就不用,我个人特别崇尚极简风. 谁让我们是程序员呢,所以就爱上了Jupy ...

  9. 《无码的青春》第四章 程序员的二象性,左手流氓,右手疯子

    "道哥,你都30了,怎么还不考虑成家的事情啊",张小凡问到. 其实他不了解道哥的过去,当年道哥搞javaABC论坛的时候,有一个javaABC官方扯淡群,里面聚集了一群程序员,从不 ...

最新文章

  1. Nature:梁冠翔等发现肠道病毒组在新生儿体内分段寄生的模式
  2. Nginx — Overview
  3. Caffe学习系列(2):数据层及参数
  4. 【置顶】方立勋JavaWeb学习地址
  5. C语言实现排名算法和排位算法
  6. GIS二次开发之上一个视图/下一个视图
  7. vue方法传值到data_Vue组件创建和传值的方法
  8. Python项目实践:文本词频统计、软文的诗词风
  9. python之zip
  10. 重庆高考成绩查询2021时间几号,2021重庆高考时间是几号
  11. 字符串是通过“引用”传递的
  12. bbsmax 2.0 的前世今生,这几年喳喳鸟都在做什么?
  13. QTcpSocket
  14. 使用Excel制作公众号数据看板
  15. 新浪微博视频下载教程
  16. ERP在企业财务管理中的应用
  17. 黑苹果入门:必备工具篇
  18. jsp铁路交通查询系统
  19. LeetCode contest 199 5472. 重新排列字符串 Shuffle String
  20. unable to negotiate with xxxxx port xxx: no matching host key type found. Their offer: ssh-rsa

热门文章

  1. 小小flash动画_flash宣传动画视频能给公司品牌传播带来什么
  2. java测试不成功_为什么我的Java布尔测试总是失败?
  3. 声卡硬件测试软件,RMAA声卡检测(RightMark Audio Analyzer)
  4. 输入年月日,判断为该年的第几天
  5. 如何查看别人公众号自定义菜单的功能_如何注册自己的个人公众号?手把手教您开启自媒体赚钱之路?...
  6. 电脑基础操作_学打碟基础技术 - 数码打碟篇
  7. python精简笔记(五)——函数式编程
  8. Nexus3 使用root无法启动解决
  9. 在eclipse中搭建maven工程(第二种方法)
  10. 关于oracle spfile配置文件问题