Python for AI/Pandas/Lesson 49
apply ও Transformations
Column-এর মান রূপান্তর — map দিয়ে dictionary, apply দিয়ে নিজের function, pd.cut দিয়ে bin, .dt দিয়ে তারিখ থেকে feature — আর কেন vectorized উপায় apply-এর চেয়ে ভালো।
- সময়
- 24 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
প্রায়ই একটা column-এর মান অন্য রূপে চাই — text থেকে সংখ্যা, সংখ্যা থেকে category, তারিখ থেকে ঘণ্টা। Pandas-এ এর কয়েকটা উপায়, দ্রুত থেকে ধীর:
| উপায় | কখন | গতি |
|---|---|---|
Vectorized (*, .str, .dt, np.where) | যখনই সম্ভব | সবচেয়ে দ্রুত |
map(dict) | নির্দিষ্ট মান → নির্দিষ্ট মান | দ্রুত |
pd.cut | সংখ্যা → সীমা অনুযায়ী category | দ্রুত |
apply(function) | জটিল logic, আর কোনো উপায় নেই | ধীর |
কেন দরকার?
এটাই feature engineering — raw data-কে model-এর জন্য অর্থপূর্ণ সংখ্যায় রূপান্তর। প্রায়ই ভালো feature একটা ভালো algorithm-এর চেয়ে বেশি পার্থক্য আনে:
- তারিখ (
2026-10-02 23:15) model সরাসরি বোঝে না — কিন্তু "রাত ১১টা, শুক্রবার" বোঝে - বয়স ২৩, ৩৭, ৬৮ → "তরুণ", "মধ্যবয়সী", "প্রবীণ"
- শহরের নাম → সংখ্যা
map: dictionary দিয়ে রূপান্তর
Comilla dictionary-তে নেই, তাই NaN। map-এর পর সবসময় যাচাই করো।
pd.cut: সংখ্যা থেকে category
bins=[0, 17, 35, 60, 120] মানে (0, 17], (17, 35], (35, 60], (60, 120] — প্রতিটার ডান প্রান্ত সহ। সমান সংখ্যক মান প্রতিটা দলে চাইলে pd.qcut (quantile দিয়ে)।
.dt: তারিখ থেকে feature
dayofweek: সোমবার = 0, … শুক্রবার = 4, শনিবার = 5, রবিবার = 6। বাংলাদেশে সাপ্তাহিক ছুটি শুক্র-শনি — isin([4, 5])। বিদেশি tutorial-এর >= 5 (শনি-রবি) কপি করলে বাংলাদেশের data-য় ভুল হবে!
apply: শেষ উপায়
যখন কোনো vectorized উপায় নেই:
length vectorized (.str.len()), কিন্তু positive_score-এর মতো নিজস্ব logic-এর জন্য apply।
গতির পার্থক্য
Exercise
Exercise
নম্বর থেকে grade
marks column থেকে grade column বানাও `pd.cut` দিয়ে:
- 0 থেকে 59 →
"F" - 60 থেকে 69 →
"B" - 70 থেকে 79 →
"A" - 80 থেকে 100 →
"A+"
তারপর grade_counts = প্রতিটা grade কতজন পেয়েছে, একটা dict।
Quiz
Challenge
Challenge
Transaction থেকে ML feature
Fraud detection model-এর জন্য raw transaction থেকে feature বানাও। make_features(df) function একটা নতুন DataFrame return করবে, মূলের সব column সহ এই নতুনগুলো:
hour—timeথেকে ঘণ্টা (0–23)is_weekend— শুক্র বা শনিবার হলেTrue(বাংলাদেশের সাপ্তাহিক ছুটি!)is_night— রাত ১০টা থেকে ভোর ৬টার আগে (hour >= 22বাhour < 6) হলেTrueamount_level—"low"(1000-এর নিচে),"mid"(1000 থেকে 9999),"high"(10000 বা বেশি) — string
time column text হিসেবে আসবে। Loop বা apply ছাড়া, vectorized।
বাস্তবে কোথায় ব্যবহার হয়?
এই পুরো module একসাথে — raw data থেকে model-ready table, একটা clean pipeline হিসেবে। Pandas-এর method chaining আর assign দিয়ে প্রতিটা ধাপ পড়া যায়:
Column-এর নাম পরিষ্কার → text ঠিক করা → তারিখ → missing পূরণ → নতুন feature। প্রতিটা ধাপ আলাদা লাইনে, আর মূল raw অক্ষত। এভাবে লেখা code পরে পড়া, debug করা আর production pipeline-এ নেওয়া সহজ।
Interview প্রশ্ন
- Beginner:
mapআরapply-এর পার্থক্য কী? - Intermediate:
applyকেন ধীর? কখন এটা ছাড়া উপায় নেই? - Advanced: Feature engineering-এর সময় train/test leakage কীভাবে এড়াবে? (যেমন
pd.qcut-এর সীমা কোন data থেকে হিসাব করবে?)
এরপর কী?
অভিনন্দন! 🎉 Pandas module শেষ। তুমি এখন real-world data load, পরিষ্কার, filter, group, merge আর transform করতে পারো — একজন data analyst বা ML engineer-এর প্রতিদিনের কাজ।
পরের module: Matplotlib — সংখ্যার পেছনের গল্প চোখে দেখা। Line, scatter, histogram — data visualize করে pattern খুঁজে বের করা।