CASE STUDY · SQL + PYTHON

Zomato Restaurant
Business Analysis.

An end-to-end analysis of restaurant pricing, ratings, customer engagement, online-delivery adoption, cuisine popularity and city-level market structure.

SQLPythonPandasSQLiteEDABusiness Analytics
Zomato restaurant business analysis visual
BUSINESS PROBLEM

What does the restaurant data actually tell us?

The project started with SQL business questions and expanded into Python EDA and advanced analysis to understand restaurant performance, pricing, customer engagement and digital-delivery adoption.

Which restaurants are the most expensive?
Which restaurants combine strong ratings with affordability?
Where is online-delivery adoption higher or lower?
Which cuisines and cities receive the most recorded engagement?
How do ratings, votes and pricing vary across price ranges?
Which cities have different supply, quality and delivery profiles?
Which restaurants provide delivery without table booking?
Can city-level metrics support an opportunity framework?
DATA & CONTEXT

9,551 restaurants. 15 countries. 141 cities.

The dataset contains 18 columns covering restaurant identity, location, cuisine, pricing, ratings, votes, table booking and online-delivery availability.

9,551Restaurant records
18Columns
15Countries
141Cities
FieldBusiness meaningUsed for
RestaurantNameRestaurant identityRestaurant-level analysis
CountryName / CityGeographic marketCountry and city comparisons
CuisinesCuisine combinationCuisine engagement analysis
Price_range / Average_Cost_for_twoPricingPrice and value analysis
Rating / VotesRecorded customer responseQuality and engagement analysis
Has_Online_deliveryDigital delivery availabilityDelivery adoption analysis
Has_Table_bookingTable booking availabilityService-model analysis
Context
India represents approximately 90.59% of the records, so dataset-wide conclusions are strongly influenced by the Indian restaurant market. The analysis therefore uses explicit context when comparing cities, countries and pricing.
DATA QUALITY FIRST

Validate before interpreting.

The analysis checks missing values, zero-engagement records and duplicate Restaurant IDs before moving into business KPIs. This separates data-quality issues from genuine restaurant performance patterns.

1,094Restaurants with zero votes
2,148Rating ≤ 1.0 and votes ≤ 3
90.59%Records from India

Votes are treated as a recorded engagement measure, not as unique customers or orders. Low-vote restaurants should therefore be interpreted differently from highly reviewed restaurants.

CONTEXT VALIDATION

The correlation changed when the market context changed.

The same restaurant attributes show a very different relationship when the dataset is filtered to India. The comparison below makes the analytical context visible before interpreting the pricing relationship.

Correlation heatmap comparison for all countries versus India-only filtered data
Correlation matrix comparison — all countries versus India only. The Average Cost for Two ↔ Price Range correlation rises from 0.08 in the unfiltered dataset to 0.84 after filtering to India.
Interpretation
Because the dataset contains multiple countries and currencies, the unfiltered relationship is not directly comparable with an India-only relationship. The analysis therefore checks context before drawing conclusions. Correlation indicates association, not causation.
ANALYSIS

From SQL questions to a broader analytical framework.

The original SQL case study covers Q1–Q8. The continuation extends the work from Q9 onward using Python, Pandas and SQLite.

Q1–Q8SQL Business Case StudyPricing · data quality · Indian restaurants without delivery · value-for-money · city delivery adoption · delivery without table booking · cuisine popularity · city dining cost
Q9–Q28Python EDA & Advanced AnalysisDataset profiling · distributions · delivery · engagement · cuisine · correlation · segmentation · value-for-money · city market profile · opportunity framework
Data Understanding→Validation→SQL→Python EDA→Advanced Analysis→Business Insights
KEY FINDINGS

What emerged from the analysis?

Engagement is skewed

Mean votes are approximately 157, compared with a median of 31 and a maximum of 10,934.

Delivery gap

3,022 Indian restaurants serving Indian cuisine do not offer online delivery in the dataset.

Price & engagement

Price Range 1 averages 2.33 rating / 36 votes, while Price Range 4 averages 3.66 rating / 404 votes.

City + cuisine

New Delhi — North Indian | Mughlai records the highest city–cuisine vote total at 27,951.

Value-for-money

A project-defined rule combines rating ≥ 4.5, votes > 500 and average cost for two < ₹800.

Market structure

City profiles combine supply, ratings, votes, pricing and delivery adoption to provide broader market context.

ANALYTICAL PRINCIPLE Business conclusions depend on data context, not just the final SQL query or chart.

Comparability, representativeness, engagement definitions and analytical thresholds are documented throughout the project.

ADVANCED ANALYSIS

Turning restaurant records into business segments.

The advanced notebook adds correlation analysis, performance segmentation, value-for-money analysis and city-level market profiling.

4Project-defined restaurant segmentsHigh Value Performer · Strong Performer · Average Performer · Needs Attention. These are analytical rules created for this project, not official Zomato classifications.
4Market Opportunity componentsDelivery Gap 30% · Customer Demand 30% · Restaurant Density 20% · Average Rating / Quality 20%.
Important
The Market Opportunity Score is a portfolio analytical framework created specifically for this project. It is not an official Zomato metric or a validated commercial market-ranking model.
BUSINESS IMPLICATIONS

What could the analysis support?

Delivery expansion

Investigate cities with meaningful restaurant supply and engagement alongside lower delivery adoption.

Value discovery

Identify restaurants combining strong ratings, recorded engagement and relatively affordable pricing.

Cuisine discovery

Use city-level cuisine engagement to support localized restaurant discovery.

Market differentiation

Compare premium-oriented and value-oriented city profiles using multiple supporting metrics.

Engagement strategy

Separate low-recorded-engagement restaurants from highly reviewed restaurants when evaluating performance.

Data governance

Retain validation checks before using restaurant data for operational KPIs or decisions.

TECH STACK

SQL inside Python, not SQL in isolation.

The project combines relational querying with Python-based EDA so the analysis can move from business questions to validation, statistical exploration and decision-oriented interpretation.

PythonPandasSQLiteSQLMatplotlibJupyterGoogle ColabGitHub
Advanced SQL
City + cuisine aggregation, ranking and a ROW_NUMBER() window-function approach are used to identify the most-voted cuisine in each city.
LIMITATIONS

What the dataset cannot establish.

Snapshot data

The dataset does not provide historical restaurant performance trends.

Currency context

Multiple countries and currencies make direct global cost comparisons misleading without normalization.

Votes ≠ customers

Recorded votes should not automatically be interpreted as unique customers or orders.

Association ≠ causation

Correlation analysis identifies association and does not establish causal relationships.

Project thresholds

Restaurant segments and the opportunity score use project-defined analytical rules.

Decision validation

Recommendations require current operational, financial and historical data before implementation.

PROJECT RESOURCES

Explore the analysis
in full.