美文网首页Python3自学 爬虫实战软件开发数据挖掘
左手程序员,右手作家:你必须会的Jupyter Notebook

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

作者: 鱼心DrFish | 来源:发表于2017-03-01 23:45 被阅读24949次

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

    为了能与同行们有效沟通,你需要重现整个分析过程,并将说明文字、代码、图表、公式、结论都整合在一个文档中。显然传统的文本编辑工具并不能满足这一需求,所以这儿隆重推荐一款神器 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 环境中,可以使用如下命令安装:

    conda install jupyter notebook
    

    或者直接通过 pip 安装:

    pip install jupyter notebook
    

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

    运行

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

    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:

    $$ 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

    jupyter nbconvert notebook.ipynb --to slides --post serve
    

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

    魔术关键字

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

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


    相关资源汇总

    本文给出了许多扩展链接供参考,这里汇总如下,供您参考:

    1. Jupyter Notebook 官网
    2. 文学编程 Literate programming
    3. IPython 官网
    4. LaTeX官网
    5. LaTeX 语法:A Primer on Using LaTeX in Jupyter Notebooks
    6. 魔术关键字:Built-in magic commands

    相关文章

      网友评论

      • 谦_8baf:学习了,有帮助,谢谢
      • 丶学兔斯基眯眼看世界_f9d4:请问如何把转换出来的html slides在别的电脑上展示?导出的html文件直接打开发现并没有slides的效果
      • 梦游的猫头鹰:太赞了,真良心!
      • 79e4b8b6de4e:内容不错,学习了
      • 11010tianyi:jupyter nbconvert --to markdown Untitled1.ipynb 这样吗
      • 11010tianyi:麻烦问一下,这个.ipynb您是怎么转成简书文档的!!!微信也可以么?
        鱼心DrFish:file - download -markdown 转化成md格式后再复制粘帖到简书中,简书的编辑模式也要改成md
      • 南乔北笙:我怀疑我学的是假python
        鱼心DrFish:@毕华生 Python之路千千万,Jupyter Notebook更适合数据分析,而非工程师。
      • 开心菠萝蜜:请教个问题, 装了jupyter notebook , 从别的地方下载了一个python源代码文件夹,如何上传到 notebook 环境里运行啊? 使用的 MAC OS 系统。
        鱼心DrFish:@开心菠萝蜜 不需要导入Jupyter环境,直接打开Jupyter,然后从目录中找到你所要打开的文件即可。
      • 赵太一:当编写好了幻灯片形式的 notebook,如何来演示呢?————命令行输入下面代码后,显示没有找到文件
        请问能帮忙解释下原因吗?
        赵太一:@鱼心DrFish 对哦,多谢~~除了犯没有切换目录的低级错误外,还有就是误解了「$ jupyter nbconvert notebook.ipynb --to slides --post serve」的意思,看了nbconvert官方文档才知道我理解错了:sweat: 「$ $ jupyter nbconvert --to FORMAT notebook.ipynb」以为jupyter nbconvert notebook是.ipynb的文件名:stuck_out_tongue:
        鱼心DrFish:@像柴犬的柯基 没有找到文件,是不是你在终端没有进入notebook文件所在的文件夹呢?最好能有你的命令和出错的截图,我才能具体查找原因
      • pnjoe:第二次回看.发现文章里藏着很多珍宝.老师,辛苦了.
        鱼心DrFish:@pnjoe 多谢打赏啦!学习精神可嘉:+1:
      • a87282afe7e7:请问怎么能把编好的内容打印出来?
        鱼心DrFish:你的意思是把jupyter notebook 中的内容打印出来? 可以先保存成网页html格式,然后打印
        a87282afe7e7: @鱼心DrFish 就像在word里打开,然后打印出来,跟着做了一遍,但感觉容易忘,想打印出来
        鱼心DrFish:@烁儿isa 请问你说的"打印出来"是什么意思呢?是输出结果吗?用print函数,然后按crl+shift键
      • 偶然中的必然:请问下出现这种情况是什么原因?
        [I 16:57:54.539 NotebookApp] 0 active kernels
        [I 16:57:54.539 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/?token=cda8a91dffba0df3fead8c6d8f13760150229b10a52a0503
        [I 16:57:54.539 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
        [C 16:57:54.541 NotebookApp]

        Copy/paste this URL into your browser when you connect for the first time,
        to login with a token:
        http://localhost:8888/?token=cda8a91dffba0df3fead8c6d8f13760150229b10a52a0503
        0:97: execution error: “"http://localhost:8888/tree?token=eda0e819b3d165bc0a7e48acf4afdce8efceb7b66c475841"”不理解“open location”信息。 (-1708)
        偶然中的必然:@鱼心DrFish 谢谢 使用jupyter notebook --browser=Safari 已解决
        鱼心DrFish:@_sunday 看下这篇文章的解决办法可行不?http://www.jianshu.com/p/be11a6edb8a6
      • b9c1c07b89f8: 请问一下,我的每个in里没有数字是空的而且也出不来out是怎么回事?
        鱼心DrFish:@小壳动物 客气啦,加油:smile:
        b9c1c07b89f8:@鱼心DrFish 啊啊啊啊啊!谢谢您!我捣鼓了两天了,终于有反应了
        鱼心DrFish:@小壳动物 如果是空的应该是还没有运行,选中后按shift+回车
        如果是星号,说明正在运行中
      • a7d108666957:如何调整jupyter显示字体的大小呢?
        b9c1c07b89f8:请问一下,我的每个in里没有数字是空的而且也出不来out是怎么回事?
        a7d108666957:@鱼心DrFish 问题已解决,谢谢,祝好
        鱼心DrFish:@慕CC 需要修改~/.jupyter/custom/custom.css文件
        比如调整代码的字体大小,改动下方的font-size
        div.container pre{
        font-family: Monaco;
        font-size: 9pt;
        }
        如果没有custom.css文件,可以按下面这个模板创建一个
        https://github.com/titipata/customize_ipython_notebook/blob/master/custom.css
      • xulingxian:厉害
      • Bog5d:我进你简书,本来是想学学如何markdown排版的呢,没曾想到这么多干货呀。 好棒。 :smile::smile:
        鱼心DrFish:@_bobo_ 关于在简书中使用 markdown, 有篇文章还不错 http://www.jianshu.com/p/be0b5a31aca6
      • TheTiger:双手互搏,厉害了,word dr. yu
        鱼心DrFish:@泰阁志 只有像郭靖这样的笨人才能学会的技能:smile:
      • Sharymo:好厉害
      • 木有木生:正在学习

      本文标题:左手程序员,右手作家:你必须会的Jupyter Notebook

      本文链接:https://www.haomeiwen.com/subject/isgqgttx.html