Statistics Data Science ki buniyaad hai. Descriptive statistics ka kaam hai poore data ko kuch numbers me summarize karna: beech ki value kya hai? aur data kitna faila hua hai?
Central tendency: mean, median, mode
Ek chhoti company ke 8 employees ki salary — aakhri wala CEO hai:
Example
import numpy as np
import pandas as pd
salaries = pd.Series([25000, 28000, 30000, 32000, 35000, 38000, 40000, 300000])
print("Mean:", salaries.mean())
print("Median:", salaries.median())
Output
Mean: 66000.0
Median: 33500.0
Mean 66 hazaar aaya, jabki 8 me se 7 log 40 hazaar ya usse kam kamaate hain! Ek bade outlier ne mean ko kheench liya. Median (beech ki value) pe outlier ka asar nahi padta — isliye salary, ghar ki keemat jaise data me median zyada sahi tasveer deta hai.
Example
shoe_sizes = pd.Series([7, 8, 8, 9, 8, 10, 7, 8])
print("Mode:", shoe_sizes.mode().tolist()) # sabse common value
Output
Mode: [8]
Measure | Matlab | Kab use karein |
|---|---|---|
Mean | Sabka jod ÷ count | Symmetric data, outliers nahi |
Median | Sort karke beech ki value | Skewed data ya outliers |
Mode | Sabse zyada baar aane wali value | Categories (city, size) |
Spread: range, variance, standard deviation
Do classes ka average same ho sakta hai, par ek me sab 60-70 ke beech hain aur doosri me 20 se 100 tak. Is 'phailaav' ko naapte hain:
Example
class_a = pd.Series([62, 65, 68, 70, 65])
class_b = pd.Series([30, 95, 50, 100, 55])
for name, marks in [("Class A", class_a), ("Class B", class_b)]:
print(f"{name}: mean={marks.mean()}, range={marks.max() - marks.min()}, "
f"std={marks.std():.2f}")
Output
Class A: mean=66.0, range=8, std=3.08
Class B: mean=66.0, range=70, std=30.29
Dono ka mean 66 hai, par Class B ka standard deviation kai guna zyada hai.
- Variance — har value ki mean se doori ka square, uska average.
- Standard deviation (std) — variance ka square root. Iski unit data wali hi hoti hai (marks, rupaye), isliye samajhna aasaan hai.
Dhyan dein: Pandas vs NumPy ka std
Example
data = [2, 4, 4, 4, 5, 5, 7, 9]
print("Pandas std (sample, ddof=1):", round(pd.Series(data).std(), 4))
print("NumPy std (population, ddof=0):", np.std(data))
print("NumPy std with ddof=1:", round(np.std(data, ddof=1), 4))
Output
Pandas std (sample, ddof=1): 2.1381
NumPy std (population, ddof=0): 2.0
NumPy std with ddof=1: 2.1381
Pandas default me sample std (n−1 se divide) deta hai, NumPy population std (n se divide). Chhote data me farq dikhta hai — confuse mat hoiye.
Percentiles aur IQR
90th percentile ka matlab — 90% values isse neeche hain. Exam me "99 percentile" isi ko kehte hain:
Example
rng = np.random.default_rng(3)
scores = pd.Series(rng.normal(60, 15, size=1000).round().clip(0, 100))
print(scores.quantile([0.25, 0.5, 0.75, 0.9]))
iqr = scores.quantile(0.75) - scores.quantile(0.25)
print("IQR:", iqr)
Output
0.25 51.0
0.50 61.0
0.75 71.0
0.90 80.0
dtype: float64
IQR: 20.0
Z-score — value average se kitni door hai
Z-score = (value − mean) ÷ std. Ye batata hai ki value mean se kitne standard deviation door hai. |z| > 3 ko aksar outlier maana jaata hai:
Example
z = (scores - scores.mean()) / scores.std()
print("Score 95 ka z-score:", round((95 - scores.mean()) / scores.std(), 2))
print("|z| > 3 wale scores:", (z.abs() > 3).sum())
Output
Score 95 ka z-score: 2.29
|z| > 3 wale scores: 4
Skewness — distribution kis taraf jhuka hai
Example
income = pd.Series(rng.lognormal(mean=10.5, sigma=0.6, size=1000))
print("Income skew:", round(income.skew(), 2))
print("Mean:", round(income.mean()), "| Median:", round(income.median()))
Output
Income skew: 2.78
Mean: 43603 | Median: 36757
Positive skew (right skewed) me lambi poonch daayi taraf hoti hai, aur mean > median hota hai — income data me aksar aisa hi hota hai.
Sab ek saath: describe()
Example
print(scores.describe().round(2))
Output
count 1000.00
mean 60.55
std 15.05
min 10.00
25% 51.00
50% 61.00
75% 71.00
max 100.00
dtype: float64