dataprincess commited on
Commit
3dd9f2f
·
verified ·
1 Parent(s): 57c3388

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -0
app.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ from surprise import Dataset, Reader
3
+
4
+ laptop_df = pd.read_csv('laptop_data.csv')
5
+ user_df = pd.read_csv('user_data.csv')
6
+
7
+ laptop_df = laptop_df.fillna(0)
8
+ user_df = user_df.fillna(0)
9
+
10
+ # Create a Surprise Dataset
11
+ reader = Reader(rating_scale=(1, 5))
12
+ data = Dataset.load_from_df(user_df[['User_ID', 'Laptop_ID', 'Rating']], reader)
13
+
14
+ from surprise.model_selection import train_test_split
15
+ from surprise import SVD
16
+ from surprise import accuracy
17
+
18
+ # Train-test split
19
+ trainset, testset = train_test_split(data, test_size=0.2, random_state=42)
20
+
21
+ # Train the collaborative filtering model (SVD algorithm for example)
22
+ model = SVD()
23
+ model.fit(trainset)
24
+
25
+ def recommend_laptops(age=None, category=None, gender=None, user_id=None, num_recommendations=5):
26
+ if user_id is not None:
27
+ # Existing user
28
+ user_ratings = user_interactions[user_interactions['User_ID'] == user_id]
29
+ user_unrated_laptops = laptop_df[~laptop_df['Laptop_ID'].isin(user_ratings['Laptop_ID'])]
30
+ user_unrated_laptops['Predicted_Rating'] = user_unrated_laptops['Laptop_ID'].apply(lambda x: model.predict(user_id, x).est)
31
+ recommendations = user_unrated_laptops.sort_values(by='Predicted_Rating', ascending=False).head(num_recommendations)
32
+ else:
33
+ # New user
34
+ new_user_data = pd.DataFrame({
35
+ 'User_ID': [10002],
36
+ 'Age': [age],
37
+ 'Category': [category],
38
+ 'Gender': [gender]
39
+ })
40
+ new_user_data = new_user_data.merge(laptop_df, how='cross')
41
+ new_user_data['Predicted_Rating'] = new_user_data.apply(lambda row: model.predict(999, row['Laptop_ID']).est, axis=1)
42
+ recommendations = new_user_data.sort_values(by='Predicted_Rating', ascending=False).head(num_recommendations)
43
+
44
+ return recommendations[['Laptop_ID', 'Laptop_Name', 'Predicted_Rating']]
45
+
46
+
47
+ import streamlit as st
48
+
49
+ # Streamlit app
50
+ st.title("Laptop Recommendation System")
51
+
52
+ # User choice: New or Existing user
53
+ user_type = st.radio("Are you a new user or an existing user?", ('New User', 'Existing User'))
54
+
55
+ if user_type == 'New User':
56
+ # User input for new users
57
+ new_user_age = st.slider("Age:", min_value=12, max_value=89, value=25)
58
+ new_user_category = st.selectbox("What best describes you:", ['Student', 'Professor', 'Banker', 'Businessman', 'Programmer'])
59
+ new_user_gender = st.radio("Gender:", ['Male', 'Female'])
60
+
61
+ # Button to get recommendations for new users
62
+ if st.button("Get Laptop Recommendations"):
63
+ recommendations = recommend_laptops(age=new_user_age, category=new_user_category, gender=new_user_gender)
64
+ st.subheader("Top 5 Recommended Laptops:")
65
+ st.dataframe(recommendations[['Laptop_ID', 'Laptop_Name', 'Predicted_Rating']], index=False)
66
+
67
+ # User input for existing users
68
+ elif user_type == 'Existing User':
69
+ # User input for existing users
70
+ existing_user_id = st.text_input("Enter your user ID:", "")
71
+
72
+ # Button to get recommendations
73
+ if st.button("Get aptop Recommendations"):
74
+ if existing_user_id:
75
+ recommendations = recommend_laptops(user_id=int(existing_user_id))
76
+ st.subheader(f"Top 5 Recommended Laptops for User ID {existing_user_id}:")
77
+ st.dataframe(recommendations[['Laptop_ID', 'Laptop_Name', 'Predicted_Rating']], index=False)
78
+ else:
79
+ st.warning("Please enter a valid user ID.")