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="