File size: 4,266 Bytes
6a81a2d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
95
96
97
98
99
100
import streamlit as st
import pickle
import numpy as np
import pandas as pd

# Custom CSS for background and white button
css = """

<style>

    .stForm  {

        background-image: url("https://images.rawpixel.com/image_800/cHJpdmF0ZS9sci9pbWFnZXMvd2Vic2l0ZS8yMDI0LTAxL2ZyZWVpbWFnZXNjb21wYW55X2JsYWNrX2FuZF93aGl0ZV9hZXN0aGV0aWNfcGhvdG9ncmFwaHlfb2ZfYWlycF83ZWM0ZmM0YS03NzA5LTRkZjYtOTNjZC0xZWJlNmJkZmZiZTVfMS5qcGc.jpg");

        background-position: center;

        background-repeat: no-repeat;

        background-attachment: fixed;

        margin: 0;

        padding: 0;

    }

    

    .stButton > button {

        background-color: white;

        color: black;

    }

</style>

"""

# Inject custom CSS
st.markdown(css, unsafe_allow_html=True)

# Model loading
model_path = 'model.pkl'
with open(model_path, 'rb') as file:
    model = pickle.load(file)

# Options
sourceOptions = ['Banglore', 'Chennai', 'Delhi', 'Kolkata', 'Mumbai']
destinationOptions = ['Banglore', 'Cochin', 'Delhi', 'Hyderabad', 'Kolkata', 'New Delhi']
airlineOptions = {0: 'Air Asia', 1: 'Air India', 2: 'GoAir', 3: 'IndiGo', 4: 'Jet Airways',
                  5: 'Jet Airways Business', 6: 'Multiple carriers',
                  7: 'Multiple carriers Premium economy', 8: 'SpiceJet', 9: 'Trujet',
                  10: 'Vistara', 11: 'Vistara Premium economy'}
totalStopsOptions = {0: 'non stop', 1: '1 stop', 2: '2 stop', 3: '3 stop', 4: '4 stop'}

def prepare_input_data(

    source, destination, airline, totalStops, dateOfJourney, depTime, arrivalTime,

    inFlightMealNotIncluded, noCheckInBaggageIncluded

):
    day_of_journey = dateOfJourney.day
    month_of_journey = dateOfJourney.month
    dep_hour = depTime.hour
    dep_min = depTime.minute
    arrival_hour = arrivalTime.hour
    arrival_min = arrivalTime.minute

    duration_minutes = (arrival_hour * 60 + arrival_min) - (dep_hour * 60 + dep_min)
    if duration_minutes < 0: 
        duration_minutes += 24 * 60

    source_encoded = [1 if source == s else 0 for s in sourceOptions]
    destination_encoded = [1 if destination == d else 0 for d in destinationOptions]
    airline_encoded = [key for key, value in airlineOptions.items() if value == airline][0]
    total_stops_encoded = [key for key, value in totalStopsOptions.items() if value == totalStops][0]

    in_flight_meal = 1 if inFlightMealNotIncluded == "Yes" else 0
    no_check_in_baggage = 1 if noCheckInBaggageIncluded == "Yes" else 0
    input_features = (
        [day_of_journey, month_of_journey, dep_hour, dep_min, arrival_hour, arrival_min, duration_minutes]
        + source_encoded
        + destination_encoded
        + [total_stops_encoded, airline_encoded, in_flight_meal, no_check_in_baggage]
    )
    return np.array([input_features])

# Create a form
with st.form(key="my_form"):
    st.markdown("<h1 style='text-align: center; background-color: #32bbef;'>Flight Fare Prediction ML App</h1>", unsafe_allow_html=True)
    source = st.selectbox("Source", options=sourceOptions)
    destination = st.selectbox("Destination", options=destinationOptions)
    airline = st.selectbox("Airline", options=list(airlineOptions.values()))
    totalStops = st.selectbox("Total Stops", options=list(totalStopsOptions.values()))
    dateOfJourney = st.date_input("Date of Journey")
    depTime = st.time_input("Dep Time (HH:MM):")
    arrivalTime = st.time_input("Arrival Time (HH:MM)")
    inFlightMealNotIncluded = st.selectbox("In Flight Meal Not Included", options=["Select", "Yes", "No"])
    noCheckInBaggageIncluded = st.selectbox("No check-in Baggage Included", options=["Select", "Yes", "No"])

    submit_button = st.form_submit_button(label="Predict Flight Price")

# Handle form submission
if submit_button:
    # Prepare input data
    input_data = prepare_input_data(
        source, destination, airline, totalStops, dateOfJourney, depTime, arrivalTime,
        inFlightMealNotIncluded, noCheckInBaggageIncluded
    )

    # Predict flight price
    try:
        prediction = model.predict(input_data)
        st.success(f"Expected Flight Fare is: ₹{prediction[0]:,.2f}")
    except Exception as e:
        st.error(f"Error in prediction: {e}")