Python for AI/Pandas/Lesson 46
Missing Data
NaN খুঁজে বের করা (isna), কতটা missing তা মাপা, বাদ দেওয়া (dropna) বনাম পূরণ করা (fillna — median, mode, ffill) — আর কোনটা কখন, কেন।
- সময়
- 24 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
Real data-তে প্রায় সবসময় কিছু ঘর খালি — form-এ কেউ বয়স লেখেনি, sensor কাজ করেনি, দুটো file মেলাতে গিয়ে মিল পাওয়া যায়নি। Pandas এগুলোকে দেখায় NaN (Not a Number) বা None হিসেবে।
কেন দরকার?
- বেশিরভাগ ML model (scikit-learn-এর অনেকগুলো) NaN পেলে সরাসরি error দেয়
NaNএকটা হিসাবে ঢুকলে পুরো ফলাফলNaN— যোগফল, গড় সব নষ্ট- আর কতটা data missing, কেন missing — এটা নিজেই গুরুত্বপূর্ণ তথ্য
কতটা missing?
income-এর ৮৩% missing — এই column থেকে model প্রায় কিছুই শিখবে না। সাধারণ নিয়ম: অনেক বেশি missing (যেমন ৫০%-এর বেশি) column বাদ দেওয়ার কথা ভাবো।
সমাধান ১: বাদ দেওয়া (dropna)
| লেখা | কী বাদ যায় |
|---|---|
dropna() | যেকোনো missing আছে এমন row |
dropna(subset=["label"]) | শুধু label missing এমন row |
dropna(axis=1) | missing আছে এমন column |
সহজ, কিন্তু data হারায়। ১০০০ row-এর প্রতিটা column-এ ৫% করে missing হলে dropna()-এর পর হয়তো অর্ধেক data-ও থাকবে না।
সমাধান ২: পূরণ করা (fillna)
| Data | কী দিয়ে পূরণ | কেন |
|---|---|---|
| সংখ্যা, outlier নেই | mean | |
| সংখ্যা, outlier আছে | median | outlier-এ প্রভাবিত হয় না |
| Category (text) | mode (সবচেয়ে common) | |
| সময়ের ধারা (দৈনিক দাম) | ffill (আগের মান) | কাল যা ছিল, আজও সম্ভবত কাছাকাছি |
| Missing নিজেই তথ্য | "unknown" বা আলাদা flag column |
ffill: সময়ের data
Missing নিজেই একটা feature
হয়তো যারা income লেখেনি তাদের loan default করার সম্ভাবনা বেশি — তখন "missing ছিল কিনা" model-এর জন্য দরকারি তথ্য। পূরণ করে ফেললে তথ্যটা হারিয়ে যেত।
Exercise
Exercise
Missing report আর পূরণ
df-এ কিছু ঘর খালি।
missing— প্রতিটা column-এ কতগুলো missing, একটা dict ({"name": 0, ...})filled— একটা নতুন DataFrame যেখানেage-এর missing মান age-এর median দিয়ে পূরণ করা (বাকি column যেমন ছিল)
মূল df বদলাবে না।
Quiz
Challenge
Challenge
Model-এর জন্য dataset পরিষ্কার
clean(df, target) function লেখো যেটা একটা dataset model-ready বানায়:
- যেসব row-এ target missing — বাদ (label ছাড়া sample দিয়ে শেখা যায় না)
- সংখ্যার column-এর missing → সেই column-এর median
- বাকি (text) column-এর missing → সেই column-এর সবচেয়ে বেশি আসা মান (mode)
- Index 0 থেকে নতুন করে
ফলাফলে কোনো missing থাকবে না, আর মূল df বদলাবে না।
বাস্তবে কোথায় ব্যবহার হয়?
Train-এর পরিসংখ্যান দিয়ে test পূরণ — real ML pipeline-এর সঠিক উপায় (scikit-learn-এর SimpleImputer ঠিক এটাই করে):
Test-এর নিজের median (45) দিয়ে পূরণ করলে model "ভবিষ্যৎ" থেকে তথ্য পেয়ে যেত। Real deployment-এ নতুন user এলে তার জন্য test-এর median জানা থাকে না — শুধু training-এর পরিসংখ্যানই থাকে।
Interview প্রশ্ন
- Beginner: Missing value খুঁজতে আর গুনতে কোন method?
- Intermediate: কখন row বাদ দেবে আর কখন পূরণ করবে? Mean বনাম median বনাম mode?
- Advanced: MCAR, MAR, MNAR কী? Missingness-এর ধরন imputation-এর পদ্ধতি বাছাইয়ে কীভাবে প্রভাব ফেলে?
এরপর কী?
Data পরিষ্কার। এখন প্রশ্ন করার পালা — "প্রতিটা department-এর গড় CGPA কত?", "কোন শহরে বিক্রি সবচেয়ে বেশি?" পরের lesson: GroupBy।