{"id":31343,"date":"2024-11-06T19:27:33","date_gmt":"2024-11-06T18:27:33","guid":{"rendered":"https:\/\/www.graviton.at\/letterswaplibrary\/self-promotion-open-source-luxxify-ulta-makeup-reviews\/"},"modified":"2024-11-06T19:27:33","modified_gmt":"2024-11-06T18:27:33","slug":"self-promotion-open-source-luxxify-ulta-makeup-reviews","status":"publish","type":"post","link":"https:\/\/www.graviton.at\/letterswaplibrary\/self-promotion-open-source-luxxify-ulta-makeup-reviews\/","title":{"rendered":"[Self-Promotion] [Open Source] Luxxify: Ulta Makeup Reviews"},"content":{"rendered":"<p><!-- SC_OFF --><\/p>\n<div class=\"md\">\n<h1><a href=\"https:\/\/www.kaggle.com\/datasets\/zarasarkar\/makeup-insights-customer-reviews\/data\">Luxxify: Ulta Makeup Reviews<\/a><\/h1>\n<p>Hey everyone,<\/p>\n<p>I recently released an open source dataset containing Ulta makeup products and its corresponding reviews!<\/p>\n<p>Custom Created Kaggle Dataset via Webscraping: <a href=\"https:\/\/www.kaggle.com\/datasets\/zarasarkar\/makeup-insights-customer-reviews\/data\">Luxxify: Ulta Makeup Reviews<\/a><\/p>\n<p>Feel free to use the dataset I created for your own projects!<\/p>\n<h1>Webscraping Process<\/h1>\n<p>  <strong>Web Scraping:<\/strong> Product and review data are scraped from <a href=\"https:\/\/www.ulta.com\/\">Ulta<\/a>, which is a popular e-commerce site for cosmetics. This raw data serves as the foundation for a robust recommendation engine, with a custom scraper built using requests, Selenium, and BeautifulSoup4. Selenium was used to perform button click and scroll interactions on the Ulta site to dynamically load data. I then used requests to access specific URLs from XHR GET requests. Finally, I used BeautifulSoup4 for scraping static text data. <strong>Leveraging PostgreSQL UDFs For Feature Extraction<\/strong>: For data management, I chose <a href=\"https:\/\/www.postgresql.org\/\">PostgreSQL<\/a> so that I could clean the scraped data from Ulta. This data was originally stored in a complex JSON which needed to be unrolled in Postgres.  <\/p>\n<p>As an example, I made a recommender model using this dataset which benefited greatly from its richness and diversity.<\/p>\n<p>To use the Luxxify Makeup Recommender click on this link: <a href=\"https:\/\/luxxify.streamlit.app\/\">https:\/\/luxxify.streamlit.app\/<\/a><\/p>\n<p>I&#8217;d greatly appreciate any suggestions and feedback \ud83d\ude42<\/p>\n<p><a href=\"https:\/\/github.com\/zara-sarkar\/Makeup_Recommender\">Link to GitHub Repo<\/a><\/p>\n<\/div>\n<p><!-- SC_ON -->   submitted by   <a href=\"https:\/\/www.reddit.com\/user\/pansali\"> \/u\/pansali <\/a> <br \/> <span><a href=\"https:\/\/www.reddit.com\/r\/datasets\/comments\/1gl3w85\/selfpromotion_open_source_luxxify_ulta_makeup\/\">[link]<\/a><\/span>   <span><a href=\"https:\/\/www.reddit.com\/r\/datasets\/comments\/1gl3w85\/selfpromotion_open_source_luxxify_ulta_makeup\/\">[comments]<\/a><\/span><\/p><div class='watch-action'><div class='watch-position align-right'><div class='action-like'><a class='lbg-style1 like-31343 jlk' href='javascript:void(0)' data-task='like' data-post_id='31343' data-nonce='614a020375' rel='nofollow'><img class='wti-pixel' src='https:\/\/www.graviton.at\/letterswaplibrary\/wp-content\/plugins\/wti-like-post\/images\/pixel.gif' title='Like' \/><span class='lc-31343 lc'>0<\/span><\/a><\/div><\/div> <div class='status-31343 status align-right'><\/div><\/div><div class='wti-clear'><\/div>","protected":false},"excerpt":{"rendered":"<p>Luxxify: Ulta Makeup Reviews Hey everyone, I recently released an open source dataset containing Ulta makeup products&#8230;<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[85],"tags":[],"class_list":["post-31343","post","type-post","status-publish","format-standard","hentry","category-datatards","wpcat-85-id"],"_links":{"self":[{"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/posts\/31343","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/comments?post=31343"}],"version-history":[{"count":0,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/posts\/31343\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/media?parent=31343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/categories?post=31343"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/tags?post=31343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}