Exploratory Data Analysis Tutorial: Analyzing the Food Culture of Bangalore

Symbol via Gerd Altmann from Pixabay

Exploratory Data Analysis is a technique of uncovering vital relationships between the variables via the usage of Graphs, plots, and tables. Exploratory Data Analysis (EDA) is an excessively helpful method particularly if you end up running with the massive unknown dataset. It means that you can examine the attention-grabbing relationships between the variables, find out about the other subsets of information to liberate the other patterns in the information.

On this weblog put up, we can talk about tips on how to carry out exploratory information research via developing superior visualizations the usage of matplotlib and seaborn via taking a real-world information set.


Import Libraries

For information visualization, we can the usage of those two libraries:

  • matplotlib – Matplotlib is a Python 2D plotting library which produces newsletter high quality figures in a wide range of hardcopy codecs and interactive environments throughout platforms.
  • seaborn – Seaborn is a Python information visualization library in keeping with matplotlib. It supplies a high-level interface for drawing horny and informative statistical graphics.
#import the libraries
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline #to show graphs inline of jupyter pocket book


For this research, we can be the usage of Zomato Bangalore Eating places dataset provide on kaggle. The dataset incorporates all the main points of the eating places indexed on Zomato site as of 15th March 2019.

About Zomato

Zomato is an Indian eating place seek and discovery provider based in 2008 via Deepinder Goyal and Pankaj Chaddah. It recently operates in 24 international locations. It supplies knowledge and evaluations of eating places, together with pictures of menus the place the eating place does now not have its personal site and in addition on-line supply.

Supply: Zomato

Data Context

The elemental thought of inspecting the Zomato dataset is to get an even thought about the elements affecting the established order of differing kinds of eating places at other puts in Bengaluru. This Zomato information goals at inspecting demography of the location. Most significantly it is going to assist new eating places in deciding their theme, menus, delicacies, price, and so forth for a specific location. It additionally goals at discovering similarity between neighborhoods of Bengaluru on the foundation of meals.

1. Load the Data

We can use pandas to learn the dataset.

import pandas as pd
#load the information
zomato_data = pd.read_csv("../enter/zomato.csv")
zomato_data.head() #taking a look in the beginning 5 rows of the information

2. Fundamental Data Working out

Let’s get started with fundamental information working out via checking the information sorts of the columns wherein we have an interest to paintings with.

#get the datatypes of the columns

Best the variable votes is learn as an integer, final 16 columns are learn as gadgets. So the variables like ranking, approx_cost(for 2 folks) must be modified to integer if we wish to carry out any research on them.

If you wish to get the checklist of all the columns found in the dataset:

zomato_data.columns #get the checklist of all the columns

three. Data Cleansing & Data Manipulation

On this phase, we can talk about some of the fundamental information cleansing ways like checking for reproduction values & dealing with lacking values. With the exception of information cleansing, we can additionally talk about some of the manipulation ways like converting the information sort of the variables, losing undesirable variables and renaming the columns for comfort.

#take a look at for any reproduction values

There are not any reproduction values provide on this dataset.

#take a look at for lacking values
pd.DataFrame(spherical(zomato_data.isnull().sum()/zomato_data.form[0] * 100,three), columns = ["Missing"])
Lacking Data in Percentages.

The variable dish_liked as greater than 54 % of lacking information. If we drop the lacking information, we might lose greater than 50% of the information. To simplify the research, we can drop some of the columns that don’t seem to be very helpful like url, deal with and telephone.

zomato_data.drop(["url", "address",  "phone"], axis = 1, inplace = True)

Renaming few columns for comfort

zomato_data.rename(columns=, inplace = True)

As we’ve got observed previous that the variable cost_two has information sort object which we want to convert to integer in order that we will analyze the variable.

#changing the cost_two variable to int.
zomato_data.cost_two = zomato_data.cost_two.practice(lambda x: int(x.substitute(',','')))
zomato_data.cost_two = zomato_data.cost_two.astype('int') 

To transform the variable to an integer shall we merely use astype('int') however on this situation, this system would now not paintings as a result of of the presence of a comma in between the numbers, eg. 2,500. To steer clear of this type of drawback, we’re the usage of lambda and substitute serve as to interchange comma (,) with not anything after which convert to integer.

Four. Visualization

On this phase, we can analyze the information via developing a couple of visualizations the usage of seaborn and matplotlib. All of the code mentioned in the article is provide on this kaggle kernel.

a. Rely Plot

Countplot is largely the identical as the barplot except for that it displays the rely of observations in each and every class bin the usage of bars. In our dataset, let’s take a look at the rely of each and every ranking class provide.

#plot the rely of ranking.
plt.rcParams['figure.figsize'] = 14,7
sns.countplot(zomato_data["rate"], palette="Set1")
plt.name("Rely plot of charge variable")

The velocity variable follows close to customary distribution with imply equivalent to three.7. The ranking for the majority of the eating places lies inside of the vary of three.Five-Four.2. Only a few eating places (~350) has rated greater than Four.eight.

b. Joint Plot

Jointplot lets in us to check the two other variables and notice if there may be any dating between those two variables. Through the usage of the Joint plot we will do each bivariate and univariate research via plotting the scatterplot (bivariate) and distribution plot (univariate) of two other variables in one plotting grid.

#joint plot for 'charge' and 'votes'
sns.jointplot(x = "charge", y = "votes", information = zomato_data, top=eight, ratio=Four, colour="g")

From the scatter plot, we will infer that the eating place with a excessive ranking has extra votes. The distribution plot of the variable votes on the proper facet signifies that the majority of votes pooled lie in the bucket of 1000-2500.

c. Bar Plot

Barplot is one of the maximum often used graphic to constitute the information. Barplot represents information in oblong bars with duration of the bar proportional to the price of the variable. We can analyze the variable location and notice wherein space maximum of the eating places are situated in Bangalore.

#analyze the quantity of eating places in a location
zomato_data.location.value_counts().nlargest(10).plot(sort = "barh")
plt.name("Quantity of eating places via location")

Maximum of the eating places are situated in BTM Format space, makes it one of the most well liked residential and industrial puts in Bangalore.

d. Correlation Heatmap

Correlation describes how strongly a couple of variables are comparable to one another.

#seaborn heatmap serve as to devise the correlation grid
sns.heatmap(zomato_data.corr(), annot = True, cmap = "viridis",linecolor='white',linewidths=1)

The correlation serve as corr calculates the Pearson correlation between the numeric variables, it has a worth between +1 and −1, the place 1 is a complete sure linear correlation, zero is not any linear correlation, and −1 is a complete adverse linear correlation.

  • Eating places with a web-based order facility have an inverse dating with the reasonable price of two.
  • Eating places which offer an choice of reserving desk prematurely has a excessive reasonable price.

Additional Analysis

In the earlier phase, we’ve got observed tips on how to carry out fundamental information research via developing easy visualizations. Let’s perform a little additional research in keeping with the information context.

Eating place Indexed in

We could see to wherein space maximum of the eating places are indexed in or ship to.

#eating places serve to
zomato_data.serve_to.value_counts().nlargest(10).plot(sort = "barh")
plt.name("Quantity of eating places indexed in a specific location")

As anticipated maximum of the eating places listed_in (ship to) BTM Format as a result of this space is house to over 4750 eating places. Even supposing Koramangala seventh Block doesn’t have many eating places, it stands 2d in phrases of the quantity of eating places that ship to this location.

On-line Order

Analyzing the eating places in keeping with availability of on-line order facility

#rely plot for online_order research
sns.countplot(zomato_data["online_order"], palette = "Set2")

Greater than 60% of the eating places indexed in zomato supply an choice of on-line order final eating places has an choice of dine-in handiest.

Does on-line order facility affects the ranking of the eating place?

sns.countplot(hue = zomato_data["online_order"], palette = "Set1", x = zomato_data["rate"])
plt.name("Distribution of eating place ranking over on-line order facility")

Eating places which offer on-line order facility has higher scores than the conventional eating places. It is smart as a result of many device workers keep in Bangalore and they generally tend to reserve so much of meals via the on-line.

Largest Eating place Chain and Highest Eating place Chain

plt.rcParams['figure.figsize'] = 14,7
zomato_data.identify.value_counts().head().plot(sort = "barh", colour = sns.color_palette("hls", Five))
plt.xlabel("Quantity of eating places")
plt.name("Largest Eating place Chain (Most sensible Five)")

zomato_data[zomato_data['rate']>=Four.Five]['name'].value_counts().nlargest(Five).plot(sort = "barh", colour = sns.color_palette("Paired"))
plt.xlabel("Quantity of eating places")
plt.name("Highest Eating place Chain (Most sensible Five) - Ranking Greater than Four.Five")

Cafe Espresso Day chain has over 90 cafes throughout the town which are indexed in Zomato. On the different hand, Cakes – a burger chain has the best possible rapid meals eating places (ranking greater than Four.Five out of 100), high quality over amount.

Subsequent time whilst you seek advice from Bangalore or if you wish to have to try a just right eating place over a weekend don’t omit to check out the meals at Cakes, Hammered and Mainland China.

The code mentioned in the article is provide on this kaggle kernel. Fork this kernel and take a look at to create superior visualizations on the identical dataset or some other dataset.

Really helpful Studying


On this article, we’ve got mentioned tips on how to make the most of matplotlib and seaborn API to create gorgeous visualization for exploring the dating between the variables. With the exception of that, we discovered about a couple of differing kinds of plots that can be utilized to give your findings to the stakeholders in a challenge dialogue. For those who any problems or doubts whilst imposing the above code, be at liberty to invite them in the remark phase underneath or ship me a message in LinkedIn mentioning this text.

Observe: This can be a visitor put up, and opinion on this article is of the visitor creator. When you have any problems with any of the articles posted at www.marktechpost.com please touch at asif@marktechpost.com  

Leave a Reply

Your email address will not be published. Required fields are marked *