File size: 4,985 Bytes
32cef64
 
 
 
1cc9607
 
32cef64
1cc9607
 
32cef64
1cc9607
 
32cef64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e9bae19
32cef64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
93
94
95
96
97
# Import the required Libraries
import gradio as gr
import numpy as np
import pandas as pd
import os, joblib
import re

current_directory = os.path.dirname(os.path.realpath(__file__))
pipeline_path = os.path.join(current_directory, 'toolkit', 'pipeline.joblib')

# pipeline = joblib.load(r'toolkit\pipeline.joblib')
pipeline = joblib.load(pipeline_path)


inputs = ['Origin_lat', 'Origin_lon', 'Destination_lat', 'Destination_lon',
       'Trip_distance', 'Speed', 'dewpoint_2m_temperature',
       'mean_2m_air_temperature', 'pickup_weekday', 'pickup_weekofyear',
       'pickup_hour', 'pickup_minute', 'pickup_week_hour', 'month',
       'day_of_week', 'cluster_id', 'target_transformed', 'temperature_range',
       'wind_speed', 'rain']

def predict(*args, pipeline=pipeline, inputs=inputs):
    # Check if inputs is provided
    if inputs is None:
        raise ValueError("Please provide the 'inputs' parameter.")

    # Creating a DataFrame of inputs
    input_data = pd.DataFrame([args], columns=inputs)
    print(input_data)

    # Modeling
    try:
        model_output = abs(int(pipeline.predict(input_data)))
    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}"

   
with gr.Blocks(theme=gr.themes.Monochrome()) 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.381,step = 0.01,interactive=True, value=2.806, label = 'origin_lat')
        origin_lon = gr.Slider(36.589,36.820,step =0.01,interactive=True, value=36.589,label = 'origin_lon')
        Destination_lat =gr.Slider(2.807,3.381,step = 0.1,interactive=True, value=2.81,label ='Destination_lat')
        Destination_lon =gr.Slider(36.592,36.819,step = 0.1,interactive=True, value=36.596,label ='Destination_lon')
        Trip_distance = gr.Slider(61,958,step =10,interactive=True, value=20,label = 'Trip_distance')
        Speed = gr.Slider(0.300,85.000, step=0.01, interactive=True, value=20, label = 'Speed')
        
  with gr.Column():
    dewpoint_2m_temperature =gr.Slider(280.000, 288.000, step = 0.01,interactive=True, value=282.201,label ='dewpoint_2m_temperature')
    mean_2m_air_temperature =gr.Slider(285.203, 291.110,step = 0.1,interactive=True, value=287.203,label ='mean_2m_air_temperature')
    pickup_weekday = gr.Dropdown([0,1,2,3,4,5,6],label ='pickup_weekday', value=3)
    pickup_weekofyear = gr.Dropdown([47,48,49,50],label="pickup_weekofyear",value=3)
    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]
                               ,label="pickup_hour",value=13)
    pickup_minute = gr.Slider(0, 59, step = 1,interactive=True, value=5,label ='pickup_minute')
    pickup_week_hour = gr.Slider(0, 167, step = 1,interactive=True, value=5,label ='pickup_week_hour')
    month = gr.Dropdown([11,12],label = 'month')
    day_of_week = gr.Dropdown([0,1,2,3,4,5,6],label ='day_of_week', value=3)
    cluster_id = gr.Dropdown([1,2,3,4,5,6,7],label="Cluster ID", value=4)

  with gr.Column():
    target_transformed = gr.Slider(0, 336.426, step = 0.01,interactive=True, value=100,label ='target_transformed')
    temperature_range = gr.Slider(2.317, 9.166, step = 0.01,interactive=True, value=5,label='temperature_range')
    wind_speed = gr.Slider(0.803, 9.887, step = 0.01,interactive=True, value=5,label='wind_speed')
    rain = gr.Dropdown([0,1],label='rain')

  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_lat: Origin in degree latitude)
                    - origin_lon:  Origin in degree longitude
                    - Destination_lat: Destination latitude
                    - Destination_lon: Destination logitude
                    - Trip Distance : Distance in meters on a driving route
                    - Cluster ID : Select the cluster within which you started your trip
                    - Time of the day: What time in the day did your trip start, 1- morning(or daytime),2 - evening 3- midnight
                    """)
  btn.click(fn = predict,inputs= [origin_lat, origin_lon, Destination_lat, Destination_lon,
       Trip_distance, Speed, dewpoint_2m_temperature,
       mean_2m_air_temperature, pickup_weekday, pickup_weekofyear,
       pickup_hour, pickup_minute, pickup_week_hour, month,
       day_of_week, cluster_id, target_transformed, temperature_range,
       wind_speed, rain], outputs = output)
  
  app.launch(share = True, debug =True)