# !pip install gradio ipywidgets import pandas as pd import gradio as gr import joblib import numpy as np # "Artifacts" pipeline = joblib.load("pipeline.joblib") label_pipeline = joblib.load("label_pipeline.joblib") cities = joblib.load("cities.joblib") classes = joblib.load("classes.joblib") def predict(city, location, area, bedrooms, baths): sample = dict() sample["city"] = city sample["location"] = location sample["area"] = area # Column names matching feature names sample["bedrooms"] = bedrooms sample["baths"] = baths sample = pd.DataFrame([sample]) y_pred = pipeline.predict_proba(sample)[0] y_pred = dict(zip(classes, y_pred)) return y_pred # https://www.gradio.app/guides with gr.Blocks() as demo: #value คือ ค่าเริ่มต้น city = gr.Dropdown(cities, value=cities[0], label="City") location = gr.Textbox(label="Location", placeholder="E.g. Bangkhen") area = gr.Number(label="Area", value=0.5, minimum=0.5, step=0.5) bedrooms = gr.Slider(value=1, label="Bedrooms", minimum=0, maximum=10, step=1) baths = gr.Slider(value=1, label="Baths", minimum=0, maximum=10, step=1) # with gr.Row(): # city_init = np.random.choice(cities) # city = gr.Dropdown(cities, value=city_init, label="City") # location = gr.Textbox(label="Location", placeholder="E.g. Bangken") # with gr.Row(): # area_init = np.random.choice(np.arange(0, 50, 0.5)) # area = gr.Number(label="Area", value=area_init, minimum=0.5, step=0.5) # bedrooms_init = np.random.choice(np.arange(0, 10, 1)) # bedrooms = gr.Slider(value=bedrooms_init, label="Bedrooms", minimum=0, maximum=10, step=1) # baths_init = np.random.choice(np.arange(0, 10, 1)) # baths = gr.Slider(value=baths_init, label="Baths", minimum=0, maximum=10, step=1) predict_btn = gr.Button("Predict", variant="primary") price = gr.Label(label="Price") inputs = [city, location, area, bedrooms, baths] outputs = [price] predict_btn.click(predict, inputs=inputs, outputs=outputs) if __name__ == "__main__": demo.launch() # Local machine only # demo.launch(server_name="0.0.0.0") # LAN access to local machine # demo.launch(share=True) # Public access to local machine