exploratory data analysis (EDA)
Exploratory data analysis (EDA) is an approach to analyzing a dataset that puts summaries and visualizations first, before any formal modeling or hypothesis testing. The goal is to find out what the data actually contains: its shape, its distributions, its gaps, and the relationships between its variables.
Statistician John Tukey set out the approach in his 1977 book Exploratory Data Analysis, and the philosophy behind it is to let the data reveal its own structure instead of imposing assumptions on it up front.
A typical EDA pass mixes cheap numeric checks with plots. You inspect the row count and the column data types, then compute summary statistics such as the mean, the median, and the quartiles that split the sorted values into four equal parts. You also count missing values and look for outliers that would distort a later model.
Histograms, box plots, and scatter plots carry much of the load, because a pattern is quicker to see than to read off a table.
In Python, EDA usually runs over a pandas DataFrame inside a Jupyter notebook, where each check builds on the one before it. The pandas library handles the numeric summaries, and plotting libraries such as Matplotlib and seaborn handle the visual half.
Example
Say a weather-station export lands on your desk and you need to know whether the temperature column is trustworthy before you average it:
>>> import pandas as pd
>>> readings = pd.DataFrame(
... {
... "station": ["north", "north", "south", "south", "east"],
... "temp_c": [21.5, 22.0, 19.8, 250.0, None],
... "humidity": [48, 51, 55, 53, 60],
... }
... )
>>> readings.describe()
temp_c humidity
count 4.000000 5.000000
mean 78.325000 53.400000
std 114.453874 4.505552
min 19.800000 48.000000
25% 21.075000 51.000000
50% 21.750000 53.000000
75% 79.000000 55.000000
max 250.000000 60.000000
>>> readings.isna().sum()
station 0
temp_c 1
humidity 0
dtype: int64
The summary is where the trouble surfaces. A mean of 78.3 degrees Celsius sitting next to a median of 21.75 and a maximum of 250 points to one implausible reading rather than a heat wave, and the count of four against five rows says a value is missing.
The second check confirms that the gap is in temp_c, not in the other columns. Neither problem stands out in the raw table, and both would skew any average taken from that column. Spotting them is the work EDA does.
Drag the south station’s reading below and watch the summary recompute: the mean chases the bad value while the median holds steady near 21.75, and filling in the missing east reading moves count from four to five.
Related Resources
Tutorial
Python Statistics Fundamentals: How to Describe Your Data
In this step-by-step tutorial, you'll learn the fundamentals of descriptive statistics and how to calculate them in Python. You'll find out how to describe, summarize, and represent your data visually using NumPy, SciPy, pandas, Matplotlib, and the built-in Python statistics library.
For additional information on related topics, take a look at the following resources:
- The pandas DataFrame: Make Working With Data Delightful (Tutorial)
- Plot With pandas: Python Data Visualization for Beginners (Tutorial)
- Pythonic Data Cleaning With pandas and NumPy (Tutorial)
- Python Histogram Plotting: NumPy, Matplotlib, pandas & Seaborn (Tutorial)
- Plot With pandas: Python Data Visualization Basics (Course)
- The pandas DataFrame: Working With Data Efficiently (Course)
- The pandas DataFrame: Make Working With Data Delightful (Quiz)
- Data Cleaning With pandas and NumPy (Course)
- Histogram Plotting in Python: NumPy, Matplotlib, Pandas & Seaborn (Course)
By Martin Breuss • Updated Aug. 22, 2026