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作為源。
#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函數的執行時間,并返回執行該函數所需的平均時間。
還可以使用%%timeit來測量整個單元格的執行時間:
%%timeit
total=0
foriinrange(1000):
total+=i
可以看到上面的代碼與我們使用使用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')
注意:這些方法只會測量單元格中代碼的執行時間。如果計算單元依賴于其他計算單元或外部資源,則執行時間將不包括執行這些依賴項所需的時間。
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命令的值在內核重啟后也是可以訪問的,看看下面這個例子。
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庫。
!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:
當單元格完成執行時,我們會得到一個輸出并且可以通過傳遞執行編號作為索引來訪問它
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文章
4823瀏覽量
68902 -
調試器
+關注
關注
1文章
306瀏覽量
23806 -
python
+關注
關注
56文章
4807瀏覽量
84956
原文標題:15個節省時間的Jupyter技巧!
文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論