# Interface class DataProcessor: def __init__(self, train_data_loader, test_data_loader, data_transformer, model): self.train_data_loader = train_data_loader self.test_data_loader = test_data_loader self.data_transformer = data_transformer self.model = model def run(self): # Load train and test data using data loaders train_df = self.train_data_loader.get_data() test_df = self.test_data_loader.get_data() # Transform the data using the data transformer X_train, y_train, X_test = self.data_transformer.transform_data(train_df, test_df) # Fit the model and make prediction self.model.fit(X_train, y_train) test_df['Vehicles'] = self.model.predict(X_test) # Save the transformed training data and test data self.train_data_loader.save_data(pd.concat([X_train, y_train], axis=1)) self.test_data_loader.save_data(test_df) # Create a data processor instance process = DataProcessor( train_data_loader=CSVDataLoader(file_path='train.csv'), test_data_loader=CSVDataLoader(file_path='test.csv'), data_transformer=DataTransformer(), model=LGBMModel(num_leaves=16, n_estimators=80) ) # Run the data processing pipeline process.run()