Matplotlib দিয়ে data-কে চোখে দেখা: distribution, correlation, outlier

EDA — চোখে দেখে data বোঝা (Series 03, Episode 05)

🟢 BEGINNER Series 03 — Data — AI-এর ভিত্তি Episode 05 / 09

📑 এই পর্বে যা যা আছে

🧩 ১. গল্প: সংখ্যা মিথ্যা বলছিল না, কিন্তু সব বলছিলও না

Rahim df["salary"].mean() চালিয়ে পেল ৬৫,০০০ টাকা। সে Boss-কে বলল "গড় salary ৬৫ হাজার"। কিন্তু Nila একটা histogram এঁকে দেখাল — আসলে বেশিরভাগ salary ৩৫-৪৫ হাজারের মধ্যে, আর গুটিকয়েক ২ লাখের salary পুরো গড়কে টেনে ওপরে তুলেছে।

Nila: "তোমার সংখ্যা ভুল ছিল না, Rahim। কিন্তু 'গড় ৬৫ হাজার' বললে Boss ভাববে অধিকাংশ মানুষ ৬৫ পায় — যা মিথ্যা। একটা ছবি এঁকে দেখাও, সত্যটা এক নজরে বেরিয়ে আসবে। মনে রেখো — data-কে প্রশ্ন করার আগে data-কে চোখে দেখতে হয়। এটাই EDA।"

২. সমস্যা: শুধু describe() যথেষ্ট নয়

describe() দারুণ summary দেয় (mean, std, min, max)। কিন্তু সংখ্যা কিছু জিনিস লুকিয়ে রাখে:

এই সব "চোখে দেখলে" সাথে সাথে ধরা পড়ে — তাই 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

💼 ১২. 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-এর মতো — পরের পর্বে সেটাই দেখব।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.