目录

  • IPython 与 Jupyter notebook 简介
  • IPython 基础
  • 使用 IPython 命令行
  • 运行 Jupyter notebook
  • 配置文件
  • Jupyter Notebook 文件默认目录的查看以及更改
  • Tab补全
  • 内省
  • 魔术命令
  • matplotlib集成
  • 使用虚拟环境
  • 更多 IPython 系统相关内容
  • 输入和输出变量
  • 删除变量
  • 与操作系统交互
  • 软件开发工具
  • debug: Python pdb 调试器
  • Python 调试器命令
  • 小例子
  • `set_trace()`, `debug()`
  • 代码分析


IPython 与 Jupyter notebook 简介

  • IPython 项目旨在开发一个更具交互性的 Python 解释器,它使用了一种执行-探索工作流,还提供针对操作系统命令行与文件系统的易用接口
  • Jupyter 项目旨在设计一个适用于更多语言的交互式计算工具。IPython web notebook 则成为 Jupyter notebook。IPython 系统目前可以作为一个内核用于在 Jupyter 中使用 Python
  • 总而言之,IPython 就是一个加强版的 Python 解释器Jupyter notebook 则是一种基于 web 的代码笔记本

IPython 基础

使用 IPython 命令行

$ ipython
Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.8.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

运行 Jupyter notebook

  1. 在本地运行 Jupyter notebook (jupyter notebook 可以作为本地计算环境,也可以部署在服务器端。在服务器中开启 Notebook 服务,即可在本地的浏览器端进行访问)
$ jupyter notebook
  1. 新建一个笔记本
  2. shift+enter运行代码
  3. 保存代码

配置文件

在配置文件中可以

  • 更改颜色主题
  • 执行任意Python语句(例如导入常用的库以及一些你希望每次启动IPython就运行的程序)
  • 启动IPython扩展
  • 激活Jupyter拓展
  • 自定义魔术函数或系统别名

运行下列指令:

jupyter notebook --generate-config

上面的代码会将默认配置文件写入主目录下的.jupyter/jupyter_notebook_config.py。我win10电脑上的路径为C:\Users\ljxt\.jupyter\jupyter_notebook_config.py,打开相应文件后即可进行配置。也可以将其重命名为不同的文件,之后在启动 jupyter notebook 时添加--config参数使用该配置:

jupyter notebook --config=C:\Users\ljxt\.jupyter\jupyter_notebook_config.py

Jupyter Notebook 文件默认目录的查看以及更改

参考:

在jupyter_notebook_config.py中搜索c.NotebookApp.notebook_dir,将它的值设置为想要的路径即可

Tab补全

  1. 对对象的属性名称进行补全
  2. 路径补全
  3. 函数关键字补全

内省

  1. 在一个变量名的前后使用问号(?)可以显示一些关于该对象的文档字符串以及其他概要信息:
  2. 使用双问号显示函数源代码
  3. 搜索IPython命名空间

魔术命令

IPython中的特殊命令被称为魔术命令,前缀符为%。大多数魔术命令都可以使用?查看额外的命令行参数。

  1. %run: 在IPython会话中运行任意Python程序文件
%run hello_world.py
%run -i hello_world.py #让待运行的脚本使用交互式IPython命名空间中已有的变量
  1. %load: 将脚本导入一个代码单元
%load hello_world.py
  1. %time: 报告单个语句的执行时间

    wall time(壁钟时间) 测量的时间不是一个非常精确的测量
  2. %timeit: 多次运行单个语句计算平均执行时间,对于执行时间很短的分析语句和函数特别有用,测得时间也更加精确
%timeit np.dot(a,a)
  1. %pwd: 显示当前工作目录
    其输出可以赋给一个变量

matplotlib集成

jupyter数据分析大作业 jupyter notebook 数据分析_调试器

使用虚拟环境

conda install nb_conda

之后再重启 jupyter notebook,在新建文件的选项上就可以选择想要使用的虚拟环境了

jupyter数据分析大作业 jupyter notebook 数据分析_调试器_02

更多 IPython 系统相关内容

输入和输出变量

  1. IPython会话存储对输入和输出命令的引用,并将特定变量中的Python对象输出。前两个输出分别存储在_(一个下划线)和__(两个下划线)变量中
  2. jupyter数据分析大作业 jupyter notebook 数据分析_Python_03

  3. 输入变量存储在_iX变量中,X为输入行号。对于每个输入变量,都有一个对应的输出变量_X
  4. jupyter数据分析大作业 jupyter notebook 数据分析_Python_04

  5. 由于输入变量是字符串,可以使用exec函数再次执行它们
exec(_i19)

删除变量

在处理非常大的数据集时,即使使用del删除变量,IPython的输入和输出历史记录也会导致引用的所有对象不会被垃圾回收。这种情况下,可以使用%reset和%xdel来避免内存问题

  1. %reset: 删除交互式命名空间中所有的变量/名称
  2. %xdel: 从IPython机器中移除对象的所有引用

与操作系统交互

  1. !cmd: 在系统命令行中执行cmd命令
  2. output = !cmd args: 运行cmd并在output中保存stdout
#Linux
ip_info = !ifconfig wlan0 | grep "inet"
  1. 使用变量作为命令参数
foo = 'test*'
!ls $foo
  1. %alias: 为shell命令自定义快捷键
%alias ll ls -l
%alias test_alias (ls; cd ..; ls)
  1. %bookmark: 目标书签系统允许保存通用目录别名,以便轻松跳转
%bookmark py4da /home/richard/pydata-book
!cd py4da
%bookmark -l #列出所有书签
  1. %cd directory: 将系统工作目录更改到传递的目录
  2. %pwd: 返回当前工作目录

软件开发工具

debug: Python pdb 调试器

  • IPython 集成并增强了内置的 Python pdb 调试器,加强的地方包括 tab 键补全、语法高亮以及异常回溯中每一行的上下文
Python 调试器命令

命令

动作

h(elp)

展示命令列表

help command

显示command命令的文档

c(ontinue)

恢复程序执行

q(uit)

退出调试器

b(reak) number

在当前文件的 number 位置设置断点

b(reak) path/file.py:number

在指定文件的 number 位置设置断点

s(tep)

单步进入函数调用

n(ext)

执行当前行,并进入到当前层级的下一行

u(jupyter数据分析大作业 jupyter notebook 数据分析_python_05)/d(own)

在函数调用堆栈中上下移动

a(rgs)

显示当前函数的参数

debug statement

在新的(递归)调试器中调用语句statement

l(ist) statement

显示当前堆栈的当前位置和上下文

w(here)

在当前位置打印带有上下文的完整堆栈回溯

  • 调试器命令优先于变量名称,在这种情况下,变量前面加上 ! 来检查变量内容
小例子
  1. 在异常发生后立刻输入 %debug,可以唤起调试器并进入抛出异常的堆栈区,默认从最底层即错误发生的地方开始。通过 u 和 d,可以在堆栈回溯的不同层级间切换
  2. %run -d xxx.py: 在执行所有传递的脚本中的代码前唤起调试器,用于单步执行脚本。必须按下 s(step) 来进入脚本。%run -d -b2 xxx.py 会启动一个已经设置了断点的调试器 (在第 2 行设置断点)
set_trace(), debug()
from IPython.core.debugger import Pdb
import sys

def set_trace():
    Pdb().set_trace(sys._getframe().f_back)

def debug(f, *args, **kwargs):
    return Pdb().runcall(f, *args, **kwargs)
  • set_trace() 在代码中调用可以充当断点
  • debug() 允许在任意函数调用中唤起交互式调试器

代码分析

代码分析更多关注于时间开销的位置。使用Python分析工具cProfile模块。cProfile执行程序或任意代码块,同时记录每个函数花费多少时间。

  1. python -m cProfile -s cumulative xxx.py: 在命令行上运行整个程序,并输出每个函数的聚合时间。
    %run -p有相同效果
    -s用于指定一个排序顺序
  2. %prun: 与cProfile采用相同的命令行选项,但会分析任意Python语句而不是整个.py文件
    -l 7表示取前7行
  3. %%prun: 分析整个代码块
  4. 逐行分析函数
  • 安装line_profiler
conda install line_profiler
  • 开启IPython扩展
%load_ext line_profiler
  • 使用%lprun进行分析