jupyter ipython display_IPythonJupyter私房手册

Jupyter是以Ipython为基础,可以极大的方便开发,对于如何使用,网上的资料都不太全。因此决定自己编写一个私房手册方便随时查找。

1. 安装和配置

安装不多说,不想折腾直接安装anaconda包,集成了Jupyter和Ipython。主要说说配置:

Ipython的配置文件和Jupyter的配置文件是分开的,在window下cmd下,运行ipython create profile(IPython),和jupyter notebook --generate-config(jupyter)会生成默认的配置文件。

默认的配置文件路径如下:

Ipython:

c:\Users\Administrator.ipython\profile_default\ipython_config.py

Jupyter:

c:\Users\Administrator.jupyter\jupyter_notebook_config.py

c:\User\Administrator是系统环境变量$USERPROFILE,个人配置不同,在dos下可输入set命令查看。

里面的配置选项都是被#注释掉的,想要配置哪一项,去掉#号进行配置即可。

这里记录几个之前遇到的坑:

《用pandas进行数据分析》里面提到过的Ipython的line_profiler插件,在IPython7.2版本下,配置选项是c.InteractiveShellApp.extensions = ['line_profiler'],而不是书上的c.TerminalIPythonApp.extensions = ['line_profiler']。

Jupyter和Ipython都可以自定义配置文件,IPython在上面提到的cmd命令后加上项目名称,可以生成该项目对应的配置文件,如:ipython create profile secret_project,Jupyter只要将默认的配置文件改成想要的名字就可以了,假设改成my_custom_config.py。

想要使用自定义的配置文件,需要在启动的时候特别指明。假设你创建了一个secret_project的配置文件,Ipython的启动命令是这样:

ipython --profile=secret_project

Jupyter的启动命令是这样:

jupyter notebook --config=c:/Users/Administrator/.jupyter/my_custom_config.py

需要指定配置文件的路径。

(如果是anaconda安装的,如何使用自定义的配置没有尝试过,尚不清楚)

Jupyter可以在默认的文件路径下配置一个jupyter_notebook_config.json文件,其级别比默认的py文件要高,如果有冲突的话,优先会读取json文件的配置。这个问题在配置Jupyter的nb extensions插件时可能会碰到:该插件会让你配置这个json文件,其实只要在默认的py文件中配置就可以了,修改c.NotebookApp.nbserver_extensions = {"jupyter_nbextensions_configurator": True}这一行即可,不需要再新建json文件。

安装以后Jupyter默认打开的文件目录可能不是你想要的,如果用anaconda安装的,windows下直接修改Jupyter的快捷方式,右键点击->属性->起始位置改成你想要的就可以了。

2. 使用技巧

这里按照《用Pandas进行数据分析》第二版附录B的结构对使用技巧和魔术方法统一总结,大部分内容也是书上的内容,所以不再举具体的例子,仅作一个梳理和记录。没有特别说明,则是IPython和Jupyter通用的功能。

书的链接是:《用Pandas进行数据分析》

2.1 魔术方法一览

使用%lsmagic可以查看所有的魔术命令:

Available line magics:

%alias %alias_magic %autocall %automagic %autosave %bookmark %cat %cd %clear %colors %config %connect_info %cp %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %install_default_config %install_profiles %killbgscripts %ldir %less %lf %lk %ll %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %lx %macro %magic %man %matplotlib %mkdir %more %mv %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %popd %pprint %precision %profile %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %rm %rmdir %run %save %sc %set_env %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode

Available cell magics:

%%! %%HTML %%SVG %%bash %%capture %%debug %%file %%html %%javascript %%latex %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit %%writefile

其中一个百分号称为line magic(行魔术命令),只能作用于一行代码,两个百分号成为(块魔术命令)作用于一个cell代码块。

2.2 使用历史命令

Ctrl+P(或者上箭头)、Ctrl+N(或者下箭头)可以快速浏览历史命令,Ctrl+R可以搜索历史命令(只对IPython)

_和__分别代表前面2行的输出,输入变量是存储在名字类似_iX的变量中,X是输入行的编号。输入全部被保存为字符串的形式,因此可以直接使用exec命令再次执行。

%hist可以打印所有或部分的输入历史(加上编号指定打印的部分)。%reset清理交互命名空间,或输入和输出缓存。%xdel魔术函数可以去除IPython中对一个特别对象的所有引用。因为IPython会记录输入和输出的历史,因此会造成被引用的对象不被垃圾回收(释放内存),即使使用del关键字从交互命名空间删除变量也没用。在这种情况下,小心使用%xdel 和%reset可以避免陷入内存问题。

2.3 与操作系统交互

基本的命令如下:

有几个需要注意的地方或者一些技巧:

使用!执行shell命令的时候,可以用一个变量保存命令执行的输出。如 :a = !dir

同样,也可以通过$符号调用python的变量。如:

[In]: a = 'dir'

[In]: !$a

%alias创建的别名是session有效的,如果要创建永久的别名,需要使用配置文件。

%bookmark创建的书签是永久有效的,可以用%bookmark -l查看所有书签,如果书签的名字,与当前工作目录的一个目录重名,可以使用-b标志来覆写,使用书签的位置。

2.4 软件开发工具

2.4.1 交互调试器

基本命令如下:

一些需要注意的地方以及一些小技巧:

异常之后马上输入%debug可以直接启动调试器,进入抛出异常的堆栈框架。

%pdb开关可以设置是否在代码抛出异常时,自动进入调试器。

如果想在运行脚本的时候直接进入调试器,可以使用%run -d来执行脚本。

调试器中,在变量之前加!,可以查看变量的值。

《用Pandas进行数据分析》书中还提供了两个函数比较实用,这里略微进行了修改:

from IPython.core.debugger import Pdb

def set_trace():

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

def debug(f, *args, **kwargs):

return Pdb().runcall(f, *args, **kwargs)

其中:set_trace()可以放在代码的任何位置,运行到这里的时候就会暂停,可以说是一个手动的断点。而debug函数接受一个函数作为第一个参数,args和kwargs是传递给f函数的位置和关键字参数,执行debug可以直接启动调试器并进入f函数。

把上述的代码添加到IPython配置文件的c.InteractiveShellApp.code_to_run选项中,就可以在IPython启动的时候自动执行。

保存为py模块,再将模块加到Jupyter的配置文件c.NotebookApp.nbserver_extensions中不起作用(看说明这个选项是在启动的时候读取用作服务器扩展的python模块,希望有大牛帮忙解惑)。

2.4.2 代码计时和基础分析

%time和%timeit都用来记录一行代码耗时,它们的区别在于%time只运行一次,而%timeit运行多次。%%time和%%timeit可以记录一段代码的耗时。

%prun和%run -p是一样的,调用cprofile内置模块对代码进行分析。如%prun -l 7 -s cumulative example.py`,其中-l是显示前7个条目,-s cumulative意思是按照cumulative来排序。同样,可以用%%来运行一段代码。

cprofile使用的不多,这里链接一篇文章可以参考《使用cProfile+pstats+gprof2dot分析python代码性能》

cprofile不能获得函数执行时间的整个过程或者结果比较复杂,加上函数名,难以进行解读,可以安装line_profiler对函数进行逐行分析。line_profiler包含IPython插件,安装库以后,在IPython的配置文件中进行配置c.InteractiveShellApp.extensions = ['line_profiler'],也可以使用魔术命令%load_ext line_profiler在会话中读入模块。语法是:

%lprun -f func1 -f func2 statement_to_profile

2.4.3 Jupyter的富文本输出

在jupyter中,可以方便的显示以下的类型:

HTML

JSON

PNG

JPEG

SVG

LaTeX

首先导入display函数:

from IPython.display import display

也可以指定特定的显示函数:

from IPython.display import (

display_pretty, display_html, display_jpeg,

display_png, display_json, display_latex, display_svg

)

以及不同类型对应的包装对象,如image格式的包装对象:

from IPython.display import Image

i = Image(filename='logo.png')

现在就可以直接输入i或者display(i)输出了。

默认图像是嵌入notebook文档,这样在离线的时候仍然可以显示图片,但缺点是图片不是动态变更的,也可以存储一个链接,这样图片可以动态更新,如下:

from IPython.display import Image

img_url = 'http://www.lawrencehallofscience.org/static/scienceview/scienceview.berkeley.edu/html/view/view_assets/images/newview.jpg'

# by default Image data are embedded

Embed = Image(img_url)

# if kwarg `url` is given, the embedding is assumed to be false

SoftLinked = Image(url=img_url)

# In each case, embed can be specified explicitly with the `embed` kwarg

# ForceEmbed = Image(url=img_url, embed=True)

另外,也有一些魔术命令简化以上的步骤,例如:%%html, %%javascript,%%bash, %%script python2等等。

最后值得一提的是FileLink和Filelinks,可以方便的将本地文件链接到notebook的文档中:

from IPython.display import FileLink

FileLink('README.md')

FileLink可以显示单个文件,FileLinks可以显示文件夹下所有文件。

参考文档《Jupyter的富文本输出》

2.4.4 其它有用的魔术方法

%pinfo object或者object?会打印该对象的相关信息。%pinfo2 object或者object??除了相关信息外,还会显示对象的源码。

%%capture可以方便的捕获stdout/stderr的输出,或者保存在变量留待后用:

In [5] : %%capture capt

from __future__ import print_function

import sys

print('Hello stdout')

print('and stderr', file=sys.stderr)

In [6] : capt.stdout, capt.stderr

Out [6] : ('Hello stdout\n', 'and stderr\n')

In [7] : capt.show()

Out [7] : Hello stdout

and stderr

%%writefile可以非常方便的将代码块内容写入一个文件:

In [8] : %%writefile foo.py

print('Hello world')

Out [8] : Writing foo.py

In [9] : %run foo

Out [9] : Hello world

dreload函数,注意这个不是魔术函数,类似与importlib库的reload函数,但是可以重载深层的模块。

%load魔术方法可以 将脚本导入到一个单元格中。

%paste和%cpaste可以直接运行剪贴板中的代码,不同的是,%cpaste会给出一个提示。(只有IPython有)

3. 常用的快捷键

IPython的快捷键如下:

Jupyter有自己的一套快捷键,可以在help->快捷键中方便的查看。

原创不易,转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机一级b考试教程,全国计算机等级考试一级B教程

第一章 计算机基础知识1.1 概述1.1.1 什么是计算机1.1.2 计算机的发展概况1.1.3 计算机的应用领域1.1.4 计算机的应用领域1.2 计算机中的数与编码1.2.1 二进制的基本概念1.2.2 编码1.3 计算机程序设计语言1.3.1 机器语言1.3.2 汇编语言1.3.3 高级语言1.4 计算机的…

keepalived mysql双主架构图_MySQL双机热备(keepalived+mysql双主)

科普描述双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。MySQL双主复制,即互为Master-Slave(只有一个Master提供写…

做手游的计算机配置要求,原神pc配置要求高吗 最低什么配置能流畅运行​

从最新消息来看,《原神》将于9月15日开启PC版技术开放性测试,是面向所有玩家的,不删档,本质上你就可以将其理解为正式上线了。原神是一款多平台、多数据互通的游戏。但显而易见的是PC版的原神拥有更高的画质和游戏性能&#xff0c…

HTML入门小站,Phaser

入门教程,我可不会讲什么概念,我只会讲一个入门例子,通过这个例子,你就知道phaser有多么强大,而照着这个例子做,你就能知道怎么使用phaser了。需要说明的是,这个就是phaser官方的一个入门的案例…

h2 可视化界面能添加 添加表_Excel只能做表格?那是你不会用!10分钟做出高大上可视化图...

很多公司都要求员工熟练的掌握Excel。But,绝大多数人所谓的熟练使用Excel,估计也只会一些简单的表格和知道加减乘除、求和吧!再难一点,估计就真的把自己难倒了。讲真,Excel还是很牛的,只是你不会&#xff0…

戴尔电脑怎么安装一级计算机,手把手教你戴尔笔记本电脑重装系统教程

随着生活质量的提高,现今基本上人人都拥有一台专属于自己的笔记本电脑。但要是说起笔记本,那dell笔记本可是一个不错的品牌呢?所以小编今天要给大家说的知识点就是关于Dell笔记本怎么重装系统的内容。有兴趣的可以学起来哦!最近小编发现有小…

cdn节点人少延迟高_如何正确配置CDN高速缓存,避免越用越慢的尴尬

越来越多的博客网站开始用到了国内的免费CDN了,比如百度云加速、360网站卫士、加速乐及云盾等等。之前我也写文章分享过国内低配置VPS的优化方案,其中提到了很多站长开启CDN加速后反而更慢的问题。文章是这样描述的:动态网页会越用越慢很纳闷…

五月份哪里有有计算机考试,2021年5月全国计算机等级考试报名时间

5月全国计算机等级考试时间为5月29日至30日(第61次),报名时间约为考前1个月。科目调整及软件说明(一)从3月考试起,停考二级Visual Basic语言程序设计(科目代码26);新增二级WPS Office高级应用与设计(科目代码67)、三级Linux应用与开发技术(科…

voip和rtc_为什么开发WebRTC与VoIP开发不一样?(上)

作者:Tsahi Levent-Levi(原文链接)翻译:刘通原标题:Why Developing With WebRTC is Different than VoIP Development?让我从此处开始说起:但是在最重要的几个方面上WebRTC与VoIP有着区别:1. 企业用它来实现点子的方式…

量子计算机通用程序,量子计算机程序具有“通用性”?基于拓扑量子纠错码的量子计算机...

原标题:量子计算机程序具有“通用性”?基于拓扑量子纠错码的量子计算机不管量子计算机的内部是由什么组成,量子计算机的快速计算都可以归结为应用于量子比特的简单指令序列,即量子计算机内部的基本信息单位。无论这台计算机是由离…

php 加载redise_PHP Redis扩展无法加载的问题解决方法

最近在工作中需要使用PHP访问Redis,从https://github.com/phpredis/phpredis下载了phpredis,并且按照官方的说明进行了安装phpize./configure [--enable-redis-igbinary]make && make install但是在重启php-fpm的过程中,发生了如下的…

指纹机和计算机无法连接,考勤机怎么连接到电脑?考勤机连接电脑之后操作指南!...

考勤机,主要是用来将员工的出勤基本情况记录以及统计下来的机器。同时能够根据员工的工作上下班时间,详细地统计出加班时间、早退、迟到、旷工等出勤的情况。我们在统计具体的数据情况时候,就需要将考勤机与电脑进行联机,这样更加…

pentile 子像素_三星和索尼OLED子像素排列方式对比 有哪些差异?

目前已经有很多 VR 头戴设备在市面上进行发售,不同的厂家都因为价格定位的差异而选择不同的硬件解决方案。在其中最影响体验效果的自然是下面,我们就以三星和索尼 的 OLED 产品为例进行浅要分析。三星 OLED 对比索尼 OLED 到底哪个屏幕人们普遍认为分辨率…

计算机网络构成ppt,计算机网络体系结构ppt课件.ppt

文档介绍:船舶局域网技术及应用王宁轮机工程学院船电教研室HP:**********E-mail:n.wang.***2011年9月N.Wang09/2011*第3章计算机网络体系结构N.Wang09/2011*第3章计算机网络体系结构开放系统互连参考模型(OSI/RM)TCP/IP体系结构基本概念各层基本功能基本概念各层基本…

canvas转盘-拯救选择困难

转盘-拯救选择困难效果图简介代码效果图 简介 每到饭点就纠结吃什么,不如直接roll点。 在词条框中输入选项,选项用逗号(中英都可)隔开。点击设置词条,会根据词条(没有输入则获取代码中的默认词条&#xf…

tcping计算机端口,TCPing 服务器端口测试,端口阻断检测

介绍平时我们Ping服务器的IP,只是ICMP协议传输获得的延迟,而某些IDC会把ICMP的延迟优化的很棒,实际上一走TCPing 就暴露了;而且我们使用过程中主要是TCP协议传输数据,所以可以测试一下TCPing得到的延迟;另外因为TCP协议的握手步骤…

ue4中在物体上加ui_UE4 物体位置同步相关源码分析浅谈

前言多图, 不想在源代码写注释, 不想贴代码块, 看的不清楚版本4.21混4.22, 区别不大文章属于旧有文章搬运, 之前在csdn上面2019.10.27修改一版物体位置信息同步, 或者说物体的移动同步, 是一个很大的坑, 从个人目前魔改UE4位置同步后, 感觉至少要考虑以下几点位置信息的数据结构…

计算占比并保证百分比和为1

计算占比并保证百分比和为1常用场景代码常用场景 用于动态计算页面元素的百分比占比可视化中扇形统计图的显示数值修正 代码 /*** 计算数组中各项的占比,保证百分比和等于1* param arr 需要计算百分比的数组,传入时必须降序排序* param precision 精度 比如 4 …

tomcat配置自动服务器地址,修改eclipse部署tomcat时服务器部署地址

有时候我们在eclipse部署web项目至本地的tomcat但在webapps中找不到一、发现问题在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并没有出现所建立的工程名字。二、验证很明显项目…

linux ns级定时器_linux用户空间获得ns纳秒级时间示例

一、引言我们在测试程序的性能的时候往往需要获得ns级的精确时间去衡量一个程序的性能,下面介绍下linux中用户空间获得ns级时间的方法二、用户空间获得ns级时间使用clock_gettime函数,函数原型如下:long sys_clock_gettime (clockid_t which_…