Spaces:
Build error
Build error
import streamlit as st | |
import pandas as pd | |
import joblib | |
# Load the saved models and encoders | |
ensemble_clf = joblib.load('ensemble_clf.pkl') | |
encoder = joblib.load('encoder.pkl') | |
label_encoder = joblib.load('label_encoder.pkl') | |
# Define custom CSS for light and dark modes | |
def set_page_styles(dark_mode): | |
if dark_mode: | |
st.markdown( | |
"""<style> | |
body { | |
background-color: #ffffff; | |
color: #ffffff; | |
} | |
.stButton > button { | |
background-color: #333333; | |
color: #ffffff; | |
border: 1px solid #444444; | |
} | |
.stTextInput > div > input, .stSelectbox > div > div > div { | |
background-color: #333333; | |
color: #ffffff; | |
border: 1px solid #444444; | |
} | |
.stSidebar { | |
background-color: #1e1e1e; | |
color: #ffffff; | |
} | |
.css-1aumxhk { | |
background-color: #1e1e1e; | |
color: #ffffff; | |
} | |
</style>""", | |
unsafe_allow_html=True, | |
) | |
else: | |
st.markdown( | |
"""<style> | |
body { | |
background-color: #ffffff; | |
color: #000000; | |
} | |
.stButton > button { | |
background-color: #f0f0f0; | |
color: #000000; | |
border: 1px solid #cccccc; | |
} | |
.stTextInput > div > input, .stSelectbox > div > div > div { | |
background-color: #ffffff; | |
color: #000000; | |
border: 1px solid #cccccc; | |
} | |
.stSidebar { | |
background-color: #f8f9fa; | |
color: #000000; | |
} | |
.css-1aumxhk { | |
background-color: #f8f9fa; | |
color: #000000; | |
} | |
</style>""", | |
unsafe_allow_html=True, | |
) | |
# Page configuration | |
st.set_page_config(page_title="Laptop Recommendation System", layout="centered") | |
# Sidebar for theme toggle | |
dark_mode = st.sidebar.checkbox("Dark Mode") | |
set_page_styles(dark_mode) | |
# Streamlit app title | |
st.title("Laptop Recommendation System") | |
# Input fields for user preferences | |
st.header("Enter Your Preferences") | |
with st.form("user_preferences_form"): | |
persona = st.selectbox( | |
"Select Persona", ["Student", "Gamer", "Professional", "Creative", "Engineering", "Business"] | |
) | |
usage = st.text_input( | |
"Describe Usage (e.g., Studying, Gaming, Video Editing)", "Studying, assignments, research" | |
) | |
processor = st.selectbox( | |
"Preferred Processor", ["Intel Core i5 / AMD Ryzen 5", "Intel Core i7 / AMD Ryzen 7"] | |
) | |
ram = st.selectbox("Preferred RAM", ["8GB DDR4", "16GB DDR4"]) | |
graphics = st.selectbox( | |
"Preferred Graphics", [ | |
"Integrated (Intel Iris Xe)", | |
"NVIDIA RTX 3060 / AMD Radeon RX 6600XT", | |
"NVIDIA RTX 3070 / AMD Radeon RX 6700M", | |
"NVIDIA RTX 3080 / AMD Radeon RX 6800M", | |
"NVIDIA RTX 3090 / AMD Radeon RX 6900M", | |
"Integrated (Intel UHD / AMD Vega)", | |
"Integrated (Intel Iris Xe) or NVIDIA MX550", | |
] | |
) | |
storage = st.selectbox( | |
"Preferred Storage", [ | |
"256GB SSD", | |
"512GB SSD", | |
"1TB HDD", | |
"512GB SSD + 1TB HDD", | |
"1TB SSD + 1TB HDD", | |
"1TB SSD + 2TB HDD", | |
] | |
) | |
display = st.selectbox("Preferred Display", ["13-15\" Full HD", "15-17\" QHD/4K"]) | |
battery = st.selectbox( | |
"Battery Life Expectation", ["6-8 hours", "7-9 hours", "8-12 hours", "12+ hours"] | |
) | |
submit_button = st.form_submit_button(label="Get Recommendation") | |
# If form is submitted | |
if submit_button: | |
# Create a DataFrame from user inputs | |
new_user = pd.DataFrame({ | |
'Persona': [persona], | |
'Usage': [usage], | |
'Processor': [processor], | |
'RAM': [ram], | |
'Graphics': [graphics], | |
'Storage': [storage], | |
'Display': [display], | |
'Battery Life': [battery] | |
}) | |
# Encode the user input | |
new_user_encoded = encoder.transform(new_user) | |
# Predict the laptop specification label | |
predicted_label = label_encoder.inverse_transform(ensemble_clf.predict(new_user_encoded)) | |
# Display the prediction | |
st.subheader("Recommended Laptop Specification") | |
st.success(f"**{predicted_label[0]}**") |