import gradio as gr import pickle import json import numpy as np # Load model and columns with open("kigali_model.pickle", "rb") as f: model = pickle.load(f) with open("columns.json", "r") as f: data_columns = json.load(f)["data_columns"] # Define the location and property type mappings location_mapping = { 'gacuriro': 1, 'kacyiru': 2, 'kanombe': 3, 'kibagabaga': 4, 'kicukiro': 5, 'kimironko': 6, 'nyamirambo': 7, 'nyarutarama': 8 } property_type_mapping = { 'apartment': 1, 'bungalow': 2, 'house': 3, 'villa': 4 } def transform_data(size_sqm, number_of_bedrooms, number_of_bathrooms, number_of_floors, parking_space, location, property_type): # Prepare the input array x = np.zeros(len(data_columns)) x[0] = size_sqm x[1] = number_of_bedrooms x[2] = number_of_bathrooms x[3] = number_of_floors x[4] = parking_space # Apply location mapping if location in location_mapping: loc_index = data_columns.index(f"Location_{location}") x[loc_index] = 1 # Apply property type mapping if property_type in property_type_mapping: prop_index = data_columns.index(f"Property_Type_{property_type}") x[prop_index] = 1 return np.array([x]) def predict(size_sqm, number_of_bedrooms, number_of_bathrooms, number_of_floors, parking_space, location, property_type): # Transform input data input_data_transformed = transform_data(size_sqm, number_of_bedrooms, number_of_bathrooms, number_of_floors, parking_space, location, property_type) # Predict using the model prediction = model.predict(input_data_transformed) return round(prediction[0], 2) # round prediction for better readability # Define Gradio interface components inputs = [ gr.Number(label="Size (sqm)", value=0), gr.Number(label="Number of Bedrooms", value=0), gr.Number(label="Number of Bathrooms", value=0), gr.Number(label="Number of Floors", value=0), gr.Number(label="Parking Space", value=0), gr.Dropdown(choices=list(location_mapping.keys()), label="Location"), gr.Dropdown(choices=list(property_type_mapping.keys()), label="Property Type") ] outputs = gr.Textbox(label="Prediction (FRW)") # Footer content footer = "Etienne NTAMBARA @AI_Engineer" # Launch the interface gr.Interface( fn=predict, inputs=inputs, outputs=outputs, title="Property Price Prediction", description="Enter property details to get the price prediction.", article=footer ).launch(__debug__=True)