Wine 101 (Web Scraping Vivino)

Posted on Sep 5, 2021

Github | LinkedIn

Background & Inspiration

Are you an avid wine-lover? Or are you a wine newbie just like me? Either way, you're in the right place! As someone just starting to enjoy and learn wine drinking, I wanted to get more insight into picking the best value wines that are not too expensive, but still have a high rating. So I decided to web scrape Vivino website.

What is Vivino? It is an online wine marketplace and a wine app where people can both purchase and keep track of the wine they drink. It was founded in Copenhagen, Denmark, and launched its apps on iPhone and Android starting in 2011. Since then, Vivino has gone through multiple roundings of investment to grow and now has a database containing more than 13 million different wines and over 50 million users. I personally have been very satisfied with their app, which is why I decided to scrape the website.

Web Scraping Process

There are multiple ways to scrape a website using Python including Beautiful Soup, Scrapy, Selenium, etc. For this project, I chose to use Selenium since it is compatible with an infinite scroll that Vivino utilizes. Since I could not scrape the entire Vivino website due to its database size, the scraped data was limited to red wines that are under $450, which was around 45,000 records. The fields I scraped were as follows:

  • Price: price of the wine (in USD)
  • Year: year the wine was made
  • Country: country the wine was made in
  • Overall Rating: average rating (out of 5)
  • Overall Rating Count: count of all ratings
  • Wine Notes (wine flavor & aroma index):
    • Light-Bold
    • Smooth-Tannic
    • Dry-Sweet
    • Soft-Acidic

One thing to note here is that the Xpath used to scrape wine notes had values of the left end of the bar, which was of length 15 out of the whole bar of 100. So once they were scraped, I had to add 7.5 in order to obtain the middle value of the bar.

Data Analysis

First, I wanted to see how wine price compared to the overall rating. So I plotted the overall rating of all scraped wine data against their respective prices as shown in Figure 1. To no surprise, higher-rated wines were shown to be more expensive or vice-versa, more expensive wines had higher ratings. It was interesting to see about 100 wines that had lower than a 3.0 rating, which is very bad considering most people don't tend to give ratings below a 3.0 as shown in Figure 2. The spread of overall ratings had a very heavy concentration of ratings around 4.0, which makes sense since I assume many wines are not perfect (5.0), yet not horrible (below 3.0).

Figure 1

Figure 2

As new wine-lovers, the section I decided to focus on first was where wines have good ratings (over 4.5) that are on the cheaper side (under $100), which is highlighted by a green box in Figure 1. As seen in Figure 3, I plotted price vs. rating for the best value wines by country and the United States seemed to be dominating in the best value wine category.

Figure 3

Going back to looking at the overall scraped data, I looked at the top 10 origin countries of wines on Vivino under $450 as shown in Figure 4. Most wines seemed to have been made in United States, France, and Italy with more than 9,000 wines each, trailing by Spain, Argentina, Australia, Portugal, and Chile with more than 1,000 wines. Thus, I decided to take a deeper look at those 8 countries.

Figure 4

First, I created a boxplot to see how the prices compared across the 8 countries as shown in Figure 5. Wines that were over $200 were excluded from the boxplot since it was pretty sparse and didn't add much value. The median and 3rd quartile prices of wine in France, Italy, and United States were much higher at the $40-$50 range compared to other countries at about $25. I also looked at the mean price of wines by country and saw a similar trend where the top 3 mean prices were from France, United States, and Italy.

Figure 5

Then I plotted a similar boxplot on the top 8 countries but on the overall rating as shown in Figure 6. This was a little less exciting at first since as seen in Figure 2 above, there was a heavy concentration of ratings around the 4.0 range. However, I ran some t-tests between different countries to see if the median ratings were significantly different from each other and all of them had p-values that were much lower than 0.05 which meant they were significantly different. The highest one was between Portugal and Spain which had a p-value of 0.01, but most of the combinations were very small, which was interesting.

Figure 6

I then looked into each wine note to see what scale had the best price and rating. Wine notes are the nuances in wine flavor and aroma, which Vivino divides into four categories: light-bold, smooth-tannic, dry-sweet, and soft-acidic. Before going into each of the wine notes, I would like to caveat that the analysis below is limited to the data I scraped (red wines under $450) from Vivino and is only representative of that group.

By looking at each of the wine notes, the following were observed:

  • Light-bold: There were a lot more wines that were bold than light as seen in Figure 7. Bolder wines were a bit more expensive although this could be a result of just having more wine on the bolder side.
  • Smooth-tannic: The wines were a more spread out with a little skewness towards tannic side as seen in Figure 8.
  • Dry-Sweet: Since red wines are generally more dry than sweet (which may be very obvious to people who are already avid wine-drinkers), the scale in Figure 9 doesn't even have 70+ due to the scarcity.
  • Soft-Acidic: This note was a lot more spread out, but still skewed towards acidic as shown in Figure 10.

Figure 7

Figure 8

Figure 9

Figure 10

Lastly, I looked at the best values wines (under $100 and over 4.5 rating) with soft-acidic on the x-axis, smooth-tannic on the y-axis, and light-bold scale on the z-axis as shown in Figure 11. The dry-sweet scale has been excluded from this since most red wines from the scraped data were classified as dry. In the 3D scatter plot, there were clearly two big clusters of best value wines as follows:

  • Cluster 1:
    • Light-bold: 60-70
    • Smooth-tannic: 20-40
    • Soft-acidic: 60
  • Cluster 2:
    • Light-bold: 90
    • Smooth-tannic: 60
    • Soft-acidic: 60

Figure 11

Conclusion

After looking through the scraped red wine data from Vivino that are under $450, it seems like you don't really need to pay hundreds of dollars to enjoy good wine. If you are like me who is just getting into wine and are looking for the best value wines that have over a rating over 4.5 and are under $100, look for these traits:

  • From United States
  • Light-bold scale > 80
  • Smooth-tannic scale between 50 and 70
  • Dry-sweet scale < 15
  • Soft-acidic scale between 50 and 70

Based on that criteria, I have selected 4 wines below that the new wine lovers can try to begin with although I recommend trying wines that have different wine note scales to find the set of notes that best fit each person's taste buds (Vivino app has a great feature that keeps track of wines you drink):

  • Duckhorn Howell Mountain Cabernet Sauvignon 2016
  • Pursued by Bear Cabernet Sauvignon 2015
  • Orin Swift Papillon 2018
  • Kosta Browne Sonoma Coast Pinot Noir 2017

Vivino could use the information from this analysis to create discounts and/or recommendations based on "years of experience with wine". In order to be used for that purpose though, this analysis will need to be expanded to incorporate other types of wines so that there are much more variations of wine notes. If that makes the data too big, the analysis could possibly be limited to cheaper wines (maybe under $100 or $200) so it doesn't take forever to web scrape.

About Author

William Han

Will Han, ASA, MAAA has been working as a Medicaid consulting actuary for 4 years. Experience programming in Python & R and expert in Excel modeling. Passionate about any data driven business insights & strategy and looking forward...
View all posts by William Han >

Related Articles

Leave a Comment

No comments found.

View Posts by Categories


Our Recent Popular Posts


View Posts by Tags

#python #trainwithnycdsa 2019 airbnb Alex Baransky alumni Alumni Interview Alumni Reviews Alumni Spotlight alumni story Alumnus API Application artist aws beautiful soup Best Bootcamp Best Data Science 2019 Best Data Science Bootcamp Best Data Science Bootcamp 2020 Best Ranked Big Data Book Launch Book-Signing bootcamp Bootcamp Alumni Bootcamp Prep Bundles California Cancer Research capstone Career Career Day citibike clustering Coding Course Demo Course Report D3.js data Data Analyst data science Data Science Academy Data Science Bootcamp Data science jobs Data Science Reviews Data Scientist Data Scientist Jobs data visualization Deep Learning Demo Day Discount dplyr employer networking feature engineering Finance Financial Data Science Flask gbm Get Hired ggplot2 googleVis Hadoop higgs boson Hiring hiring partner events Hiring Partners Industry Experts Instructor Blog Instructor Interview Job Job Placement Jobs Jon Krohn JP Morgan Chase Kaggle Kickstarter lasso regression Lead Data Scienctist Lead Data Scientist leaflet linear regression Logistic Regression machine learning Maps matplotlib Medical Research Meet the team meetup Networking neural network Neural networks New Courses nlp NYC NYC Data Science nyc data science academy NYC Open Data NYCDSA NYCDSA Alumni Online Online Bootcamp Online Training Open Data painter pandas Part-time Portfolio Development prediction Prework Programming PwC python Python Data Analysis python machine learning python scrapy python web scraping python webscraping Python Workshop R R language R Programming R Shiny r studio R Visualization R Workshop R-bloggers random forest Ranking recommendation recommendation system regression Remote remote data science bootcamp Scrapy scrapy visualization seaborn Selenium sentiment analysis Shiny Shiny Dashboard Spark Special Special Summer Sports statistics streaming Student Interview Student Showcase SVM Switchup Tableau team TensorFlow Testimonial tf-idf Top Data Science Bootcamp twitter visualization web scraping Weekend Course What to expect word cloud word2vec XGBoost yelp