File size: 2,787 Bytes
c16a896
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import numpy as np
import pickle
import random
import os

# Function to load the model
def load_model():
    try:
        # Get the absolute path to the .pkl file
        model_path = os.path.join(os.getcwd(), "clfmodel.pkl")
        model = pickle.load(open(model_path, 'rb'))
        st.write("Model loaded successfully.")
        return model
    except Exception as e:
        st.write("Something went wrong while loading the model.")
        st.write(e)
        return None

# Function to make prediction
@st.cache_data
def make_prediction(_model, features):
    try:
        predicted_label = _model.predict(features)
        return predicted_label
    except Exception as e:
        st.write("Something went wrong while making prediction.")
        st.write(e)
        return None

# Main function to run the app
def main():
    st.title("Custom Grocery App Predictor in Hungary")
    st.write("This app predicts the preferable grocery app based on user characteristics.")

    # Load the model
    clf_model = load_model()

    if clf_model:
        # Sidebar inputs
        st.sidebar.header('User Input Features')
        gender = st.sidebar.radio('Gender', ('Male', 'Female'))
        education = st.sidebar.selectbox('Education Level', ('Under Diploma and Diploma', 'Associate', 'Bachelor', 'Master', 'PhD'))
        age = st.sidebar.slider('Age', 18, 100, 30)
        exp_online = st.sidebar.slider('Years of Online Experience', 0, 50, 5)
        exp_app = st.sidebar.slider('Years of App Experience', 0, 20, 1)

        gender_code = 1 if gender == 'Male' else 2
        education_code = ['Under Diploma and Diploma', 'Associate', 'Bachelor', 'Master', 'PhD'].index(education) + 1

        # Make prediction
        predicted_label = make_prediction(clf_model, np.array([[gender_code, education_code, age, exp_online, exp_app]]))

        if predicted_label is not None:
            class_App_names = ['FoodPanda', 'Wolt', 'Spar', 'Tesco online', 'myLidl']
            predicted_App_class = class_App_names[predicted_label[0] - 1]

            # Generate a random color
            random_color = "#{:06x}".format(random.randint(0, 0xFFFFFF))

            # Render the output with only the predicted_App_class colored and bigger font size
            st.write(f"In Hungary, for a {gender}, with education level of {education}, age of {age}, with online experience of {exp_online} years, and shopping experience from online Apps {exp_app} years, It seems that the preferable Grocery App is: ", end="")
            st.markdown(f"<span style='color: {random_color}; font-weight: bold; font-size: 50px'>{predicted_App_class}</span>.", unsafe_allow_html=True)
    else:
        st.write("Failed to load the model.")

if __name__ == '__main__':
    main()