0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

15个节省时间的Jupyter技巧!

数据分析与开发 来源:DeepHub IMBA 2023-01-05 15:35 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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

1、魔法命令

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

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

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

  • %run:在当前内核中运行Python脚本。
  • %load:从脚本中加载代码并在当前内核中运行。
  • %who:列出所有变量。
  • %timeit:记录一行代码的执行时间。
  • %debug:在异常处输入调试器。
  • %matplotlib inline:在notebook中显示图形。
  • %load_ext:加载扩展,例如IPython扩展。
  • %pwd:打印当前工作目录。
  • %ls:显示当前目录中的所有文件。

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

59a7d264-8cc9-11ed-bfe3-dac502259ad0.png

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

2、执行另一个Jupyter notebook文件

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

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

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

%run./two-histograms.ipynb
59c73bf4-8cc9-11ed-bfe3-dac502259ad0.png

3、查看文档

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

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

59d6148a-8cc9-11ed-bfe3-dac502259ad0.gif

4、添加多个游标

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

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

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

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

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

59f2619e-8cc9-11ed-bfe3-dac502259ad0.gif

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

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

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

#BeforeRunning
%load./hello_world.py

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

if__name__=="__main__":
print("HelloWorld!")

Output
HelloWorld!

6、运行CMD/Shell命令

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

!ls

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

!ls-l/path/to/directory

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

files=!ls
print(files)

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

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

7、为程序完成设置闹钟

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

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

pipinstallwin10toast

然后使用这段代码

fromwin10toastimportToastNotifier
toaster=ToastNotifier()

#Yourprogram

toaster.show_toast("Executioncomplete",
"Yourcalculationcompleted",
duration=10)

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

importwinsound

#setanalarmof440HZforonesecond(1000ms)
duration=1000
freq=440

winsound.Beep(freq,duration)

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

importos

#Runyourprogramhere
#Playasoundwhentheprogramcompletes
os.system("afplay/path/to/sound.mp3")#macOS
os.system("aplay/path/to/sound.wav")#Linux

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

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

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

importos

os.system('say"hisiri"')

8、显示执行时间

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

%timeitsum(range(100))

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

5a017b48-8cc9-11ed-bfe3-dac502259ad0.png

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

%%timeit

total=0
foriinrange(1000):
total+=i
5a1a22c4-8cc9-11ed-bfe3-dac502259ad0.png

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

importtime

start_time=time.time()

#codetomeasure
sum(range(100))

end_time=time.time()

elapsed_time=end_time-start_time
print(f'Executiontime:{elapsed_time:.2f}seconds')
5a3e9d84-8cc9-11ed-bfe3-dac502259ad0.png

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

9、在notebook之间传递变量

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

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

var1=10
%storevar1

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

%store-rvar1
print(var1)

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

%store var1:存储变量var1

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

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

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

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

%storevar1var2

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

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

5a9b9822-8cc9-11ed-bfe3-dac502259ad0.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是很烦人的。要将这些不必要的输出隐藏在起来可以使用 分号 ;

看看下面代码:

5af6ca12-8cc9-11ed-bfe3-dac502259ad0.png

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

plt.plot(x,y);
5b0d16d2-8cc9-11ed-bfe3-dac502259ad0.png

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

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

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

!pipinstallCython

加载和使用:

%load_extCython

%%cython
defmyltiply_by_2(floatx):
return2.0*x

myltiply_by_2(23.)

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

!pipinstallfortran-magic

代码如下:

%load_extfortranmagic

%%fortransubroutinecompute_fortran(x,y,z)
real,intent(in)::x(:),y(:)
real,intent(out)::z(size(x,1))
z=sin(x+y)
endsubroutinecompute_fortran

compute_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列,可以使用以下代码:

importpandasaspd

pd.options.display.max_rows=100
pd.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模块控制显示。例如:

fromIPython.displayimportdisplay

display(df,max_rows=100,max_columns=50)

这将显示100行50列的DataFrame。

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

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

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

5b1fdf88-8cc9-11ed-bfe3-dac502259ad0.png

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

5b32c7ce-8cc9-11ed-bfe3-dac502259ad0.png

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

15、导出单元格的内容

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

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

%%writefileexample.py
defadd(a,b):
returna+b
print(add(3,4))

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

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

%pycatexample.py

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

总结

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

审核编辑 :李倩



声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4942

    浏览量

    73159
  • 调试器
    +关注

    关注

    1

    文章

    325

    浏览量

    24931
  • python
    +关注

    关注

    57

    文章

    4858

    浏览量

    89599

原文标题:15个节省时间的Jupyter技巧!

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    DigiKey 推出业界首款电源配置工具 使用在线工具一键获取电源解决方案,省时省力,高效提速设计过程

    。 使用 DigiKey 全新的在线电源配置工具,帮助工程师、设计师和系统集成商节省时间,加快设计过程。 这款直观的在线工具专为工程师、设计师和系统集成商开发,通过快速选择输出、电压、电流等关键属性,即可定制生成满足用户需求的电源解决方案。配置一经完成,所定制电
    的头像 发表于 11-27 10:50 242次阅读
    DigiKey 推出业界首款电源配置工具 使用在线工具一键获取电源解决方案,<b class='flag-5'>省时</b>省力,高效提速设计过程

    FCC认证费用详解:普通电子产品与带无线功能设备的成本差异

    见的认证方式。正确区分并选择适合的认证类型,不仅能确保合规,还能节省时间与成本。一、什么是FCCSDoC认证?适用哪些产品?FCCSDoC(Supplier'sDec
    的头像 发表于 11-26 16:12 332次阅读
    FCC认证费用详解:普通电子产品与带无线功能设备的成本差异

    电动机噪声、振动和声振粗糙度开发:使用低计算成本的系统级模型预测早期噪声、振动和声振粗糙度

    优势使用计算成本低的系统级模型在动态运行条件下对电驱动装置执行早期噪声、振动和声振粗糙度评估优化电机控制策略并做出更好的设计选择,以提高电动汽车的噪声、振动和声振粗糙度使用Simcenter节省时间
    的头像 发表于 08-13 11:46 538次阅读
    电动机噪声、振动和声振粗糙度开发:使用低计算成本的系统级模型预测早期噪声、振动和声振粗糙度

    IAR开发工具链有什么优势

    在开发安全关键型应用时,选择具备成熟历史的硬件平台、完善的应用与诊断软件,以及经过功能安全认证的开发工具链,是确保项目顺利启动并高效完成开发和认证的关键。这一组合不仅显著节省时间与成本,还能帮助开发团队应对多样且复杂的功能安全标准要求,从容应对合规挑战。
    的头像 发表于 08-06 09:36 829次阅读

    日本航空携手微软率先将AI应用引入客舱管理

    大幅节省时间,更让空乘能专注于服务旅客。在MicrosoftAzureAIFoundry(国际版)与SLM的赋能下,日航正迎来业务流程智能化转型的新篇章。
    的头像 发表于 07-18 11:12 1131次阅读

    根据标题利用API实现电商多平台同步:省时省力生成文章

    结合内容生成工具,还能自动创建吸引人的产品文章。本文将一步步解析如何实现这一过程,帮助您节省时间和精力。 1. 电商多平台同步的挑战与API的优势 电商多平台运营面临的核心问题是数据一致性。例如,库存更新不及时可能导致超
    的头像 发表于 07-18 10:02 457次阅读
    根据标题利用API实现电商多平台同步:<b class='flag-5'>省时</b>省力生成文章

    3Dfindit 的协作功能

    )允许团队成员随时查看平台上有多少同事,并相互共享部件。 []()节省时间和金钱 避免重复 内部系统和存储位置往往被重复和过时的部件所占据。当零件被多次创建时,不仅会耗费公司宝贵的时间,还会花费大量资金
    发表于 06-09 14:35

    轻松实现两份不同格式原理图的比较——使用Booster的完美解决方案

    两份不同格式原理图的高效比较,帮助用户节省时间,提高工作效率。什么是Booster?Booster是一款专为电子设计工程师打造的高效设计工具,其中的Schemat
    的头像 发表于 05-13 10:05 703次阅读
    轻松实现两份不同格式原理图的比较——使用Booster的完美解决方案

    3Dfindit V12.9.2 新版本相关说明

    COLLABORATION 3Dfindit彻底改变您的日常工作方式 重塑战略性零部件管理。新工具促进并优化了团队合作。您可获得最大的附加值: 通过重复使用零部件有效节省时间 通过减少零部件种类和标准化
    发表于 04-25 15:24

    AI在医疗健康和生命科学中的发展现状

    NVIDIA 首次发布的“AI 在医疗健康和生命科学中的现状”调研,揭示了生成式和代理式 AI 如何帮助医疗专业人员在药物发现、患者护理等领域节省时间和成本。
    的头像 发表于 04-14 14:10 737次阅读

    室内智能指路牌的定位精度能达到多少

    。精准的定位能帮助人们迅速找到目的地,节省时间与精力,提升空间的使用效率。那么,室内叁仟智能指路牌的定位精度究竟能达到何种程度?接下来,我们从定位技术、影响因素、提升策略这三方面,深入探究室内叁仟智能指路牌的定位精度
    的头像 发表于 04-01 10:37 627次阅读

    低代码/无代码解决方案Atlassian Automation:功能优势详解及在Jira、Confluence、Jira Service Management中的应用指南

    在当今快节奏的工作环境中,团队面临着数据量激增、任务复杂化等挑战。Atlassian Automation可帮助大规模应对这一挑战,通过消除手动任务(如通知团队、管理内容等单调操作),帮助团队节省时间、减少人为错误并推动项目进展。
    的头像 发表于 03-28 15:00 697次阅读
    低代码/无代码解决方案Atlassian Automation:功能优势详解及在Jira、Confluence、Jira Service Management中的应用指南

    别再犯这些错!使用树莓派13常见雷区!

    不足、设备过热或软件故障——将帮助您规避许多麻烦,节省时间并减少不必要的困扰。13.初次设置过于复杂试图一次性完成太多操作可能会导致挫败感。RaspberryPi是
    的头像 发表于 03-25 09:23 1656次阅读
    别再犯这些错!使用树莓派13<b class='flag-5'>个</b>常见雷区!

    发烧级体验!信德存储卡,让你的设备告别存储短板

    信德消费级 TF 卡有 64GB 大容量,满足日常数据存储。读速 90MB/s ,写速 30MB/s,快速处理各类数据。比如,传输一部 2GB 的高清电影,仅需 20 多秒,大大节省时间
    的头像 发表于 02-24 16:49 681次阅读
    发烧级体验!信德存储卡,让你的设备告别存储短板

    使用瑞萨AnalogPAK SLG47001/03节省开发时间

    在当今快速发展的技术市场中,对更快、更高效的产品开发的需求比以往任何时候都高。企业一直在寻找简化流程和缩短上市时间的方法。有助于节省时间、简化设计和降低成本的产品对于保持竞争力至关重要。
    的头像 发表于 12-12 10:54 883次阅读
    使用瑞萨AnalogPAK SLG47001/03<b class='flag-5'>节省</b>开发<b class='flag-5'>时间</b>