文章目录

  • 简介
  • Jupyter Notebook
  • 启动notebook server
  • notebook document 的结构
    • code cells
    • markdown cells
    • raw cells
  • 以模块的形式导入Jupyter Notebooks

简介

如果我们想要运行Python,通常有两种方式,第一种方式就是在Python或者IPython的解释器环境中进行交互式运行,还有一种方式就是程序员最喜欢的编写.py文件,在文件中编写python代码,然后运行。

如果我们想写一篇关于Python的文章,文章里面有代码,还希望代码能够在当前页面运行,可不可以做到呢?

可以的,那就是使用我们今天要介绍的Jupyter Notebook。

Jupyter Notebook

Jupyter项目是从Ipython项目中分出去的,在Ipython3.x之前,他们两个是在一起发布的。在Ipython4.x之后,Jupyter作为一个单独的项目进行开发和管理。因为Jupyter不仅仅可以运行Python程序,它还可以执行其他流程编程语言的运行。

Jupyter Notebook包括三个部分,第一个部分是一个web应用程序,提供交互式界面,可以在交互式界面中运行相应的代码。

上图是NoteBook的交互界面,我们可以对文档进行编辑,运行等操作。

主要的功能如下:

  • 在浏览器中进行代码编辑,自动语法突出显示,缩进和制表符完成/自检功能。

  • 从浏览器执行代码的能力,并将计算结果附加到生成它们的代码上。

  • 使用诸如HTML,LaTeX,PNG,SVG等富媒体表示来显示计算结果。例如,可以内嵌包含matplotlib库渲染的具有出版质量的图形。

  • 使用Markdown标记语言在浏览器中对富文本进行的编辑(可以为代码提供注释)不仅限于纯文本。

  • 使用LaTeX轻松在markdown单元中包含数学符号的能力,并由MathJax本地呈现。

第二个部分就是NoteBook的文档了,这个文档存储了要运行的代码和一些描述信息。一般这个文档是以.ipynb的后缀进行存储的。

notebook文档是以json的形式存储的,并用base64进行编码。使用json的好处就是可以在不同的服务器中方便的进行数据的交互。

Notebook documents中除了可运行的代码文件,还可以存储说明等解释性内容,从而将代码和解释内容完美结合,尤其适合做学习笔记使用。

笔记本可以通过nbconvert命令导出为多种静态格式,包括HTML,reStructuredText,LaTeX,PDF等多种格式。

另外文档还可以方便的在网络上进行共享。

第三个部分就是代码运行的核心Kernels,通过不同的Kernels搭配,notebook可以支持运行多种程序。比如:Python,java,go,R,ruby,nodejs等等。

这些Kernels和notebook之间是以Json的形式通过MQ来进行通信的。

启动notebook server

有了文档之后,如果我们想要运行文档,需要启动notebook server。

jupyter notebook

默认情况下会开启下面的URL: http://127.0.0.1:8888

启动的时候还可指定要打开的.ipynb文件:

jupyter notebook my_notebook.ipynb

具体的notebook界面的操作这里就不多介绍了,基本上和普通的编译器差不多。大家可以自行探索。

notebook document 的结构

notebook中包含了多个cells,每个cell中包含了多行文本输入字段,可以通过Shift-Enter 或者工具栏中的播放按钮来执行其中的代码。

这里的cell有三种类型,分别是code cells,markdown cells和raw cells。

code cells

代码单元允许您编辑和编写新代码,并突出显示完整的语法和制表符。 您使用的编程语言取决于内核,默认内核(IPython)运行Python代码。

执行代码单元时,它包含的代码将发送到与笔记本关联的内核。 然后,从该计算返回的结果将在笔记本中显示为单元格的输出。 输出不仅限于文本,还有许多其他可能的输出形式,包括matplotlib图形和HTML表格(例如,在pandas数据分析包中使用的表格)。

我们看一个code cells的例子:

#%%import numpy as np
my_arr = np.arange(1000000)
my_list = list(range(1000000))

每个单元格是以 #%% 来进行分隔的。

Ipython本身还支持多种富文本的展示格式,包括HTML,JSON,PNG,JPEG,SVG,LaTeX等。

Ipython提供了一个display方法,我们可以使用display来展示要呈现的对象:

from IPython.display import display

display(obj) 将会寻找这个对象所有可能的展示类型,并从中挑选一个最适合的类型进行展示,并将结果存储在Notebook文档里面。

如果你想展示特定类型的对象,那么可以这样:

from IPython.display import (display_pretty, display_html, display_jpeg,display_png, display_json, display_latex, display_svg
)

举个展示图片的例子:

from IPython.display import Image
i = Image(filename='../images/ipython_logo.png')
i
display(i)

上面的例子中i包含了一个Image对象,直接调用i即可展示,我们也可以显示的调用display(i)

其他的富文本类型可以参考Image,使用方法都是类似的。

markdown cells

markdown是一种简介的标记语言,使用起来非常简单,使用范围非常广泛,所以notebook document也支持markdown的语法。

先看一个markdown cell的例子:

#%% md```python
$ python
Python 3.6.0 | packaged by conda-forge | (default, Jan 13 2017, 23:17:12)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 5
>>> print(a)
5
```

markdown中的语法在notebook中都是可以用的。

还支持标准的LaTeX 和 AMS-LaTeX语法。

raw cells

原始单元格提供了一个可以直接写入输出的位置。 notebook不会对原始单元格中的内容进行计算。

以模块的形式导入Jupyter Notebooks

有时候我们希望以模块的形式导入Jupyter Notebooks,但是可惜的是,Jupyter Notebooks并不是一个标准的python程序,不过Python提供了一些钩子程序,让我们能够方便的进行导入。

首先,我们需要导入一些基本的API :

import io, os, sys, typesfrom IPython import get_ipython
from nbformat import read
from IPython.core.interactiveshell import InteractiveShell

接下来需要注册NotebookFinder到sys.meta_path:

sys.meta_path.append(NotebookFinder())

这个NotebookFinder就是定义的钩子。

我们看下NotebookFinder的定义:

class NotebookFinder(object):"""Module finder that locates Jupyter Notebooks"""def __init__(self):self.loaders = {}def find_module(self, fullname, path=None):nb_path = find_notebook(fullname, path)if not nb_path:returnkey = pathif path:# lists aren't hashablekey = os.path.sep.join(path)if key not in self.loaders:self.loaders[key] = NotebookLoader(path)return self.loaders[key]

里面使用了两个重要的方法,find_notebook用来找到notebook,和NotebookLoader,用来加载notebook。

看下find_notebook的定义:

def find_notebook(fullname, path=None):"""find a notebook, given its fully qualified name and an optional pathThis turns "foo.bar" into "foo/bar.ipynb"and tries turning "Foo_Bar" into "Foo Bar" if Foo_Bardoes not exist."""name = fullname.rsplit('.', 1)[-1]if not path:path = ['']for d in path:nb_path = os.path.join(d, name + ".ipynb")if os.path.isfile(nb_path):return nb_path# let import Notebook_Name find "Notebook Name.ipynb"nb_path = nb_path.replace("_", " ")if os.path.isfile(nb_path):return nb_path

看下NotebookLoader的定义:

class NotebookLoader(object):"""Module Loader for Jupyter Notebooks"""def __init__(self, path=None):self.shell = InteractiveShell.instance()self.path = pathdef load_module(self, fullname):"""import a notebook as a module"""path = find_notebook(fullname, self.path)print ("importing Jupyter notebook from %s" % path)# load the notebook objectwith io.open(path, 'r', encoding='utf-8') as f:nb = read(f, 4)# create the module and add it to sys.modules# if name in sys.modules:#    return sys.modules[name]mod = types.ModuleType(fullname)mod.__file__ = pathmod.__loader__ = selfmod.__dict__['get_ipython'] = get_ipythonsys.modules[fullname] = mod# extra work to ensure that magics that would affect the user_ns# actually affect the notebook module's nssave_user_ns = self.shell.user_nsself.shell.user_ns = mod.__dict__try:for cell in nb.cells:if cell.cell_type == 'code':# transform the input to executable Pythoncode = self.shell.input_transformer_manager.transform_cell(cell.source)# run the code in themoduleexec(code, mod.__dict__)finally:self.shell.user_ns = save_user_nsreturn mod

有了他们,我们就可以直接import我们自己编写的notebook了。

本文已收录于 http://www.flydean.com/12-jupyter-notebook/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

可视化运行Python的神器Jupyter Notebook相关推荐

  1. python开发笔记软件_图解Python编程神器Jupyter Notebook

    大家好!在本门课程中我会给大家详细讲解鼎鼎大名的Python编程神器Jupyter Notebook.Jupyter Notebook看似简单,实际上功能非常强大,而且有很多实用的小技巧.遗憾的是,目 ...

  2. Python编程神器Jupyter Notebook使用的28个秘诀(附代码)

    来源:大数据 本文约2800字,建议阅读8分钟 本文总结了28种Jupyter Notebook的使用技巧. [ 导读 ]最近做实验一直是用Jupyter Notebook编程,有一种打草稿的便捷感, ...

  3. 视频教程-图解Python编程神器Jupyter Notebook-Python

    图解Python编程神器Jupyter Notebook 曾就职于联想.HTC.阿里巴巴,担任高级软件开发工程师.Team Leader.技术主管.高级技术培训讲师.丰富的Python.Swift.K ...

  4. 学习Python的做笔记神器——Jupyter Notebook

    学习Python的做笔记神器--Jupyter Notebook 给想学好Python的同学们安利一波,Jupyter Notebook是学习Python最好的做笔记环境,没有之一哦. Jupyter ...

  5. Python 基础 之 jupyter notebook 中机器学习的简单入门书写数字识别 demo 操作学习

    Python 基础 之 jupyter notebook 中机器学习的简单入门书写数字识别 demo 操作学习 目录 Python 基础 之 jupyter notebook 中机器学习的简单入门书写 ...

  6. 【Python教程】Jupyter Notebook把一段很长的代码分成多行的解决办法

    Jupyter Notebook把一段很长的代码分成多行的解决办法 使用Jupyter Notebook时经常会遇到一段代码很长 导致代码块向右边延伸了很多 感觉 很! 不! 方! 便! 所以就想把这 ...

  7. python手机版怎么用-QPython,一个在手机上运行Python的神器

    之前安利过一款手机上运行Python的神器Termux,不过Termux的使用比较重,它实际是一款linux系统模拟器,安装好Termux后还要再安装python,并且是全命令行操作,一些读者使用起来 ...

  8. qpython手机版-QPython,一个在手机上运行Python的神器

    之前安利过一款手机上运行Python的神器Termux,不过Termux的使用比较重,它实际是一款linux系统模拟器,安装好Termux后还要再安装python,并且是全命令行操作,一些读者使用起来 ...

  9. django手机访问_在手机上运行Python的神器

    之前安利过一款手机上运行Python的神器Termux,不过Termux的使用比较重,它实际是一款linux系统模拟器,安装好Termux后还要再安装python,并且是全命令行操作,一些读者使用起来 ...

最新文章

  1. 2022-2028年中国中空玻璃聚硫密封胶行业市场研究及前瞻分析报告
  2. Elasticsearch创建雇员目录
  3. mxOutlookBarPro中,button是通过for语句动态生成的,如何取得当前单击button的标题呢?...
  4. .NET 社区 NB,2019 中国 .NET 开发者峰会
  5. Linux里怎么进行路由跟踪,[Linux] traceroute 路由跟踪指令用例
  6. 项目常用工具类整理(一)--时间工具类DateUtil.java
  7. ISO 17799 /27001标准简介
  8. gitter 卸载_最佳Gitter频道:数学
  9. 【PS/PSD】237款日系小清新文艺唯美梦幻手绘插画分层PSD素材
  10. Domain Adaption3
  11. C++:实现量化N阶导数运算测试实例
  12. OSChina 周四乱弹 —— 作为黑洲非人都不能玩游戏了
  13. SpringBoot理解
  14. 倍速增长!裁员潮下小i机器人逆势扩招
  15. 2022年陕西省中级工程师职称评定流程是怎样的,仔细看哦
  16. 《K8S进阶》 (下)
  17. 第十六届全国大学生智能车技术报告要求细则
  18. 素材网站大集合(转)
  19. TeamTalk 牵涉网易泡泡版权,被 Github 下架
  20. ZOJ 3323Somali Pirates

热门文章

  1. 从蓝桥杯来谈Fibonacci数列
  2. 【网络编程】之三、socket网络编程
  3. 手把手教你玩转SOCKET模型:完成端口(Completion Port)详解
  4. Python 中的url,Base64和MD5编码解码的使用
  5. idea下git log乱码问题
  6. 消息中间件(Kafka/RabbitMQ)收录集
  7. 模拟RabbitMQ网络分区
  8. Django模版(二)
  9. 对话美摄科技侯康:提升技术,拓展场景 美摄智能汽车视频处理方案已就位
  10. 来自技术人的呐喊:回归本心,远离内卷