Normal Distribution Explained
A normal distribution (also called a Gaussian distribution or bell curve) is a symmetric, bell-shaped probability distribution in which values cluster around the mean and become rarer the further they are from it. It is defined by just two numbers, the mean (μ) and the standard deviation (σ), and it is the basis for z-score probabilities, confidence intervals and many common statistical tests.
Quick answer: A normal distribution is a symmetric bell curve set by its mean (μ) and standard deviation (σ). The mean, median and mode are equal, and about 68% of values fall within μ ± σ, 95% within μ ± 2σ and 99.7% within μ ± 3σ. With μ = 100 and σ = 15, about 68% of values lie between 85 and 115. Check your data with a histogram, a Q-Q plot or the Shapiro-Wilk test.
What are the key characteristics of a normal distribution?
A normal distribution is symmetric around its mean, has a single peak where the mean, median and mode coincide, and has tails that get closer to zero without ever reaching it. Its shape never changes: the mean (μ) only shifts the curve left or right, and the standard deviation (σ) only makes it wider or narrower.
- Bell-shaped curve: Symmetrical around the center
- Mean = Median = Mode: All at the peak
- Defined by two parameters: Mean (μ) and standard deviation (σ)
- Predictable spread: Follows the 68-95-99.7 rule
What is the 68-95-99.7 rule?
The 68-95-99.7 rule, also called the empirical rule, says that in a normal distribution about 68% of values fall within one standard deviation of the mean, about 95% within two, and about 99.7% within three. The exact figures are 68.27%, 95.45% and 99.73%.
- 68% of data falls within 1 standard deviation of the mean (μ ± σ)
- 95% of data falls within 2 standard deviations (μ ± 2σ)
- 99.7% of data falls within 3 standard deviations (μ ± 3σ)
Worked example: if test scores are normal with μ = 100 and σ = 15, about 68% of scores fall between 85 and 115, 95% between 70 and 130, and 99.7% between 55 and 145. A score of 130 is two standard deviations above the mean and beats about 97.7% of scores. The rule only holds for data that is close to normal, so check the shape before you rely on it.
What is the formula for the normal distribution?
The probability density function of a normal distribution with mean μ and standard deviation σ is f(x) = e^(−(x − μ)² / (2σ²)) / (σ√(2π)). You rarely need it by hand: convert a value to a z-score with z = (x − μ) / σ, which maps any normal distribution onto the standard normal distribution (μ = 0, σ = 1), then read the probability from software or a z-table.
How do I calculate normal distribution probabilities in Python or Excel?
Use the cumulative distribution function (CDF) to get the share of values below a number, and its inverse to get the value that cuts off a given share. In Python that is scipy.stats.norm; in Excel 2010 and later it is NORM.DIST and NORM.INV.
from scipy.stats import norm
mu, sigma = 100, 15
print(round(norm.cdf(115, mu, sigma), 4)) # 0.8413 share at or below 115
print(round(norm.sf(130, mu, sigma), 4)) # 0.0228 share above 130 (sf = 1 - cdf)
print(round(norm.ppf(0.95, mu, sigma), 2)) # 124.67 95th percentile
=NORM.DIST(115, 100, 15, TRUE) → 0.8413
=1 - NORM.DIST(130, 100, 15, TRUE) → 0.0228
=NORM.INV(0.95, 100, 15) → 124.67
Where do normal distributions appear in real data?
Data tends to be close to normal when each value is the sum of many small, independent effects, which is why heights, measurement errors and averages of large samples often look like a bell curve.
- Heights: Adult height within one sex is approximately normal
- Test scores: Large class test scores tend to be normally distributed
- Measurement errors: Random errors in scientific measurements
- Blood pressure: Population blood pressure readings
How do I generate normally distributed data in Python?
Call np.random.normal(mean, std_dev, size) to draw random values from a normal distribution, then plot a histogram to see the bell shape. With 1,000 draws, the share of values within one and two standard deviations lands close to 68% and 95%.
import numpy as np
import matplotlib.pyplot as plt
# Generate normal distribution data
mean = 100
std_dev = 15
data = np.random.normal(mean, std_dev, 1000)
# Plot histogram
plt.hist(data, bins=30, density=True, alpha=0.7)
plt.axvline(mean, color='red', linestyle='--', label='Mean')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.title('Normal Distribution (μ=100, σ=15)')
plt.legend()
plt.show()
# Check the 68-95-99.7 rule
within_1std = np.sum((data >= mean-std_dev) & (data <= mean+std_dev)) / len(data)
within_2std = np.sum((data >= mean-2*std_dev) & (data <= mean+2*std_dev)) / len(data)
print(f"Within 1 std dev: {within_1std:.1%}") # ~68%
print(f"Within 2 std dev: {within_2std:.1%}") # ~95%
Why does the normal distribution matter?
Many standard methods, including t-tests, confidence intervals and linear regression, assume normality somewhere: in the data itself, in the model's residuals, or in the sampling distribution of the mean.
- Statistical inference: Many statistical tests assume normality
- Central Limit Theorem: Sample means approach normal distribution
- Outlier detection: Values beyond 3σ are often considered outliers
- Confidence intervals: Used to calculate margin of error
How do I test whether data is normally distributed?
Look at a histogram and a Q-Q plot first, then run the Shapiro-Wilk test as a formal check. A p-value above 0.05 means the test found no significant departure from normality, not that it proved the data is normal.
# Python: Test if data is normally distributed
from scipy import stats
# Shapiro-Wilk test
statistic, p_value = stats.shapiro(data)
if p_value > 0.05:
print("Data appears normally distributed")
else:
print("Data does not appear normally distributed")
# Q-Q plot visual check
stats.probplot(data, dist="norm", plot=plt)
plt.show()
With thousands of rows, Shapiro-Wilk flags departures too small to matter (SciPy also warns that its p-value may be inaccurate above 5,000 observations), so give the Q-Q plot more weight: points on the straight line mean the data is close to normal; points that curve away at the ends mean skew or heavy tails.
What are common mistakes with the normal distribution?
The most common mistake is assuming data is normal without checking. Income, house prices, order values and response times are usually right-skewed, so a mean ± 2σ range for them is misleading and can even include impossible negative values.
- Misreading the Central Limit Theorem: it says the distribution of sample means gets closer to normal as the sample size grows. It does not make the raw data normal.
- Confusing σ with the standard error: σ describes how spread out individual values are; the standard error, σ / √n, describes how precisely you have estimated the mean.
- Using the 3σ outlier rule on skewed data: it assumes symmetric tails, so on right-skewed data it flags too many ordinary values in the long tail and almost none on the short side. Log-transform positive, skewed data before you flag outliers, or use the IQR rule on the log values (see outlier detection).
Best Practices
Check the shape before you use any method that assumes normality; if the data is not close to normal, transform it or switch to a method that does not need normality.
- Always visualize: Use histograms and Q-Q plots to check normality
- Don't assume: Not all data is normally distributed
- Transform if needed: Log transforms can sometimes normalize skewed data
- Use appropriate tests: If data isn't normal, use non-parametric methods