Python for AI/Matplotlib/Lesson 52
Histogram
একটা variable-এর মান কীভাবে ছড়ানো — histogram আর bins, distribution-এর আকার (skew), দুটো দলের তুলনা, আর category-র জন্য bar chart।
- সময়
- 22 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
৩০০ জন student-এর নম্বর — গড় ৬২। কিন্তু বেশিরভাগ কি ৬০-এর আশেপাশে, নাকি অর্ধেক ৯০ আর অর্ধেক ৩০? গড় এটা বলে না। Histogram বলে:
পুরো range-কে ভাগে ভাগ করা হয় (bins: 0–10, 10–20, …), প্রতিটা ভাগে কতজন পড়ে, সেটাই bar-এর উচ্চতা।
কেন দরকার?
- Data বোঝা — একটা feature-এর মান কোথায় বেশি, কতটা ছড়ানো, outlier আছে কিনা
- Transformation বাছাই — skewed data-য়
logলাগবে কিনা - দুই দলের তুলনা — fraud আর normal transaction-এর amount কতটা আলাদা
- Model-এর ভুলের distribution — residual-গুলো 0-এর চারপাশে সমানভাবে ছড়ানো কিনা
Distribution-এর আকার
| আকার | চেনার উপায় | করণীয় |
|---|---|---|
| Normal | ঘণ্টার মতো, mean ≈ median | সাধারণত কিছু লাগে না |
| Right-skewed | ডানে লম্বা লেজ, mean > median | np.log1p transform |
| Bimodal | দুটো চূড়া | হয়তো দুটো আলাদা দল মিশে আছে — খুঁজে বের করো কেন |
দুটো দলের তুলনা
দুটো কৌশল: একই bins (তাহলে তুলনা ন্যায্য), আর density=True — fraud মাত্র ১৫০টা, normal ৩০০০টা; density না দিলে fraud-এর bar প্রায় দেখাই যেত না।
Bar chart: category-র জন্য
সংখ্যা না, category হলে histogram না, bar chart:
Category-র নাম লম্বা হলে barh (আড়াআড়ি) পড়তে সহজ। আর সবসময় sort করো — এলোমেলো ক্রমের bar chart তুলনা করা কঠিন।
Exercise
Exercise
নম্বরের histogram
fig, ax = plt.subplots() দিয়ে marks-এর একটা histogram আঁকো, 10টা bin, 0 থেকে 100 পর্যন্ত (range=(0, 100))।
তারপর গড় নম্বরে একটা খাড়া line (ax.axvline)। Title: "Exam marks"।
Quiz
Challenge
Challenge
Category-র sorted bar chart
Customer complaint-এর category দেওয়া আছে। fig, ax = plt.subplots() দিয়ে একটা bar chart বানাও:
- প্রতিটা category একটা bar, উচ্চতা = কতবার এসেছে
- Bar-গুলো বেশি থেকে কম ক্রমে (বাম থেকে ডানে)
- প্রতিটা bar-এর ওপরে তার সংখ্যা লেখা (
ax.bar_label)
বাস্তবে কোথায় ব্যবহার হয়?
Log transform — skewed feature-কে model-এর জন্য উপযোগী করা। Linear model আর neural network সাধারণত সমানভাবে ছড়ানো data-য় ভালো কাজ করে:
একটা লাইন (np.log1p) — আর বিশাল লেজওয়ালা data হয়ে গেল প্রায় ঘণ্টার মতো। House price, income, ad click — অনেক Kaggle competition-এ target-এর ওপরেই এই transform করা হয়।
Interview প্রশ্ন
- Beginner: Histogram কী? Bar chart থেকে কোথায় আলাদা?
- Intermediate: Skewed distribution কী? Mean আর median-এর মধ্যে কোনটা তখন বেশি তথ্যবহুল?
- Advanced: Feature-এ log transform কেন সাহায্য করে? Target-এ log transform করলে prediction-এর পর কী করতে হয়? (
np.expm1দিয়ে ফেরত আনা, আর এতে কী ধরনের error কমানো হচ্ছে তা বোঝা।)
এরপর কী?
এই module-এ বারবার plt.subplots(1, 3) দিয়ে একসাথে কয়েকটা graph এঁকেছি। এটা ঠিকমতো শেখার পালা — একটা পুরো dashboard। পরের lesson: Subplots।