Postmates Data Analysis

Posted on Jul 10, 2021
The skills I demoed here can be learned through taking Data Science with Machine Learning bootcamp with NYC Data Science Academy.
Github | Application

Background and Motivation

Cooking your own food is usually a much healthier and cheaper option than going out to eat. Oftentimes however, data shows that cooking your own food may not be an option. Sometimes you may not have the essential ingredients in your kitchen. Other times, you may not want to go through the lengthy process of cooking and then cleaning. For times like these, when cooking your own food is not an option, finding places around you to eat is the next best option. But even finding places to eat can be overwhelming.

What places are around you? Which places sell a particular dish you're in the mood for? What places adhere to a specific diet you're trying? What places sell a particular dish for the cheapest price? Which place does a lot of people in your area really enjoy? These are just some of the questions that may come to mind when deciding where to eat.

Project Summary

For this project, I scraped restaurant menus for over 700 restaurants in New York City, the majority of which located in the Manhattan area. I then built a simple interactive dashboard broken into three different sections to visualize this data.

The first section of this dashboard displays all the scraped restaurants and their locations in New York City. The second section allows a user to input a particular food and get back a list of menu items most similar to the that food. While the third and final section allows a user to select a particular menu item and get the distribution of prices for vendors that sell that item.

Section I Data - Restaurants In New York City

This section of the application displays all the scraped food vendors on a map of New York City.

Postmates Data Analysis

The color of the dots represent the category that the vendor belongs to. The size of the dots represent how many of Postmate's users favorited that vendor. Bigger dots have more favorites while smaller dots have less favorites. Double clicking on one of the categories in the legend will only display vendors belonging to that category. For example, double clicking on the pizza category gives us the results shown in the plot below.

Postmates Data Analysis

Section II Data- Finding vendors with a particular item

This section of the application allows a user to type a particular food in a search bar and get back vendors that sell similar menu items.  Typing in "avocado toast" yields the results shown in the output below. 

Postmates Data Analysis

How similar menu items are chosen

Building the algorithm to find similar menu items involved some data preprocessing steps before ultimately using the cosine similarity as the similarity measurement.

Data Preprocessing

First, a bag of words for each menu item was created that included the menu item name and the menu item description.

Stopwords, or words that add little to no meaning like "the", "a", or "are", were removed from the bag of words. Every word was then converted to lowercase and punctuation was removed. Converting every word to lowercase ensured that words such as "Sushi" and "sushi" were considered the same. Removing punctuation ensured that occurrences like "chocolate" and "chocolate," were also considered to be the same. Finally, each word was then lemmatized to get the dictionary form of the word. Examples of lemmatized words would include transformations such as "eggs" to "egg" or "smashed" to "smash".

Count Vectorizer

In order for the cosine similarity to work, each menu item's bag of words needed to be converted into a vector of numerical data. I used python's count vectorizer to obtain these vectors where each vector now contained the count of each word contained in the entire corpus.

Cosine Similarity

After getting vector representations for each menu item, I obtain the vector representation of the user-inputed string using the same preprocessing steps and vector transformations used previously. The count vectorizer is transformed, but not fit again, on the user-inputted string so the vocabulary for all the menu items is consistent with the vocabulary for the user-inputted string. The cosine similarity of the user-inputed string and every menu item in the dataset is then calculated.

Menu items with a higher score will be considered more similar to the user's input. The top ten cosine similarity scores for the search term "Spaghetti and Meatballs" is shown in the table below.

Section III Data- Item Price Distributions

This section of the application allows the user to select a menu item and get the distribution of prices for that menu item. The distribution of prices for the menu item of "Fries" is shown below.

In addition, a bar plot is displayed which displays each vendor that sells that particular item. The bar chart is sorted in ascending order by the price in which the item is sold.  The bar chart for the menu item "Fries" is shown below. 

Future Revisions

In future revisions of this application, I would like to add more restaurants in New York City. I would also like to automate the data scraping process in order to include restaurants that are new to Postmates.

In the third section of the application, the list of menu items to choose from contains duplicate menu items like "Diet Coke (can)", "Diet Coke", and "Diet Coke Can". I would like to remove duplicate items such as these in future revisions.

About Author

Leave a Comment

No comments found.

View Posts by Categories


Our Recent Popular Posts


View Posts by Tags

#python #trainwithnycdsa 2019 2020 Revenue 3-points agriculture air quality airbnb airline alcohol Alex Baransky algorithm alumni Alumni Interview Alumni Reviews Alumni Spotlight alumni story Alumnus ames dataset ames housing dataset apartment rent API Application artist aws bank loans 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 boston safety Bundles cake recipe California Cancer Research capstone car price Career Career Day citibike classic cars classpass clustering Coding Course Demo Course Report covid 19 credit credit card crime frequency crops D3.js data data analysis Data Analyst data analytics data for tripadvisor reviews data science Data Science Academy Data Science Bootcamp Data science jobs Data Science Reviews Data Scientist Data Scientist Jobs data visualization database Deep Learning Demo Day Discount disney dplyr drug data e-commerce economy employee employee burnout employer networking environment feature engineering Finance Financial Data Science fitness studio Flask flight delay gbm Get Hired ggplot2 googleVis H20 Hadoop hallmark holiday movie happiness healthcare frauds higgs boson Hiring hiring partner events Hiring Partners hotels housing housing data housing predictions housing price hy-vee Income Industry Experts Injuries Instructor Blog Instructor Interview insurance italki Job Job Placement Jobs Jon Krohn JP Morgan Chase Kaggle Kickstarter las vegas airport lasso regression Lead Data Scienctist Lead Data Scientist leaflet league linear regression Logistic Regression machine learning Maps market matplotlib Medical Research Meet the team meetup methal health miami beach movie music Napoli NBA netflix Networking neural network Neural networks New Courses NHL nlp NYC NYC Data Science nyc data science academy NYC Open Data nyc property NYCDSA NYCDSA Alumni Online Online Bootcamp Online Training Open Data painter pandas Part-time performance phoenix pollutants Portfolio Development precision measurement prediction Prework Programming public safety PwC python Python Data Analysis python machine learning python scrapy python web scraping python webscraping Python Workshop R R Data Analysis 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 seafood type Selenium sentiment analysis sentiment classification Shiny Shiny Dashboard Spark Special Special Summer Sports statistics streaming Student Interview Student Showcase SVM Switchup Tableau teachers team team performance TensorFlow Testimonial tf-idf Top Data Science Bootcamp Top manufacturing companies Transfers tweets twitter videos visualization wallstreet wallstreetbets web scraping Weekend Course What to expect whiskey whiskeyadvocate wildfire word cloud word2vec XGBoost yelp youtube trending ZORI