Python数据扩展包之IPython和Jupyter

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Julialove102123/article/details/89063152

Jupyter notebook 前身为IPython Notebook

Jupyter的各种快捷键

命令模式 (按键 Esc 开启)

  • Enter : 转入编辑模式
  • Shift-Enter : 运行本单元,选中下个单元
  • Ctrl-Enter : 运行本单元
  • Alt-Enter : 运行本单元,在其下插入新单元
  • Y : 单元转入代码状态
  • M :单元转入markdown状态
  • R : 单元转入raw状态
  • 1 : 设定 1 级标题
  • 2 : 设定 2 级标题
  • 3 : 设定 3 级标题
  • 4 : 设定 4 级标题
  • 5 : 设定 5 级标题
  • 6 : 设定 6 级标题
  • Up : 选中上方单元
  • K : 选中上方单元
  • Down : 选中下方单元
  • J : 选中下方单元
  • Shift-K : 扩大选中上方单元
  • Shift-J : 扩大选中下方单元
  • A : 在上方插入新单元
  • B : 在下方插入新单元
  • X : 剪切选中的单元
  • C : 复制选中的单元
  • Shift-V : 粘贴到上方单元
  • V : 粘贴到下方单元
  • Z : 恢复删除的最后一个单元
  • D,D : 删除选中的单元
  • Shift-M : 合并选中的单元
  • Ctrl-S : 文件存盘
  • S : 文件存盘
  • L : 转换行号
  • O : 转换输出
  • Shift-O : 转换输出滚动
  • Esc : 关闭页面
  • Q : 关闭页面
  • H : 显示快捷键帮助
  • I,I : 中断Notebook内核
  • 0,0 : 重启Notebook内核
  • Shift : 忽略
  • Shift-Space : 向上滚动
  • Space : 向下滚动

编辑模式 ( Enter 键启动)

  • Tab : 代码补全或缩进
  • Shift-Tab : 提示
  • Ctrl-] : 缩进
  • Ctrl-[ : 解除缩进
  • Ctrl-A : 全选
  • Ctrl-Z : 复原
  • Ctrl-Shift-Z : 再做
  • Ctrl-Y : 再做
  • Ctrl-Home : 跳到单元开头
  • Ctrl-Up : 跳到单元开头
  • Ctrl-End : 跳到单元末尾
  • Ctrl-Down : 跳到单元末尾
  • Ctrl-Left : 跳到左边一个字首
  • Ctrl-Right : 跳到右边一个字首
  • Ctrl-Backspace : 删除前面一个字
  • Ctrl-Delete : 删除后面一个字
  • Esc : 进入命令模式
  • Ctrl-M : 进入命令模式
  • Shift-Enter : 运行本单元,选中下一单元
  • Ctrl-Enter : 运行本单元
  • Alt-Enter : 运行本单元,在下面插入一单元
  • Ctrl-Shift-- : 分割单元
  • Ctrl-Shift-Subtract : 分割单元
  • Ctrl-S : 文件存盘
  • Shift : 忽略
  • Up : 光标上移或转入上一单元
  • Down :光标下移或转入下一单元

Jupyter Notebook如何导入代码

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

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

test.py内容如下:

import caffe

SolverName ="/root/workspace"

sovler = caffe.AdamSolver(SolverName)

方法步骤

(1)在需要导入该段代码的cell中输入

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

(2)运行该cell

利用快捷键“Shift+Enter”,可以看到如下结果:

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

2 从网络load代码到jupyter

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

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

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

然后,Shift+Enter运行,可以看到如下结果:

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

Jupyter运行python文件

利用jupyter的cell是可以运行python文件的,即在cell中运行如下代码:

%run file.py

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

Jupyter一些其他用法

1 内省:jupyter的cell可以作为unix command使用

在变量名或命令的前面或后面加一个 “?” 并执行,可以用于显示该对象的一些通用信息,如对象类型、文档字符串等,这就叫做对象内省。这种操作查看到的信息,尤其是函数和类的信息,比通常直接引用变量名然后回车所看到的(__repr__)要好。“?” 的另一个用法是可以搜索 IPython 的命名空间,配合通配符使用效果如下:

  1. In [1]:import numpy as np
  2. In [2]:np.*load*?

  3. np.load

  4. np.loads

  5. np.loadtxt

  6. np.pkgload

使用双问号“??”还可以查看对象的源代码(如果可见的话)。 

在unitx command前面加入一个感叹号“!”

例子:

查看python版本:!python --version

运行python文件:!python myfile.py

2 魔术命令

在 IPython 的会话环境中,所有文件都可以通过 %run 命令来当做脚本执行,并且文件中的变量也会随即导入当前命名空间。即,对于一个模块文件,你对他使用 %run 命令的效果和 from module import * 相同,除非这个模块文件定义了 main 函数(if __name__ == '__main__:'),这种情况下 main 函数还会被执行。

这种以 % 开头的命令在 IPython 中被称为魔术命令,用于加强 shell 的功能。常用的魔术命令有: 

%quickref 显示 IPython 快速参考
%magic 显示所有魔术命令的详细文档
%debug 从最新的异常跟踪的底部进入交互式调试器
%pdb 在异常发生后自动进入调试器
%reset 删除 interactive 命名空间中的全部变量
%run script.py 执行 script.py
%prun statement 通过 cProfile 执行对 statement 的逐行性能分析
%time statement 测试 statement 的执行时间
%timeit statement 多次测试 statement 的执行时间并计算平均值
%who、%who_ls、%whos 显示 interactive 命名空间中定义的变量,信息级别/冗余度可变
%xdel variable 删除 variable,并尝试清除其在 IPython 中的对象上的一切引用
!cmd 在系统 shell 执行 cmd
output=!cmd args 执行cmd 并赋值
%bookmark 使用 IPython 的目录书签系统
%cd direcrory 切换工作目录
%pwd 返回当前工作目录(字符串形式)
%env 返回当前系统变量(以字典形式)

对魔术命令不熟悉的话可以通过 %magic 查看详细文档;对某一个命令不熟悉的话,可以通过 %cmd? 内省机制查看特定文档。值得一提的是,IPython 中使用 del 命令无法删除所有的变量引用,因此垃圾回收机制也无法启用,所以有些时候你会需要使用 %xdel 或者 %reset

3 获取current working directory

即当前运行的代码所在的路径

具体方法:current_path = %pwd

这样得到的current_path就是当前工作路径的字符转

4 使用Matplotlib绘图

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

%matplotlib inline

Jupyter中的Markdown

参考1

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

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

要跳到的位置(the destination)

需要在要跳转到的位置添加下面语句:

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

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

[需要添加连接的文字](#the_destination)

下面是一个例子:

源码:

效果图:

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文件,发现,目录功能可用了!

历史输入和输出变量

与标准 Shell 类似,IPython 中也可以通过 _ 和 __ 访问上一次和上上一次的输出。同时你肯定注意到了,IPython 中每一次的输入输出都有序号。访问历史 X 行输出的方法为:_X;访问历史 X 行输入的方法为:_iX。因为访问历史输出的使用概率较历史输入大很多,所以访问历史输出仅使用下划线加行号即可,同时为了区分,访问历史输入时需添加小写字母 “i”,代表 “in”。

Notebook 的官方信息可以从 ipython.org/notebook 获得,不过好像被墙了。上不去的话也可以访问它的 github 页面,ipython/examples/Notebook 目录下有很多可供参考的内容。前面说过 Notebook 有一种 .ipynb 的文件格式,当你打开这个例程目录下的某个文件后,就能体会到 Notebook 的奇妙之处了。 

演示文档

目前在各种 Python 研讨会上,一种流行的演示手段就是使用 IPython Notebook,然后再将 .ipynb 文件发布到网上以供所有人查阅。除了前面说过的可以内嵌 matplotlib 绘图外,Notebook 还同时提供了对 LaTex 和 MarkDown 的支持!

在此输入图片描述

如上图便展示了一个 .ipynb 文件的示例页面。其中一对 In Out 会话被视作一个单元,称为 cell。第一个 cell 里我写入的内容其实是:

  1. ##LaTex 演示

  2. ---

  3. $Z=\frac{X-\bar{X}}{S}$

分别使用了 MarkDown 和 LaTex 的语法。按下 Shift + Enter 后这段内容就被渲染成了图片中的样子。

cell 特别亲切的地方在于:它可以作为一个类似“段落”的概念来进行编辑,不管是执行前还是执行后,而且既可以针对内容进行编辑,也可以对 cell 整体应用 copy、paste、cut 等操作,甚至还可以前后移动 cell 的位置。这带来的好处是,在大量试验性的交互操作过后,他不会像普通 shell 那样留下无数没用的 IO 内容。如果某条命令的输出不理想或者报了错,你就可以回头编辑后重新运行,或把它移位或干脆删掉。这样在很久的一段交互过程后,Notebook 留下的反而是一份干净整洁的文档。

.ipynb 文件使用的是一种类 JSON 的文本格式,就像这样:

  1. "worksheets": [

  2. {

  3. "cells": [

  4. {

  5. "cell_type": "markdown",

  6. "metadata": {},

  7. "source": [

  8. "##LaTex \u6f14\u793a\n",

  9. "---\n",

  10. "$Z=\\frac{X-\\bar{X}}{S}$"

  11. ]

  12. },

这种交互式计算环境,对绘图、数学公式、简易排版语法的支持,还有一种方便的文档格式,共同帮助 Notebook 成为了 Python 科学计算的理想工具。另外这种使用浏览器和服务进程的 C/S 结构还暗含了一种远程连接可能,抛开安全性不谈的话,其在教学方面也有很高的潜力。 

操作指南

当通过 IPython Notebook.exe 进入应用时,首先打开的是 Home 页面,地址一般为:http://127.0.0.1:8888/tree。Home 目录下会列出所有的历史文件记录,右上角则有一个 “New Notebook” 按钮可以新建一个会话。

在 .ipynb 文件的交互页面,需要注意的除了标准的 IPython 语法外,就是页面抬头处的菜单栏和工具栏了。Notebook 很贴心地提供了非常友好的帮助页面,因此本文不再赘述。基本看完这两个页面(内容很少)后就能对 Notebook 的操作方式了解的差不多。

在此输入图片描述

背景知识补充

2001年,IPython项目起初是一个用以加强和Python交互的子项目。在随后的16年中,它成为了Python数据栈最重要的工具之一。虽然IPython本身没有提供计算和数据分析的工具,它却可以大大提高交互式计算和软件开发的生产率。IPython鼓励“执行-探索”的工作流,区别于其它编程软件的“编辑-编译-运行”的工作流。它还可以方便地访问系统的shell和文件系统。因为大部分的数据分析代码包括探索、试错和重复,IPython可以使工作更快。

2011年,由 Brian Granger 领导的 IPython 团队开始开发一种基于Web技术的交互式计算文档格式,即 IPython Notebook。实际上他即是文档格式又是计算工具。Notebook 在交互上使用了 C/S 结构,它通过 Tornado 建立一个 shell 服务器,并使用浏览器作为客户端。另外 notebook 页面都被保存为 .ipynb 的类 JSON 文件格式。这种文件格式也是 Notebook 最吸引人的地方。

2014年,Fernando和IPython团队宣布了Jupyter项目,一个更宽泛的多语言交互计算工具的计划。IPython notebook变成了Jupyter notebook,现在支持40种编程语言。IPython现在可以作为Jupyter使用Python的内核(一种编程语言模式)。

IPython变成了Jupyter庞大开源项目(一个交互和探索式计算的高效环境)中的一个组件。它最老也是最简单的模式,现在是一个用于编写、测试、调试Python代码的强化shell。你还可以使用通过Jupyter Notebook,一个支持多种语言的交互式网络代码“笔记本”,来使用IPython。IPython shell 和Jupyter notebooks特别适合进行数据探索和可视化。

Jupyter notebooks还可以编写Markdown和HTML内容,提供了一种创建代码和文本的富文本方法。其它编程语言也在Jupyter中植入了内核,好让在Jupyter中可以使用Python另外的语言。

问:jupyter 和 ipython有何区别

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言,其本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等
注1:安装输入:sudo apt install jupyter
注2:启动输入:jupyter notebook

IPython是一个交互式计算系统。主要包含三个组件:增加的交互式 “Python shell”,解耦的双过程通信模型,交互式并行计算的架构。支持变量自动补全。
注1:安装输入:sudo apt install ipython
注2:启动输入:ipython

对我个人而言,我的大部分Python都要用到IPython,包括运行、调试和测试代码。

 IPython

IPython 是一个加强版的交互式 Shell。让 IPython 在各种 shell(IDE) 中脱颖而出,成为科学计算标配的,并不是按 Tab 键代码补完、以 % 开头的魔术命令这些大家都有的东西,而是与 matplotlib 这个数据可视化包的深度集成以及奇妙的Notebook。

IPython 较早的富 GUI 实现应该是 Qt Console。过去在标准shell 里绘图时,弹出的绘图窗口会接管 shell 会话的控制权,你想继续输入命令就必须先把绘图窗口关掉。这对于希望同时实现可视化和交互式过程的数据分析用户来说显然是难以忍受的,因此 Qt console 站出来解决了这个问题。在 Qt console 中通过 matplotlib 绘制的图形会独立嵌于控制台中,并不影响你继续输入命令。IPython Notebook 更详细的介绍在下面第二节中给出,第一节讲的是一些对 IPython 的各种实现通用的功能。 

猜你喜欢

转载自blog.csdn.net/Julialove102123/article/details/89063152