FA-TOOLS — Header Component

آموزش scatter plot با matplotlib و pandas

رفیق برنامه‌نویس، آماده‌ای قدرت Matplotlib و Pandas رو برای ساخت نمودارهای پراکندگی حرفه‌ای ببینی؟ این مقاله نقشه‌ی راه توئه تا داده‌هات رو به بهترین شکل بصری کنی. اگه دنبال ابزارهای خفن و کدهای آماده می‌گردی، حتماً یه سر به فروشگاه ابزارهای ما بزن! مطمئن باش خالی از لطف نیست.

نقشه راه: یک نگاه کلی به Scatter Plot 🗺️

آموزش scatter plot با matplotlib و pandas — تصویر 1

⚙️ چرا Scatter Plot؟

  • کشف رابطه بین متغیرها
  • تشخیص الگو و Outlierها
  • بصری‌سازی داده‌های دو و چندبعدی

🛠️ ابزارهای اصلی

  • 🔵 Matplotlib: هسته گرافیکی پایتون
  • 🟣 Pandas: مدیریت آسان داده‌ها
  • 🟡 NumPy: برای تولید داده نمونه

🚀 قدم به قدم

  • 1️⃣ آماده‌سازی داده با Pandas
  • 2️⃣ رسم اولیه با Matplotlib
  • 3️⃣ سفارشی‌سازی و بهبود ظاهر
  • 4️⃣ Scatter Plot سه‌بعدی
  • 5️⃣ عیب‌یابی مشکلات رایج

نمودار پراکندگی یا همون Scatter Plot، یکی از قوی‌ترین ابزارها توی جعبه‌ابزار هر متخصص داده‌ای هست. این نمودار بهت کمک می‌کنه تا رابطه بین دو یا چند متغیر رو به سادگی ببینی و الگوها، دسته‌ها و حتی نقاط پرت (Outliers) رو کشف کنی. تو این آموزش قراره با هم یاد بگیریم چطور با دو تا از کتابخونه‌های محبوب پایتون، یعنی Matplotlib و Pandas، بهترین و کاربردی‌ترین Scatter Plotها رو بسازیم. این یه راهنمای کامله که از صفر تا صد هرچیزی که لازم داری رو بهت می‌گه.

۱. چرا از Scatter Plot استفاده کنیم؟

آموزش scatter plot با matplotlib و pandas — تصویر 2

قبول کن، دیدن داده‌ها خیلی بهتر از خوندن صرف اونا از روی جدوله! Scatter Plot تو موارد زیر حسابی به کارت می‌آد:

  • کشف همبستگی: می‌خوای بدونی بین درآمد و میزان تحصیلات یه رابطه خطی وجود داره یا نه؟ یا شاید بین میزان بارندگی و رشد گیاه؟ Scatter Plot همبستگی مثبت، منفی یا عدم همبستگی رو به وضوح نشون می‌ده.
  • شناسایی خوشه‌ها (Clusters): گاهی اوقات داده‌های تو به صورت گروه‌های مجزا توزیع شدن. این نمودار بهت کمک می‌کنه این خوشه‌ها رو بصری ببینی و اونا رو تحلیل کنی.
  • پیدا کردن داده‌های پرت (Outliers): یه سری نقاط توی نمودار که از بقیه جدا افتادن؟ اینا می‌تونن داده‌های پرت باشن که ممکنه نشونه خطا یا اطلاعات مهمی باشن.
  • مقایسه متغیرها: برای مقایسه چندین متغیر و درک چگونگی تأثیر اونا بر همدیگه، Scatter Plot عالی عمل می‌کنه.

۲. آماده‌سازی محیط و نصب کتابخانه‌ها

آموزش scatter plot با matplotlib و pandas — تصویر 3

اول از همه، باید مطمئن بشی که کتابخونه‌های لازم رو نصب داری. اگه نه، با دستورات زیر تو ترمینال یا Anaconda Prompt می‌تونی نصبشون کنی:

Bash

pip install pandas matplotlib numpy

بعد از نصب، کارمون رو با فراخوانی کتابخونه‌ها شروع می‌کنیم:

Python

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

۳. ساخت داده‌های نمونه با Pandas

برای شروع کار، نیاز به یه دیتافریم (DataFrame) داریم. با Pandas می‌تونیم داده‌ها رو خیلی شیک و تر و تمیز مدیریت کنیم. فرض کن می‌خوایم رابطه‌ی بین «سن» و «میزان خرید ماهانه» رو تو یه فروشگاه بررسی کنیم. بیا چند تا داده الکی بسازیم تا باهاش حال کنیم:

Python

np.random.seed(42) # برای تکرارپذیری نتایج

data = {
    'سن': np.random.randint(18, 65, 100),
    'میزان_خرید_ماهانه': np.random.randint(50, 1500, 100),
    'تعداد_محصولات': np.random.randint(1, 20, 100),
    'جنسیت': np.random.choice(['مرد', 'زن'], 100)
}

df = pd.DataFrame(data)
print(df.head())

نتیجه‌ی df.head() یه چیزی شبیه این می‌شه:


    سن  میزان_خرید_ماهانه  تعداد_محصولات جنسیت
0  55               1291             16   زن
1  54               1135             18   مرد
2  44                293              1   مرد
3  41                446             12   مرد
4  46               1292             17   مرد
    

به همین راحتی! حالا یه دیتافریم آماده داریم که می‌تونیم باهاش Scatter Plot بزنیم. این نوع داده ساختن برای اسنیپت‌های پایتون خیلی کارآمده.

۴. رسم Scatter Plot اولیه با Matplotlib

حالا که داده‌هامون آماده‌ست، بیا یه Scatter Plot ساده با Matplotlib بکشیم. تابع plt.scatter() وظیفه‌ی رسم نمودار پراکندگی رو بر عهده داره.

Python

plt.figure(figsize=(10, 6)) # اندازه نمودار
plt.scatter(df['سن'], df['میزان_خرید_ماهانه'], color='skyblue', alpha=0.7)
plt.title('رابطه سن و میزان خرید ماهانه', fontsize=16)
plt.xlabel('سن', fontsize=12)
plt.ylabel('میزان خرید ماهانه (تومان)', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()

پارامترهای مهم در plt.scatter():

  • x, y: اینا مهمترین پارامترهان که مختصات X و Y نقاط رو مشخص می‌کنن.
  • s: سایز نقاط رو کنترل می‌کنه (مثلاً s=50). می‌تونی یه لیست یا سری از مقادیر رو هم بهش بدی تا سایز هر نقطه بر اساس یه متغیر دیگه تغییر کنه.
  • c: رنگ نقاط رو مشخص می‌کنه. می‌تونی یه رنگ ثابت (مثلاً ‘red’) یا یه لیست/سری از مقادیر عددی برای استفاده با Color Map (cmap) بهش بدی.
  • marker: شکل نقاط رو تغییر می‌ده (مثلاً ‘o’ برای دایره، ‘^’ برای مثلث).
  • alpha: شفافیت نقاط رو تنظیم می‌کنه (بین ۰ تا ۱). وقتی نقاط روی هم می‌افتن، با alpha می‌تونی تراکم اونا رو بهتر نشون بدی.
  • edgecolors: رنگ حاشیه نقاط.

۵. سفارشی‌سازی و بهبود ظاهر Scatter Plot

یه نمودار خوب، فقط نشون دادن داده‌ها نیست؛ باید بتونی اونا رو جذاب و قابل فهم کنی. حالا بیا چند تا متغیر دیگه رو هم وارد داستان کنیم تا نمودارمون جون بگیره! مثلاً می‌خوایم سایز نقاط رو بر اساس «تعداد محصولات» و رنگشون رو بر اساس «جنسیت» تغییر بدیم. این‌جا کدهای آماده و اسنیپت‌های پایتون حسابی به دردت می‌خورن.

Python

plt.figure(figsize=(12, 7))

colors = {'مرد': '#3498DB', 'زن': <span style="color: #E74C3C'} # رنگ‌بندی بر اساس جنسیت
df['رنگ'] = df['جنسیت'].map(colors)

plt.scatter(
    df['سن'],
    df['میزان_خرید_ماهانه'],
    s=df['تعداد_محصولات'] * 20, # سایز بر اساس تعداد محصولات
    c=df['رنگ'], # رنگ بر اساس جنسیت
    alpha=0.6,
    edgecolors='w', linewidth=0.5
)

plt.title('رابطه سن، خرید ماهانه، تعداد محصولات و جنسیت', fontsize=18)
plt.xlabel('سن', fontsize=14)
plt.ylabel('میزان خرید ماهانه (تومان)', fontsize=14)
plt.grid(True, linestyle='-.', alpha=0.7)

# اضافه کردن légende برای رنگ‌ها (جنسیت)
for gender, color in colors.items():
    plt.scatter([], [], c=color, s=100, label=gender, alpha=0.6)
plt.legend(title="جنسیت")

plt.tight_layout() # تنظیم خودکار فضای نمودار
plt.show()

کار با Colormapها

اگه متغیری که می‌خوای بر اساس اون رنگ‌بندی کنی، عددی باشه، می‌تونی از Colormapها استفاده کنی. اینا طیفی از رنگ‌ها رو برای نمایش مقادیر مختلف به کار می‌برن.

Python

plt.figure(figsize=(12, 7))
scatter = plt.scatter(
    df['سن'],
    df['میزان_خرید_ماهانه'],
    c=df['تعداد_محصولات'], # رنگ بر اساس تعداد محصولات (عددی)
    cmap='viridis', # استفاده از Colormap
    s=100,
    alpha=0.7,
    edgecolors='black', linewidth=0.8
)

plt.colorbar(scatter, label='تعداد محصولات') # اضافه کردن نوار رنگ
plt.title('سن و خرید ماهانه بر اساس تعداد محصولات', fontsize=18)
plt.xlabel('سن', fontsize=14)
plt.ylabel('میزان خرید ماهانه (تومان)', fontsize=14)
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()

۶. Scatter Plot سه‌بعدی (3D Scatter Plot)

گاهی اوقات دو متغیر برای نشون دادن تمام جزئیات کافی نیست. اگه می‌خوای یه متغیر سوم رو هم وارد بازی کنی، می‌تونی یه Scatter Plot سه‌بعدی بسازی. این کار یه کم تنظیمات بیشتر داره ولی نتیجه‌اش خیلی خفنه!

Python

from mpl_toolkits.mplot3d import Axes3D

plt.figure(figsize=(12, 8))
ax = plt.axes(projection='3d')

scatter_3d = ax.scatter(
    df['سن'],
    df['میزان_خرید_ماهانه'],
    df['تعداد_محصولات'], # متغیر سوم برای محور Z
    c=df['تعداد_محصولات'], cmap='plasma',
    s=100, alpha=0.7, edgecolors='black'
)

ax.set_title('Scatter Plot سه بعدی: سن، خرید، تعداد محصولات', fontsize=18)
ax.set_xlabel('سن', fontsize=14)
ax.set_ylabel('میزان خرید ماهانه', fontsize=14)
ax.set_zlabel('تعداد محصولات', fontsize=14)

plt.colorbar(scatter_3d, label='تعداد محصولات')
plt.show()

۷. نکات پیشرفته و بهترین شیوه‌ها

برای اینکه نمودارهات واقعاً حرفه‌ای باشن، این نکات رو یادت باشه:

  • انتخاب رنگ و سایز مناسب: زیاده‌روی تو استفاده از رنگ‌ها و سایزهای مختلف می‌تونه نمودارت رو شلوغ و گیج‌کننده کنه. یه پال تت رنگی (Palette) خوب انتخاب کن و ازش پایبند بمون.
  • شفافیت (Alpha): همونطور که دیدی، alpha برای نقاطی که روی هم می‌افتن، حسابی کارآمده. باهاش می‌تونی تراکم داده‌ها رو تو مناطق مختلف نشون بدی.
  • Grid و Labels: همیشه برچسب‌های محورها (xlabel, ylabel, title) رو مشخص کن تا نمودار مفهوم باشه. Grid هم برای خوندن دقیق‌تر مقادیر خیلی کمک می‌کنه.
  • استفاده از Styles: Matplotlib کلی استایل از پیش تعریف شده داره که می‌تونی ازشون استفاده کنی تا نمودارت یه ظاهر حرفه‌ای و شیک داشته باشه. مثلاً plt.style.use(‘ggplot’) یا ‘seaborn-v0_8’.
  • ذخیره نمودار: همیشه نمودارهات رو تو فرمت‌های با کیفیت مثل PNG یا SVG ذخیره کن تا تو ارائه‌ها و گزارش‌هات بتونی ازشون استفاده کنی: plt.savefig(‘my_scatter_plot.png’, dpi=300).

جدول: مقایسه تنظیمات رایج Matplotlib

پارامتر کاربرد
plt.figure(figsize=(w, h)) اندازه کلی نمودار را بر حسب اینچ تنظیم می‌کند.
plt.title(‘My Title’) عنوان نمودار را مشخص می‌کند.
plt.xlabel(‘X-axis’) برچسب محور افقی (X) را تنظیم می‌کند.
plt.ylabel(‘Y-axis’) برچسب محور عمودی (Y) را تنظیم می‌کند.
plt.grid(True) شبکه راهنما را روی نمودار فعال یا غیرفعال می‌کند.
plt.legend() لجند (راهنمای) نمودار را نمایش می‌دهد.
plt.show() نمودار را نمایش می‌دهد. بدون این دستور، نمودار دیده نمی‌شود.

۸. عیب‌یابی سریع (Troubleshooting)

توی مسیر برنامه‌نویسی، خطاها بخشی از ماجرا هستن. نگران نباش، این‌جا چند تا از مشکلات رایج و راه‌حل‌هاشون رو با هم بررسی می‌کنیم:

مشکل ۱: ModuleNotFoundError

اگه با خطایی مثل ModuleNotFoundError: No module named ‘pandas’ یا ‘matplotlib’ مواجه شدی، یعنی کتابخونه‌ها درست نصب نشدن.

  • راه‌حل: مطمئن شو که تو همون محیط پایتونی داری pip install می‌کنی که برنامه‌ات رو اجرا می‌کنی. دوباره دستور pip install pandas matplotlib numpy رو اجرا کن.

مشکل ۲: نمودار نشون داده نمی‌شه!

کد رو اجرا کردی ولی هیچ نموداری بالا نیومد؟

  • راه‌حل: حتماً یادت رفته plt.show() رو آخر کد اضافه کنی. این دستور نمودار رو بهت نشون می‌ده. توی Jupyter Notebook یا Google Colab معمولاً نیازی بهش نیست، ولی تو اسکریپت‌های پایتون لازمه.

مشکل ۳: KeyError هنگام دسترسی به ستون Pandas

وقتی می‌خوای به یه ستون از دیتافریم دسترسی پیدا کنی (مثلاً df[‘سن’]) و با خطای KeyError: ‘سن’ مواجه می‌شی.

  • راه‌حل: احتمالاً اسم ستون رو اشتباه تایپ کردی یا تو دیتافریم وجود نداره. با print(df.columns) می‌تونی تمام اسم ستون‌ها رو ببینی و از درستیشون مطمئن بشی. همچنین گاهی وقتا به خاطر فاصله یا حروف بزرگ و کوچک این اتفاق می‌افته.

مشکل ۴: نمودار فارسی رو به هم ریخته نشون می‌ده

یکی از چالش‌های رایج تو Matplotlib نشون دادن درست حروف فارسیه.

  • راه‌حل: باید یه فونت فارسی که روی سیستمت نصبه (مثل Tahoma یا Vazirmatn) رو به Matplotlib معرفی کنی. این یه کد کلیشه ای که همیشه باید دم دستت باشه برای کدهای آماده پایتون:

    Python
    
    import matplotlib.font_manager as fm
    
    font_path = './Vazirmatn-Regular.ttf' # مسیر فایل فونت فارسی (.ttf)
    # اگه فونت نصب شده، می‌تونی اسمش رو مستقیم بدی:
    # font_name = "Tahoma" 
    # plt.rcParams['font.sans-serif'] = [font_name]
    
    fm.fontManager.addfont(font_path)
    plt.rcParams['font.family'] = 'Vazirmatn' # یا اسمی که برای فونت نصب شده انتخاب کردی
    plt.rcParams['axes.unicode_minus'] = False # برای حل مشکل علامت منفی
                

    یادت باشه که فایل فونت .ttf باید کنار اسکریپت پایتونیت باشه یا مسیر کاملش رو مشخص کنی.

جمع‌بندی و کلام آخر

خب رفیق، تا اینجا با هم یاد گرفتیم چطور با استفاده از Pandas داده‌هامون رو آماده کنیم و بعد با Matplotlib نمودارهای Scatter Plot قدرتمند و جذابی بسازیم. از رسم یه نمودار ساده گرفته تا اضافه کردن رنگ، سایز و حتی بعد سوم، همه رو پوشش دادیم. دیگه می‌تونی با استفاده از این تکنیک‌ها، داده‌هات رو به بهترین شکل ممکن بصری کنی و الگوهای پنهان رو نشون بدی. هر برنمامه نویسی برای اینکه حرفه‌ای تر بشه نیاز به این مهارت‌ها داره.

یادت نره که تمرین کلید موفقیته. با داده‌های مختلف بازی کن، پارامترها رو تغییر بده و ببین چطور می‌تونی بهترین نمودار رو برای داستان داده‌هات بسازی.

نیاز به مشاوره یا کمک بیشتر داری؟

می‌تونی با شماره زیر در تماس باشی تا راهنماییت کنیم:


📞 همین الان تماس بگیر: ۰۹۲۰۲۲۳۲۷۸۹

برای یادگیری بیشتر در مورد HTML، CSS، JavaScript و حتی وردپرس، مقالات دیگه ما رو هم از دست نده!

Table of Contents

آخرین نوشته‌ها