4個(gè)提高Jupiter Notebooks開發(fā)效率的工具
通常,notebook被認(rèn)為是促進(jìn)糟糕的編碼實(shí)踐,因?yàn)樗鼈兒茈y進(jìn)行版本控制,經(jīng)常依賴于以特定順序運(yùn)行的單元格來返回正確的結(jié)果,并且測試和調(diào)試可能很棘手。
但是,當(dāng)涉及到探索性數(shù)據(jù)分析和初始機(jī)器學(xué)習(xí)模型開發(fā)等任務(wù)時(shí),jupiter notebooks 仍然是大多數(shù)數(shù)據(jù)科學(xué)家的首選。根據(jù)代碼可視化輸出(如圖表和表)以及向分析中添加豐富注釋的能力是任何其他工具都無法復(fù)制的。
雖然notebook仍然是如此受歡迎的選擇,但值得研究一些可用的選項(xiàng),以克服可能使notebook代碼不那么健壯的一些問題。在本文中,我將通過代碼示例簡要介紹為某些問題提供解決方案的4種工具。這些包括:
- Nbdime 更好的版本控制
- nbQA 運(yùn)行l(wèi)int
- Jupyter-nbrequirements 管理依賴
- nbval 進(jìn)行驗(yàn)證
Nbdime更好的版本控制
使用Github之類的工具對notebook進(jìn)行版本控制可能很困難。版本控制工具不能很好地呈現(xiàn)差異,因?yàn)樗鼈儾荒芾斫獾湫蚽otebook的邏輯結(jié)構(gòu)。這可能會(huì)使跟蹤更改和合并代碼變得困難,
Nbdime是一個(gè)旨在解決這個(gè)問題的工具,它提供了更豐富的、可視化的差異,可以很容易地看到同一notebook的不同版本之間的變化。
Nbdime可以通過pip安裝。
- pip install nbdime
這應(yīng)該會(huì)自動(dòng)安裝和啟用擴(kuò)展。如果沒有正確安裝,可以使用以下命令手動(dòng)安裝,添加一個(gè)標(biāo)志來確定為——system(系統(tǒng)范圍)、——user(當(dāng)前用戶)、——sys-prefix(當(dāng)前虛擬環(huán)境)安裝。
nbdime extensions --enable [--sys-prefix/--user/--system]
一旦一切都安裝好,如果你打開一個(gè)jupiternotebook,你現(xiàn)在應(yīng)該有以下新圖標(biāo)在你的工具欄。

我創(chuàng)建了一個(gè)notebook來展示nbdime的功能,它在波士頓房價(jià)數(shù)據(jù)集上訓(xùn)練一個(gè)簡單的線性模型。

新的圖標(biāo)現(xiàn)在應(yīng)該在notebook的工具欄上可用,形成nbdime的web視圖功能。這個(gè)視圖提供了對notebook所做的更改的豐富的可視化表示。
點(diǎn)擊git按鈕將顯示上次提交和當(dāng)前保存的notebook版本之間的差異。
單擊看起來像鐘面的圖標(biāo)將顯示最新檢查點(diǎn)和當(dāng)前保存的版本之間的差異。
我將對notebook做一些改變,并使用web視圖查看與上次提交的差異。
在notebook中,我改變了我正在使用的模型,并對殘差圖做了一個(gè)小的改變。讓我們看一下nbdime提供的結(jié)果差異。
從下面的圖片中可以看到,nbdime逐行和單元格顯示了自上次提交以來所更改的內(nèi)容。它甚至顯示了每個(gè)單元格的輸出是如何改變的,包括圖形。

nbQA進(jìn)行代碼檢查
Linting是一個(gè)檢查代碼質(zhì)量的過程。linting工具會(huì)掃描代碼并檢查常見的樣式錯(cuò)誤。例如,Python lint通常檢查不符合廣泛使用的風(fēng)格指南(如Pep8)的代碼。
NbQa是一個(gè)可以讓你在jupiternotebook上運(yùn)行任何標(biāo)準(zhǔn)python linter的工具。下面的代碼可以通過這個(gè)工具訪問:pylint, black, auto flake, check-ast, doctest, flake8, mypy和yapf。
要安裝,只需運(yùn)行以下程序。
- pip install nbqa
讓我們在我最近創(chuàng)建的notebook上運(yùn)行pylint,這是一個(gè)常用的python linter。為此,您需要在命令行上運(yùn)行以下命令。
- $ nbqa pylint dataframe_basics.ipynb
這給了我一個(gè)標(biāo)準(zhǔn)的pylint輸出,它突出顯示了代碼中的錯(cuò)誤。

使用jupyter-nbrequirements管理依賴項(xiàng)
您使用notebook完成的每個(gè)項(xiàng)目可能需要不同的依賴項(xiàng)集。傳統(tǒng)上,這些是在jupiternotebook外部使用虛擬環(huán)境管理的。
Jupyter nbrerequirements是一個(gè)工具,它可以讓你管理依賴關(guān)系,并創(chuàng)建一個(gè)獨(dú)立的優(yōu)化環(huán)境,所有這些都在notebook中管理。
要開始使用pip安裝庫并使用下面所示的命令啟用notebook擴(kuò)展名。
- $ pip install jupyter-nbrequirements
- $ jupyter nbextension install --user --py jupyter_nbrequirements
您可以通過使用單元魔術(shù)命令或使用將在notebook頂部顯示的UI來在notebook中安裝庫。

要使用單元格魔法安裝像pandas這樣的庫,只需在notebook單元格中輸入以下內(nèi)容。
- %dep add pandas --version ">=0.24.0"
使用nbval進(jìn)行驗(yàn)證
正如本文前面所描述的,notebook最常用于模型的探索性分析和初始開發(fā)。通常,存儲(chǔ)這種類型的分析和最初的項(xiàng)目開發(fā)是非常有用的,既可以用于文檔目的,也可以用于將來可能基于這項(xiàng)工作的發(fā)現(xiàn)進(jìn)行構(gòu)建。
py測試插件nbval是驗(yàn)證存儲(chǔ)的notebook的有用工具。Nbval將自動(dòng)運(yùn)行notebook中的每個(gè)單元格,并檢查當(dāng)前輸出是否與存儲(chǔ)在上一個(gè)保存版本的.ipynb文件中的輸出匹配。這作為對底層源代碼中沒有任何更改的檢查,從而驗(yàn)證原始分析或?qū)嶒?yàn)的結(jié)果仍然是可靠的。
要使用此工具,首先通過以下命令進(jìn)行pip安裝。
- pip install nbval
通過運(yùn)行以下命令,可以對目錄中包含的所有文件執(zhí)行測試。
- py.test --nbval
或者在一個(gè)特定的notebook上運(yùn)行這行代碼。
我在現(xiàn)有的兩本notebook上進(jìn)行測試。第一個(gè)運(yùn)行沒有錯(cuò)誤,并給出如下輸出。

下面給出了一個(gè)notebook測試失敗的例子。

雖然notebook經(jīng)常用于探索性分析和初始模型開發(fā),而不是生產(chǎn)代碼,但仍然應(yīng)該被視為一個(gè)重要的工作存儲(chǔ)。最初的實(shí)驗(yàn)和分析是過去結(jié)果的有用記錄,在以后的日子里應(yīng)該可以回到notebook上建立你的工作。因此,值得探索的工具可以幫助使在notebook中編寫的代碼更加健壯和可復(fù)制。
本文介紹了四種工具,它們可以幫助使notebook中的代碼更好、更可重用。有關(guān)可重復(fù)數(shù)據(jù)科學(xué)代碼的更多提示,請參閱下面我之前的文章。