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 করলে কী হয়, দেখো:
৩৩টা "district"! dhaka আর Dhaka আলাদা দল, প্রতিটার গড় অল্প কয়েকজনের ওপর — অর্থহীন। Data scientist-দের সময়ের বড় অংশ (জরিপে প্রায়ই ৫০%-এর বেশি বলা হয়) এই কাজেই যায়।
নিয়ম ১: Duplicate
যুক্তি: হুবহু একই row মানে একই form দুবার জমা — একজন student দুবার গোনা হলে তার প্রভাব দ্বিগুণ। পরে student_id চেক করে নিশ্চিত হলাম কোনো ID আর দুবার নেই।
নিয়ম ২: District-এর বানান
যুক্তি: space আর বড়-ছোট হাতের অক্ষর অর্থ বদলায় না। (Real data-য় বানান ভুলও থাকে — "Chittagong" বনাম "Chattogram" — তখন একটা mapping dictionary লাগে।)
নিয়ম ৩: অসম্ভব attendance
যুক্তি: ১৫০% সম্ভব না, কিন্তু আসলে কত ছিল জানি না — তাই "অজানা" (missing) ধরে নিলাম। 100 বসালে ভুলকে নিশ্চিত তথ্য বানানো হতো। আর row মুছলে বাকি সঠিক তথ্য হারাতাম।
নিয়ম ৪: Study hours — দলভিত্তিক পূরণ
যুক্তি: পুরো dataset-এর একটা median-এর চেয়ে নিজের দলের median বেশি বাস্তবসম্মত অনুমান। (এখানে দুটো দলের median কাছাকাছি — কিন্তু real data-য় প্রায়ই অনেক পার্থক্য থাকে। Pandas lesson-এর transform এখানে কাজে লাগল।)
নিয়ম ৫ ও ৬: নম্বর
যুক্তি:
- তিনটাই missing — এই student-এর ফলাফল নিয়ে আমাদের কোনো তথ্যই নেই, আর আমাদের সব প্রশ্ন ফলাফল নিয়ে। বাদ।
- একটা missing — বাকি তথ্য মূল্যবান, তাই রাখলাম; subject-এর median দিয়ে পূরণ।
সীমাবদ্ধতা লিখে রাখো: median দিয়ে পূরণ করলে data-র বৈচিত্র্য একটু কমে (অনেকগুলো একই মান)। এখানে মাত্র ~২% নম্বর missing, তাই প্রভাব সামান্য। ৩০% হলে অন্য পদ্ধতি ভাবতে হতো। ভালো analyst সিদ্ধান্তের সাথে তার সীমাবদ্ধতাও লেখে।
নিয়ম ৭ ও ৮: নতুন column
students_clean.csv হলো এই সব নিয়ম প্রয়োগের ফলাফল — platform-এ আগে থেকে আছে। Challenge-এ তোমার নিজের clean() function দিয়ে হুবহু এটাই বানাতে হবে।
Exercise
Exercise
Duplicate আর district ঠিক করো
students.csv load করে df বানাও, তারপর:
- হুবহু duplicate row বাদ দাও, index নতুন করে বসাও
district-এর আগে-পরের space কাটো আর Title Case করো
শেষে district_counts = প্রতিটা district-এ কতজন, একটা dict।
Quiz
Challenge
Challenge
সম্পূর্ণ clean() function
Lesson-এ আলোচিত সব নিয়ম মিলিয়ে clean(raw) function লেখো। এই ক্রমে:
- হুবহু duplicate row বাদ, index নতুন করে
district— strip আর Title Caseattendance100-এর বেশি → missing; তারপর সব missing attendance → attendance-এর medianstudy_hoursmissing → একই `school_type`-এর median- তিনটা নম্বরই (
math,science,english) missing এমন row বাদ, index নতুন করে - বাকি missing নম্বর → সেই subject-এর median
- নতুন column
avg_score— তিনটা নম্বরের গড়, 1 ঘর দশমিকে round - নতুন column
passed—avg_score40 বা বেশি হলেTrue
তোমার ফলাফল platform-এর students_clean.csv-এর সাথে হুবহু মিলতে হবে। মূল raw বদলাবে না।
বাস্তবে কোথায় ব্যবহার হয়?
তুমি যে 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।