이번에도 특징 공학 과정을 한 번에 처리하는 헬퍼 함수를 정의하자. 이처럼 코드를 모듈화하면 관리하기 쉽다.
def feature_engineer(df): # 연, 월, 일, 요일, 시간 칼럼을 새로 만든다 def create_time_features(df): df['year'] = df['pickup_datetime'].dt.year df['month'] = df['pickup_datetime'].dt.month df['day'] = df['pickup_datetime'].dt.day df['day_of_week'] = df['pickup_datetime'].dt.dayofweek df['hour'] = df['pickup_datetime'].dt.hour df = df.drop(['pickup_datetime'], axis=1) return df # 유클리드 거리를 계산하는 함수 def euc_distance(lat1, long1, lat2, long2): return(((lat1-lat2)**2 + (long1-long2)**2)**0.5) # 이동 거리 칼럼을 추가한다 def create_pickup_dropoff_dist_features(df): df['travel_distance'] = euc_distance(df['pickup_latitude'], df['pickup_longitude'], df['dropoff_latitude'], df['dropoff_longitude']) return df # 공항과 거리 칼럼을 추가한다 def create_airport_dist_features(df): airports = {'JFK_Airport': (-73.78,40.643), 'Laguardia_Airport': (-73.87, 40.77), 'Newark_Airport' : (-74.18, 40.69)} for airport in airports: df['pickup_dist_' + airport] = euc_distance(df['pickup_latitude'], df['pickup_longitude'], airports[airport][1], airports[airport][0]) df['dropoff_dist_' + airport] = euc_distance(df['dropoff_latitude'], df['dropoff_longitude'], airports[airport][1], airports[airport][0]) return df df = create_time_features(df) df = create_pickup_dropoff_dist_features(df) df = create_airport_dist_features(df) df = df.drop(['key'], axis=1) return df