日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
用papermill參數(shù)化和自動化Jupyter

Python中文社區(qū)(ID:python-china)

建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁設(shè)計師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁設(shè)計技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)公司專業(yè)提供成都網(wǎng)站設(shè)計、成都做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站制作(企業(yè)站、成都響應(yīng)式網(wǎng)站建設(shè)公司、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗的提升,我們力求做到極致!

你是否曾經(jīng)創(chuàng)建過 Jupyter notebook 并希望可以使用一組不同的參數(shù)生成notebook?這樣做的話你可能至少執(zhí)行了以下操作之一:

?編輯單元格中的變量并重新運行notebook,根據(jù)需要保存副本。?保存了notebook的副本,并且可能修改了代碼以直接在 .ipynb 文件中編輯值并重新運行notebooks?構(gòu)建了一些自定義代碼以使用從數(shù)據(jù)庫或配置文件加載的數(shù)據(jù)設(shè)置變量,然后重新運行notebook

這個問題有一個很好的解決方案,可以將交互式筆記本參數(shù)化并與自動化作業(yè)很好地共存,這就是所謂的papermill。

動機

許多notebook用戶使用在其notebook頂部附近指定一個單元格作為全局變量的標(biāo)準(zhǔn)做法。然后修改單元格中的值并運行整個notebook以獲得不同的結(jié)果。為了保持輸出,作者將手動下載另一種格式的notebook或?qū)⑵淞泶鏋椴煌膎otebook文件。但是僅使用notebook服務(wù)器和這些手動方法很快就會變得混亂且難以跟蹤,更不用說容易出錯了。你編輯的是哪個notebook? Papermill 有助于解決這個問題。在這篇文章中,我將介紹 papermill 和基本用法,通過一個參數(shù)化的例子,最后談?wù)勈褂?cron 完全調(diào)度和自動化 notebook 執(zhí)行的方法。

對于papermill,notebook中的一個特殊單元格被指定為參數(shù)。當(dāng) papermill 通過命令行界面 (CLI) 或使用 Python API 執(zhí)行參數(shù)化notebook時,參數(shù)會傳入并在后續(xù)單元中執(zhí)行。這允許notebook以不同的參數(shù)快速運行多次。然后可以將生成的執(zhí)行后的notebook保存在各種位置,包括本地或云存儲。

安裝

要安裝 papermill,請使用 pip。我建議使用 virtualenv 或 conda 的虛擬環(huán)境。我經(jīng)常推薦使用 pyenv 來安裝最新的 Python 版本并創(chuàng)建一個 virtualenv虛擬環(huán)境。

 
 
 
 
  1. pip install papermill

如果您想使用各種輸入和輸出選項,如 Amazon 的 s3 或 Microsoft 的 azure,您可以安裝所有依賴項。我不會在這里詳細介紹,但文檔涵蓋了這些選項,你甚至可以擴展 papermill 為notebooks的輸入/輸出 (I/O) 添加其他處理程序。

 
 
 
 
  1. pip install papermill[all]

基本使用

大多數(shù)用戶想要用 papermill 做的第一件事就是參數(shù)化notebook。一旦您運行了 Jupyter 并打開了一個notebook,您需要做的就是將參數(shù)標(biāo)簽添加到包含參數(shù)的單元格中。

保存notebook,現(xiàn)在您可以使用 papermill 執(zhí)行它了。對于示例notebook,請使用 CLI 運行notebook,并提供您自己的名稱。

 
 
 
 
  1. papermill -p name Matt papermill_example1.ipynb papermill_matt.ipynb

此命令告訴 papermill 執(zhí)行輸入 notebook papermill_example1.ipynb 并將輸出寫入 papermill_matt.ipynb,同時將參數(shù)名稱設(shè)置為值 Matt。如果您打開生成的notebook,將在帶有注入?yún)?shù)標(biāo)簽的參數(shù)標(biāo)記之后包含一個新單元格,如下所示。

您現(xiàn)在應(yīng)該看到如何根據(jù)需要添加盡可能多的參數(shù),以便從現(xiàn)有notebook制作新notebook。將主notebook(在我們的例子中是papermill_example1.ipynb)想象成一個模板,您可以使用它通過快速注入?yún)?shù)來制作任意數(shù)量的副本。

API 的基本使用

您可能希望使用 Python 代碼獲取或構(gòu)建您注入的參數(shù),因此還可以使用 Python API 來執(zhí)行 papermill。我們可以在 Python 腳本中實現(xiàn)與上述完全相同的結(jié)果(或在notebook中,它在那里也能很好地工作 - 并且會動態(tài)地向您顯示進度)。

 
 
 
 
  1. import papermill as pm 
  2. name = "Matt" 
  3. res = pm.execute_notebook( 
  4.     'papermill_example1.ipynb', 
  5.     'papermill_{name}.ipynb', 
  6.     parameters = dict(namename=name) 
  7. {"version_major":2,"version_minor":0,"model_id":"cf8280b216094bf6a75a9536b6505051"}

更多參數(shù)傳遞

到目前為止,我們只傳遞了一個參數(shù),并使用了 -p 選項來實現(xiàn)這一點。您可以通過幾種方式傳遞參數(shù)。

命令行

您可以使用示例notebook運行所有這些內(nèi)容,然后自己查看結(jié)果。首先,您可以從 CLI 指定多個參數(shù)。即使notebook中尚不存在參數(shù),也可以傳入和創(chuàng)建參數(shù)。在這種情況下,papermill 將創(chuàng)建一個注入?yún)?shù)單元并在notebook頂部執(zhí)行它。

這是一個例子。

 
 
 
 
  1. papermill -p name Matt -p level 5 -p factor 0.33 -p alive True papermill_example1.ipynb papermill_matt.ipynb

或者用長選項代替......

 
 
 
 
  1. papermill --parameters name Matt --parameters level 5 --parameters factor 0.33 --parameters alive True papermill_example1.ipynb papermill_matt.ipynb

請注意, -p 或 --parameters 選項將嘗試解析整數(shù)和浮點數(shù),因此如果您希望將它們解釋為字符串,請使用 -r 或 --raw 選項以字符串形式獲取所有值。

 
 
 
 
  1. papermill -r name Matt -r level 5 -r factor 0.33 -r alive True papermill_example1.ipynb papermill_matt.ipynb

您還可以使用 yaml 來指定參數(shù)。這可以通過文件(-f 或 --parameters_file)、字符串(-y 或 --parameters_yaml)或 base64 編碼字符串(-b 或 --parameters_base64)傳入。這允許您傳入更復(fù)雜的數(shù)據(jù),包括列表和字典。

 
 
 
 
  1. papermill papermill_example1.ipynb papermill_matt.ipynb -y " 
  2. name: Matt 
  3. level: 5 
  4. factor: 0.33 
  5. alive: True 
  6. sizes: 
  7.     - 1.0 
  8.     - 2.5 
  9.     - 3.7 
  10. params: 
  11.     x: 3 
  12.     y: 4"

您可以很容易地對字符串進行 base64 編碼。(在 Mac 或 Linux 或 Windows WSL 上notebook文件所在目錄中的 shell 中運行此命令)。

 
 
 
 
  1. echo  " 
  2. name: Matt 
  3. level: 5 
  4. factor: 0.33 
  5. alive: True 
  6. sizes: 
  7.     - 1.0 
  8.     - 2.5 
  9.     - 3.7 
  10. params: 
  11.     x: 3 
  12.     y: 4" > params.yaml

現(xiàn)在您可以運行文件版本。

 
 
 
 
  1. papermill papermill_example1.ipynb papermill_matt.ipynb -f params.yaml

或者base64版本

 
 
 
 
  1. PARAMS=$(cat params.yaml| base64) # makes the base64 version of the yaml file 
  2. papermill papermill_example1.ipynb papermill_matt.ipynb -b $PARAMS

無論哪種方式,你都應(yīng)該了解可以從命令行和 API 將復(fù)雜數(shù)據(jù)傳遞到notebook中。這些示例都使用本地文件系統(tǒng)進行notebook的輸入和輸出,但也可以從 Amazon s3、Azure、Google Cloud Storage 或 Web 服務(wù)器讀取和寫入notebook。

檢查notebook

可以從 CLI 檢查notebook的可用參數(shù)。

 
 
 
 
  1. $ papermill --help-notebook papermill_example1.ipynb 
  2. Usage: papermill [OPTIONS] NOTEBOOK_PATH [OUTPUT_PATH] 
  3. Parameters inferred for notebook 'papermill_example1.ipynb': 
  4.   name: Unknown type (default "Joe")

或者使用 Python API。

 
 
 
 
  1. pm.inspect_notebook('papermill_example1.ipynb') 
 
 
 
 
  1. {'name': {'name': 'name', 
  2.   'inferred_type_name': 'None', 
  3.   'default': '"Joe"', 
  4.   'help': ''}}

執(zhí)行完整的工作流程

papermill的典型工作流程是擁有一個參數(shù)化notebook,使用多個值運行它,然后將生成的notebook轉(zhuǎn)換為另一種格式以供審查或報告。讓我們通過一個示例來了解如何設(shè)置。

首先,我們有一個使用 Yahoo! 金融 API 來獲取股票價格并繪制股票歷史最高價的數(shù)據(jù)(或者至少是過去兩年的最高價,因為我此時只獲取那么多數(shù)據(jù))。

如果要運行此示例,則需要確保已安裝 yfinance API 和 matplotlib。如果需要,您可以使用 pip 安裝兩者。

我們可以使用papermill  CLI 來檢查參數(shù)。

 
 
 
 
  1. $ papermill --help-notebook papermill_example2.ipynb 
  2. Usage: papermill [OPTIONS] NOTEBOOK_PATH [OUTPUT_PATH] 
  3. Parameters inferred for notebook 'papermill_example2.ipynb': 
  4.   symbol: Unknown type (default 'AAPL')

我們將用幾個符號運行這個notebook 。我選擇為此使用 shell 腳本,以便我可以通過計劃的 cron 程序運行它。如果需要,這可以使用簡單的 Python 腳本輕松完成。但是,如果您使用的是虛擬環(huán)境,您最終可能需要一個腳本來確保正確加載 virtualenv。在這種情況下,在整個過程中使用 shell 腳本可能會更容易。

我還將使用 jupyter nbconvert(或者您可以將其作為 jupyter-nbconvert 運行)命令將notebook轉(zhuǎn)換為 html 文件,以便通過 Web 瀏覽器查看。就像 papermill一樣,nbconvert 可通過命令行或使用 Python API 獲得。

自動化腳本 

 
 
 
 
  1. #!/bin/bash 
  2. set -eux 
  3. # activate our virtualenv (this was created using pyenv-virtualenv, yours will be elsewhere) 
  4. source /Users/mcw/.pyenv/versions/3.8.6/envs/pandas/bin/activate 
  5. # get to the script directory if running via cron 
  6. cd $(dirname "${BASH_SOURCE[0]}") 
  7. for S in AAPL MSFT GOOG FB 
  8. do 
  9.         papermill -p symbol $S papermill_example2.ipynb papermill_${S}.ipynb 
  10.         jupyter-nbconvert --no-input --to html papermill_${S}.ipynb 
  11. done

您可以從 shell 運行此命令(在調(diào)整激活虛擬環(huán)境的行之后)。您還可以很容易地安排它在 cron 中定期運行。例如,您可以像下面這樣(使用您自己的路徑)在每個工作日的下午 4 點運行此報告。

 
 
 
 
  1. 00 16 * * mon-fri /Users/mcw/projects/python_blogposts/tools/run_papermill.sh

擴展示例

只需多一點創(chuàng)意(和 nbconvert 上的軟件配置),您就可以將notebooks 輸出為 PDF 或其他格式,通過電子郵件發(fā)送,或?qū)⑺鼈兩蟼鞯椒?wù)器,以便每天更新報告。

請注意,每個符號的notebooks 都保存到本地磁盤。如果需要調(diào)試或進一步工作,它們可以在 Jupyter 服務(wù)器中打開并輕松重新執(zhí)行。請注意,如果您正在運行一個自動化作業(yè),那么每次運行時都會更換notebook。理想情況下,在主模板notebook上工作,然后通過自動化為每個符號生成新版本。

另一個技巧是papermill可以讀寫標(biāo)準(zhǔn)輸入和輸出。這意味著如果您有其他工具將notebook文件作為輸入,則不必將文件寫入磁盤。例如,在上面的 shell 腳本中,我們可以防止為每個符號寫出每個單獨的notebook文件,而是在循環(huán)中執(zhí)行以下操作。

 
 
 
 
  1. papermill -p symbol $S papermill_example2.ipynb | jupyter-nbconvert --stdin --no-input --to html --output report_${S}.html

請注意,如果您這樣做,則需要打開主notebook (papermill_example2.ipynb) 并編輯參數(shù)以調(diào)試問題。但是,如果您需要節(jié)省磁盤空間并且不需要單獨調(diào)試每個notebook的能力,那么這可能更可取。

總結(jié)

Papermill 是一個用于參數(shù)化和執(zhí)行 Jupyter notebook的庫。您可以使用它來自動執(zhí)行您的notebook,其中包含您可以想到的任何參數(shù)集。接著使用 nbconvert 轉(zhuǎn)換notebook,以提供可讀且有用的notebook版本。

notebook自動化還有很多事情要做,但是從 Papermill 開始作為執(zhí)行和參數(shù)化notebook的工具是一個很好的構(gòu)建平臺。


網(wǎng)頁標(biāo)題:用papermill參數(shù)化和自動化Jupyter
URL鏈接:http://www.5511xx.com/article/dpepihs.html