Before building sophisticated machine learning models, every successful data scientist performs Exploratory Data Analysis (EDA). If you skip EDA, you risk training models on flawed, noisy, or irrelevant data, leading to inaccurate predictions and misleading business strategies.
EDA is the crucial process of performing initial investigations on data, often using visual methods, to discover patterns, spot anomalies, test hypotheses, and check assumptions with the help of summary statistics.
This article provides a practical, structured guide to executing EDA effectively.
1. Step 1: Understand the Data & Problem
The first step has nothing to do with coding. It is about understanding the context.
-
Define the Goal: What business problem are you trying to solve? (e.g., predicting customer churn or forecasting inventory).
-
Identify Features (Columns): Analyze the data dictionary.
-
What does each column represent?
-
What are the data types (Numerical: continuous/discrete? Categorical: nominal/ordinal)?
-
Which column is the Target Variable (what you want to predict)?
2. Step 2: Data Loading & Initial Inspection
Load your dataset (often using Python’s Pandas library) and perform a high-level review of its structure and health.
Essential Pandas Commands:
-
df.head(): View the first five rows to understand the data format.
-
df.shape: Check the total number of rows (samples) and columns (features).
-
df.info(): Crucial command to see data types, memory usage, and—most importantly—counts of non-null values.
-
df.describe(): Generate descriptive statistics (mean, median, standard deviation, min, max, quartiles) for all numerical columns.
3. Step 3: Data Cleaning (Wrangling)
Real-world data is almost always messy. This stage is where you “scrub” the data until it is reliable.
1. Handling Missing Data
Missing values (NaN) can break models. You have three main choices:
-
Drop: Remove rows or columns if the missingness is massive ($>60\%$) or random.
-
Impute (Numerical): Fill missing values with the Mean (if distribution is normal) or Median (if skewed by outliers).
-
Impute (Categorical): Fill missing values with the Mode (most frequent category) or a new category like “Unknown.”
2. Handling Duplicates
Remove identical records using df.drop_duplicates(). Duplicates inflate performance metrics artificially.
3. Fixing Structural Errors
-
Check for inconsistent capitalization (e.g., “NY,” “ny,” “New York”).
-
Correct mislabeled data types (e.g., a numerical “ID” column being loaded as text).
4. Step 4: Univariate Analysis (One Variable at a Time)
Analyze individual features to understand their distributions, spread, and central tendencies. The approach differs by data type.
Analyzing Numerical Variables
Use visuals to see how numerical data is spread.
-
Histogram: Shows the distribution, skewness (left or right), and whether the data is unimodal or bimodal.
-
Box Plot (Whisker Plot): Clearly displays the median, quartiles ($Q1/Q3$), and statistically defined outliers (points outside $1.5 \times \text{IQR}$).
Analyzing Categorical Variables
-
Bar Chart / Count Plot: Displays the frequency or count of occurrences for each unique category.
-
Pie Chart: Use sparingly, and only if there are very few categories ($<5$).
5. Step 5: Bivariate & Multivariate Analysis (Exploring Relationships)
Now, explore how different variables interact with each other, focusing heavily on how features relate to the Target Variable.
1. Numerical vs. Numerical
-
Scatter Plot: Visualizes the relationship between two continuous variables (e.g., Square Footage vs. House Price). Look for linear or non-linear patterns.
-
Correlation Heatmap: Calculates and visualizes Pearson’s correlation coefficients between all pairs of numerical features. Coefficients range from -1 (perfect negative correlation) to +1 (perfect positive correlation).
Crucial Reminder: Correlation does not imply causation.
2. Numerical vs. Categorical
3. Categorical vs. Categorical
6. Step 6: Feature Engineering Insights & Iteration
EDA is an iterative loop. As you discover patterns, you should generate hypotheses that lead back to Feature Engineering (Topic #33).
-
Insight: “The correlation between ‘age’ and ‘churn’ is weak, but ‘age’ relative to ‘tenure’ might be important.”
-
Action: Create a new feature: age_tenure_ratio = df['age'] / df['tenure'].
-
Iterate: Perform EDA on this new feature against the target.
Summary of EDA Objectives

| Analysis Level |
Numerical Tools |
Visualization Tools |
Core Objective |
| Univariate |
describe(), skew() |
Histograms, Box Plots, Bar Charts |
Understand distribution, spread, outliers |
| Bivariate |
corr(), groupby() |
Scatter Plots, Heatmaps, Segmented Box Plots |
Discover relationships, dependencies, correlations |
| Multivariate |
Pair Plots, Multi-faceted FacetGrids |
Pair Plots, Advanced 3D Plots |
Find complex feature interactions |
Final Takeaway
Exploratory Data Analysis is not just a checkbox activity; it is a mindset. The deeper you understand the quirks, noise, and structures of your dataset during EDA, the more resilient, accurate, and explainable your machine learning models will be.