The data is a Delhi story
India is 90.6% of all restaurants and Delhi NCR alone is 83%. Outside NCR the file holds only about 20 restaurants per city.
Cleaning and exploring 9,551 Zomato restaurants across 15 countries: from a messy raw file to statistically tested findings.
Four things to know before the charts.
Votes (ρ = 0.68) and price tier (3.24 → 3.89) track rating far more than any service feature.
The +0.24 rating gap in India reverses inside the upscale tiers.
Treating 2,148 "0" ratings as missing lifts the mean from 2.67 to 3.44.
India is 91% of rows, so city and country rankings compare samples, not markets.
Nothing was deleted: impossible values became missing, and every change is logged in the notebook.
| Issue | Found | Fix |
|---|---|---|
| Encoding damage (�) in names, cities, addresses | 428 cells | 84% restored (Café, São Paulo, İstanbul); rest stripped |
| "Not rated" stored as rating 0 | 2,148 rows (22.5%) | Set to blank + is_rated flag. Mean rating 2.67 → 3.44 |
| Cost in 12 currencies | every row | Country-based currency + approximate USD columns |
| Wrong currency label (Philippines = "Botswana Pula") | 22 rows | Corrected |
| Average cost = 0 | 18 rows | Set to blank |
| Coordinates = 0 or outside the country | 500 rows | Set to blank + coords_valid flag |
| Missing cuisines | 9 rows | Filled with "Unknown" |
| Constant / redundant columns | 3 columns | Dropped. No duplicate restaurants found, no rows deleted |
Rating analyses use rated restaurants only; service comparisons use India only.
India is 90.6% of all restaurants and Delhi NCR alone is 83%. Outside NCR the file holds only about 20 restaurants per city.
Mean 3.44. Only 301 restaurants are "Excellent" (4.5+). 22.5% have no rating at all (cleaned from a hidden 0).
Spearman ρ = 0.68. Mean rating rises from 2.98 (≤10 votes) to 4.20 (1,000+ votes). 32% of restaurants have under 10 votes, so many ratings are noisy.
Mean rating climbs from 3.24 (budget) to 3.89 (fine dining), Kruskal-Wallis p < 0.001. In India, cost per person vs rating: ρ = 0.33.
In India, booking restaurants average 3.55 vs 3.31, but inside the Upscale and Fine-dining tiers they rate lower (3.59 vs 3.79, 3.62 vs 3.94). Online delivery shows no consistent effect (3.37 vs 3.34).
Mediterranean (3.98), European (3.91) and Asian (3.85) rate highest; Mithai (3.14) and Raw Meats (3.07) lowest. North Indian is the most common primary cuisine (2,992).
Mean rating goes from 3.40 (one cuisine) to 3.66 (five or more), but the correlation is weak (ρ ≈ 0.12) and cost rises alongside.
Ghaziabad, Faridabad (3.10) and Noida (3.16) rate lowest; London (4.54) and Rio (4.49) highest, though on ~20 restaurants each. Connaught Place is the busiest locality (122 restaurants, avg 3.78).
India averages 3.35 versus 3.6–4.5 elsewhere, but foreign samples are small and 99–100% rated, so this is not a quality ranking. Online delivery exists only for India (28%) and the UAE (47%).
Grey dots are unrated restaurants. Coordinates were validated against country bounds; 500 unusable points were excluded.
Votes 0.68, cost per person 0.45, price range 0.40, table booking 0.13, cuisines 0.12, online delivery −0.04 (Spearman, rated restaurants).
Domino's 2.93, Cafe Coffee Day 3.00 and Subway 3.00 sit well under the 3.44 mean; Starbucks (3.81) and Barbeque Nation (4.35) stand out.
32% of restaurants have fewer than 10 votes, and rating rises with votes. A rating from 5 votes should be labelled provisional.
Store "not rated" as missing, not 0, fix the currency labels and text encoding, and validate coordinates at entry.
Predict rating from cost, votes, cuisines, services and location, and analyse Delhi NCR localities, the only area with enough data.
Methods: Spearman correlation, Kruskal-Wallis and Mann-Whitney tests (ratings are not normally distributed), stratified comparisons by price tier to control for confounding.
Caveats: USD costs use fixed, approximate 2018 exchange rates. About 70 damaged text cells could not be restored. The sample is not random, so results are associations, not causes.