Jupyter(iPython)筆記本被當成是一種很好的工具,用於原型代碼和交互式地完成各種機器學習內容。但是,當我使用它,我難免會碰到以下:將jupyter筆記本轉換爲python腳本的最佳實踐
- 筆記本很快變得過於複雜和混亂的維持和進一步提高筆記本,我必須做出Python腳本出來的;
- 當談到產品代碼(例如需要每天重新運行的代碼)時,筆記本再次不是最好的格式。
假設我在jupyter中開發了一個完整的機器學習管道,其中包括從各種來源獲取原始數據,清理數據,特徵工程和訓練模型。現在,通過高效可讀的代碼來製作腳本的最佳邏輯是什麼?我用它對付幾個方面至今:
簡單地轉換.ipynb到的.py和,只有輕微的變化,硬編碼從筆記本的所有管道爲一個Python腳本。
- '+':快速
- ' - ':髒,不靈活,也不方便維護
做一個簡單的腳本有許多功能(大約爲每一個1個功能或兩個單元格),嘗試將管道的各個功能分爲幾個階段,並相應地命名它們。然後通過指定所有參數和全局常量。
- '+':使用更靈活;更可讀的代碼(如果您正確地將流水線邏輯轉換爲函數)
- ' - ':通常情況下,管道不能拆分成邏輯上完成的部分,可能會變成函數,而代碼中沒有任何怪癖。所有這些函數通常只需要在腳本中調用一次,而不是在循環,映射等內部多次調用。此外,每個函數通常會接收之前調用的所有函數的輸出,因此必須將許多參數傳遞給每個函數功能。
與點(2)相同的東西,但現在將所有函數包裝在類中。現在,所有全局常量以及每個方法的輸出都可以存儲爲類屬性。
- 「+」:你不需要很多參數傳遞給每個方法 - 所有已存儲在屬性中前面的輸出
- 「 - 」:一個任務的總體邏輯仍然沒有捕捉到 - 它是數據和機器學習的渠道,而不僅僅是階級。該類的唯一目標是創建,逐個調用所有方法,然後將其刪除。最重要的是,類實現起來相當長。
將筆記本轉換爲具有多個腳本的python模塊。我沒有嘗試過,但我懷疑這是處理這個問題的最長的方法。
我想,這個整體設置在數據科學家中是非常普遍的,但是令人驚訝的是我找不到任何有用的建議。
請朋友們分享您的想法和經驗。你有沒有遇到過這個問題?你是如何處理它的?
你只是想從Notebook文件中提取python代碼嗎? – kxxoling
我做了幾次 - 這只是我在第(1)點提到的方式。它有一些缺點。首先,非靈活的硬代碼。其次,通常你不想逐個執行筆記本中的每個單元格(可能會有很多純粹的可視化或僅僅是過多的單元格),所以在導出後仍然需要清理代碼 - 相同的工作量,就好像您只是手動複製粘貼的單元格一樣。 – kurtosis
您可以編寫腳本來提取所有Python代碼,而不是手動提取。這是你想要的嗎? – kxxoling