Home »
Blog »
AI/ML Engineer সিরিজ » Series 03 » Episode 05
Matplotlib দিয়ে data-কে চোখে দেখা: distribution, correlation, outlier
EDA — চোখে দেখে data বোঝা (Series 03, Episode 05)
🟢 BEGINNER
Series 03 — Data — AI-এর ভিত্তি
Episode 05 / 09
📑 এই পর্বে যা যা আছে
- ১. গল্প: সংখ্যা মিথ্যা বলছিল না, কিন্তু সব বলছিলও না
- ২. সমস্যা: শুধু describe() যথেষ্ট নয়
- ৩. EDA কী এবং কেন visualization
- ৪. তিন Level-এ visualization বোঝা
- ৫. Histogram: distribution দেখা
- ৬. Box plot: outlier ধরা
- ৭. Scatter plot: দুই variable-এর সম্পর্ক
- ৮. Bar chart: category তুলনা
- ৯. Correlation heatmap: কে কার সাথে সম্পর্কিত
- ১০. Anscombe-এর সতর্কবার্তা: কেন চোখে দেখা জরুরি
- ১১. একজন AI Engineer-এর দৃষ্টিতে EDA
- ১২. Boss Question
- ১৩. Job Requirement Decoder
- ১৪. সাধারণ ভুল ধারণা
- ১৫. Interview Prep
- ১৬. হাতে-কলমে (Mini Exercise)
- ১৭. Project Connection
- ১৮. সারসংক্ষেপ
- ১৯. পরবর্তী পর্বে কী শিখব
🧩 ১. গল্প: সংখ্যা মিথ্যা বলছিল না, কিন্তু সব বলছিলও না
Rahim df["salary"].mean() চালিয়ে পেল ৬৫,০০০ টাকা। সে Boss-কে বলল "গড় salary ৬৫ হাজার"।
কিন্তু Nila একটা histogram এঁকে দেখাল — আসলে বেশিরভাগ salary ৩৫-৪৫ হাজারের মধ্যে, আর গুটিকয়েক ২ লাখের
salary পুরো গড়কে টেনে ওপরে তুলেছে।
Nila: "তোমার সংখ্যা ভুল ছিল না, Rahim। কিন্তু 'গড় ৬৫ হাজার' বললে Boss ভাববে অধিকাংশ
মানুষ ৬৫ পায় — যা মিথ্যা। একটা ছবি এঁকে দেখাও, সত্যটা এক নজরে বেরিয়ে আসবে। মনে রেখো — data-কে
প্রশ্ন করার আগে data-কে চোখে দেখতে হয়। এটাই EDA।"
❓ ২. সমস্যা: শুধু describe() যথেষ্ট নয়
describe() দারুণ summary দেয় (mean, std, min, max)। কিন্তু সংখ্যা কিছু জিনিস লুকিয়ে রাখে:
- distribution-এর আকার (একদিকে ঝোঁকা? দুটো চূড়া?)
- outlier — কয়টা, কতটা দূরে
- দুই variable-এর সম্পর্ক (experience বাড়লে salary বাড়ে কি?)
- ভুল data (যেমন salary = 0 বা negative)
এই সব "চোখে দেখলে" সাথে সাথে ধরা পড়ে — তাই visualization একজন AI Engineer-এর প্রথম হাতিয়ার।
📚 ৩. EDA কী এবং কেন visualization
EDA (Exploratory Data Analysis) মানে model বানানোর আগে data-কে ভালোভাবে চেনা ও প্রশ্ন করা।
Matplotlib হলো Python-এর মূল plotting library (প্রায় সব chart-এর ভিত্তি)। Pandas ভেতরে
Matplotlib ব্যবহার করে সরাসরি df.plot() দেয়। Seaborn নামে একটা library আছে যা Matplotlib-এর
উপর সুন্দর chart সহজ করে — কিন্তু ভিত্তি বোঝার জন্য আমরা Matplotlib দিয়েই শুরু করব।
কেন এই tech? Matplotlib প্রায় সর্বত্র চলে, notebook-এ default, আর নিচু-স্তরের control দেয়।
একবার এটা বুঝলে Seaborn/Plotly যেকোনো tool সহজ লাগবে।
🪜 ৪. তিন Level-এ visualization বোঝা
Level 1 — সহজ intuition
হাজারটা সংখ্যার একটা তালিকা মানুষের মাথা ধরে যায়। কিন্তু সেই সংখ্যাগুলো একটা chart-এ বসালে চোখ সাথে
সাথে pattern ধরে — কোথায় ভিড়, কোথায় ফাঁকা, কোথায় অদ্ভুত বিন্দু। ছবি হলো data-র ভাষা।
Level 2 — technical ভাবে
প্রতিটা chart type একটা নির্দিষ্ট প্রশ্নের উত্তর দেয়: histogram → "একটা variable কীভাবে ছড়ানো?",
scatter → "দুটো variable কি একসাথে বদলায়?", box plot → "outlier আছে কি?", bar → "category-দের তুলনা?"।
সঠিক প্রশ্নে সঠিক chart বাছাই EDA-র মূল দক্ষতা।
Level 3 — engineer দৃষ্টিতে
engineer রা EDA-কে model-এর "রোগ নির্ণয়" ধাপ হিসেবে দেখে। outlier, skew, correlation — এগুলো আগে দেখে
নিলে পরে model কেন খারাপ করছে তা বোঝা সহজ হয়। EDA বাদ দিয়ে সরাসরি model-এ ঝাঁপ দেওয়া মানে অন্ধকারে গুলি ছোড়া।
📊 ৫. Histogram: distribution দেখা
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame({
"salary": [30000, 35000, 40000, 42000, 45000, 38000,
41000, 39000, 200000, 220000], # শেষ দুটো outlier
})
plt.figure(figsize=(8, 5))
plt.hist(df["salary"], bins=10, color="#667eea", edgecolor="white")
plt.title("Salary Distribution")
plt.xlabel("Salary (টাকা)")
plt.ylabel("কতজন")
plt.tight_layout()
plt.savefig("salary_hist.png", dpi=120) # ছবি হিসেবে সেভ
plt.show()
Salary Histogram (কল্পিত):
কতজন
6 | ████
4 | ██ ████ ██
2 | ██ ████ ██ ██ ██
0 +------------------------------------
30k 40k 50k ... 200k 220k
↑ বেশিরভাগ এখানে ↑ outlier (গড়কে টানে)
এক নজরেই বোঝা যায় — বেশিরভাগ salary ৩০-৪৫ হাজারে, আর দুটো বিশাল value আলাদা দাঁড়িয়ে আছে। এই ছবিটাই
Rahim-কে Boss-এর কাছে সঠিক গল্প বলতে সাহায্য করত।
📦 ৬. Box plot: outlier ধরা
plt.figure(figsize=(6, 5))
plt.boxplot(df["salary"], vert=True)
plt.title("Salary Box Plot")
plt.ylabel("Salary (টাকা)")
plt.tight_layout()
plt.show()
Box plot কীভাবে পড়বেন: বাক্সটা মাঝের ৫০% data (Q1 থেকে Q3), মাঝের লাইন median।
বাক্সের বাইরে "whisker", আর whisker-এর বাইরের বিন্দুগুলো সম্ভাব্য outlier। outlier চেনার
একটা সাধারণ নিয়ম: IQR = Q3 − Q1; Q1 − 1.5×IQR-এর নিচে বা Q3 + 1.5×IQR-এর ওপরে হলে সন্দেহজনক।
# IQR পদ্ধতিতে outlier গোনা
q1 = df["salary"].quantile(0.25)
q3 = df["salary"].quantile(0.75)
iqr = q3 - q1
low, high = q1 - 1.5 * iqr, q3 + 1.5 * iqr
outliers = df[(df["salary"] < low) | (df["salary"] > high)]
print(outliers)
📈 ৭. Scatter plot: দুই variable-এর সম্পর্ক
df2 = pd.DataFrame({
"experience": [0, 1, 2, 3, 4, 5, 6, 7],
"salary": [25000, 32000, 40000, 55000,
62000, 78000, 85000, 95000],
})
plt.figure(figsize=(8, 5))
plt.scatter(df2["experience"], df2["salary"], color="#764ba2", s=60)
plt.title("Experience বনাম Salary")
plt.xlabel("Experience (বছর)")
plt.ylabel("Salary (টাকা)")
plt.tight_layout()
plt.show()
এখানে বিন্দুগুলো মোটামুটি একটা ওপরমুখী রেখা তৈরি করছে — মানে experience বাড়লে salary বাড়ে (ইতিবাচক
সম্পর্ক)। এই "একসাথে বদলানো"-ই correlation-এর দৃশ্যরূপ, যা Series 04-এ সংখ্যায় মাপব।
মনে রাখুন: scatter-এ সম্পর্ক দেখা মানেই "একটা আরেকটার কারণ" নয়। correlation ≠ causation।
experience আর salary একসাথে বাড়ে, কিন্তু আরও অনেক কারণ (skill, কোম্পানি) থাকতে পারে। এই পার্থক্য Series 04-এ বিস্তারিত।
📊 ৮. Bar chart: category তুলনা
# groupby (আগের episode) + bar chart — শক্তিশালী জুটি
city_avg = pd.DataFrame({
"city": ["Dhaka", "Chattogram", "Sylhet", "Khulna"],
"salary": [72000, 58000, 61000, 49000],
})
plt.figure(figsize=(8, 5))
plt.bar(city_avg["city"], city_avg["salary"], color="#667eea")
plt.title("প্রতি শহরে গড় Salary")
plt.xlabel("শহর")
plt.ylabel("গড় Salary (টাকা)")
plt.tight_layout()
plt.show()
Bar chart category তুলনার জন্য আদর্শ। groupby দিয়ে aggregate করে (E04) সেই ফল bar chart-এ দেখানো — এটা
report ও presentation-এ সবচেয়ে বেশি ব্যবহৃত জুটি।
🔥 ৯. Correlation heatmap: কে কার সাথে সম্পর্কিত
import numpy as np
df3 = pd.DataFrame({
"experience": [0, 1, 2, 3, 4, 5, 6, 7],
"salary": [25000, 32000, 40000, 55000, 62000, 78000, 85000, 95000],
"age": [22, 24, 25, 27, 29, 31, 33, 35],
})
corr = df3.corr() # সব সংখ্যার column-এর correlation matrix
print(corr)
plt.figure(figsize=(6, 5))
plt.imshow(corr, cmap="coolwarm", vmin=-1, vmax=1)
plt.colorbar(label="correlation")
plt.xticks(range(len(corr)), corr.columns, rotation=45)
plt.yticks(range(len(corr)), corr.columns)
plt.title("Correlation Heatmap")
plt.tight_layout()
plt.show()
df.corr() -1 থেকে +1 এর মধ্যে সংখ্যা দেয়: +1 = একসাথে বাড়ে, -1 = একটা বাড়লে অন্যটা কমে,
0 = সম্পর্ক নেই। heatmap সেই matrix-কে রঙে দেখায় — এক নজরে বোঝা যায় কোন feature-রা সম্পর্কিত (যা ML
model-এ feature বাছাইয়ে সাহায্য করে)।
⚠️ ১০. Anscombe-এর সতর্কবার্তা: কেন চোখে দেখা জরুরি
একটা বিখ্যাত উদাহরণ — Anscombe's Quartet। চারটা আলাদা dataset-এর mean, variance আর
correlation প্রায় হুবহু এক। কিন্তু plot করলে দেখা যায় — একটা সরল রেখা, একটা বাঁকা, একটাতে একটা বিশাল
outlier, একটা প্রায় উল্লম্ব! সংখ্যা একই, কিন্তু গল্প সম্পূর্ণ আলাদা।
শিক্ষা: শুধু mean, std, corr দেখে সিদ্ধান্ত নেবেন না। সবসময়
plot করে চোখে দেখুন — নাহলে ভুল সিদ্ধান্তে পৌঁছাবেন। এটাই EDA-র সবচেয়ে বড় শিক্ষা।
🔍 ১১. একজন AI Engineer-এর দৃষ্টিতে EDA
- প্রতিটা column plot: নতুন data পেলে প্রতিটা গুরুত্বপূর্ণ column-এর distribution দেখা।
- Target বনাম feature: যা predict করব (salary) তার সাথে প্রতিটা feature-এর সম্পর্ক দেখা।
- Outlier সিদ্ধান্ত: outlier কি ভুল data নাকি বাস্তব? সেই অনুযায়ী রাখা/সরানো।
- ছবি সেভ:
savefig দিয়ে chart সেভ করে report/README-তে দেওয়া (portfolio-তে দারুণ দেখায়)।
💼 ১২. Boss Question
Boss: "তুমি সংখ্যা দিয়েছ, আবার chart কেন? আমার তো সময় নেই।"
উত্তর: ঠিক এই কারণেই chart — আপনার সময় বাঁচাতে। একটা ভালো chart ১০ সেকেন্ডে যা বলে,
সংখ্যার টেবিল তা বলতে ১০ মিনিট নেয়। আর chart ভুল সিদ্ধান্ত ঠেকায় — যেমন "গড় ৬৫ হাজার" শুনে ভুল বাজেট
না বানিয়ে, histogram দেখে বুঝবেন বেশিরভাগ ৪০ হাজারে। দ্রুত, সঠিক সিদ্ধান্ত = সরাসরি business value।
🔎 ১৩. Job Requirement Decoder
"Ability to perform Exploratory Data Analysis (EDA) and data visualization (Matplotlib/Seaborn)."
| প্রশ্ন | উত্তর |
| এর মানে কী? | আপনি data-কে chart দিয়ে explore করে insight ও সমস্যা (outlier, skew) বের করতে পারেন। |
| কোম্পানি কেন চায়? | model বানানোর আগে data বোঝা ও stakeholder-কে insight দেখানো — দুটোই লাগে। |
| কোন সমস্যা সমাধান করে? | না-দেখা data-র লুকানো সমস্যা থেকে ভুল model/সিদ্ধান্ত এড়ায়। |
| Junior-এর কী জানা লাগে? | histogram, box plot, scatter, bar, correlation — কোন প্রশ্নে কোন chart, আর সেগুলো পড়তে পারা। |
| এখনই কী master লাগে না? | interactive dashboard (Plotly/Dash), উন্নত styling — পরে। |
| GitHub-এ কীভাবে দেখাবেন? | EDA notebook-এ chart + প্রতিটা chart থেকে ১-২ লাইন insight লেখা। |
| Interview-তে কী জিজ্ঞেস করতে পারে? | "outlier কীভাবে ধরো?", "distribution দেখতে কোন chart?", "correlation ≠ causation ব্যাখ্যা করো।" |
⚠️ ১৪. সাধারণ ভুল ধারণা
ভুল ১: "describe() যথেষ্ট, plot দরকার নেই।" →
ঠিক: Anscombe দেখায় একই সংখ্যায় ভিন্ন গল্প; সবসময় plot করুন।
ভুল ২: "correlation বেশি মানেই একটা আরেকটার কারণ।" →
ঠিক: correlation ≠ causation।
ভুল ৩: "সব outlier সরিয়ে দাও।" →
ঠিক: কিছু outlier বাস্তব ও গুরুত্বপূর্ণ (যেমন ধনী গ্রাহক/জালিয়াতি); আগে বুঝুন।
ভুল ৪: pie chart-এ ১০+ category। →
ঠিক: অনেক category তুলনায় bar chart পড়া সহজ; pie কম category-তে সীমিত রাখুন।
ভুল ৫: chart-এ label/title না দেওয়া। →
ঠিক: axis label ও title ছাড়া chart অর্থহীন; সবসময় দিন।
🎤 ১৫. Interview Prep
প্রশ্ন ১: একটা variable-এর distribution দেখতে কোন chart?
উত্তর: histogram (আকার/skew) বা box plot (median ও outlier)।
প্রশ্ন ২: outlier কীভাবে ধরো?
উত্তর: box plot দেখে, বা IQR নিয়ম (Q1−1.5·IQR, Q3+1.5·IQR-এর বাইরে), অথবা z-score।
প্রশ্ন ৩: দুই variable-এর সম্পর্ক দেখতে?
উত্তর: scatter plot; সংখ্যায় correlation (df.corr) ও heatmap।
প্রশ্ন ৪: mean বনাম median — কখন কোনটা রিপোর্ট করবে?
উত্তর: skewed data/outlier থাকলে median বেশি প্রতিনিধিত্বমূলক; symmetric হলে mean।
✍️ ১৬. হাতে-কলমে (Mini Exercise)
🧪 হাতে-কলমে: section ৫ ও ৭-এর data নিয়ে:
১. salary-র একটা histogram আঁকুন, bins বদলে দেখুন আকার কেমন বদলায়।
২. IQR পদ্ধতিতে salary-র outlier গুনুন, তারপর box plot-এ মিলিয়ে দেখুন।
৩. experience বনাম salary-র scatter আঁকুন — সম্পর্ক ইতিবাচক না নেতিবাচক?
৪. df.corr() চালিয়ে heatmap আঁকুন।
৫. যেকোনো একটা chart savefig("chart.png") দিয়ে সেভ করুন।
প্রতিটা chart-এর নিচে ১ লাইনে লিখুন: "এই ছবি আমাকে কী বলছে?"
🚀 ১৭. Project Connection
flagship V2 (Data Analyzer)-এ visualization হলো "গল্প বলার" ধাপ। পরিষ্কার-করা job data
(E03-E04) থেকে আমরা আঁকব: salary distribution (histogram), শহরভিত্তিক গড় salary (bar), experience বনাম
salary (scatter), আর skill-দের correlation (heatmap)।
এই chart-গুলোই P1 (Job Market Analyzer, E09)-এর README/report-এ যাবে। একটা ভালো EDA report সহ notebook
portfolio-তে recruiter-দের চোখে আলাদাভাবে ধরা দেয় — "এই লোকটা শুধু model চালায় না, data বোঝে।"
📌 ১৮. সারসংক্ষেপ
এই Episode-এ আমরা শিখলাম:
✓ EDA = model-এর আগে data চোখে দেখে চেনা; Matplotlib তার মূল হাতিয়ার
✓ histogram → distribution; box plot → outlier (IQR নিয়ম)
✓ scatter → দুই variable-এর সম্পর্ক (কিন্তু correlation ≠ causation)
✓ bar → category তুলনা (groupby-এর সাথে জুটি); heatmap → correlation matrix
✓ Anscombe's Quartet — একই সংখ্যায় ভিন্ন গল্প; তাই সবসময় plot করুন
✓ chart-এ সবসময় title ও axis label দিন; insight ১ লাইনে লিখুন
➡️ ১৯. পরবর্তী পর্বে কী শিখব
পরবর্তী Episode (S03E06): "SQL Part 1: SELECT, WHERE, JOIN, GROUP BY — data কোথায়
থাকে।"
এতক্ষণ ধরে নিলাম data একটা CSV file-এ আছে। কিন্তু বাস্তবে বেশিরভাগ কোম্পানির data থাকে
database-এ। সেখান থেকে data টেনে আনতে জানতে হয় SQL — যা প্রায় প্রতিটা
data/ML job-এ চাওয়া হয়। মজার ব্যাপার: SQL-এর SELECT/WHERE/GROUP BY/JOIN হুবহু Pandas-এর মতো — পরের পর্বে সেটাই দেখব।