编写一个watchdog.sh脚本_五大原因!为何要将Jupyter Notebook转换为python脚本?
大多數數據科學在線課程都把Jupyter Notebook作為教學媒介,這是因為初學者在Jupyter Notebook的單元格中編寫代碼,比編寫包含類和函數的腳本更容易。
另一個原因在于它使瀏覽和繪制數據變得容易。鍵入"Shift + Enter"時,你可以立即看到代碼的結果,這使我們能夠輕松地確定代碼是否有效。
然而,當處理更多數據科學項目時,Jupyter Notebook也存在幾個缺點:
· 缺乏條理性:隨著代碼變大,我們所編寫的東西越來越難以跟蹤。無論使用多少標記將Notebook分隔成不同的部分,斷開連接的單元格都使用戶難以專注于代碼功能。
· 難以試驗:你需要使用不同的數據處理方法進行測試,為機器學習算法選擇不同的參數,查看準確性是否提高。但每次試驗新方法時,都需要查找和重新運行相關單元格,這耗神耗時,尤其是處理或培訓過程需要很長時間才能運行時。
· 可重復性低:如果你想要使用結構略有不同的新數據,識別其中的錯誤源很難。
· 難以調試:當你在代碼中收到錯誤時,無法準確判斷出錯的原因,是代碼還是數據更改?如果是代碼出錯,具體是哪個部分?
· 不適合生產:Jupyter Notebook與其他工具配合使用效果不佳。使用其他工具時,從Jupyter Notebook運行代碼并不容易。
圖源:unsplash一定有更好的方法來處理代碼,所以我決定嘗試一下腳本。為了減少混淆,引用.py文件時,在本文中使用單詞"腳本"。
組織
Jupyter Notebook中的單元格很難將代碼組織成不同的部分。使用腳本可以創建幾個小函數,每個函數指定代碼的功能。
更妙的是,如果這些函數可以分類在同類別,如處理數據的函數時,可以將它們放在同一個類中。
每當我們想要處理數據時,就可以利用類預處理中的函數。
鼓勵實驗
當我們想要嘗試對預處理數據的不同方法時,只需添加或刪除函數,這樣注釋不用害怕破壞代碼。即使碰巧破壞了代碼,也能確切地知道在哪里修復。
提高重復性
使用類和函數,可以使代碼足夠通用,以便能夠和其他數據一起使用。例如,如果我們想在新數據中刪除不同的列,只需將columns_to_drop更改為列的列表,若是刪除,代碼也將順利運行。
columns_to_drop =config.columns.to_dropdatetime_column =config.columns.datetime.sentimentdropna_columns =config.columns.drop_naprocessor =Preprocess(columns_to_drop,datetime_column, dropna_columns)還可以創建一個管道來指定處理和訓練數據的步驟。一旦擁有管道,我們所需要做的就是使用它對列車和測試數據應用相同的處理。
pipline.fit_transform(data)易于調試
使用函數可以更容易地測試該函數是否產生期望的輸出,我們可以快速地指出代碼中的哪些地方需要更改以生成想要的輸出。
defextract_date_hour_minute(string: str):'''Extract datahour and minute from datetime string'''try:return string[:16]exceptTypeError: return np.nandeftest_extract_date_hour_minute(): '''Test whether the function extractdate, hour, and minute '''string ='2020-07-30T23:25:31.036+03:00'assertextract_date_hour_minute(string) =='2020-07-30T23:25'如果所有測試都通過了,但是在運行代碼時仍然存在錯誤,那么我們就知道接下來應該查看這些數據。例如,在通過上面的測試后,在運行腳本時仍然有一個類型錯誤,這使數據中有空值。那就只需要處理這個問題,就可以平穩運行代碼。
適于生產
在多個腳本中使用不同的函數:
from preprocess import preprocessfrom model import run_modelfrom predict import predictdefmain(config): df =preprocess(config) df =run_model(config) df, df_scale, min_day, max_day, accuracy =predict(df, config)或者添加配置文件來控制變量的值。這可以讓我們不必浪費時間去跟蹤代碼中的特定變量來更改其值。
columns:to_drop:#- keywords #- entities - code - error - warnings binary_columns:- sentiment - Diff datetime:time: Datesentiment: crawleddrop_na:- sentiment - usage - crawled - emotion to_predict: sentiment你還可以輕松地添加工具來跟蹤實驗,比如MLFlow,或者添加工具來處理配置,比如http://Hydra.cc。
圖源:unsplash不喜歡Jupyter Notebook,直到迫使自己做出調整
我以前一直使用Jupyter Notebook。當一些數據科學家建議將Notebook筆記本換成腳本從而避免上述一些問題時,我不理解也不愿意這么做,因為我不喜歡運行單元格時無法看到這種不確定性。
但是,當我在新公司開始第一個真正的數據科學項目時,Jupyter Notebook的缺點越來越大,所以我決定踏出舒適區,用腳本進行實驗。
起初,我很不習慣,但也注意到了使用腳本的好處。當代碼被組織成不同的函數、類和等多個腳本(每個腳本都用于不同的目的,如預處理、培訓和測試)時,我開始感到工作更有條理性。
我在建議讀者不要用Jupyter Notebook?
并不是。如果代碼比較小,且不打算將代碼投入生產,仍然可以使用Jupyter Notebook。當想要分析、可視化數據時,也可以使用Jupyter Notebook。還可以用它來解釋如何使用一些python庫。例如,Khuyen Tran主要使用這個存儲庫中的Jupyter Notebook作為媒介來解釋他所有文章中提到的代碼。
如果你不習慣在腳本中編寫所有內容,那么你可以將腳本和Jupyter Notebook用于不同的目的。例如,可以在腳本中創建類和函數,然后將它們導入到Notebook中,這樣就不那么凌亂了。
另一種方法是在寫完筆記本后把它變成腳本,但組織筆記本中的代碼(比如把它們放到函數和類中以及編寫測試函數)通常要花費更長的時間。你可以先寫一個小的函數,再寫一個小的測試函數,可以更快更安全。如果正好想用新的Python庫加速代碼,可以使用已經編寫的測試函數來確保它如期望中那樣工作。
圖源:unsplash除了本文中提到的方法,一定有更多的方法可以解決Jupyter Notebook的缺點。
每個人都有自己提高工作利率的方法。剛從Jupyter Notebook切換到腳本可能不太習慣,因為用腳本編寫代碼不太直觀,但你最終會習慣的。你會開始意識到腳本在凌亂的Jupyter Notebook上有著許多好處,并且會希望用腳本編寫大部分代碼。
不積跬步無以至千里,從細微處開始改變自己吧。
留言點贊關注
我們一起分享AI學習與發展的干貨
編譯組:符馨元、何婧璇
相關鏈接:https://towardsdatascience.com/5-reasons-why-you-should-switch-from-jupyter-notebook-to-scripts-cb3535ba9c95
如轉載,請私信小芯,遵守轉載規范
總結
以上是生活随笔為你收集整理的编写一个watchdog.sh脚本_五大原因!为何要将Jupyter Notebook转换为python脚本?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于经典的名言名句230个
- 下一篇: 怎么设置电脑路由器密码如何将路由器设置密