Spaces:
Runtime error
Runtime error
File size: 5,088 Bytes
e428742 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | import streamlit as st
import pickle
import pandas as pd
import sys
import os
# Add the parent directory to the path
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from constants import *
import datetime
transformer_filename = 'saved_models/data_transformer.sav'
delay_carrier_filename = 'saved_models/delay_carrier_lin_reg.sav'
delay_weather_filename = 'saved_models/delay_weather_lin_reg.sav'
delay_nas_filename = 'saved_models/delay_nas_lin_reg.sav'
delay_security_filename = 'saved_models/delay_security_lin_reg.sav'
delay_late_aircraft_filename = 'saved_models/delay_late_aircraft_lin_reg.sav'
cancel_filename = 'saved_models/cancel_log_reg.sav'
transformer = pickle.load(open(transformer_filename, 'rb'))
delay_carrier_lin_reg_model = pickle.load(open(delay_carrier_filename, 'rb'))
delay_weather_lin_reg_model = pickle.load(open(delay_weather_filename, 'rb'))
delay_nas_lin_reg_model = pickle.load(open(delay_nas_filename, 'rb'))
delay_security_lin_reg_model = pickle.load(open(delay_security_filename, 'rb'))
delay_late_aircraft_lin_reg_model = pickle.load(open(delay_late_aircraft_filename, 'rb'))
cancel_lin_reg_model = pickle.load(open(cancel_filename, 'rb'))
def pred():
st.header("Flight Delay and Cancellation Prediction")
st.markdown("Fill in the information about your flight below and we will predict how long the flight may be \
delayed for (or arrive early) and the probability of the flight being cancelled.")
with st.form("flight_details"):
valid_input = True
c1, c2 = st.columns(2)
with c1:
airline = st.selectbox("Airline",
options=[key + ' : ' + value for key, value in airline_name.items()]).split(" : ")[0]
date = st.date_input("Departure Date", value=datetime.date.today(), min_value=datetime.date(2021, 1, 1), max_value=datetime.date(2024, 12, 31))
dpt_airport = st.selectbox("From Airport",
options=airports, index = 236)
dpt_time = int(st.time_input('Expected Departure Time', datetime.time(13, 15)).strftime("%H%M"))
with c2:
flight_num = st.text_input('Flight Number', '1111')
arr_date = st.date_input("Arrival Date", value=datetime.date.today(), min_value=datetime.date(2021, 1, 1), max_value=datetime.date(2024, 12, 31))
arv_airport = st.selectbox("To Airport",
options=airports, index = 39)
arv_time = int(st.time_input('Expected Arrival Time', datetime.time(15, 00)).strftime("%H%M"))
if not flight_num.isnumeric() or int(flight_num) < 0 or int(flight_num) > 9999:
st.write('Please enter a valid flight number between 1 and 9999.')
valid_input = False
elif dpt_airport == arv_airport:
st.write('Please select different departure and arrival airport.')
valid_input = False
else:
valid_input = True
month = date.month
day = date.day
weekday = date.weekday() + 1
submitted = st.form_submit_button("Predict!")
if valid_input and submitted:
dummy_data = [[month, day, weekday, airline, int(flight_num), dpt_airport, arv_airport, dpt_time, arv_time]]
dummy_df = pd.DataFrame(dummy_data, columns=['MONTH', 'DAY_OF_MONTH',
'DAY_OF_WEEK', 'OP_UNIQUE_CARRIER', 'OP_CARRIER_FL_NUM',
'ORIGIN', 'DEST', 'CRS_DEP_TIME',
'CRS_ARR_TIME'])
input = transformer.transform(dummy_df)
delay_carrier_pred = delay_carrier_lin_reg_model.predict(input)[0]
delay_weather_pred = delay_weather_lin_reg_model.predict(input)[0]
delay_nas_pred = delay_nas_lin_reg_model.predict(input)[0]
delay_security_pred = delay_security_lin_reg_model.predict(input)[0]
delay_late_aircraft_pred = delay_late_aircraft_lin_reg_model.predict(input)[0]
cancel_pred = cancel_lin_reg_model.predict_proba(input)[0][1] * 100
total_delay = delay_weather_pred + delay_carrier_pred + delay_nas_pred + delay_security_pred + delay_late_aircraft_pred
m1, m2, = st.columns(2)
with m1:
st.metric(label=f"Your flight may be late for", value=f"{round(total_delay)} minutes")
st.metric(label=f"Your flight may be late due to weather for", value=f"{round(delay_weather_pred)} minutes")
st.metric(label=f"Your flight may be late due to nas for", value=f"{round(delay_nas_pred)} minutes")
st.metric(label=f"Your flight may be late due to late aircraft for", value=f"{round(delay_late_aircraft_pred)} minutes")
with m2:
st.metric(label=f"The probability of your flight being cancelled is", value=f"{round(cancel_pred)}%")
st.metric(label=f"Your flight may be late due to carrier for", value=f"{round(delay_carrier_pred)} minutes")
st.metric(label=f"Your flight may be late due to security for", value=f"{round(delay_security_pred)} minutes")
pred() |