Spaces:
Sleeping
Sleeping
import gradio as gr | |
import numpy as np | |
import pandas as pd | |
import os, joblib | |
import re | |
# load model pipeline | |
file_path = os.path.abspath('toolkit/pipeline.joblib') | |
pipeline = joblib.load(file_path) | |
#function to calculate week hour from weekday and hour | |
def calculate_pickup_week_hour(pickup_hour, pickup_weekday): | |
return pickup_weekday * 24 + pickup_hour | |
def predict(origin_lat, origin_lon, Destination_lat, Destination_lon, | |
Trip_distance, dewpoint_2m_temperature, | |
minimum_2m_air_temperature, pickup_weekday, pickup_hour, | |
cluster_id, temperature_range, rain): | |
# Calculate pickup_week_hour | |
pickup_week_hour = calculate_pickup_week_hour(pickup_hour, pickup_weekday) | |
# Modeling | |
try: | |
model_output = abs(int(pipeline.predict(pd.DataFrame([[origin_lat, origin_lon, Destination_lat, Destination_lon, | |
Trip_distance, dewpoint_2m_temperature, | |
minimum_2m_air_temperature, pickup_weekday, pickup_hour, | |
pickup_week_hour, cluster_id, temperature_range, | |
rain]], columns=['Origin_lat', 'Origin_lon', 'Destination_lat', | |
'Destination_lon', 'Trip_distance', | |
'dewpoint_2m_temperature', | |
'minimum_2m_air_temperature', | |
'pickup_weekday', 'pickup_hour', | |
'pickup_week_hour', 'cluster_id', | |
'temperature_range', 'rain'])))) | |
except Exception as e: | |
print(f"Error during prediction: {str(e)}") | |
model_output = 0 | |
output_str = 'Hey there, Your ETA is' | |
dist = 'seconds' | |
return f"{output_str} {model_output} {dist}" | |
# UI layout | |
with gr.Blocks(theme=gr.themes.Soft()) as app: | |
gr.Markdown("# ETA PREDICTION") | |
gr.Markdown("""This app uses a machine learning model to predict the ETA of trips on the Yassir Hailing App.Refer to the expander at the bottom for more information on the inputs.""") | |
with gr.Row(): | |
origin_lat = gr.Slider(2.806, 3.373, step=0.001, interactive=True, value=2.806, label='Origin latitude') | |
origin_lon = gr.Slider(36.589, 36.820, step=0.001, interactive=True, value=36.589, label='Origin longitude') | |
Destination_lat = gr.Slider(2.807, 3.381, step=0.001, interactive=True, value=2.810, label='Destination latitude') | |
Destination_lon = gr.Slider(36.592, 36.819, step=0.001, interactive=True, value=36.596, label='Destination longitude') | |
Trip_distance = gr.Slider(0, 62028, step=1, interactive=True, value=1000, label='Trip distance (M)') | |
cluster_id = gr.Dropdown([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], label="Cluster ID", value=4) | |
with gr.Column(): | |
pickup_weekday = gr.Dropdown([0, 1, 2, 3, 4, 5, 6], value=3, label='Pickup weekday') | |
pickup_hour = gr.Dropdown([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], | |
value=13, label='Pickup hour') | |
with gr.Column(): | |
dewpoint_2m_temperature = gr.Slider(279.129, 286.327, step=0.001, interactive=True, value=282.201, | |
label='dewpoint_2m_temperature') | |
minimum_2m_air_temperature = gr.Slider(282.037, 292.543, step=0.01, interactive=True, value=285.203, | |
label='minimum_2m_air_temperature') | |
temperature_range = gr.Slider(1.663, 10.022, step=0.01, interactive=True, value=5.583, label='temperature_range') | |
rain = gr.Dropdown([0, 1], label='Is it raining (0=No, 1=Yes)') | |
with gr.Row(): | |
btn = gr.Button("Predict") | |
output = gr.Textbox(label="Prediction") | |
# Expander for more info on columns | |
with gr.Accordion("Information on inputs"): | |
gr.Markdown("""These are information on the inputs the app takes for predicting a rides ETA. | |
- Origin latitude: Origin in degree latitude) | |
- Origin longitude: Origin in degree longitude | |
- Destination latitude: Destination latitude | |
- Destination longitude: Destination logitude | |
- Trip distance (M): Distance in meters on a driving route | |
- Cluster ID: Select the cluster within which you started your trip | |
- Pickup weekday: Day of the week | |
Monday=0, Tuesday=1, Wednesday=2, Thursday=3, Friday=4, Saturday=5, Sunday=6 | |
- Pickup hour: The hour of the day (24hr clock) | |
- dewpoint_2m_temperature: The temperature at 2 meters above the ground where the air temperature would be | |
low enough for dew to form. It gives an indication of humidity. | |
- minimum_2m_air_temperature: The lowest air temperature recorded at 2 meters above the ground during the specified date. | |
- temperature_range: The air temperature range recorded at 2 meters above the ground on the day | |
- rain: Is it raining? yes=1, no=2 | |
""") | |
btn.click(fn=predict, inputs=[origin_lat, origin_lon, Destination_lat, Destination_lon, | |
Trip_distance, dewpoint_2m_temperature, | |
minimum_2m_air_temperature, pickup_weekday, pickup_hour, | |
cluster_id, temperature_range, | |
rain], outputs=output) | |
app.launch(share=True, debug=True) | |