azeemkhan417's picture
Update app.py
8dcbdf4 verified
from pathlib import Path
import datetime
import pandas as pd
import streamlit as st
import main
import predict
def get_user_input(df_train):
st.sidebar.write(f"**Order Related Information**")
date = st.sidebar.date_input("what is the Order Date?")
order_time = st.sidebar.time_input("What is the Order Time?", step=60)
order_datetime = datetime.datetime.combine(date, order_time)
pickup_time = st.sidebar.time_input("What is the Order Pickup Time?",
order_datetime + datetime.timedelta(minutes=15), step=60)
order_type = st.sidebar.selectbox('What is the type of order?',
df_train['Type_of_order'].unique())
multiple_deliveries = st.sidebar.selectbox('How many deliveries are combined?',
sorted(df_train['multiple_deliveries'].unique().astype('int')))
st.sidebar.write(f"**Location Related Information**")
restaurant_latitude = st.sidebar.text_input("What is the restaurant latitude?", "14.829222")
restaurant_longitude = st.sidebar.text_input("What is the restaurant longitude?", "67.920922")
delivery_location_latitude = st.sidebar.text_input("What is the delivery location latitude?", "14.929222")
delivery_location_longitude = st.sidebar.text_input("What is the delivery location longitude?", "68.860922")
st.sidebar.write(f"**Delivery Person Related Information**")
delivery_person_age = st.sidebar.slider("How old is the delivery person?",
int(df_train['Delivery_person_Age'].min()),
int(df_train['Delivery_person_Age'].max()),
int(df_train['Delivery_person_Age'].mean()))
delivery_person_rating = st.sidebar.slider("What is delivery person rating?",
float(df_train['Delivery_person_Ratings'].min()),
float(df_train['Delivery_person_Ratings'].max()),
float(df_train['Delivery_person_Ratings'].mean()))
vehicle = st.sidebar.selectbox('What type of vehicle delivery person has?',
df_train['Type_of_vehicle'].unique())
vehicle_condition = st.sidebar.selectbox('What is the Vehicle condition of delivery person?',
sorted(df_train['Vehicle_condition'].unique()))
st.sidebar.write(f"**City Related Information**")
city_code = st.sidebar.selectbox('What is the city name of delivery?',
df_train['City_code'].unique())
city = st.sidebar.selectbox('Which type of city it is?',
df_train['City'].unique())
st.sidebar.write(f"**Weather Conditions/Event Related Information**")
road_density = st.sidebar.selectbox('What is road traffic density?',
df_train['Road_traffic_density'].unique())
weather_conditions = st.sidebar.selectbox('How is the weather?',
df_train['Weather_conditions'].unique())
festival = st.sidebar.selectbox('Is there a festival?',
df_train['Festival'].unique())
X = pd.DataFrame({
'ID': '123456',
'Delivery_person_ID': city_code + 'RES13DEL02',
'Delivery_person_Age': delivery_person_age,
'Delivery_person_Ratings': delivery_person_rating,
'Restaurant_latitude': format(float(restaurant_latitude), ".6f"),
'Restaurant_longitude': format(float(restaurant_longitude), ".6f"),
'Delivery_location_latitude': format(float(delivery_location_latitude), ".6f"),
'Delivery_location_longitude': format(float(delivery_location_longitude), ".6f"),
'Order_Date': date.strftime('%d-%m-%Y'),
'Time_Orderd': order_time.strftime('%H:%M:%S'),
'Time_Order_picked': pickup_time.strftime('%H:%M:%S'),
'Weatherconditions': 'conditions ' + weather_conditions,
'Road_traffic_density': road_density,
'Vehicle_condition': vehicle_condition,
'Type_of_order': order_type,
'Type_of_vehicle': vehicle,
'multiple_deliveries': multiple_deliveries,
'Festival': festival,
'City': city
}, index=[0])
return X
if __name__ == "__main__":
st.set_page_config(page_title="Food Delivery Time Prediction", page_icon=None, layout="centered",
initial_sidebar_state="auto")
# Read in training data
df_train = pd.read_csv('train.csv')
main.cleaning_steps(df_train)
# Displaying text
st.title("Food Delivery Time Prediction")
# Displaying an image
st.image('food-delivery.webp', width=700)
st.write("""
The food delivery time prediction model is vital in ensuring prompt and accurate delivery in the food delivery industry. Leveraging advanced data cleaning techniques and feature engineering, a robust food delivery time prediction model is developed.
This model predicts food delivery time based on a range of factors, including order details, location, city, delivery person information, and weather conditions.
""")
##create the sidebar
st.sidebar.header("User Input Parameters")
##create function for User input
input_df = get_user_input(df_train) # get user input from sidebar
order_date = input_df['Order_Date'][0]
order_time = input_df['Time_Orderd'][0]
order_date_time = datetime.datetime.strptime(f'{order_date} {order_time}', '%d-%m-%Y %H:%M:%S')
order_pickup_time = input_df['Time_Order_picked'][0]
order_pickup_date_time = datetime.datetime.strptime(f'{order_date} {order_pickup_time}', '%d-%m-%Y %H:%M:%S')
total_delivery_minutes = round(predict.predict(input_df)[0], 2) # get predicitions
minutes = int(total_delivery_minutes)
seconds = int((total_delivery_minutes - minutes) * 60)
X = order_pickup_date_time + datetime.timedelta(minutes=minutes, seconds=seconds)
# display predictions
st.subheader("Order Details")
st.write(f"**Order was Placed on :** {order_date_time}")
st.write(f"**Order was Picked up at :** {order_pickup_date_time}")
st.subheader("Prediction")
formatted_X = "{:.2f}".format(total_delivery_minutes)
st.write(f"**Total Delivery Time is :** {formatted_X} mins")
st.write(f"**Order will be delivered by :** {X}")