1.5 Jupyter
1.5.1 Jupyter介绍
Jupyter项目是一个非盈利的开放源代码项目,2014年从IPython项目中诞生,因为它发展到支持跨所有编程语言的交互式数据科学和科学计算。Jupyter将始终是100%开源软件,免费供所有人使用,并根据修改后的BSD许可证的自由条款发布。
Jupyter是通过Jupyter社区的共识在Github上公开开发的。Jupyter项目的存在是为了开发开放源代码软件、开放标准和跨几十种编程语言的交互式计算服务。Jupyter中最尝试用到的三个组件分别是Ipython,Jupyter Notebook与Jupyter Lab。
Ipython
IPython提供了对Python编程语言的扩展,使交互工作变得方便和高效。这些扩展是在ipython内核中实现的,并且在运行这个内核时,可以在所有ipython前端(笔记本、终端、控制台和qt控制台)中使用。
Jupyter Notebook
Jupyter Notebook是一个开源的Web应用程序,允许您创建和共享包含实时代码、公式、可视化和叙述性文本的文档。用途包括:数据清洗和转换、数值模拟、统计建模、数据可视化、机器学习等。
Jupyter项目的一个主要组成部分是笔记本,一种用于代码、文本(带或不带标记)、数据可视化和其他输出的交互式文档。Jupyter笔记本与内核交互,内核是Jupyter交互式计算协议的任何编程语言的实现。python的Jupyter内核使用ipython系统作为其底层行为。
Jupyter Notebook拥有以下优点:
多种语言支持
该笔记本支持40多种编程语言,包括python、r、julia和scala。
共享笔记本
笔记本可以通过电子邮件、Dropbox、Github和Jupyter笔记本查看器与其他人共享。
交互式输出
您的代码可以生成丰富的交互式输出:HTML、图像、视频、乳胶和自定义MIME类型。
大数据融合
利用来自python、r和scala的大数据工具,如ApacheShark、Pandas、Scikit Learn、Ggplot2、TensorFlow一起探索相同的数据。
1.5 Jupyter Lab
JupyterLab是jupyter项目下一代基于Web的用户界面。Jupyter Lab极大地拓展了Jupyter Notebook的功能,提供了更为优秀的用户体验。使用Jupyter Lab,我们可以同实在一个浏览器界面打开并编辑多个Notebook,Jupyter console和cmd终端(对于*nix来说,是terminal),并且支持预览和编辑更多种类的文件,如diamagnetic文件,Markdown文档,json,yml,csv,等,还可以使用Jupyterlab连接Onedrive等云存储服务,极大得提升了生产力。且Jupyter Lab遵循Jupyter社区指南。
1.5.2 IPython
安装
安装Ipython
安装并在Jupyter中注册Ipython核心:
更多帮助
基本使用
除了ipython命令外,您可以在命令行上启动ipython shell,就像启动常规的python解释器一样:
您可以通过键入任意的python语句并按回车键(或回车键)来执行这些语句。当只在IPython中键入一个变量时,它将呈现对象的字符串表示形式:
许多种类的python对象的格式都是为了更可读或更美观地打印,这与普通的打印方式不同。如果您在标准的python解释器中打印这些数据变量,那么它们的可读性将大大降低:
print函数
IPython还提供了执行任意代码块(通过某种美化的复制粘贴方法)和整个Python脚本的工具。您也可以使用JupyterNotebook来处理较大的代码块。
从表面上看,ipython外壳看起来像是标准终端python解释器(用python调用)的一个不同版本。与标准的python shell相比,它的一个主要改进是标签完成,在许多IDE或其他交互计算分析环境中都可以找到。在shell中输入表达式时,按tab键将在命名空间中搜索与迄今键入的字符匹配的任何变量(对象、函数等)。、
Ipython是Jupyter Notebook与Jupyter Lab的基础,只要掌握了Ipython的用法,就可以轻松的将开发环境迁移到Jupyter Notebook与Jupyter Lab上来。我们鼓励您在Jupyter Labs上对本节代码进行实践。
读取文档
使用计算机编程技术在科学研究和工程应用中解决问题,最频繁的需求之一就是获取文档。在Python中,每一个对象都有一个文档字符串(docstring)的引用。该文档字符串,包含了Python对象的概述、用法等相关信息。使用help()函数可以获取这些对象的使用方法。当help函数作用于函数或者方法时,help函数还可以返回他们的用法。下面让我们使用help()函数获取abs函数的用法.
此外,在Ipython中还可以使用问号”?”获取文档。让我们在Ipython中试试吧!
符号”?”既可以放在行首也可以放至行尾。
在Ipython中获取列表的文档:
如果,我们需要创建自己的函数或自定义对象,希望获取他们的文档,又该怎么做呢?只需要在函数或对象创建语句的第二行以多行注释的形式加入注释,就完成了文档的创建。
我们创建一个计算平方数的函数,并创建文档
查看Dog类的文档:
读取源代码
在Ipython中可以使用双问号”??”获取源代码。
查看square函数的源代码:
查看Dog.showage方法的源代码:
快捷键
Ipython中的快捷键分为四类:导航快捷键、文本输入快捷键、命令历史快捷键与其他快捷键。表2.4对这些快捷键进行了简要的介绍。掌握这些快捷键会使编程工作事半功倍。如果您拥有*nix下shell或者文本编辑器(Vim、Emacs等)的使用经验,您将会很快上手。
表2.4 Ipython常用快捷键
导航快捷键
Ctrl + a
移动光标至行首
Ctrl + e
移动光标至行尾
Ctrl + b(或方向左键)
向后移动光标
Ctrl + f(或方向右键)
向前移动光标
文本输入快捷键
Backspace
删除前一个字符
Ctrl + d
删除后一个字符
Ctrl + u
从行首剪切字符至光标
Ctrl + k
从光标剪切字符至行尾
Ctrl + y
粘贴文本
Ctrl + t
交换前两个字符
命令历史快捷键
Ctrl + p(或方向上键)
获取前一个历史命令
Ctrl + n(或方向下键)
获取后一个历史命令
Ctrl +r
对历史命令的反向搜索
其他快捷键
Ctrl + l
清除终端内容
Ctrl + c
中断命令
Ctrl + d
退出Ipython会话
I/O记录
除了使用Ctrl+p和Ctrl+n快捷键获取历史命令。Ipython还提供了多种获取历史命令的而输出方式。我们将会在本节对这些命令进行介绍。
IPython输入输出对象
经过前边简单的例子,您可能已经熟悉了IPython的输入输出提示符In[]和Out[]。这些In/Out提示符实际上就是本节所讲的IPython输入输出对象。它们不仅形式美观,还提供了获取输入和输出历史的功能。只需输入希望查看的代码所在的输入或输出提示符,就可以查看输入输出历史:
但不是所有的In[]对象都有一个与之配对的Out[]对象,
还可以使用不带编号的In与Out对象,查看所有输入和输出记录。其中In是一个列表,按照命令的运行顺序记录命令。Out对象是一个字典,字典的键是输入对象的序号,字典的值是输入对象的输出。
输出历史
除了使用Out[]与Outdui想获取输出历史外,还可以通过下划线符号”_”获取历史输出。
使用单下划线,可以查看前一条历史输出,使用双下划线,可以查看前两条历史输出。使用三下划线则可以查看前三条历史输出。
IPython至多支持三条下划线查看历史输出。当需要查看超过三条以上的历史输出时,请使用Out[]对象。
抑制输出
如果不希望某句代码的输出保存在输出历史中,就需要对某一句代码的进行输出抑制。最简单的输出抑制方法就是在代码行末加入一个分号”;”。
值得注意的是,分号仅仅抑制了Ipython的输出,但是并没有抑制代码的运算。
shell命令
Python作为一种解释语言的一大优势在于它的可交互性。就像*nix用户与shell交互的的那样,shell不断将用户命令解释送入内核后运行。然而标准Python解释器下,无法输入shell命令。如果有同时使用python和shell进行开发的需求,那么用户就不得不在标准python解释器与shell之间来回切换。
令人惊喜的是,Ipython提供了执行shell命令的功能。通过在感叹号”!”键入shell命令,Ipython可以像在*nix terminal下那样执行shell命令。
如果读者使用的是windows操作系统,也大可不必沮丧。这得多亏了Bash On windows计划,现在在windows系统中运行*nix shell命令。Bash On Windows是微软的“Microsoft Love Linux”计划中重要的一环,目的是能让Windows用户能在系统中运行Linux子系统(Windows Subsystem for Linux, WSL)。用户只需要将计算机升级到windows10 1709版本之后,就可以直接在Windows中获得原生Linux Bash级别的体验。
魔法命令
我们在前面已经学习了许多Ipython命令,但是最精彩命令的当属于我们本节所讲的 魔法命令(函数)了!您或许能从其他开发工具上使用之前讲过的普通命令,但是Ipython的魔法命令却独树一帜,拥有强大的功能!
魔法命令有两种形式:行魔法(line magic)和单元魔法(cell magic)。行魔法命令使用单个百分号“%“字符作为前缀,作用域为单行代码;单元魔法命令使用两个百分号”%%”作为前缀,作用于多行输入。
表2.5 对常见的Ipython魔法命令进行了简要的介绍。
表2.5 Ipython常用魔法命令
魔法函数帮助
? <magic_function>
查看魔法命令文档
% magic
查看所有魔法命令相关描述,实例
% lsmagic
查看魔法命令列表
代码分析
% time
代码段计时(一次执行)
% timeit
代码段计时(多次执行以获得更高精度)
% prun
使用分析器运行代码
% lprun
使用逐行分析器运行代码
% memit
测量单个语句的内存使用
% mprun
使用逐行内存分析其运行代码
代码调试
%xmode
控制异常
%debug
代码调试
外部代码粘贴
%past
粘贴代码块
%cpast
打开交互式多行输入提示
外部代码执行
% run
执行外部.py代码
接下来我们将对上述部分魔法命令进行介绍。
粘贴代码块
传统的C/C++语言使用括号来控制代码的作用域,在Python中则采用缩进的表示形式来决定代码的作用域。因此,在从其他软件向Ipython解释器粘贴多行代码时,可能会出现缩进错误等错误。使用Ipython的%paste魔法命令可以很好的解决这个问题。而#cpaste则可以打开一个交互式多行输入提示。
shell魔法
当我们通过Ipython操作shell时会发现,我们并不能cd命令来改变的工作路径。这是因为,Ipython中的shell命令都是在一个临时的shell中执行的。例如:
除了%cd魔法名另外,Ipython中还可以使用%ls, %man, %cp, %mv, % cat, %mkdir, %pwd, %dir等*nix shell相关的魔法命令
如果想要省略百分号”%”直接使用shell魔法,可以通过%automagic魔法函数进行翻转,翻转后,Ipython工作环境将变为shell环境,无法进行Python代码交互,但是若在代码前加入”%”后,Ipython将会认为此代码为Python代码,会按照Python语言的解释方法对代码进行解释。
对于一些常见的*nix 命令,不需要调用”%”号,就可以实现对应魔法命令的功能。
执行外部代码
在实际开发中,有时出于代码重用等需要,我们还要使用到.py文件存储的代码。使用%run魔法命令,可以在IPython会话中运行这些代码,而不需要使用标准Python解释器对他们进行执行。让我们使用魔法命令执行例3.1Bubble_sort.py文件(假设该文件位于D:/JupyterDo/source_code_of_.py下)。该文件的功能是:对10个随机数进行排序。
代码分析
IPython提供了许多代码分析魔法命令,如代码计时命令%time,内存分析命令:%memit等。下面我们对这些代码进行逐一介绍。
使用%timeit或%%timeit可以让重复运行单行或整个多行代码来计算代码的平均运行时间。
在大部分情况下,重复操作计魔法命令%timeit时可以提高计算代码运行时间的精度,但是在某些情况下,却会引入额外的误差。如,对一个列表进行排序,第一次运行排序程序时,列表中的元素已经有序,因此接下来的排序操作要比第一次排序操作都要快。
但是这并不意味着%time魔法命令%timeit魔法命令更加精确。%timeit命令会在底层阻止系统调用对于计时过程的干扰操作,如Python的垃圾回收。而time却并不会这么做。因此,如果代码运行时间较长而较短的系统延迟对计时影响较小的话,可以使用%time魔法命令。在一般情况下,%timeit要比%time得出的代码运行时间更少。
魔法命令文档
Ipython中的魔法命令也有文档。可以在魔法命令行首或行末加上问号“?“来获取目标魔法命令的文档:
1.5.2 Jupyter Notebook
安装
激活python环境,若使用conda安装,则键入:
若使用pip安装,则键入:
使用
要启动Jupyter,请在终端运行命令Jupyter notebook:
图
在许多平台上,Jupyter将在默认的Web浏览器中自动打开(除非您以无浏览器启动它)。否则,您可以导航到启动笔记本时打印的httpaddress,这里是http://localhost:8888/。如图2-1所示。
图:
要创建新笔记本,请单击“新建”按钮并选择“python 3”。您应该看到类似图2-2的内容。在Jupyter Notebook中,一对In Out会话被称作一个代码单元(Cell)。单击空代码“cell”并输入一行python代码。然后按shift enter即可执行。
Jupyter Server
许多人使用jupyter作为本地计算环境,但它也可以部署在服务器上并远程访问。下面我们设置Jupyter远程服务器。
打开终端,键入以下命令:
打开ipython,键入以下命令:
输入密码,保存获得加密有的密码
修改家目录下,./jupyter/jupyter_notebook_config.py中的配置,在文件最后添加以下代码:
在本地计算机浏览器中键入http://<JupyterServerIP>:<Port> ,即可访问Jupyter Server,进行远程开发。
虽然jupyter笔记本可以感觉到与ipython shell不同的体验,但是本章中的几乎所有命令和工具都可以在任何一个环境中使用。
2.3.4 Jupyter Lab
安装
激活python环境,若使用conda安装,则键入:
若使用pip安装,则键入:
使用
相较于Jupyter Notebook,Jupyter Lab提供了大量编程实用功能,如分屏操作,终端操作等,还可以对主题进行修改。
Jupter Lab是Jupyter Notebook的进阶,提供超越Jupyter Notebook的体验,极大地提高了生产效率。Jupyter Lab是Python数据科学方面最强大的生产工具。我们建议,在Jupyter Lab上完成数据科学的学习。图[]是Jupyter Lab的开发界面。
图Jupyter Lab开发环境
Last updated
Was this helpful?