ডেটা ক্লিনিং: ময়লা কাপড় ধোয়ার মতো

কাপড় ধোয়ার আগে আমরা আলাদা করি: সাদা একদিকে, রঙিন আরেকদিকে, পকেটে কিছু রয়ে গেল কি না দেখি। তারপর ধুই, তারপর শুকাই। ডেটার ক্ষেত্রেও একই কাজ করতে হয়, আর এর নাম ডেটা ক্লিনিং।
অনেকে মনে করেন ডেটা সায়েন্টিস্টের কাজ মডেল বানানো। বাস্তবে কাজের বড় অংশ যায় ডেটা পরিষ্কারে।
আগে দেখুন, পরে ধুয়ে ফেলুন
import pandas as pd
df = pd.read_csv("grahok.csv")
df.info() # কোন কলামে কী টাইপ, কতগুলো খালি
df.isna().mean().round(3) # প্রতিটা কলামে খালির হার
df.duplicated().sum() # হুবহু ডুপ্লিকেট সারি
df.describe(include="all").T # সর্বনিম্ন, সর্বোচ্চ, অনন্য মান
এই দশ মিনিটের দেখা পরে অনেক ভুল সিদ্ধান্ত থেকে বাঁচায়।
সবচেয়ে পরিচিত ময়লা
এক জিনিসের অনেক বানান।

jela_map = {"chittagong": "Chattogram", "ctg": "Chattogram", "chattagram": "Chattogram"}
df["jela"] = df["jela"].str.strip().str.lower().replace(jela_map).str.title()
ফোন নম্বরের বিশৃঙ্খলা। +8801711..., 01711-..., 1711..., ০১৭১১... (বাংলা অঙ্কে!)। একটা নিয়মে আনুন:
bangla_digits = str.maketrans("০১২৩৪৫৬৭৮৯", "0123456789")
def clean_phone(p):
p = str(p).translate(bangla_digits)
digits = "".join(ch for ch in p if ch.isdigit())
return "0" + digits[-10:] if len(digits) >= 10 else None
df["phone"] = df["phone"].map(clean_phone)
বাংলা অঙ্কের ব্যাপারটা আমাদের দেশের ডেটায় খুব সাধারণ, আর অনেক বিদেশি টিউটোরিয়ালে এর কথা থাকে না।
তারিখের গোলমাল। ০৩/০৪/২০২৫ কি ৩ এপ্রিল না ৪ মার্চ? উৎস জেনে নির্দিষ্ট ফরম্যাটে পড়ুন, আর কতগুলো ব্যর্থ হলো দেখুন:
df["jonmo"] = pd.to_datetime(df["jonmo"], format="%d/%m/%Y", errors="coerce")
print(df["jonmo"].isna().sum(), "টা তারিখ পড়া যায়নি")
অসম্ভব মান। বয়স ২১২, দাম ঋণাত্মক, ২০৪৫ সালের জন্মতারিখ। এগুলো টাইপিং ভুল, পরীক্ষামূলক ডেটা, নাকি সত্যিকারের ব্যতিক্রম? সিদ্ধান্ত নিন আর লিখে রাখুন।
খালি ঘর। প্রশ্নটা "কী দিয়ে ভরব" না, প্রশ্নটা "কেন খালি?" আয়ের ঘর খালি মানে কেউ বেকার, কেউ উত্তর দিতে চাননি, নাকি ফর্মে সমস্যা ছিল? প্রতিটার জন্য আলাদা ব্যবস্থা লাগতে পারে।
কিছু নিয়ম
- মূল ফাইল কখনো বদলাবেন না। পরিষ্কারের ধাপগুলো কোডে লিখুন, নতুন ফাইলে রাখুন।
- প্রতিটা ধাপের পর সারির সংখ্যা দেখুন। হঠাৎ বেড়ে বা কমে গেলে থামুন।
- কী বদলালেন, লিখে রাখুন। "পরীক্ষামূলক ইমেইলসহ ৩১২টা সারি বাদ দেওয়া হয়েছে।"
- ডেটা যারা তৈরি করেছেন, তাদের জিজ্ঞেস করুন। অফিসের পাঁচ মিনিটের আলাপ পাঁচ ঘণ্টার অনুমানের চেয়ে ভালো।
কেন এত গুরুত্বপূর্ণ
ময়লা কাপড় দামি ওয়াশিং মেশিনে দিলেও ময়লা থেকে যায়, যদি ঠিকমতো না ধোয়া হয়। তেমনি ময়লা ডেটায় সবচেয়ে উন্নত মডেলও ভুল ফল দেয়, শুধু আরও আত্মবিশ্বাসের সাথে। ডেটা ক্লিনিং আসল কাজের আগের বিরক্তিকর ধাপ না; এটাই আসল কাজের ভিত্তি। কেউ লিংকডইনে এর ছবি পোস্ট করে না, কিন্তু ভালো বিশ্লেষণ এখান থেকেই শুরু হয়।