Articles

HomePower BIOne Bite Pizza Power BI Analysis

One Bite Pizza Power BI Analysis

One Bite, Everybody Knows The Rules.

It was time for a bit of a fun review.

I decided to create a more fun reporting solution this time. If you haven’t watched One Bite pizza reviews from Barstool Sports, you should. It is a funny critique on a venue’s pizza primarily around New York but also wherever Dave travels. It also includes reviews from the community.

From their site:

Find the best slice of pizza using the One Bite app from Barstool Sports. Starting as a video series, Dave “El Presidente” Portnoy has created a cult following of people giving “one bite” pizza reviews by the common man, for the common man. Now you can find all of Dave’s reviews complete with videos, scores and location here. One Bite users can upload their own reviews at any of the 125,000+ pizza restaurants listed across the world.

https://onebite.app/

This Power BI report analyzes the reviews via their publicly accessible API.

https://api.onebite.app/review

https://api.onebite.app/venue

I started by using the new web scraper but the performance was horrible. I was able to loop through the pages and scrape the data but it was sloooooowwwww. It literally took 10+ hours to refresh the reviews.

There was no publicly displayed/documented API for their site. However, I read an article ( https://www.reddit.com/r/PowerBI/comments/a6f861/power_query_web_connector_scraping_function_is/ ) and followed the advice of Data_cruncher to find the API utilized by the site. After the rebuild, it took < 10 minutes to pull the data.

The API does seem to be lacking some historical data so I believe the API started in June of 2019 when they started collecting fan reviews while the site is accessing older reviews directly (not via the API). So, I scraped the old reviews and input them as static JSON so I would not have to refresh that connection when pulling in new data from the API.

I then took the users from the old reviews and added them to the users retrieved from the reviews API as they would not have been included otherwise. As well, I took the venues from the historic reviews and added them to the venues extracted from the reviews.

This API is one of those where you cannot just call the full dataset. It has an offset and a limit. Therefore, you have to create a list of numbers and build your function to be called for each starting number (offset) and increment between numbers (limit). In this scenario, it was limited to 1000 record calls. So, I :

  • built a parameter to hold the number of “loops” I would like to call (pReviewList)
  • built a blank query and added the function to create a list :
    • = {0..Number.FromText(pReviewList)}
  • converted that to a table, multiplied each record by 1000 (increments), converted to text, and called my function

There does seem to be an issue with the review API as it gives an error if you request more records than they have available (i.e. your offset + limit > # records available). This same method works fine for the venue API. Therefore, I called a try otherwise but had to hard-code otherwise with the number of records to try if the 1000 limit failed – though I may revisit and have it loop through record requests until successful.

The report consists of:

  • Cover
    • overview of the number of total reviews, total venues, venues visited by Dave, and average overall score.
    • reviews and score by community and Dave over time
  • Reviews
    • overall score by Dave and the community
    • histogram of scores by Dave and the community
    • score over time by Dave and the community
    • reviews over time by Dave and the community
  • Restaurants
    • map of reviews
    • filter to a country, state, city, or search by address
    • listing of restaurants showing the address, number of reviews, Dave’s score, community score, the median score, and the mode score
    • drillthrough to an individual restaurant
  • Restaurant
    • individual restaurant view
    • overall score based on number of reviews
    • Dave’s score
    • community score
    • restaurant information (address, provider rating/url, restaurant category(s), etc.)
    • individual reviews for the restaurant by user
  • Users
    • map of reviews
    • filter to a country, state, city, or search by address
    • listing of users showing the number of reviews, their average score, their top score, their low score, their median score, their mode score, and number of followers
    • drillthrough to an individual user
  • User
    • individual user view
    • overall score based on number of reviews
    • average score over time
    • map of reviews
    • individual reviews by the user
  • Decomposition Tree
    • drilling down via geography based on a variable measure (typically score)
  • Key Influencers
    • an attempt to see if there are any factors that help influence a higher score
    • what would be great here is if each restaurant was flagged with what type of oven they use (wood-burning, etc.), what type of pizza was reviewed (detroit, ny, deep dish, margherita, etc) chain or not, how long in business, etc. as those would help show a correlation to higher scores
(Visited 1 times)

Leave a Comment