File size: 7,254 Bytes
3dd9f2f 3c0bc59 3dd9f2f b8d946e 3dd9f2f 25f70a1 3dd9f2f de83f23 3dd9f2f 8c587b1 3dd9f2f 7212304 9676325 3dd9f2f 13ac327 3dd9f2f 9fd09b4 15dfb11 2c4c114 7212304 07019e5 b397956 623c2aa 07019e5 3dd9f2f ecf2a21 3dd9f2f 13ac327 9fd09b4 15dfb11 de83f23 7212304 623c2aa 07019e5 3dd9f2f |
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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
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=(0, 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_df[user_df['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(10002, 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', 'Other'])
new_user_gender = st.radio("Gender:", ['Male', 'Female', 'Other'])
# 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:")
# decoding features
type_mapping = {1: 'gaming laptop', 2: 'thin and light laptop', 3: '2 in 1 laptop', 4: 'notebook', 5: 'laptop',
6: '2 in 1 gaming laptop', 7: 'business laptop', 8: 'chromebook', 9: 'creator laptop'}
processor_brand_mapping = {1: 'intel', 2: 'amd', 3: 'qualcomm', 4: 'apple', 5: 'mediatek'}
os_mapping = {1: 'windows', 2: 'chrome os', 3: 'dos', 4: 'mac', 5: 'ubuntu'}
company_mapping = {1: 'asus', 2: 'hp', 3: 'lenovo', 4: 'dell', 5: 'msi', 6: 'realme', 7: 'avita', 8: 'acer',
9: 'samsung', 10: 'infinix', 11: 'lg', 12: 'apple', 13: 'nokia', 14: 'redmibook',
15: 'mi', 16: 'vaio'}
# Decode the encoded features
recommendations['Type'] = recommendations['Type'].map(type_mapping)
recommendations['Processor Brand'] = recommendations['Processor Brand'].map(processor_brand_mapping)
recommendations['Operating System'] = recommendations['Operating System'].map(os_mapping)
recommendations['company'] = recommendations['company'].map(company_mapping)
boolean_columns = ['SSD', 'Expandable Memory', 'Touchscreen']
for column in boolean_columns:
recommendations[column] = recommendations[column].map({0: 'No', 1: 'Yes'})
recommendations_table = recommendations[['name', 'Price (in Indian Rupees)', 'Type', 'Dedicated Graphic Memory Capacity',
'Processor Brand', 'SSD', 'RAM (in GB)', 'RAM Type', 'Expandable Memory',
'Operating System', 'Touchscreen', 'Screen Size (in inch)', 'Weight (in kg)',
'Refresh Rate', 'screen_resolution', 'company', 'Storage', 'Processor name',
'CPU_ranking', 'battery_backup', 'gpu name ', 'gpu_benchmark']]
recommendations_table = recommendations_table.reset_index(drop=True)
st.dataframe(recommendations_table)
# 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 Laptop 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}:")
# decoding features
type_mapping = {1: 'gaming laptop', 2: 'thin and light laptop', 3: '2 in 1 laptop', 4: 'notebook', 5: 'laptop',
6: '2 in 1 gaming laptop', 7: 'business laptop', 8: 'chromebook', 9: 'creator laptop'}
processor_brand_mapping = {1: 'intel', 2: 'amd', 3: 'qualcomm', 4: 'apple', 5: 'mediatek'}
os_mapping = {1: 'windows', 2: 'chrome os', 3: 'dos', 4: 'mac', 5: 'ubuntu'}
company_mapping = {1: 'asus', 2: 'hp', 3: 'lenovo', 4: 'dell', 5: 'msi', 6: 'realme', 7: 'avita', 8: 'acer',
9: 'samsung', 10: 'infinix', 11: 'lg', 12: 'apple', 13: 'nokia', 14: 'redmibook',
15: 'mi', 16: 'vaio'}
# Decode the encoded features
recommendations['Type'] = recommendations['Type'].map(type_mapping)
recommendations['Processor Brand'] = recommendations['Processor Brand'].map(processor_brand_mapping)
recommendations['Operating System'] = recommendations['Operating System'].map(os_mapping)
recommendations['company'] = recommendations['company'].map(company_mapping)
boolean_columns = ['SSD', 'Expandable Memory', 'Touchscreen']
for column in boolean_columns:
recommendations[column] = recommendations[column].map({0: 'No', 1: 'Yes'})
recommendations_table = recommendations[['name', 'Price (in Indian Rupees)', 'Type', 'Dedicated Graphic Memory Capacity',
'Processor Brand', 'SSD', 'RAM (in GB)', 'RAM Type', 'Expandable Memory',
'Operating System', 'Touchscreen', 'Screen Size (in inch)', 'Weight (in kg)',
'Refresh Rate', 'screen_resolution', 'company', 'Storage', 'Processor name',
'CPU_ranking', 'battery_backup', 'gpu name ', 'gpu_benchmark']]
recommendations_table = recommendations_table.reset_index(drop=True)
st.dataframe(recommendations_table)
else:
st.warning("Please enter a valid user ID.")
|