File size: 4,204 Bytes
48fed9c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fde95e9
48fed9c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bc740e8
 
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
101
import pandas as pd
import pickle
import gradio as gr
from sklearn.preprocessing import LabelEncoder

# --- 1. Load the original dataset to get categorical values and create encoders ---
# Make sure this path is correct if your dataset location has changed
df_original = pd.read_csv('AB_ELEVATORS_DATASET_final.csv')

categorical_cols_original = [
    'BRAND NAME', 'LIFT_TYPE', 'DOOR_FRAME', 'DOOR_TYPE', 'CABIN_MATERIAL', 'MOTOR_TYPE'
]
numerical_cols_original = [
    'PASSENGERS CAPACITY', 'SPEED_MPS', 'FLOORS'
]

# Store label encoders for each column
encoders = {}
for col in categorical_cols_original:
    le = LabelEncoder()
    le.fit(df_original[col])
    encoders[col] = le

# Create mappings for Gradio dropdowns (original string values)
categorical_options = {
    col: list(df_original[col].unique()) for col in categorical_cols_original
}

# --- 2. Load the trained model ---
with open("elevator_model(1).pkl", "rb") as f:
    model = pickle.load(f)

# --- 3. Define the prediction function ---
def predict_price(
    brand_name_str,
    lift_type_str,
    door_frame_str,
    door_type_str,
    cabin_material_str,
    motor_type_str,
    passengers_capacity,
    speed_mps,
    floors
):
    # Encode categorical inputs using the fitted encoders
    brand_name_encoded = encoders['BRAND NAME'].transform([brand_name_str])[0]
    lift_type_encoded = encoders['LIFT_TYPE'].transform([lift_type_str])[0]
    door_frame_encoded = encoders['DOOR_FRAME'].transform([door_frame_str])[0]
    door_type_encoded = encoders['DOOR_TYPE'].transform([door_type_str])[0]
    cabin_material_encoded = encoders['CABIN_MATERIAL'].transform([cabin_material_str])[0]
    motor_type_encoded = encoders['MOTOR_TYPE'].transform([motor_type_str])[0]

    # Create DataFrame with correct lowercased and snake_cased column names and order
    input_data = pd.DataFrame([[
        brand_name_encoded,
        lift_type_encoded,
        door_frame_encoded,
        door_type_encoded,
        cabin_material_encoded,
        motor_type_encoded,
        passengers_capacity,
        speed_mps,
        floors
    ]], columns=[
        'brand_name', 'lift_type', 'door_frame', 'door_type', 'cabin_material',
        'motor_type', 'passengers_capacity', 'speed_mps', 'floors'
    ])

    prediction = model.predict(input_data)[0]
    return f"Predicted Price: ₹{prediction:,.2f}", "VISIT AGAIN 😊"

# --- 4. Create Gradio Interface ---
inputs = [
    gr.Dropdown(categorical_options['BRAND NAME'], label="Brand Name", value=categorical_options['BRAND NAME'][0]),
    gr.Dropdown(categorical_options['LIFT_TYPE'], label="Lift Type", value=categorical_options['LIFT_TYPE'][0]),
    gr.Dropdown(categorical_options['DOOR_FRAME'], label="Door Frame", value=categorical_options['DOOR_FRAME'][0]),
    gr.Dropdown(categorical_options['DOOR_TYPE'], label="Door Type", value=categorical_options['DOOR_TYPE'][0]),
    gr.Dropdown(categorical_options['CABIN_MATERIAL'], label="Cabin Material", value=categorical_options['CABIN_MATERIAL'][0]),
    gr.Dropdown(categorical_options['MOTOR_TYPE'], label="Motor Type", value=categorical_options['MOTOR_TYPE'][0]),
    gr.Slider(minimum=df_original['PASSENGERS CAPACITY'].min(), maximum=df_original['PASSENGERS CAPACITY'].max(), step=1, label="Passengers Capacity", value=int(df_original['PASSENGERS CAPACITY'].mean())),
    gr.Slider(minimum=df_original['SPEED_MPS'].min(), maximum=df_original['SPEED_MPS'].max(), step=0.1, label="Speed (MPS)", value=df_original['SPEED_MPS'].mean()),
    gr.Slider(minimum=df_original['FLOORS'].min(), maximum=df_original['FLOORS'].max(), step=1, label="Floors", value=int(df_original['FLOORS'].mean()))
]

outputs = [
    gr.Textbox(label="Prediction Result"),
    gr.Markdown()
]

iface = gr.Interface(
    fn=predict_price,
    inputs=inputs,
    outputs=outputs,
    title="AB ELEVATOR Company - Lift Quotation",
    description="<h1 style='color: gold; border: 2px solid black; padding: 10px; text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;'>WELCOME TO AB ELEVATORS</h1>", # Styled welcome message
    live=False
)

# Launch the interface
iface.launch()
iface.launch(server_name="0.0.0.0", server_port=7860)