Statistics Normal Distribution
The normal distribution is a symmetric, bell-shaped pattern where most values cluster near the mean, and the 68-95-99.7 rule tells you exactly what share of the data falls within 1, 2, and 3 standard deviations of it.
The Bell Curve
The normal distribution is a symmetric, single-peaked curve shaped like a bell. Its mean, median, and mode all sit at the same point, right in the center. Values near the mean are common; values far from the mean in either direction become progressively rarer, and the tails get closer and closer to zero without ever quite touching it. Two numbers completely determine the shape of this curve: the mean sets the location of the center peak, while the standard deviation sets the width -- a small standard deviation produces a tall, narrow curve where values stay close to the mean, and a large standard deviation produces a short, wide curve where values are more spread out.
The 68-95-99.7 Rule
For any normal distribution, no matter its mean or standard deviation, the same three proportions always hold when you measure outward from the center in units of standard deviation (SD):
- About 68% of values fall within 1 standard deviation of the mean (mean +/- 1 SD).
- About 95% of values fall within 2 standard deviations of the mean (mean +/- 2 SD).
- About 99.7% of values fall within 3 standard deviations of the mean (mean +/- 3 SD).
For example, suppose adult male height is approximately normal with a mean of 175 cm and a standard deviation of 7 cm. Then about 68% of men are between 168 cm and 182 cm tall, about 95% are between 161 cm and 189 cm, and about 99.7% are between 154 cm and 196 cm.
Example: Verifying the 68-95-99.7 Rule
import math
def normal_cdf(x, mean=0, sd=1):
z = (x - mean) / (sd * math.sqrt(2))
return 0.5 * (1 + math.erf(z))
mean, sd = 175, 7 # average adult male height in cm, with its spread
for k in [1, 2, 3]:
lower = mean - k * sd
upper = mean + k * sd
proportion = normal_cdf(upper, mean, sd) - normal_cdf(lower, mean, sd)
print(f"Within {k} SD ({lower}-{upper} cm): {proportion:.3%}")
# Output:
# Within 1 SD (168-182 cm): 68.269%
# Within 2 SD (161-189 cm): 95.450%
# Within 3 SD (154-196 cm): 99.730%Example: Converting a Height to a Percentile
import math
def normal_cdf(x, mean=0, sd=1):
z = (x - mean) / (sd * math.sqrt(2))
return 0.5 * (1 + math.erf(z))
mean, sd = 175, 7
for h in [161, 175, 189, 196]:
pct = normal_cdf(h, mean, sd) * 100
print(f"{h} cm is at the {pct:.1f}th percentile")
# Output:
# 161 cm is at the 2.3th percentile
# 175 cm is at the 50.0th percentile
# 189 cm is at the 97.7th percentile
# 196 cm is at the 99.9th percentile