이 과정을 헬퍼 함수로 생성해 두자. 머신 러닝 워크플로에는 데이터 처리 단계가 너무 많아 관리하기 어려운 경우가 많으므로, 평소에도 코드를 모듈화하는 것이 좋다. 다음 preprocess 함수는 판다스 DataFrame을 입력받아 데이터 전처리를 수행하고, 결과를 다시 DataFrame으로 반환한다.
def preprocess(df): # DataFrame 내 결측값을 제거한다 def remove_missing_values(df): df = df.dropna() return df # 요금 이상치를 제거한다 def remove_fare_amount_outliers(df, lower_bound, upper_bound): df = df[(df['fare_amount'] >= lower_bound) & (df['fare_amount'] <= upper_bound)] return df # 승객 수 이상치를 최빈값으로 대체한다 def replace_passenger_count_outliers(df): mode = df['passenger_count'].mode().values[0] df.loc[df['passenger_count'] == 0, 'passenger_count'] = mode return df # 위도 경도 이상치를 제거한다 def remove_lat_long_outliers(df): # 뉴욕시 경도 범위 nyc_min_longitude = -74.05 nyc_max_longitude = -73.75 # 뉴욕시 위도 범위 nyc_min_latitude = 40.63 nyc_max_latitude = 40.85 # 뉴욕시 반경 내 위치만 남긴다 for long in ['pickup_longitude', 'dropoff_longitude']: df = df[(df[long] > nyc_min_longitude) & (df[long] < nyc_max_longitude)] for lat in ['pickup_latitude', 'dropoff_latitude']: df = df[(df[lat] > nyc_min_latitude) & (df[lat] < nyc_max_latitude)] return df df = remove_missing_values(df) df = remove_fare_amount_outliers(df, lower_bound = 0, upper_bound = 100) df = replace_passenger_count_outliers(df) df = remove_lat_long_outliers(df) return df
이 헬퍼 함수는 프로젝트 폴더 아래의 utils.py 파일에 있다. from utils import preprocess라고 입력하면 헬퍼 함수에 접근할 수 있으며, 함수를 호출해 데이터 전처리를 한 번에 수행할 수 있다. 이처럼 복잡한 전처리 코드도 깔끔하게 관리하자.