মূল content-এ যাও

Python for AI/Project: Student Performance Analysis/Lesson 55

Project: Data Cleaning

সমস্যার তালিকা থেকে cleaning-এর নিয়ম — duplicate, বানান, অসম্ভব মান, missing — প্রতিটা সিদ্ধান্তের যুক্তি, আর সব মিলিয়ে একটা পুনর্ব্যবহারযোগ্য clean() function।

সময়
28 মিনিট
Exercise
1
Challenge
1
Quiz
3 প্রশ্ন

সহজ ভাষায়

আগের lesson-এর সমস্যার তালিকা থেকে এবার প্রতিটার জন্য একটা নিয়ম। প্রতিটা নিয়মের পেছনে একটা যুক্তি থাকতে হবে — "কেন এভাবে, অন্যভাবে না"। Data cleaning আসলে অনেকগুলো ছোট সিদ্ধান্ত, আর সেগুলো analysis-এর ফলাফলকে প্রভাবিত করে।

কেন দরকার?

Cleaning ছাড়া analysis করলে কী হয়, দেখো:

main.py

৩৩টা "district"! dhaka আর Dhaka আলাদা দল, প্রতিটার গড় অল্প কয়েকজনের ওপর — অর্থহীন। Data scientist-দের সময়ের বড় অংশ (জরিপে প্রায়ই ৫০%-এর বেশি বলা হয়) এই কাজেই যায়।

নিয়ম ১: Duplicate

main.py

যুক্তি: হুবহু একই row মানে একই form দুবার জমা — একজন student দুবার গোনা হলে তার প্রভাব দ্বিগুণ। পরে student_id চেক করে নিশ্চিত হলাম কোনো ID আর দুবার নেই।

নিয়ম ২: District-এর বানান

main.py

যুক্তি: space আর বড়-ছোট হাতের অক্ষর অর্থ বদলায় না। (Real data-য় বানান ভুলও থাকে — "Chittagong" বনাম "Chattogram" — তখন একটা mapping dictionary লাগে।)

নিয়ম ৩: অসম্ভব attendance

main.py

যুক্তি: ১৫০% সম্ভব না, কিন্তু আসলে কত ছিল জানি না — তাই "অজানা" (missing) ধরে নিলাম। 100 বসালে ভুলকে নিশ্চিত তথ্য বানানো হতো। আর row মুছলে বাকি সঠিক তথ্য হারাতাম।

নিয়ম ৪: Study hours — দলভিত্তিক পূরণ

main.py

যুক্তি: পুরো dataset-এর একটা median-এর চেয়ে নিজের দলের median বেশি বাস্তবসম্মত অনুমান। (এখানে দুটো দলের median কাছাকাছি — কিন্তু real data-য় প্রায়ই অনেক পার্থক্য থাকে। Pandas lesson-এর transform এখানে কাজে লাগল।)

নিয়ম ৫ ও ৬: নম্বর

main.py

যুক্তি:

  • তিনটাই missing — এই student-এর ফলাফল নিয়ে আমাদের কোনো তথ্যই নেই, আর আমাদের সব প্রশ্ন ফলাফল নিয়ে। বাদ।
  • একটা missing — বাকি তথ্য মূল্যবান, তাই রাখলাম; subject-এর median দিয়ে পূরণ।

সীমাবদ্ধতা লিখে রাখো: median দিয়ে পূরণ করলে data-র বৈচিত্র্য একটু কমে (অনেকগুলো একই মান)। এখানে মাত্র ~২% নম্বর missing, তাই প্রভাব সামান্য। ৩০% হলে অন্য পদ্ধতি ভাবতে হতো। ভালো analyst সিদ্ধান্তের সাথে তার সীমাবদ্ধতাও লেখে।

নিয়ম ৭ ও ৮: নতুন column

main.py

students_clean.csv হলো এই সব নিয়ম প্রয়োগের ফলাফল — platform-এ আগে থেকে আছে। Challenge-এ তোমার নিজের clean() function দিয়ে হুবহু এটাই বানাতে হবে।

Exercise

Exercise

Duplicate আর district ঠিক করো

+20 XP

students.csv load করে df বানাও, তারপর:

  1. হুবহু duplicate row বাদ দাও, index নতুন করে বসাও
  2. district-এর আগে-পরের space কাটো আর Title Case করো

শেষে district_counts = প্রতিটা district-এ কতজন, একটা dict।

solution.py

Quiz

  1. Q1Attendance ১৫০% — এটা কী করা উচিত?
  2. Q2Study hours পূরণে পুরো dataset-এর বদলে school_type-ভিত্তিক median কেন?
  3. Q3Cleaning code একটা function-এ রাখার সবচেয়ে বড় সুবিধা কী?
0/3 answered

Challenge

Challenge

সম্পূর্ণ clean() function

+50 XP

Lesson-এ আলোচিত সব নিয়ম মিলিয়ে clean(raw) function লেখো। এই ক্রমে:

  1. হুবহু duplicate row বাদ, index নতুন করে
  2. district — strip আর Title Case
  3. attendance 100-এর বেশি → missing; তারপর সব missing attendance → attendance-এর median
  4. study_hours missing → একই `school_type`-এর median
  5. তিনটা নম্বরই (math, science, english) missing এমন row বাদ, index নতুন করে
  6. বাকি missing নম্বর → সেই subject-এর median
  7. নতুন column avg_score — তিনটা নম্বরের গড়, 1 ঘর দশমিকে round
  8. নতুন column passed — avg_score 40 বা বেশি হলে True

তোমার ফলাফল platform-এর students_clean.csv-এর সাথে হুবহু মিলতে হবে। মূল raw বদলাবে না।

solution.py

বাস্তবে কোথায় ব্যবহার হয়?

তুমি যে clean() function বানালে, সেটা real project-এর একটা গুরুত্বপূর্ণ অংশ — একে বলে data pipeline। পরের বছর NGO নতুন survey করলে:

new_raw = pd.read_csv("students_2027.csv")
new_clean = clean(new_raw)        <- একই নিয়ম, এক লাইনে

Excel-এ হাতে ঠিক করলে প্রতি বছর আবার সব করতে হতো — আর কেউ জানত না ঠিক কী কী বদলানো হয়েছিল। Code-ই documentation। ML-এ ঠিক এই কারণেই training আর prediction-এ একই preprocessing function ব্যবহার করা হয় — নাহলে model যে data-য় শিখেছে আর যে data-য় prediction করছে, দুটো আলাদা হয়ে যায় (training-serving skew)।

Interview প্রশ্ন

  • Beginner: Missing value-ওয়ালা row কখন বাদ দেবে আর কখন পূরণ করবে?
  • Intermediate: অসম্ভব মান (যেমন বয়স −৫, attendance ১৫০%) কীভাবে সামলাবে? কেন clip করা সবসময় ঠিক না?
  • Advanced: Training-serving skew কী? Cleaning logic কীভাবে লিখলে এটা এড়ানো যায়?

এরপর কী?

পরিষ্কার dataset তৈরি — ৩৯৭ জন student, কোনো missing নেই। এবার আসল কাজ: NGO-র প্রশ্নগুলোর উত্তর খোঁজা, graph আঁকা, আর সিদ্ধান্তে পৌঁছানো। শেষ lesson: Insights ও Visualization।