📚 সমস্ত অধ্যায় দেখুন
অধ্যায়/ফেজ 0 · Phase 0 · Foundation
0.4২২ মিনিট পড়া4 / 68

Data Handling — Dataset কে চেনা

Data Handling

CSV, JSON, missing value, scaling — data এর সাথে বন্ধুত্ব।

Hook — কাঁচা সবজি বনাম রান্না করা খাবার

বাজার থেকে আনা কাঁচা সবজি সরাসরি খাওয়া যায় না — ধুতে হয়, কাটতে হয়, রান্না করতে হয়। Raw data ও তাই — সরাসরি model এ দিলে কিছুই শিখবে না। আগে clean, transform, scale করতে হয়।

Industry truth

ML project এর ৭০–৮০% সময় যায় data handling এ। Algorithm শুধু ২০%।

Concept — Data এর জীবন চক্র

  • Collection — CSV, JSON, API, database।
  • Exploration — কত row, কত column, কী type।
  • Cleaning — missing value, duplicate, outlier।
  • Transformation — encoding, scaling, feature creation।
  • Splitting — train, validation, test।

Math — Scaling এর গণিত

Min-Max Scaling (0 থেকে 1)

x' = (x − min) / (max − min)

Standardization (Z-score)

x' = (x − μ) / σ

Distance-based algorithm (KNN, K-Means) এ scaling খুব জরুরি — না হলে বড় scale এর feature ছোট scale এর feature কে চাপা দেয়।

Real-world Example

একটি house price dataset এ — area (500–5000 sqft), bedrooms (1–5), age (1–50)। Area এর scale অনেক বড়, তাই scaling না করলে model মনে করবে area-ই সব। Standardization এর পর সব feature এক স্তরে চলে আসে।

Code — Pandas + Scikit-learn দিয়ে full pipeline

১. Data load ও explore

explore.py
import pandas as pd

df = pd.read_csv("housing.csv")

print(df.shape)            # (rows, cols)
print(df.head())
print(df.info())
print(df.describe())
print(df.isnull().sum())   # missing per column

২. Missing value handle

missing.py
# Numerical column — fill with median
df["area"] = df["area"].fillna(df["area"].median())

# Categorical column — fill with mode
df["city"] = df["city"].fillna(df["city"].mode()[0])

# Drop rows where target is missing
df = df.dropna(subset=["price"])

৩. Encoding categorical features

encoding.py
# One-hot encoding
df = pd.get_dummies(df, columns=["city"], drop_first=True)

# Label encoding (for ordinal: low < mid < high)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df["quality"] = le.fit_transform(df["quality"])

৪. Scaling

scaling.py
from sklearn.preprocessing import StandardScaler, MinMaxScaler

scaler = StandardScaler()
df[["area", "age"]] = scaler.fit_transform(df[["area", "age"]])

# Or MinMax (0 to 1)
mm = MinMaxScaler()
df[["bedrooms"]] = mm.fit_transform(df[["bedrooms"]])

৫. Train/Test split

split.py
from sklearn.model_selection import train_test_split

X = df.drop("price", axis=1)
y = df["price"]

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

print(X_train.shape, X_test.shape)

Common Mistakes — Data Leakage

সবচেয়ে বড় ভুল

Train/Test split এর আগে scaling করা = data leakage। Test এর information train এ ঢুকে যায়।

  • ভুল order: scale → split ❌
  • সঠিক order: split → scaler.fit(X_train) → transform train ও test ✅
  • Missing value কে শুধু 0 দিয়ে fill করা — distribution নষ্ট হয়।
  • Outlier কে চোখ বন্ধ করে delete করা।
  • Categorical কে সরাসরি number ধরে নেওয়া (city = 1, 2, 3 এর মানে নেই)।

Practice Tasks

  • Task 1: Titanic dataset load করে কোন column এ কত % missing দেখো।
  • Task 2: Age column এর missing value median দিয়ে, Cabin কে drop করে handle করো।
  • Task 3: Sex ও Embarked কে one-hot encode করো।

Mini Project — Titanic Data Cleaning Pipeline

Kaggle Titanic dataset নাও। নিচের কাজগুলো এক script এ করো: (১) load, (২) missing value handle, (৩) categorical encoding, (৪) numerical feature scale, (৫) train/test split 80/20। শেষে X_train, X_test এর shape print করো।

Pro tip

Sklearn এর `Pipeline` ও `ColumnTransformer` ব্যবহার করো — production-grade কোড হবে।

Summary

মনে রাখো

Garbage in → Garbage out. ভালো data handling ছাড়া ভালো model হয় না।

  • Data lifecycle: collect → explore → clean → transform → split।
  • Missing value: median/mode/drop।
  • Categorical: one-hot বা label encoding।
  • Numerical: StandardScaler বা MinMaxScaler।
  • Split আগে, scale পরে — leakage এড়াও।