in 11_realtime/flightstxf/flights_transforms.py [0:0]
def create_features_and_label(event, for_training):
try:
model_input = {}
if for_training:
model_input.update({
'ontime': 1.0 if float(event['ARR_DELAY'] or 0) < 15 else 0,
})
# features for both training and prediction
model_input.update({
# same as in ch9
'dep_delay': event['DEP_DELAY'],
'taxi_out': event['TAXI_OUT'],
# distance is not in wheelsoff
'distance': approx_miles_between(event['DEP_AIRPORT_LAT'], event['DEP_AIRPORT_LON'],
event['ARR_AIRPORT_LAT'], event['ARR_AIRPORT_LON']),
'origin': event['ORIGIN'],
'dest': event['DEST'],
'dep_hour': to_datetime(event['DEP_TIME']).hour,
'is_weekday': 1.0 if to_datetime(event['DEP_TIME']).isoweekday() < 6 else 0.0,
'carrier': event['UNIQUE_CARRIER'],
'dep_airport_lat': event['DEP_AIRPORT_LAT'],
'dep_airport_lon': event['DEP_AIRPORT_LON'],
'arr_airport_lat': event['ARR_AIRPORT_LAT'],
'arr_airport_lon': event['ARR_AIRPORT_LON'],
# newly computed averages
'avg_dep_delay': event['AVG_DEP_DELAY'],
'avg_taxi_out': event['AVG_TAXI_OUT'],
})
if for_training:
model_input.update({
# training data split
'data_split': get_data_split(event['FL_DATE'])
})
else:
model_input.update({
# prediction output should include timestamp
'event_time': event['WHEELS_OFF']
})
yield model_input
except Exception as e:
# if any key is not present, don't use for training
logging.warning('Ignoring {} because: {}'.format(event, e), exc_info=True)
pass