社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【Python】15 个节省时间的 Jupyter 技巧

机器学习初学者 • 2 年前 • 357 次点击  
作者 | Anup Das   来源 | 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命令的列表。

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

2、执行另一个Jupyter notebook文件

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

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

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

 %run ./two-histograms.ipynb

3、查看文档

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

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

4、添加多个游标

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

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

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

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

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

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

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

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

 # Before Running
 %load ./hello_world.py

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

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

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模块设置它。

 pip install win10toast

然后使用这段代码

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

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

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

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

 import os
 
 # Run your program here
 # Play a sound when the program completes
 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,在程序完成时说一些话。

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

8、显示执行时间⏱️

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

 %timeit sum(range(100))

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

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

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

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

 import time
 
 start_time = time.time()
 
 # code to measure
 sum(range(100))
 
 end_time = time.time()
 
 elapsed_time = end_time - start_time
 print(f'Execution time: {elapsed_time:.2f} seconds')

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

9、在notebook之间传递变量

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

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

 
 var1 = 10
 %store var1

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

 %store -r var1
 print(var1)

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

%store var1:存储变量var1

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

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

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

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

 %store var1 var2

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

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

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是很烦人的。要将这些不必要的输出隐藏在起来可以使用 分号 ;

看看下面代码:

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

 plt.plot(x,y);

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

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

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

 !pip install Cython

加载和使用:

 %load_ext Cython
 
 %%cython
 def myltiply_by_2(float x):
 return 2.0 * x
 
 myltiply_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_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列,可以使用以下代码:

 import pandas as pd
 
 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模块控制显示。例如:

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

这将显示100行50列的DataFrame。

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

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

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

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

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

15、导出单元格的内容

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

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

 %%writefile example.py
 def add(a, b):
    return a + b
 print(add(3, 4))

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

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

 %pycat example.py

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

总结

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





    
往期精彩回顾






Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/150932
 
357 次点击