ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

可视化运行Python的神器Jupyter Notebook

可视化运行Python的神器Jupyter Notebook 简介若我们期望运行, 一般存在两种途径, 其一为于或者的解释器环境里开展交互式运行, 另外一种途径即为程序员最为青睐的编写.py 文件, 于该文件内撰写代码, 随后启动运行。设想一下, 倘若我们要去撰写一篇带着内容的文章, 这篇文章内含有代码部分, 甚至还期望此代码能够在当下所浏览的页面之上达成运行的效果, 诸如这样的情况, 究竟能不能够得以实现呢。可以的那就是使用我们今天要介绍的 。项目是从别的项目里分出来的, 在.x以前, 它们俩是一块儿发布的, 在.x之后, 成为一个单独项目来开展开发以及管理, 由于不光能够运行程序它还能够执行其他流程编程语言的运行。包含着三个组成部分, 其中头一个组成部分是一款 web 应用程序, 它能够提供交互式的界面, 在这个交互式界面之内能够运行对应的代码。上图是的交互界面我们可以对文档进行编辑运行等操作。主要的功能如下第二个部分, 便是那个文档, 此文档之中存储着, 将要运行的代码, 以及一些描述信息, 通常情况下, 这个文档是以.ipynb的后缀来进行存储的。存储的文档呈现为json形式, 且经过编码得来。json具备的益处在于, 能够于不同服务器间便利地开展数据交互。中除了有着能运行的代码文件之外, 还能够去存储说明之类的解释性内容, 进而把代码以及解释内容特别完美地融合一下, 它是尤其适宜用来当作学习笔记以供使用的。笔记本借助命令能够导出成多种静态格式, 其中涵盖HTML格式, 还有LaTeX格式, 另外还有PDF格式等种类。另外文档还可以方便的在网络上进行共享。代码运行的核心是第三个部分, 凭借不同的搭配, 能够支持运行多种程序, 像java这款程序, 还有go程序, 也有R程序, 以及ruby程序等等。这些和之间是以Json的形式通过MQ来进行通信的。启动有了文档之后如果我们想要运行文档需要启动 。jupyter notebook默认情况下会开启下面的URL :8888启动的时候还可指定要打开的.ipynb文件jupyter notebook my_notebook.ipynb特定的界面的操控这儿就不再过多阐释了, 大体上跟平常的编译器没多大差别。诸位能够自主去探寻。的结构存在多个的cells, 而每个cell当中有着多行文本输入字段, 能够借由Shift - Enter, 或者工具栏里的播放按钮去执行从中的代码。在这里, cell存在着三种不同的类型, 它们分别是code cells, cells以及raw cells。code cells代码单元能让您去进行编辑以及编写全新代码, 还会对完整语法与制表符予以突出显示。您所运用的编程语言是由内核来决定的, 默认内核运行代码。笔记本关联内核会接收执行代码单元时其中所包括发出送的代码, 之后, 该计算返回的结果会在笔记本里被当成单元格的输出展示出来输出不局限于文本, 有好多其他可能的输出形式, 像图形以及HTML表格, 比如在数据分析包当中用到的表格。我们看一个code cells的例子#%% import numpy as np my_arr np.arange(1000000) my_list list(range(1000000))每个单元格是以 #%% 来进行分隔的。其自身还存有对多元富文本呈现样式的支持性作用, 其中牵涉到的是HTML, 属于JSON范畴之内的, PNG这种格式, JPEG这种格式, SVG那种结构, 以及LaTeX等形式。提供了一个方法我们可以使用来展示要呈现的对象from IPython.display import display将会找寻该对象的、所有具备可能性的展示之类别, 于此中去挑选出一个最为适配的类别来予以展示, 且会把结果存放在文档当中。如果你想展示特定类型的对象那么可以这样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便能够进行展示, 我们同样是可以进行显眼的调用的, 也就是(i)。其他的富文本类型可以参考Image使用方法都是类似的。cells属于一种简洁的标记语言, 运用起来特别容易, 应用范围极其广泛, 故而也对其相应的语法予以支持。先看一个 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 中的语法在中都是可以用的。还支持标准的LaTeX 和 AMS-LaTeX语法。raw cells有一个位置, 它处在原始单元格那里, 是能够用以直接写入输出的, 对于原始单元格当中所含的内容, 不会去进行计算。 。以模块的形式导入某些之时, 我们心欲凭模块的样式予以导入, 然而令人遗憾的是, 其并非属于一个基准的程序, 不过却给出了一些挂钩程序, 借此 致使我们能够便利地予以导入。首先我们需要导入一些基本的API import io, os, sys, types from IPython import get_ipython from nbformat import read from IPython.core.interactiveshell import InteractiveShell接下来需要注册到sys.sys.meta_path.append(NotebookFinder())这个就是定义的钩子。我们看下的定义class NotebookFinder(object): Module finder that locates Jupyter Notebooks def __init__(self): self.loaders {} def find_module(self, fullname, pathNone): nb_path find_notebook(fullname, path) if not nb_path: return key path if path: # lists arent hashable key os.path.sep.join(path) if key not in self.loaders: self.loaders[key] NotebookLoader(path) return self.loaders[key]里面使用了两个重要的方法用来找到和用来加载。看下的定义def find_notebook(fullname, pathNone): find a notebook, given its fully qualified name and an optional path This turns foo.bar into foo/bar.ipynb and tries turning Foo_Bar into Foo Bar if Foo_Bar does 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看下的定义class NotebookLoader(object): Module Loader for Jupyter Notebooks def __init__(self, pathNone): self.shell InteractiveShell.instance() self.path path def 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 object with io.open(path, r, encodingutf-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__ path mod.__loader__ self mod.__dict__[get_ipython] get_ipython sys.modules[fullname] mod # extra work to ensure that magics that would affect the user_ns # actually affect the notebook modules ns save_user_ns self.shell.user_ns self.shell.user_ns mod.__dict__ try: for cell in nb.cells: if cell.cell_type code: # transform the input to executable Python code self.shell.input_transformer_manager.transform_cell(cell.source) # run the code in themodule exec(code, mod.__dict__) finally: self.shell.user_ns save_user_ns return mod有了他们我们就可以直接我们自己编写的了。本文已收录于供你去发现那些, 最为通俗之解读, 最为深刻干巴巴甚多专门内容, 最为简洁之教程, 众多你所不晓得的小技巧
返回列表