Python for AI/Pandas/Lesson 48
Merge ও Join
দুটো table মেলানো — merge আর key, inner বনাম left join, মিল না পাওয়া row খোঁজা (indicator), validate দিয়ে duplicate ধরা, আর concat দিয়ে table জোড়া।
- সময়
- 24 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
Real data প্রায় কখনো এক table-এ থাকে না। একটা online shop-এর database:
orders customers
order_id customer_id amount customer_id name city
101 1 1200 1 Rafi Dhaka
102 2 800 2 Mim Sylhet
103 1 450 3 Tanvir Khulna
"কোন শহর থেকে বেশি order আসে?" — উত্তর দিতে দুটো table মেলাতে হবে, customer_id দিয়ে।
কেন দরকার?
- Database-এর data আলাদা table-এ (normalization) — analysis-এর জন্য জোড়া লাগাতে হয়
- ML feature: user-এর তথ্য, তার order history, product-এর তথ্য — সব এক জায়গায়
- আলাদা source মেলানো: survey data + census data, sales + weather
Join-এর ধরন
left keys: A B C right keys: B C D
inner -> B C (দুটোতেই আছে)
left -> A B C (বামের সব; A-এর right_val = NaN)
right -> B C D (ডানের সব)
outer -> A B C D (সব)
how | কখন |
|---|---|
"inner" (default) | শুধু সম্পূর্ণ তথ্যওয়ালা row চাই |
"left" | মূল table-এর একটা row-ও হারাতে চাই না — সবচেয়ে বেশি ব্যবহৃত |
"outer" | দুই দিকে কী কী মেলেনি সেটা দেখতে |
মিল না পাওয়া row খোঁজা: indicator
left_only — order আছে কিন্তু customer নেই (data-তে সমস্যা!)। right_only — customer আছে কিন্তু কখনো order করেননি (marketing-এর সুযোগ)।
সাবধান: duplicate key
Customer 1-এর দুটো address, তাই তার order দুবার — মোট বিক্রি ভুল! validate দিয়ে আগেই ধরো:
MergeError — "ডান দিকে প্রতিটা key একবারই থাকার কথা"। Production code-এ merge-এ validate দেওয়া ভালো অভ্যাস।
concat: উপর-নিচে জোড়া
প্রতি মাসের আলাদা CSV file থেকে পুরো বছরের data বানাতে: pd.concat([pd.read_csv(f) for f in files])।
Exercise
Exercise
Order-এর সাথে customer-এর শহর
orders আর customers দুটো আলাদা table, customer_id দিয়ে সম্পর্কিত।
result = প্রতিটা order-এর সাথে customer-এর name আর city যোগ করা DataFrame। সব order থাকবে — কোনো customer-এর তথ্য না পেলেও (তখন name/city missing)।
Quiz
Challenge
Challenge
শহর অনুযায়ী আয় — শূন্য সহ
city_revenue(orders, customers) function লেখো যেটা প্রতিটা customer-এর শহরের মোট order amount দেয় — যেসব শহরের কোনো order নেই, সেগুলোও 0 দিয়ে থাকবে।
- Return: একটা dict (
{"Dhaka": ..., ...}), শহরের নাম অনুযায়ী বর্ণানুক্রমে, মান int - যেসব order-এর customer
customers-এ নেই, সেগুলো গোনা হবে না
বাস্তবে কোথায় ব্যবহার হয়?
একটা customer churn model-এর জন্য feature table বানানো — তিনটা table থেকে, প্রতিটা customer-এর জন্য একটা row:
Customer 3 কখনো order করেননি — how="left" না দিলে তিনি হারিয়ে যেতেন, অথচ তিনিই churn করেছেন! প্রায় সব tabular ML project-এর বড় অংশ এই কাজ: অনেক table থেকে groupby + merge দিয়ে এক row-এক entity table বানানো।
Interview প্রশ্ন
- Beginner: Inner আর left join-এর পার্থক্য কী?
- Intermediate: Merge-এর পর row সংখ্যা বেড়ে গেলে কী সন্দেহ করবে, কীভাবে যাচাই করবে?
- Advanced: Time-series data merge করার সময় ভবিষ্যতের তথ্য ঢুকে যাওয়া (leakage) কীভাবে এড়াবে?
merge_asofকী?
এরপর কী?
Pandas module-এর শেষ lesson — column-এর মান রূপান্তর: নিজের function প্রয়োগ, category বানানো, তারিখ থেকে feature। পরের lesson: apply ও Transformations।