A Brief History of Zomato

      Zomato is an Indian restaurant aggregator and food delivery start-up founded by Deepinder Goyal and Pankaj Chaddah in 2008. Zomato provides information, menus and user-reviews of restaurants as well as food delivery options from partner restaurants in select cities. Zomato also began grocery delivery amid the COVID-19 outbreak. As of 2019, the service is available in 24 countries and in more than 10,000 cities.

Zomato’s Expansion Around the World

      Zomato was founded as Foodiebay in 2008, and was renamed Zomato on 18 January 2010 as Zomato Media Pvt. Ltd. In 2011, Zomato expanded across India to Delhi NCR, Mumbai, Bangalore, Chennai, Pune and Kolkata. In 2012, the company expanded operations internationally in several countries, including the United Arab Emirates, Sri Lanka, Qatar, the United Kingdom, the Philippines,and South Africa. In 2013, Zomato was launched in New Zealand, Turkey, Brazil and Indonesia, with its website and apps available in Turkish, Portuguese, Indonesian and English languages. In April 2014, Zomato launched its services in Portugal, which was followed by launches in Canada, Lebanon and Ireland in 2015. In 2019, Zomato acquired Seattle-based food portal Urbanspoon, which led to the firm’s entry into the United States and Australia. This U.S.-expansion brought Zomato into direct competition with similar models such as Yelp and Foursquare.

# Data Input and Checking Data
zomato <- read.csv("data_input/zomato.csv")
str(zomato)
## 'data.frame':    9551 obs. of  21 variables:
##  $ Restaurant.ID       : int  6317637 6304287 6300002 6318506 6314302 18189371 6300781 6301290 6300010 6314987 ...
##  $ Restaurant.Name     : chr  "Le Petit Souffle" "Izakaya Kikufuji" "Heat - Edsa Shangri-La" "Ooma" ...
##  $ Country.Code        : int  162 162 162 162 162 162 162 162 162 162 ...
##  $ City                : chr  "Makati City" "Makati City" "Mandaluyong City" "Mandaluyong City" ...
##  $ Address             : chr  "Third Floor, Century City Mall, Kalayaan Avenue, Poblacion, Makati City" "Little Tokyo, 2277 Chino Roces Avenue, Legaspi Village, Makati City" "Edsa Shangri-La, 1 Garden Way, Ortigas, Mandaluyong City" "Third Floor, Mega Fashion Hall, SM Megamall, Ortigas, Mandaluyong City" ...
##  $ Locality            : chr  "Century City Mall, Poblacion, Makati City" "Little Tokyo, Legaspi Village, Makati City" "Edsa Shangri-La, Ortigas, Mandaluyong City" "SM Megamall, Ortigas, Mandaluyong City" ...
##  $ Locality.Verbose    : chr  "Century City Mall, Poblacion, Makati City, Makati City" "Little Tokyo, Legaspi Village, Makati City, Makati City" "Edsa Shangri-La, Ortigas, Mandaluyong City, Mandaluyong City" "SM Megamall, Ortigas, Mandaluyong City, Mandaluyong City" ...
##  $ Longitude           : num  121 121 121 121 121 ...
##  $ Latitude            : num  14.6 14.6 14.6 14.6 14.6 ...
##  $ Cuisines            : chr  "French, Japanese, Desserts" "Japanese" "Seafood, Asian, Filipino, Indian" "Japanese, Sushi" ...
##  $ Average.Cost.for.two: int  1100 1200 4000 1500 1500 1000 2000 2000 6000 1100 ...
##  $ Currency            : chr  "Botswana Pula(P)" "Botswana Pula(P)" "Botswana Pula(P)" "Botswana Pula(P)" ...
##  $ Has.Table.booking   : chr  "Yes" "Yes" "Yes" "No" ...
##  $ Has.Online.delivery : chr  "No" "No" "No" "No" ...
##  $ Is.delivering.now   : chr  "No" "No" "No" "No" ...
##  $ Switch.to.order.menu: chr  "No" "No" "No" "No" ...
##  $ Price.range         : int  3 3 4 4 4 3 4 4 4 3 ...
##  $ Aggregate.rating    : num  4.8 4.5 4.4 4.9 4.8 4.4 4 4.2 4.9 4.8 ...
##  $ Rating.color        : chr  "Dark Green" "Dark Green" "Green" "Dark Green" ...
##  $ Rating.text         : chr  "Excellent" "Excellent" "Very Good" "Excellent" ...
##  $ Votes               : int  314 591 270 365 229 336 520 677 621 532 ...
# Check Dimensions
dim(zomato)
## [1] 9551   21
# Sampling data
head(zomato)
# Eliminate unused column
zomato_clean <- zomato[ , -c(1, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 19, 20)]
head(zomato_clean)
# Creating new variable for Country
unique(zomato_clean$Country.Code)
##  [1] 162  30 216  14  37 184 214   1  94 148 215 166 189 191 208
zomato_clean$Country[zomato$Country.Code == 162] <- "Philipine"
zomato_clean$Country[zomato$Country.Code == 30] <- "Brazil"
zomato_clean$Country[zomato$Country.Code == 216] <- "USA"
zomato_clean$Country[zomato$Country.Code == 14] <- "Australia"
zomato_clean$Country[zomato$Country.Code == 37] <- "Canada"
zomato_clean$Country[zomato$Country.Code == 184] <- "Singapore"
zomato_clean$Country[zomato$Country.Code == 214] <- "United Arab Emirates"
zomato_clean$Country[zomato$Country.Code == 1] <- "India"
zomato_clean$Country[zomato$Country.Code == 94] <- "Indonesia"
zomato_clean$Country[zomato$Country.Code == 148] <- "New Zealand"
zomato_clean$Country[zomato$Country.Code == 215] <- "England"
zomato_clean$Country[zomato$Country.Code == 166] <- "Qatar"
zomato_clean$Country[zomato$Country.Code == 189] <- "South Africa"
zomato_clean$Country[zomato$Country.Code == 191] <- "Sri Lanka"
zomato_clean$Country[zomato$Country.Code == 208] <- "Turkey"
head(zomato_clean)
# Change Data Type
zomato_clean$Country.Code <- as.factor(zomato_clean$Country.Code)
zomato_clean$Price.range <- as.factor(zomato_clean$Price.range)
zomato_clean$Country <- as.factor(zomato_clean$Country)

A Glimpse about Zomato Around the World

# Check Summary
summary(zomato_clean, maxsum = 20)
##  Restaurant.Name    Country.Code     City           Average.Cost.for.two
##  Length:9551        1  :8652     Length:9551        Min.   :     0      
##  Class :character   14 :  24     Class :character   1st Qu.:   250      
##  Mode  :character   30 :  60     Mode  :character   Median :   400      
##                     37 :   4                        Mean   :  1199      
##                     94 :  21                        3rd Qu.:   700      
##                     148:  40                        Max.   :800000      
##                     162:  22                                            
##                     166:  20                                            
##                     184:  20                                            
##                     189:  60                                            
##                     191:  20                                            
##                     208:  34                                            
##                     214:  60                                            
##                     215:  80                                            
##                     216: 434                                            
##    Currency         Price.range Aggregate.rating     Votes        
##  Length:9551        1:4444      Min.   :0.000    Min.   :    0.0  
##  Class :character   2:3113      1st Qu.:2.500    1st Qu.:    5.0  
##  Mode  :character   3:1408      Median :3.200    Median :   31.0  
##                     4: 586      Mean   :2.666    Mean   :  156.9  
##                                 3rd Qu.:3.700    3rd Qu.:  131.0  
##                                 Max.   :4.900    Max.   :10934.0  
##                                                                   
##                                                                   
##                                                                   
##                                                                   
##                                                                   
##                                                                   
##                                                                   
##                                                                   
##                                                                   
##                  Country    
##  Australia           :  24  
##  Brazil              :  60  
##  Canada              :   4  
##  England             :  80  
##  India               :8652  
##  Indonesia           :  21  
##  New Zealand         :  40  
##  Philipine           :  22  
##  Qatar               :  20  
##  Singapore           :  20  
##  South Africa        :  60  
##  Sri Lanka           :  20  
##  Turkey              :  34  
##  United Arab Emirates:  60  
##  USA                 : 434

For this report, we tried to analyze 9551 restaurants located in 15 countries around the world. Based on the summary, we can find that India has the highest number of restaurants and is followed by the United States and The United Kingdom.

pie(xtabs( ~ Country, zomato_clean))

Based on the pie chart above, we can see clearly that most of the number of restaurants listed on zomato can be found in India with USA following behind.

The city with Most Amount of Restaurant in India

India <- as.data.frame(sort(prop.table(table((zomato_clean[zomato_clean$Country == "India","City"]))),
                            decreasing = T))
names(India)[1] <- paste("City")
India

Country with Highest Average Restaurant Rating

There can be a lot of restaurant in every country, but how do we know whether it’s good or not? The easiest way to find out is by finding reviews and ratings from the customers.

philipine.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "Philipine"]))
brazil.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "Brazil"]))
USA.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "USA"]))
australia.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "Australia"]))
canada.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "Canada"]))
singapore.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "Singapore"]))
unitedarabemirates.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "United Arab Emirates"]))
india.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "India"]))
indonesia.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "Indonesia"]))
newzealand.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "New Zealand"]))
england.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "England"]))
qatar.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "Qatar"]))
southafrica.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "South Africa"]))
srilanka.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "Sri Lanka"]))
turkey.mean <- (mean(zomato_clean$Aggregate.rating[zomato_clean$Country == "Turkey"]))

country.mean <- cbind(Country=c("Philipine",
                                "Brazil",
                                "USA",
                                "Australia",
                                "Canada",
                                "Singapore",
                                "United Arab Emirates", 
                                "India",
                                "Indonesia",
                                "New Zealand",
                                "England",
                                "Qatar",
                                "South Africa",
                                "Sri Lanka",
                                "Turkey"))
country.mean1 <- cbind(country.mean,as.data.frame(c(philipine.mean,
                                                    brazil.mean,
                                                    USA.mean,
                                                    australia.mean,
                                                    canada.mean,
                                                    singapore.mean,
                                                    unitedarabemirates.mean,
                                                    india.mean,
                                                    indonesia.mean,
                                                    newzealand.mean,
                                                    england.mean,
                                                    qatar.mean,
                                                    southafrica.mean,
                                                    srilanka.mean,
                                                    turkey.mean)))

names(country.mean1)[2] <- paste("Mean")

country.mean_sort <- data.frame(sort(xtabs(Mean ~ Country, country.mean1), decreasing = T))

names(country.mean_sort)[2] <- paste("Mean")

country.mean_sort
barplot(xtabs(Mean ~ Country, country.mean_sort), ylim = c(0,5))

Based on data, most of restaurant in Philipine can be categorized as best, because the average of the restaurant rating in Philipine is 4.468182. We can say that you can go wrong when you pick any restaurant in Philipine. On the other hand, you need to do more research when you want to eat at restaurant in India, since the average rating for its’ restaurant is 2.523324.

Restaurant in Indonesia

indonesia <- subset(x = zomato_clean,
                    Country == "Indonesia")
head(indonesia)
str(indonesia)
## 'data.frame':    21 obs. of  9 variables:
##  $ Restaurant.Name     : chr  "Noah's Barn Coffeenery" "Momo Milk" "Lemongrass" "Talaga Sampireun" ...
##  $ Country.Code        : Factor w/ 15 levels "1","14","30",..: 5 5 5 5 5 5 5 5 5 5 ...
##  $ City                : chr  "Bandung" "Bogor" "Bogor" "Jakarta" ...
##  $ Average.Cost.for.two: int  150000 70000 250000 200000 165000 200000 200000 800000 800000 250000 ...
##  $ Currency            : chr  "Indonesian Rupiah(IDR)" "Indonesian Rupiah(IDR)" "Indonesian Rupiah(IDR)" "Indonesian Rupiah(IDR)" ...
##  $ Price.range         : Factor w/ 4 levels "1","2","3","4": 3 2 3 3 3 3 3 3 3 3 ...
##  $ Aggregate.rating    : num  4.2 3.7 4 4.9 4.6 3.9 4.6 4.1 4.6 4.2 ...
##  $ Votes               : int  22 783 1159 1662 1476 137 903 1498 873 259 ...
##  $ Country             : Factor w/ 15 levels "Australia","Brazil",..: 6 6 6 6 6 6 6 6 6 6 ...
indonesia$City <- as.factor(indonesia$City)
summary(indonesia)
##  Restaurant.Name     Country.Code        City    Average.Cost.for.two
##  Length:21          94     :21    Bandung  : 1   Min.   : 70000      
##  Class :character   1      : 0    Bogor    : 2   1st Qu.:165000      
##  Mode  :character   14     : 0    Jakarta  :16   Median :200000      
##                     30     : 0    Tangerang: 2   Mean   :281191      
##                     37     : 0                   3rd Qu.:300000      
##                     148    : 0                   Max.   :800000      
##                     (Other): 0                                       
##    Currency         Price.range Aggregate.rating     Votes       
##  Length:21          1: 0        Min.   :3.400    Min.   :  22.0  
##  Class :character   2: 1        1st Qu.:4.000    1st Qu.: 259.0  
##  Mode  :character   3:20        Median :4.300    Median : 605.0  
##                     4: 0        Mean   :4.295    Mean   : 772.1  
##                                 3rd Qu.:4.600    3rd Qu.:1159.0  
##                                 Max.   :4.900    Max.   :2212.0  
##                                                                  
##       Country  
##  Indonesia:21  
##  Australia: 0  
##  Brazil   : 0  
##  Canada   : 0  
##  England  : 0  
##  India    : 0  
##  (Other)  : 0
nrow(indonesia)
## [1] 21

At least, there are 21 restaurant which you can find in Zomato Indonesia, which most of them located in Jakarta. We can say that most of the restaurant in Indonesia are delicious, since the average star rating for restaurant in Indonesia is 4.295.

city.indonesia <- as.data.frame(sort(table(droplevels(indonesia$City)), decreasing = T))

city.indonesia

From the data, we can see that Jakarta is city with the most amount of restaurant in Zomato.

Conclusion

      Zomato is an Indian restaurant aggregator and food delivery start-up founded by Deepinder Goyal and Pankaj Chaddah in 2008. India has the highest number of restaurants and is followed by the United States and The United Kingdom. The city with most amount of restaurant in India is New Delhi. Most of restaurant in Philipine can be categorized as best, because the average of the restaurant rating in Philipine is 4.468182. We need to do more research when we want to eat at restaurant in India, since the average rating for its’ restaurant is 2.523324. However, don’t forget about Indonesia, with average of 4.295 star rating, Indonesia ranks third out of all countries on Zomato worldwide.