Wine 101: Gathering Data From Vivino
The skills I demoed here can be learned through taking Data Science with Machine Learning bootcamp with NYC Data Science Academy.
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 gather more data and 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):
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.
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).
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.
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.
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.
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.
Observations from Data
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.
Data on Best Values Wines
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
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.