solenedh3/SuitsMe
0
1import streamlit as st2from PIL import Image3import pandas as pd4import base645import uuid6from PIL import Image7import os8import matplotlib.pyplot as plt9 10 11def set_style():12 st.markdown(13 f"""14 <style>15 .reportview-container {{16 background: #333333;17 color: #FFFFFF;18 }}19 a {{20 color: #FFA500;21 }}22 </style>23 """,24 unsafe_allow_html=True25 )26 27 28set_style()29 30def get_base64(bin_file):31 with open(bin_file, 'rb') as f:32 data = f.read()33 return base64.b64encode(data).decode()34 35def set_background(png_file):36 if png_file is None:37 return38 bin_str = get_base64(png_file)39 page_bg_img = '''40 <style>41 .stApp {42 background-image: url("data:image/png;base64,%s");43 background-size: cover;44 }45 </style>46 ''' % bin_str47 st.markdown(page_bg_img, unsafe_allow_html=True)48 49# Define the background image for the homepage50homepage_bg = '/Users/solene/Desktop/home_page_logo1.jpg'51 52# Set the background image for the homepage53set_background(homepage_bg)54 55 56 57# Define the black background for subcategory pages58black_bg = Image.new('RGB', (1, 1), color='black')59black_bg_path = f'{uuid.uuid4()}.png'60black_bg.save(black_bg_path)61 62logo = Image.open("/Users/solene/Desktop/logo-removebg-preview.png")63 64logo_resized = logo.resize((250, 200))65 66# Load the dataframe67df_sorted = pd.read_csv("/Users/solene/Desktop/df_sorted.csv")68 69# Define the categories and subcategories70categories = ['Home', 'Explore products', 'Topwear', 'Bottom wear', 'Shoes', 'Accessories', 'About', 'Contact', 'Newsletter']71subcategories = {72 'Topwear': ['Shirts', 'Jackets','Dresses'],73 'Bottom wear': ['Trousers'],74 'Shoes': ['Sneakers', 'Ankle boots', 'Heels', 'Sandals'],75 'Accessories': ['Mini bags', 'Large bags']76}77 78subcategory = None79 80# Create the sidebar menu81category = st.sidebar.selectbox('Select a category', categories)82 83# Display the homepage84if category == 'Home':85 set_background(homepage_bg)86elif category == 'Contact':87 set_background(black_bg_path)88 st.write('## Contact Us')89 name = st.text_input("Full Name")90 st.write(name)91 email = st.text_input("Email")92 st.write(email)93 message = st.text_area("Message")94 st.write(message)95 if st.button('Contact Us'):96 st.write('Thank you for contacting us! We read every message and typically respond within 48 hours if a reply is required.') 97elif category == 'Explore products':98 set_background(black_bg_path)99 st.write("## Explore products")100 st.write("")101 num_images_per_row = 4102 for cluster_num in range(10):103 group = df_sorted[df_sorted["cluster"] == cluster_num]104 first_row = group.iloc[0]105 pixels = first_row.iloc[2:-1].values.astype('int')106 image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')107 if cluster_num % num_images_per_row == 0:108 row = st.columns(num_images_per_row)109 with row[cluster_num % num_images_per_row]:110 st.image(image, use_column_width=True)111 link = f"http://www.example.com/product/{cluster_num}/1"112 st.write(link)113elif category == 'Newsletter':114 set_background(black_bg_path)115 st.write('## Subscribe to our Newsletter')116 st.write('Sign up to receive email updates on new product announcements, gift ideas, special promotions, sales and more. ')117 name = st.text_input("Full Name")118 st.write(name)119 email = st.text_input("Email")120 st.write(email)121 if st.button('SIGN UP'):122 st.write('Thank you for signing up to our newsletter. You now have exclusive access to the latest product launches at SuitsMe and have access to special promotions in the future!')123elif category == 'About':124 set_background(black_bg_path)125 st.write('# About Us')126 st.write("## Our Team")127 128 # Set the path to the directory containing the photos129 photos_dir = '/Users/solene/Desktop/my_photos'130 131 # Define a dictionary that maps photo filenames to names and positions132 names = {133 'aradhya_rathi_face.jpeg': 'Aradhya Rathi - CEO',134 'solene_dh_face.jpeg': 'Solene Dhanani - CTO',135 'radi_face.jpeg': 'Radi - CFO',136 'zelong_face.jpeg': 'Zelong Qin - Wellbeing Officer',137 'lat_face.jpeg': 'Laeticia El Khoury - Marketing Director',138 'owen_chen_face.jpeg': 'Owen Chen - Head of Outreach',139 'nadine_face.jpeg': 'Nadine - HR Head'140 }141 142 # Get a list of all the files in the directory143 files = os.listdir(photos_dir)144 145 # Filter the list to include only JPEG files146 files = [f for f in files if f.endswith('.jpeg')]147 148 # Sort the list of files so that the specified photos are on top149 specified_files = ['aradhya_rathi_face.jpeg', 'solene_dh_face.jpeg', 'radi_face.jpeg']150 files.sort(key=lambda f: specified_files.index(f) if f in specified_files else len(specified_files))151 152 # Display the photos and names in a grid layout with 3 photos per row153 col1, col2, col3 = st.columns(3)154 for i, file in enumerate(files):155 if i % 3 == 0:156 col = col1157 elif i % 3 == 1:158 col = col2159 else:160 col = col3161 162 # Open the photo file using PIL and display it163 with open(os.path.join(photos_dir, file), 'rb') as f:164 img = Image.open(f)165 col.image(img, use_column_width=True)166 167 # Display the name and position of the person below the photo168 name = names.get(file, '')169 col.write(name)170else:171 set_background(black_bg_path)172 subcategory = st.sidebar.selectbox('Select a sub-category', subcategories[category])173 174 175# Handle the subcategory selections and display the images176 177if subcategory == 'Shirts':178 st.image(logo_resized)179 st.write('## Shirts')180 cluster_num = 9181 group = df_sorted[df_sorted["cluster"] == cluster_num]182 page_number = st.session_state.get('page_number', 1)183 num_cols = 5184 items_per_page = 100185 start_index = (page_number - 1) * items_per_page186 end_index = page_number * items_per_page187 group = group.iloc[start_index:end_index]188 num_rows = (len(group) - 1) // num_cols + 1189 st.write(f"Page {page_number}")190 st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")191 for row in range(num_rows):192 cols = st.columns(num_cols)193 for col in range(num_cols):194 i = row * num_cols + col195 if i < len(group):196 pixels = group.iloc[i, 2:-1].values.astype('int')197 image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')198 cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")199 200 # Show "Previous Page" button if not on the first page201 if start_index > 0:202 if st.button('Previous Page'):203 page_number -= 1204 st.experimental_set_query_params(page=page_number)205 st.session_state['page_number'] = page_number206 207 # Show "Next Page" button if there are more items to show208 if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):209 if st.button('Next Page'):210 page_number += 1211 st.experimental_set_query_params(page=page_number)212 st.session_state['page_number'] = page_number213 214elif subcategory == 'Sandals':215 st.image(logo_resized)216 st.write('## Sandals')217 cluster_num = 7218 group = df_sorted[df_sorted["cluster"] == cluster_num]219 page_number = st.session_state.get('page_number', 1)220 num_cols = 5221 items_per_page = 100222 start_index = (page_number - 1) * items_per_page223 end_index = page_number * items_per_page224 group = group.iloc[start_index:end_index]225 num_rows = (len(group) - 1) // num_cols + 1226 st.write(f"Page {page_number}")227 st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")228 for row in range(num_rows):229 cols = st.columns(num_cols)230 for col in range(num_cols):231 i = row * num_cols + col232 if i < len(group):233 pixels = group.iloc[i, 2:-1].values.astype('int')234 image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')235 cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")236 237 # Show "Previous Page" button if not on the first page238 if start_index > 0:239 if st.button('Previous Page'):240 page_number -= 1241 st.experimental_set_query_params(page=page_number)242 st.session_state['page_number'] = page_number243 244 # Show "Next Page" button if there are more items to show245 if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):246 if st.button('Next Page'):247 page_number += 1248 st.experimental_set_query_params(page=page_number)249 st.session_state['page_number'] = page_number250 251elif subcategory == 'Jackets':252 st.image(logo_resized)253 st.write('## Jackets')254 cluster_num = 2255 group = df_sorted[df_sorted["cluster"] == cluster_num]256 page_number = st.session_state.get('page_number', 1)257 num_cols = 5258 items_per_page = 100259 start_index = (page_number - 1) * items_per_page260 end_index = page_number * items_per_page261 group = group.iloc[start_index:end_index]262 num_rows = (len(group) - 1) // num_cols + 1263 st.write(f"Page {page_number}")264 st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")265 for row in range(num_rows):266 cols = st.columns(num_cols)267 for col in range(num_cols):268 i = row * num_cols + col269 if i < len(group):270 pixels = group.iloc[i, 2:-1].values.astype('int')271 image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')272 cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")273 274 # Show "Previous Page" button if not on the first page275 if start_index > 0:276 if st.button('Previous Page'):277 page_number -= 1278 st.experimental_set_query_params(page=page_number)279 st.session_state['page_number'] = page_number280 281 # Show "Next Page" button if there are more items to show282 if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):283 if st.button('Next Page'):284 page_number += 1285 st.experimental_set_query_params(page=page_number)286 st.session_state['page_number'] = page_number287 288elif subcategory == 'Dresses':289 st.image(logo_resized)290 st.write('## Dresses')291 cluster_num = 3292 group = df_sorted[df_sorted["cluster"] == cluster_num]293 page_number = st.session_state.get('page_number', 1)294 num_cols = 5295 items_per_page = 100296 start_index = (page_number - 1) * items_per_page297 end_index = page_number * items_per_page298 group = group.iloc[start_index:end_index]299 num_rows = (len(group) - 1) // num_cols + 1300 st.write(f"Page {page_number}")301 st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")302 for row in range(num_rows):303 cols = st.columns(num_cols)304 for col in range(num_cols):305 i = row * num_cols + col306 if i < len(group):307 pixels = group.iloc[i, 2:-1].values.astype('int')308 image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')309 cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")310 311 # Show "Previous Page" button if not on the first page312 if start_index > 0:313 if st.button('Previous Page'):314 page_number -= 1315 st.experimental_set_query_params(page=page_number)316 st.session_state['page_number'] = page_number317 318 # Show "Next Page" button if there are more items to show319 if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):320 if st.button('Next Page'):321 page_number += 1322 st.experimental_set_query_params(page=page_number)323 st.session_state['page_number'] = page_number324 325elif subcategory == 'Large bags':326 st.image(logo_resized)327 st.write('## Large bags')328 cluster_num = 4329 group = df_sorted[df_sorted["cluster"] == cluster_num]330 page_number = st.session_state.get('page_number', 1)331 num_cols = 5332 items_per_page = 100333 start_index = (page_number - 1) * items_per_page334 end_index = page_number * items_per_page335 group = group.iloc[start_index:end_index]336 num_rows = (len(group) - 1) // num_cols + 1337 st.write(f"Page {page_number}")338 st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")339 for row in range(num_rows):340 cols = st.columns(num_cols)341 for col in range(num_cols):342 i = row * num_cols + col343 if i < len(group):344 pixels = group.iloc[i, 2:-1].values.astype('int')345 image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')346 cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")347 348 # Show "Previous Page" button if not on the first page349 if start_index > 0:350 if st.button('Previous Page'):351 page_number -= 1352 st.experimental_set_query_params(page=page_number)353 st.session_state['page_number'] = page_number354 355 # Show "Next Page" button if there are more items to show356 if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):357 if st.button('Next Page'):358 page_number += 1359 st.experimental_set_query_params(page=page_number)360 st.session_state['page_number'] = page_number361 362elif subcategory == 'Trousers':363 st.image(logo_resized)364 st.write('## Trousers')365 cluster_num = 6366 group = df_sorted[df_sorted["cluster"] == cluster_num]367 page_number = st.session_state.get('page_number', 1)368 num_cols = 5369 items_per_page = 100370 start_index = (page_number - 1) * items_per_page371 end_index = page_number * items_per_page372 group = group.iloc[start_index:end_index]373 num_rows = (len(group) - 1) // num_cols + 1374 st.write(f"Page {page_number}")375 st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")376 for row in range(num_rows):377 cols = st.columns(num_cols)378 for col in range(num_cols):379 i = row * num_cols + col380 if i < len(group):381 pixels = group.iloc[i, 2:-1].values.astype('int')382 image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')383 cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")384 385 # Show "Previous Page" button if not on the first page386 if start_index > 0:387 if st.button('Previous Page'):388 page_number -= 1389 st.experimental_set_query_params(page=page_number)390 st.session_state['page_number'] = page_number391 392 # Show "Next Page" button if there are more items to show393 if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):394 if st.button('Next Page'):395 page_number += 1396 st.experimental_set_query_params(page=page_number)397 st.session_state['page_number'] = page_number398 399elif subcategory == 'Sneakers':400 st.image(logo_resized)401 st.write('## Sneakers')402 cluster_num = 0403 group = df_sorted[df_sorted["cluster"] == cluster_num]404 page_number = st.session_state.get('page_number', 1)405 num_cols = 5406 items_per_page = 100407 start_index = (page_number - 1) * items_per_page408 end_index = page_number * items_per_page409 group = group.iloc[start_index:end_index]410 num_rows = (len(group) - 1) // num_cols + 1411 st.write(f"Page {page_number}")412 st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")413 for row in range(num_rows):414 cols = st.columns(num_cols)415 for col in range(num_cols):416 i = row * num_cols + col417 if i < len(group):418 pixels = group.iloc[i, 2:-1].values.astype('int')419 image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')420 cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")421 422 # Show "Previous Page" button if not on the first page423 if start_index > 0:424 if st.button('Previous Page'):425 page_number -= 1426 st.experimental_set_query_params(page=page_number)427 st.session_state['page_number'] = page_number428 429 # Show "Next Page" button if there are more items to show430 if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):431 if st.button('Next Page'):432 page_number += 1433 st.experimental_set_query_params(page=page_number)434 st.session_state['page_number'] = page_number435 436elif subcategory == 'Ankle boots':437 st.image(logo_resized)438 st.write('## Ankle boots')439 cluster_num = 8440 group = df_sorted[df_sorted["cluster"] == cluster_num]441 page_number = st.session_state.get('page_number', 1)442 num_cols = 5443 items_per_page = 100444 start_index = (page_number - 1) * items_per_page445 end_index = page_number * items_per_page446 group = group.iloc[start_index:end_index]447 num_rows = (len(group) - 1) // num_cols + 1448 st.write(f"Page {page_number}")449 st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")450 for row in range(num_rows):451 cols = st.columns(num_cols)452 for col in range(num_cols):453 i = row * num_cols + col454 if i < len(group):455 pixels = group.iloc[i, 2:-1].values.astype('int')456 image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')457 cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")458 459 # Show "Previous Page" button if not on the first page460 if start_index > 0:461 if st.button('Previous Page'):462 page_number -= 1463 st.experimental_set_query_params(page=page_number)464 st.session_state['page_number'] = page_number465 466 # Show "Next Page" button if there are more items to show467 if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):468 if st.button('Next Page'):469 page_number += 1470 st.experimental_set_query_params(page=page_number)471 st.session_state['page_number'] = page_number472 473 474elif subcategory == 'Heels':475 st.image(logo_resized)476 st.write('## Heels')477 cluster_num = 5478 group = df_sorted[df_sorted["cluster"] == cluster_num]479 page_number = st.session_state.get('page_number', 1)480 num_cols = 5481 items_per_page = 100482 start_index = (page_number - 1) * items_per_page483 end_index = page_number * items_per_page484 group = group.iloc[start_index:end_index]485 num_rows = (len(group) - 1) // num_cols + 1486 st.write(f"Page {page_number}")487 st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")488 for row in range(num_rows):489 cols = st.columns(num_cols)490 for col in range(num_cols):491 i = row * num_cols + col492 if i < len(group):493 pixels = group.iloc[i, 2:-1].values.astype('int')494 image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')495 cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")496 497 # Show "Previous Page" button if not on the first page498 if start_index > 0:499 if st.button('Previous Page'):500 page_number -= 1501 st.experimental_set_query_params(page=page_number)502 st.session_state['page_number'] = page_number503 504 # Show "Next Page" button if there are more items to show505 if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):506 if st.button('Next Page'):507 page_number += 1508 st.experimental_set_query_params(page=page_number)509 st.session_state['page_number'] = page_number510 511elif subcategory == 'Mini bags':512 st.image(logo_resized)513 st.write('## Mini bags')514 cluster_num = 1515 group = df_sorted[df_sorted["cluster"] == cluster_num]516 page_number = st.session_state.get('page_number', 1)517 num_cols = 5518 items_per_page = 100519 start_index = (page_number - 1) * items_per_page520 end_index = page_number * items_per_page521 group = group.iloc[start_index:end_index]522 num_rows = (len(group) - 1) // num_cols + 1523 st.write(f"Page {page_number}")524 st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")525 for row in range(num_rows):526 cols = st.columns(num_cols)527 for col in range(num_cols):528 i = row * num_cols + col529 if i < len(group):530 pixels = group.iloc[i, 2:-1].values.astype('int')531 image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')532 cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")533 534 # Show "Previous Page" button if not on the first page535 if start_index > 0:536 if st.button('Previous Page'):537 page_number -= 1538 st.experimental_set_query_params(page=page_number)539 st.session_state['page_number'] = page_number540 541 # Show "Next Page" button if there are more items to show542 if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):543 if st.button('Next Page'):544 page_number += 1545 st.experimental_set_query_params(page=page_number)546 st.session_state['page_number'] = page_number