我正在做一個 ML 專案并決定使用類來組織我的代碼。雖然,我不確定我的方法是否最佳。如果您能分享最佳實踐,以及您將如何應對類似挑戰,我將不勝感激:
讓我們專注于預處理模塊,我在其中創建了Preprocessor類。
這個類有 3 種資料操作方法,每一種都將資料幀作為輸入并添加一個特征。每種方法的輸出都可以是另一種方法的輸入。
我還有第四個包裝方法,它采用這 3 個方法,將它們鏈接起來并創建最終輸出:
def wrapper(self):
output = self.method_1(self.df)
output = self.method_2(output)
output = self.method_3(output)
return output
當我想使用該類時,我正在使用df創建實體并從中呼叫包裝函式。這感覺不自然,讓我覺得有更好的方法來做到這一點。
import A_class
instance = A_class(df)
output = instance.wrapper()
uj5u.com熱心網友回復:
如果您需要跟蹤/修改物件的內部狀態,類非常有用。但它們并不是讓您的代碼僅按現有組織起來的神奇事物。如果您所擁有的只是一個預處理管道,它接收一些資料并以直線方式通過方法運行它,那么常規函式通常會不那么麻煩。
根據您提供的背景關系,我可能會執行以下操作:
pipelines.py
def preprocess_data_xyz(data):
"""
Takes a dataframe of nature XYZ and returns it after
running it through the necessary preprocessing steps.
"""
step_1 = func_1(data)
step_2 = func_2(step_1)
step_3 = func_3(step_2)
return step_3
def func_1(data):
"""Does X to data."""
pass
# etc ...
analysis.py
import pandas as pd
from pipelines import preprocess_data_xyz
data_xyz = pd.DataFrame( ... )
preprocessed_data_xyz = preprocess_data_xyz(data=data_xyz)
選擇更好的變數和函式也組織代碼的主要組成部分-應更換func_1,與描述它做什么資料的名稱(類似add_numerical_column,parse_datetime_column等等)。對于data_xyz變數也是如此。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/340723.html
