File size: 2,734 Bytes
d0fe3e2 0577c3e d0fe3e2 52bf674 d0fe3e2 0577c3e d0fe3e2 0577c3e 6ac6ef4 d0fe3e2 6ac6ef4 0577c3e 6ac6ef4 0577c3e 6ac6ef4 d0fe3e2 0577c3e 6ac6ef4 0577c3e 6ac6ef4 0577c3e d0fe3e2 0577c3e d0fe3e2 0577c3e d0fe3e2 0577c3e 6ac6ef4 d0fe3e2 6ac6ef4 0577c3e 210f9e3 8f71a16 d0fe3e2 0577c3e ec43e35 |
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 |
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 with zeros
x = np.zeros(len(data_columns))
# Assign input values to the corresponding columns
x[0] = size_sqm
x[1] = number_of_bedrooms
x[2] = number_of_bathrooms
x[3] = number_of_floors
x[5] = parking_space # Ensure that parking_space aligns with the correct index in your model
# Apply location mapping
if location in location_mapping:
loc_index = data_columns.index(location)
x[loc_index] = 1
# Apply property type mapping
if property_type in property_type_mapping:
prop_index = data_columns.index(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"),
# Add new inputs for other columns, like furnished, proximity, etc.
]
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)
|