def classify_flight_delays_realtime(): """POST API for classifying flight delays""" # Define the form fields to process api_field_type_map = \ { "DepDelay": float, "Carrier": str, "FlightDate": str, "Dest": str, "FlightNum": str, "Origin": str } # Fetch the values for each field from the form object api_form_values = {} for api_field_name, api_field_type in api_field_type_map.items(): api_form_values[api_field_name] = request.form.get(api_field_name, type=api_field_type) # Set the direct values, which excludes Date prediction_features = {} for key, value in api_form_values.items(): prediction_features[key] = value print api_form_values['Origin'] print api_form_values['Dest'] # Set the derived values prediction_features['Distance'] = predict_utils.get_flight_distance( client, api_form_values['Origin'], api_form_values['Dest']) print prediction_features['Distance'] # # Turn the date into DayOfYear, DayOfMonth, DayOfWeek # date_features_dict = predict_utils.get_regression_date_args( # api_form_values['FlightDate'] # ) # for api_field_name, api_field_value in date_features_dict.items(): # prediction_features[api_field_name] = api_field_value # # Add a timestamp # prediction_features['Timestamp'] = predict_utils.get_current_timestamp() # # Create a unique ID for this message # unique_id = str(uuid.uuid4()) # prediction_features['UUID'] = unique_id # message_bytes = json.dumps(prediction_features).encode() # producer.send(PREDICTION_TOPIC, message_bytes) # response = {"status": "OK", "id": unique_id} # return json_util.dumps(response) return "done"
def classify_flight_delays_realtime(): """POST API for classifying flight delays""" # Define the form fields to process api_field_type_map = \ { "dep_delay": int, "carrier": str, "FlightDate": str, "dest": str, "FlightNum": str, "origin": str, "route": str, "arr_time": int, "dep_time": int } # Fetch the values for each field from the form object api_form_values = {} for api_field_name, api_field_type in api_field_type_map.items(): api_form_values[api_field_name] = request.form.get(api_field_name, type=api_field_type) # Set the direct values, which excludes Date prediction_features = {} for key, value in api_form_values.items(): prediction_features[key] = value # Set the derived values prediction_features['distance'] = predict_utils.get_flight_distance( client, api_form_values['origin'], api_form_values['dest']) # Turn the date into DayOfMonth, DayOfWeek date_features_dict = predict_utils.get_regression_date_args( api_form_values['FlightDate']) for api_field_name, api_field_value in date_features_dict.items(): prediction_features[api_field_name] = api_field_value # Create a unique ID for this message unique_id = str(uuid.uuid4()) prediction_features['UUID'] = unique_id # Add a timestamp prediction_features['Timestamp'] = predict_utils.get_current_timestamp() print(json.dumps(prediction_features, sort_keys=True, indent=4)) message_bytes = json.dumps(prediction_features).encode() producer.send(PREDICTION_TOPIC, message_bytes) response = {"status": "OK", "id": unique_id} return json_util.dumps(response)
def classify_flight_delays_realtime(): """POST API for classifying flight delays""" # Define the form fields to process api_field_type_map = { "DepDelay": float, "Carrier": str, "FlightDate": str, "Dest": str, "FlightNum": str, "Origin": str, } # Fetch the values for each field from the form object api_form_values = {} for api_field_name, api_field_type in api_field_type_map.items(): api_form_values[api_field_name] = request.form.get(api_field_name, type=api_field_type) # Set the direct values, which excludes Date prediction_features = {} for key, value in api_form_values.items(): prediction_features[key] = value # Set the derived values prediction_features["Distance"] = predict_utils.get_flight_distance( client, api_form_values["Origin"], api_form_values["Dest"]) # Turn the date into DayOfYear, DayOfMonth, DayOfWeek date_features_dict = predict_utils.get_regression_date_args( api_form_values["FlightDate"]) for api_field_name, api_field_value in date_features_dict.items(): prediction_features[api_field_name] = api_field_value # Add a timestamp prediction_features["Timestamp"] = predict_utils.get_current_timestamp() # Create a unique ID for this message unique_id = str(uuid.uuid4()) prediction_features["UUID"] = unique_id # Encode the JSON prediction message in bytes print(json.dumps(prediction_features, sort_keys=True, indent=4)) message_bytes = json.dumps(prediction_features).encode() # Send the prediction message using producer.produce(PREDICTION_TOPIC, message_bytes, callback=delivery_report) producer.flush() response = {"status": "OK", "id": unique_id} return json_util.dumps(response)
def classify_flight_delays_realtime(): """POST API for classifying flight delays""" # Define the form fields to process api_field_type_map = \ { "DepDelay": float, "Carrier": str, "FlightDate": str, "Dest": str, "FlightNum": str, "Origin": str } # Fetch the values for each field from the form object api_form_values = {} for api_field_name, api_field_type in api_field_type_map.items(): api_form_values[api_field_name] = request.form.get(api_field_name, type=api_field_type) # Set the direct values, which excludes Date prediction_features = {} for key, value in api_form_values.items(): prediction_features[key] = value # Set the derived values prediction_features['Distance'] = predict_utils.get_flight_distance( client, api_form_values['Origin'], api_form_values['Dest'] ) # Turn the date into DayOfYear, DayOfMonth, DayOfWeek date_features_dict = predict_utils.get_regression_date_args( api_form_values['FlightDate'] ) for api_field_name, api_field_value in date_features_dict.items(): prediction_features[api_field_name] = api_field_value # Add a timestamp prediction_features['Timestamp'] = predict_utils.get_current_timestamp() # Create a unique ID for this message unique_id = str(uuid.uuid4()) prediction_features['UUID'] = unique_id message_bytes = json.dumps(prediction_features).encode() producer.send(PREDICTION_TOPIC, message_bytes) response = {"status": "OK", "id": unique_id} return json_util.dumps(response)
def regress_flight_delays(): api_field_type_map = \ { "DepDelay": int, "Carrier": str, "FlightDate": str, "Dest": str, "FlightNum": str, "Origin": str } api_form_values = {} for api_field_name, api_field_type in api_field_type_map.items(): api_form_values[api_field_name] = request.form.get(api_field_name, type=api_field_type) # Set the direct values prediction_features = {} prediction_features['Origin'] = api_form_values['Origin'] prediction_features['Dest'] = api_form_values['Dest'] prediction_features['FlightNum'] = api_form_values['FlightNum'] # Set the derived values prediction_features['Distance'] = predict_utils.get_flight_distance( client, api_form_values['Origin'], api_form_values['Dest']) # Turn the date into DayOfYear, DayOfMonth, DayOfWeek date_features_dict = predict_utils.get_regression_date_args( api_form_values['FlightDate']) for api_field_name, api_field_value in date_features_dict.items(): prediction_features[api_field_name] = api_field_value # Vectorize the features feature_vectors = vectorizer.transform([prediction_features]) # Make the prediction! result = regressor.predict(feature_vectors)[0] # Return a JSON object result_obj = {"Delay": result} return json.dumps(result_obj)
def classify_flight_delays(): """POST API for classifying flight delays""" api_field_type_map = \ { "DepDelay": float, "Carrier": str, "FlightDate": str, "Dest": str, "FlightNum": str, "Origin": str } api_form_values = {} for api_field_name, api_field_type in api_field_type_map.items(): api_form_values[api_field_name] = request.form.get(api_field_name, type=api_field_type) # Set the direct values, which excludes Date prediction_features = {} for key, value in api_form_values.items(): prediction_features[key] = value # Set the derived values prediction_features['Distance'] = predict_utils.get_flight_distance( client, api_form_values['Origin'], api_form_values['Dest'] ) # Turn the date into DayOfYear, DayOfMonth, DayOfWeek date_features_dict = predict_utils.get_regression_date_args( api_form_values['FlightDate'] ) for api_field_name, api_field_value in date_features_dict.items(): prediction_features[api_field_name] = api_field_value # Add a timestamp prediction_features['Timestamp'] = predict_utils.get_current_timestamp() client.agile_data_science.prediction_tasks.insert_one( prediction_features ) return json_util.dumps(prediction_features)
def regress_flight_delays(): api_field_type_map = \ { "DepDelay": int, "Carrier": str, "FlightDate": str, "Dest": str, "FlightNum": str, "Origin": str } api_form_values = {} for api_field_name, api_field_type in api_field_type_map.items(): api_form_values[api_field_name] = request.form.get(api_field_name, type=api_field_type) # Set the direct values prediction_features = {} prediction_features['Origin'] = api_form_values['Origin'] prediction_features['Dest'] = api_form_values['Dest'] prediction_features['FlightNum'] = api_form_values['FlightNum'] # Set the derived values prediction_features['Distance'] = predict_utils.get_flight_distance(client, api_form_values['Origin'], api_form_values['Dest']) # Turn the date into DayOfYear, DayOfMonth, DayOfWeek date_features_dict = predict_utils.get_regression_date_args(api_form_values['FlightDate']) for api_field_name, api_field_value in date_features_dict.items(): prediction_features[api_field_name] = api_field_value # Vectorize the features feature_vectors = vectorizer.transform([prediction_features]) # Make the prediction! result = regressor.predict(feature_vectors)[0] # Return a JSON object result_obj = {"Delay": result} return json.dumps(result_obj)