15个节省时间的Jupyter技巧

2024-03-16 04:20
文章标签 技巧 15 jupyter 节省时间

本文主要是介绍15个节省时间的Jupyter技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

来源:DeepHub IMBA

Jupyter Notebooks使用非常简单并且对于任何面向python的任务都可以非常方便的使用。只要它的内核处于活动状态,就可以用数据子集运行和测试脚本,而不用每次重启程序,这样可以加快我们开发和测试的速度。

但是因为它太简单了,所以我们经常会犯一些错误,浪费我们的时间和计算成本。在这篇文章中,我们将讨论一些可以节省时间,降低计算成本的技巧。

1、魔法命令

在Jupyter notebook中,“魔法命令”是特殊的命令,不是Python语言的一部分,但可以使您的生活更轻松。这些命令前面有%符号。

魔法命令很有用,可以直接嵌入到python代码中,并解决常见问题,例如列出当前目录中的所有文件或更改当前工作目录。

下面是一些常见的魔术命令:

  • %run:在当前内核中运行Python脚本。

  • %load:从脚本中加载代码并在当前内核中运行。

  • %who:列出所有变量。

  • %timeit:记录一行代码的执行时间。

  • %debug:在异常处输入调试器。

  • %matplotlib inline:在notebook中显示图形。

  • %load_ext:加载扩展,例如IPython扩展。

  • %pwd:打印当前工作目录。

  • %ls:显示当前目录中的所有文件。

我们可以运行%lsmagic来查看所有magic命令的列表。

559970521c4fee9b07283c607385d9be.png

要获得有关特定魔术命令的更多信息,可以使用?操作符,例如%run?。

2、执行另一个Jupyter notebook文件

可以使用魔术命令来做一些有趣的事情。例如,从py文件中执行python代码,或从ipynb文件中执行jupyter notebook。

%run将执行jupyter notebook并显示输出,这与导入python模块不同。

我们可以运行two-histogram notebook并得到如下输出:

%run ./two-histograms.ipynb

971d1d1280acfaecfb8c7f39de62e47c.png

3、查看文档📓

通过高亮显示方法并按Shift + Tab键,可以轻松查看该方法的文档。它将显示编写函数时编写的文档字符串。你也可以通过点击右上角的+按钮来打开模态框。

还可以通过突出显示每个magic命令并按Shift + Tab键来获得有关每个magic命令的更多信息。

7afda3bd77db7e9413d177ad77051e2d.gif

4、添加多个游标🖱

如果你需要重命名写在几个地方的变量,或者在编辑代码时,你希望你有多个光标。

在Jupyter notebooks中,可以使用多个光标同时编辑文本。如果你想一次对多行文本进行相同的更改,这可能很有用。

要在Jupyter notebook中使用多个游标,可以按住Alt键并单击所需的位置。这将在每个点击的位置创建一个游标。然后你可以像往常一样进行编辑,更改将同时应用于所有位置。

Windows:按住alt +左键并拖动光标。Mac:按住option键+左键拖动光标。

你也可以使用Shift + Alt +上/下箭头键组合来选择多行文本,并在每一行的开头创建一个光标。

41347e16f4ed42ce876fa038d9f898f6.gif

记住,使用多个游标可能会产生问题,所以最好在使用这个功能之前保存好你的代码,以防你做了任何意想不到的更改。

5、从另一个外部python脚本中插入代码🗃

可以用外部python脚本替换单元格的内容。你可以使用计算机上的任何python文件,也可以使用URL作为源。

# Before Running%load ./hello_world.py

在下一个单元格中可以使用:

if __name__ == "__main__":print("Hello World!")OutputHello World!

6、运行CMD/Shell命令⌨

Jupyter notebook中使用!命令前的前缀可以运行操作系统的命令。例如,要列出当前目录下的文件,可以使用ls命令:

!ls

你也可以通过在命令后面添加参数来传递参数。例如,要列出特定目录下的文件,可以使用-l选项以长格式显示文件,并将目录路径指定为参数:

!ls -l /path/to/directory

你也可以将命令的输赋值给一个变量,并在代码中使用它。例如:

files = !lsprint(files)

上面代码会把当前目录中的文件列表分配给files变量,并打印出来。

你可以使用这种技术在Jupyter notebook中运行任何shell命令,只要该命令在运行notebook的系统中可用。

7、为程序完成设置闹钟⏰

当你的模型完成训练或任何任务时,得到一个通知总是很有帮助的。

在windows 10中,我们可以使用win10toast模块设置它。

pip install win10toast

然后使用这段代码

from win10toast import ToastNotifiertoaster = ToastNotifier()#Your programtoaster.show_toast("Execution complete","Your calculation completed",duration=10)

我们在程序完成执行时为我们进行提示。

import winsound# set an alarm of 440HZ for one second (1000ms)duration = 1000freq = 440winsound.Beep(freq, duration)

Mac和Linux可以使用os模块,使用afplay命令(在macOS上)或aplay命令(在Linux上)播放声音。

import os# Run your program here# Play a sound when the program completesos.system("afplay /path/to/sound.mp3")  # macOSos.system("aplay /path/to/sound.wav")  # Linux

可以将/path/to/sound.mp3替换为要播放的声音文件的路径。或者是afplay或aplay命令支持的任何音频文件,如MP3、WAV或AIFF。

只有在运行Jupyter notebook的系统上有afplay或aplay命令时,此方法才有效。

在Mac中,还可以使用内置命令say,在程序完成时说一些话。

import osos.system('say "hi siri"')

8、显示执行时间⏱️

要在Jupyter notebook中测量单元格的执行时间,可以使用%timeit魔法命令。此命令将执行单个语句并返执行时间。下面是如何使用%timeit的例子:

%timeit sum(range(100))

这将计算sum函数的执行时间,并返回执行该函数所需的平均时间。

76cb193706bae3b379c03ee01784e0bb.png

还可以使用%%timeit来测量整个单元格的执行时间:

%%timeittotal = 0for i in range(1000):total += i

43eefb1e5ceab50692659f9789efb1c9.png

可以看到上面的代码与我们使用使用Python中的time模块的结果类似

import timestart_time = time.time()# code to measuresum(range(100))end_time = time.time()elapsed_time = end_time - start_timeprint(f'Execution time: {elapsed_time:.2f} seconds')

f7c0beb0ec7a5b9a593123060a2ede34.png

注意:这些方法只会测量单元格中代码的执行时间。如果计算单元依赖于其他计算单元或外部资源,则执行时间将不包括执行这些依赖项所需的时间。

9、在notebook之间传递变量

在Jupyter notebook中,%store魔法命令可以在notebook之间传递变量。

下面是一个使用它的例子:

var1 = 10%store var1

在另外一个notebook中可以用下面命令获得变量的值

%store -r var1print(var1)

%store魔法命令有以下几个操作

%store var1:存储变量var1

%store -r var1:检索存储的变量var1,并将其赋值给当前笔记本中同名的变量

%store -d var1:删除已存储的变量var1

%store -z:删除所有已存储的变量

你也可以使用一个%store命令存储多个值,如

%store var1 var2

%store命令仅在相同的Jupyter会话中有效。

%store命令的值在内核重启后也是可以访问的,看看下面这个例子。

2739a05e649455c86333c794f09ca25a.gif

10、列出所有键盘快捷键⌨

学习键盘快捷键将节省你大量的时间。我们可以在顶部菜单下:帮助>键盘快捷键检查它们,或在命令模式下按H键来查看。以下是Jupyter notebook中一些常用的键盘快捷键列表:

  • Enter:当前单元格进入编辑模式

  • Esc:当前单元格进入命令模式

  • Shift + Enter:运行当前单元格并移动到下一个单元格

  • Ctrl + Enter:运行当前单元格

  • Alt + Enter:运行当前单元格并在下面插入一个新单元格

  • Shift + Tab:显示当前函数或对象的文档

  • Ctrl + S:保存

  • A:在当前单元格的上方插入一个新单元格(在命令模式下)

  • B:在当前单元格下面插入一个新单元格(在命令模式下)

  • M:将当前单元格更改为Markdown单元格(在命令模式下)

  • Y:将当前单元格更改为代码单元格(在命令模式下)

  • D + D:删除当前单元格(在命令模式下)

  • Z:撤销最后一次删除单元格(在命令模式下)

  • X:切割选定的单元格(在命令模式下)

  • C:复制选中的单元格(在命令模式下)

  • V:粘贴选中的单元格(在命令模式下)

  • Ctrl + Shift + -将当前单元格从光标所在的位置拆分成两个。(在命令模式下)

  • Esc + F:找到并替换你的代码,但不替换输出。(在命令模式下)

  • Esc + O:切换单元格输出(在命令模式下)

选择多个单元格:

  • Shift + Down选择向下方向的下一个单元格。

  • Shift + Up选择向上方向的下一个单元格。(在命令模式下)

  • Shift + M:合并多个选定单元格。(在命令模式下)

还可以使用%shortcuts魔术命令查看当前单元格输出区域的键盘快捷键列表:

%shortcuts

这将显示所有快捷键及其相应操作的列表。

11、隐藏不必要的输出

当你从Jupyter notebook创建报告时,看到不必要的内存代码或对象id是很烦人的。要将这些不必要的输出隐藏在起来可以使用 分号 ;

看看下面代码:

6f16a0ee04009b012d6b4e192e1dc4a4.png

如果想屏蔽matplotlib的输出,看看下面代码,注意后面的分号:

plt.plot(x,y);

ad4e10df13044de078a685ba718bea2a.png

12、使用python以外的其他语言编写函数

如果你正在处理大量的大型数据集,并且numpy的速度不够快,那么你可以直接在python代码中直接编写一些c或fortran代码。

如果你想开始用c编写函数,那么你将需要cython库。

!pip install Cython

加载和使用:

%load_ext Cython%%cythondef myltiply_by_2(float x):return 2.0 * xmyltiply_by_2(23.)

要编写fortran函数,则需要另一个库fortrain-magic。

!pip install fortran-magic

代码如下:

%load_ext fortranmagic%%fortran subroutine compute_fortran(x, y, z)real, intent(in) :: x(:), y(:)real, intent(out) :: z(size(x, 1))z = sin(x + y)end subroutine compute_fortrancompute_fortran([1, 2, 3], [4, 5, 6])

13、扩展pandas输出中的列数和行数

默认情况下,panda的dataframe只能显示有限数量的行和列。有几种方法可以扩展Jupyter Notebook中pandas DataFrame中显示的行和列的数量。

方法1:使用pd.options.display.max_rows和pd.options.display.max_columns选项。

例如要显示最多100行50列,可以使用以下代码:

import pandas as pdpd.options.display.max_rows = 100pd.options.display.max_columns = 50

方法2:使用pd.set_option函数设置这些选项。例如:

pd.set_option("display.max_rows", 100)pd.set_option("display.max_columns", 50)

或者可以使用head和tail方法来显示DataFrame的前几行或后几行。例如:

df.head(10)df.tail(5)

方法3:使用IPython中的IPython.display模块控制显示。例如:

from IPython.display import displaydisplay(df, max_rows=100, max_columns=50)

这将显示100行50列的DataFrame。

14、提取输入和输出单元数据

当你执行完一个单元格时,你意识到忘记给一个变量赋值,那怎么办呢?

我们在jupyter notebook中执行单元格时,它将分配一个行号为ln:

86ea43f2d1868dc304645d1bde8ecf60.png

当单元格完成执行时,我们会得到一个输出并且可以通过传递执行编号作为索引来访问它

cae3f2f6a3fdade7e0ddc559717a80df.png

Out是一个python字典,存储单元格的所有输出。我们可以使用编号作为索引来访问输出。

15、导出单元格的内容📝

当完成jupyter的测试我们可能会想将jupyter单元中内容导出到python文件中。最简单的办法是创建一个py文件并复制粘贴代码,但这很明显不是最好的方法。

%%writefile是一个Jupyter Notebook魔法命令,可以将单元格的内容保存为Python文件。例如在单元格中有以下代码:

%%writefile example.pydef add(a, b):return a + bprint(add(3, 4))

你可以运行单元格后将在Jupyter Notebook所在的目录中创建一个名为example.py的文件,文件内容就是单元格内的python代码

%pycat是另外一个Jupyter Notebook魔法命令,它在Notebook的单元格中显示Python文件的内容。如果在单元格中有以下代码:

%pycat example.py

它将在单元格的输出中显示example.py文件的内容。这对于快速查看Python文件的内容非常有用。

总结

以上就是我们总结的一些技巧,希望对你有所帮助。

作者:Anup Das

-------- End --------
推荐👇同名微信视频号图解Pandas图文00-内容框架介绍 | 图文01-数据结构介绍 | 图文02-创建数据对象 | 图文03-操作Excel文件 | 图文04-常见的数据访问 | 图文05-常见的数据运算 |  图文06-常见的数学计算 | 图文07-常见的数据统计 | 图文08-常见的数据筛选 |  图文09-常见的缺失值处理 | 图文10-数据合并操作 | 图文11-Groupby分组操作

这篇关于15个节省时间的Jupyter技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/814280

相关文章

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

游戏闪退弹窗提示找不到storm.dll文件怎么办? Stormdll文件损坏修复技巧

《游戏闪退弹窗提示找不到storm.dll文件怎么办?Stormdll文件损坏修复技巧》DLL文件丢失或损坏会导致软件无法正常运行,例如我们在电脑上运行软件或游戏时会得到以下提示:storm.dll... 很多玩家在打开游戏时,突然弹出“找不到storm.dll文件”的提示框,随后游戏直接闪退,这通常是由于

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查