dataprincess's picture
Update app.py
8c587b1 verified
raw
history blame
6.23 kB
import pandas as pd
from surprise import Dataset, Reader
laptop_df = pd.read_csv('laptop_data.csv')
user_df = pd.read_csv('user_data.csv')
laptop_df = laptop_df.fillna(0)
user_df = user_df.fillna(0)
# Create a Surprise Dataset
reader = Reader(rating_scale=(1, 5))
data = Dataset.load_from_df(user_df[['User_ID', 'Laptop_ID', 'Rating']], reader)
from surprise.model_selection import train_test_split
from surprise import SVD
from surprise import accuracy
# Train-test split
trainset, testset = train_test_split(data, test_size=0.2, random_state=42)
# train model
model = SVD()
model.fit(trainset)
def recommend_laptops(age=None, category=None, gender=None, user_id=None, num_recommendations=5):
if user_id is not None:
# Existing user
user_ratings = user_interactions[user_interactions['User_ID'] == user_id]
user_unrated_laptops = laptop_df[~laptop_df['Laptop_ID'].isin(user_ratings['Laptop_ID'])]
user_unrated_laptops['Predicted_Rating'] = user_unrated_laptops['Laptop_ID'].apply(lambda x: model.predict(user_id, x).est)
recommendations = user_unrated_laptops.sort_values(by='Predicted_Rating', ascending=False).head(num_recommendations)
else:
# New user
new_user_data = pd.DataFrame({
'User_ID': [10002],
'Age': [age],
'Category': [category],
'Gender': [gender]
})
new_user_data = new_user_data.merge(laptop_df, how='cross')
new_user_data['Predicted_Rating'] = new_user_data.apply(lambda row: model.predict(999, row['Laptop_ID']).est, axis=1)
recommendations = new_user_data.sort_values(by='Predicted_Rating', ascending=False).head(num_recommendations)
return recommendations
import streamlit as st
# Streamlit app
st.title("Laptop Recommendation System")
# User choice: New or Existing user
user_type = st.radio("Are you a new user or an existing user?", ('New User', 'Existing User'))
if user_type == 'New User':
# User input for new users
new_user_age = st.slider("Age:", min_value=12, max_value=89, value=25)
new_user_category = st.selectbox("What best describes you:", ['Student', 'Professor', 'Banker', 'Businessman', 'Programmer'])
new_user_gender = st.radio("Gender:", ['Male', 'Female'])
# Button to get recommendations for new users
if st.button("Get Recommendations"):
recommendations = recommend_laptops(age=new_user_age, category=new_user_category, gender=new_user_gender)
st.subheader("Top 5 Recommended Laptops:")
for i, row in recommendations.iterrows():
st.subheader(f"{i + 1}. {row['Laptop_Name']} - Price: ₹{row['Price (in Indian Rupees)']}")
st.markdown(f"**Specifications:**\n"
f"Type: {row['Type']}\n",
f"Dedicated Graphic Memory Capacity: {row['Dedicated Graphic Memory Capacity']}\n",
f"Processor Brand: {row['Processor Brand']}\n",
f"SSD: {row['SSD']}\n",
f"RAM (in GB): {row['RAM (in GB)']}\n",
f"Expandable Memory: {row['Expandable Memory']}\n",
f"Operating System: {row['Operating System']}\n",
f"Touchscreen: {row['Touchscreen']}\n",
f"Screen Size (in inch): {row['Screen Size (in inch)']}\n",
f"Weight (in kg): {row['Weight (in kg)']}\n",
f"Refresh Rate: {row['Refresh Rate']}\n",
f"Screen Resolution: {row['screen_resolution']}\n",
f"Company: {row['company']}\n",
f"Storage: {row['Storage']}\n",
f"Processor Name: {row['Processor name']}\n",
f"CPU Ranking: {row['CPU_ranking']}\n",
f"Battery Backup: {row['battery_backup']}\n",
f"GPU Name: {row['gpu name ']}\n",
f"GPU Benchmark: {row['gpu_benchmark']}\n")
st.markdown(f"[Buy Here]({row['link']})")
# User input for existing users
elif user_type == 'Existing User':
# User input for existing users
existing_user_id = st.text_input("Enter your user ID:", "")
# Button to get recommendations
if st.button("Get aptop Recommendations"):
if existing_user_id:
recommendations = recommend_laptops(user_id=int(existing_user_id))
st.subheader(f"Top 5 Recommended Laptops for User {existing_user_id}:")
for i, row in recommendations.iterrows():
st.subheader(f"{i + 1}. {row['Laptop_Name']} - Price: ₹{row['Price (in Indian Rupees)']}")
st.markdown(f"**Specifications:**\n"
f"Type: {row['Type']}\n"
f"Dedicated Graphic Memory Capacity: {row['Dedicated Graphic Memory Capacity']}\n"
f"Processor Brand: {row['Processor Brand']}\n"
f"SSD: {row['SSD']}\n"
f"RAM (in GB): {row['RAM (in GB)']}\n"
f"Expandable Memory: {row['Expandable Memory']}\n"
f"Operating System: {row['Operating System']}\n"
f"Touchscreen: {row['Touchscreen']}\n"
f"Screen Size (in inch): {row['Screen Size (in inch)']}\n"
f"Weight (in kg): {row['Weight (in kg)']}\n"
f"Refresh Rate: {row['Refresh Rate']}\n"
f"Screen Resolution: {row['screen_resolution']}\n"
f"Company: {row['company']}\n"
f"Storage: {row['Storage']}\n"
f"Processor Name: {row['Processor name']}\n"
f"CPU Ranking: {row['CPU_ranking']}\n"
f"Battery Backup: {row['battery_backup']}\n"
f"GPU Name: {row['gpu name ']}\n"
f"GPU Benchmark: {row['gpu_benchmark']}\n")
st.markdown(f"[Buy Here]({row['link']})")
else:
st.warning("Please enter a valid user ID.")