FA-TOOLS — Header Component

کدهای آماده برای رسم هیت‌مپ با seaborn

رفیق برنامه‌نویس! اگه دنبال کدهای پایتون آماده و کاربردی هستی که کارت رو راه بندازه و دیگه وقتت رو پای نوشتن از صفر نذاری، جای درستی اومدی. ما توی fa-tools.ir/snippets/ یه عالمه کد و اسنیپت خفن داریم که حسابی به دردت می‌خوره. یه سر بزن و کلی ابزار بدردبخور پیدا کن! برای هر گونه سوال و راهنمایی هم می‌تونی با ما تماس بگیری: 09202232789

✨ چکیده‌ی راهنمای رسم هیت‌مپ با Seaborn ✨

قدم اول 🚀 نصب و آماده‌سازی (Pandas, Numpy, Matplotlib)
قدم دوم 💡 رسم هیت‌مپ پایه (`sns.heatmap(data)`)
قدم سوم 🎨 سفارشی‌سازی (Colormap, Annot, Linewidths)
قدم چهارم 🧠 تکنیک‌های پیشرفته (Clustermap, Masking)
رفع مشکل 🛠️ بررسی خطاهای رایج و راه‌حل‌های عملی

این خلاصه بهت کمک می‌کنه یه دید کلی از مسیر داشته باشی و سریع‌تر به نتیجه برسی.

چرا اصلاً هیت‌مپ؟ وقتی داده‌ها داغ می‌شن!

کدهای آماده برای رسم هیت‌مپ با seaborn — تصویر 1

ببین رفیق، توی دنیای امروز که پر از داده‌ست، گاهی اوقات با یه نگاه سطحی نمی‌تونی چیزی از روابط پیچیده بین متغیرها بفهمی. اینجاست که پای هیت‌مپ به میون میاد! هیت‌مپ در واقع یه ابزار ویژوال عالیه که بهمون کمک می‌کنه شدت و ضعف روابط رو با استفاده از رنگ‌ها نشون بدیم. فکر کن یه ماتریس بزرگ داری و می‌خوای بدونی کدوم خونه‌ها با هم ارتباط بیشتری دارن یا کدوم خونه‌ها سرد و بی‌ربطن. هیت‌مپ مثل یه دماسنج عمل می‌کنه و با رنگ‌های مختلف (از سرد تا داغ) این اطلاعات رو بهت نشون می‌ده.

مثلاً، اگه توی یه پروژه یادگیری مشاین باشی، ممکنه بخوای همبستگی بین ویژگی‌های مختلف رو بررسی کنی. یا اگه داری روی داده‌های مالی کار می‌کنی، ببینی کدوم سهام‌ها با هم حرکت می‌کنن. هیت‌مپ این کار رو برات مثل آب خوردن می‌کنه و می‌ذاره الگوها رو خیلی سریع شناسایی کنی. به‌خاطر همین کاربردای خفن، توی حوزه‌های مختلفی مثل دیتا ساینس، بیوانفورماتیک، اقتصاد و حتی طراحی وب ازش استفادع می‌شه.

قبل از هر کاری: نصب و آماده‌سازی ابزارها

کدهای آماده برای رسم هیت‌مپ با seaborn — تصویر 2

خب، قبل از اینکه بریم سراغ کدهای هیجان‌انگیز، باید مطمئن بشیم همه ابزارهای لازم رو روی سیستم‌مون داریم. برای رسم هیت‌مپ با `Seaborn`، ما به چند تا کتابخونه اصلی پایتون نیاز داریم: `Pandas` برای مدیریت داده‌ها، `NumPy` برای محاسبات عددی، `Matplotlib` برای نمایش نمودارها و البته خود `Seaborn` که کار ما رو حسابی راحت می‌کنه.

نصب Seaborn و ابزارهای لازم

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

pip install pandas numpy matplotlib seaborn

همین! به همین سادگی. حالا آماده‌ایم برای قدم بعدی.

بارگذاری داده (Data Loading)

قبل از اینکه هر نموداری بکشیم، باید داده داشته باشیم. برای شروع، می‌تونیم از یه دیتاست نمونه استفاده کنیم. `Seaborn` خودش چند تا دیتاست آماده داره که خیلی به کارمون میاد. مثلاً دیتاست `iris` یا `flights` خیلی پرکاربردن. یا اینکه می‌تونی خودت یه دیتافریم `Pandas` بسازی:

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

# ساخت یک دیتافریم نمونه
data = np.random.rand(10, 12) # 10 سطر و 12 ستون از اعداد تصادفی
df = pd.DataFrame(data, columns=[f'ستون {i}' for i in range(1, 13)],
                  index=[f'ردیف {i}' for i in range(1, 11)])

print("نمونه‌ای از دیتافریم:")
print(df.head())

# یا استفاده از دیتاست‌های آماده seaborn
# flights = sns.load_dataset("flights")
# print("nنمونه‌ای از دیتاست flights:")
# print(flights.head())

مهم اینه که داده‌های شما عددی باشن. اگه داده‌های دسته‌بندی شده داری، باید قبلش اون‌ها رو به فرمت عددی تبدیل کنی. این یه قدم حیاتیه برای اینکه هیت‌مپ بتونه کارش رو درست انجام بده.

قدم به قدم: رسم هیت‌مپ پایه با Seaborn

کدهای آماده برای رسم هیت‌مپ با seaborn — تصویر 3

حالا که داده‌هامون آماده‌ست، وقتشه بریم سراغ اصل کار: رسم هیت‌مپ! `Seaborn` این کار رو به شکل فوق‌العاده‌ای ساده کرده. فقط با یه خط کد می‌تونی یه هیت‌مپ زیبا بکشی.

کدهای اولیه برای رسم هیت‌مپ

تابع اصلی که ما باهاش سر و کار داریم `sns.heatmap()` هست. کافیه دیتافریم یا آرایه عددی‌ت رو بهش بدی و تمام. خود `Seaborn` بقیه کارها رو برات انجام می‌ده.

# فرض می‌کنیم 'df' دیتافریم آماده ماست

plt.figure(figsize=(10, 8)) # اندازه نمودار رو تعیین می‌کنیم
sns.heatmap(df)
plt.title('هیت‌مپ پایه از داده‌های تصادفی', fontsize=16) # عنوان نمودار
plt.xlabel('ستون‌ها', fontsize=12)
plt.ylabel('ردیف‌ها', fontsize=12)
plt.show()

نکته مهم: همیشه یادت باشه بعد از رسم نمودار، `plt.show()` رو صدا بزنی تا نمودار بهت نشون داده بشه. اگه این کارو نکنی، نمودار فقط ساخته می‌شه ولی نمایش داده نمی‌شه.

با همین کد ساده یه هیت‌مپ با رنگ‌های پیش‌فرض `Seaborn` بهت نشون داده می‌شه. حالا می‌تونیم بریم سراغ جذاب‌ترین بخش قضیه: سفارشی‌سازی!

عمق بیشتر: کاستومایز کردن هیت‌مپ برای جذابیت بیشتر

هیت‌مپ پایه خوبه، ولی برای اینکه نمودارت حرفه‌ای و تاثیرگذار بشه، باید بتونی اون رو کاستومایز کنی. `Seaborn` گزینه‌های زیادی برای این کار در اختیارت می‌ذاره. از تغییر رنگ‌ها بگیر تا نمایش مقادیر و اضافه کردن خطوط جداکننده.

تغییر رنگ‌ها (Colormaps)

شاید رنگ‌بندی پیش‌فرض باب میلت نباشه. `Matplotlib` و `Seaborn` کلی `Colormap` مختلف دارن که می‌تونی ازشون استفاده کنی. پارامتر `cmap` توی `sns.heatmap()` همین کارو برات می‌کنه.

plt.figure(figsize=(10, 8))
sns.heatmap(df, cmap='viridis') # می‌تونی از 'plasma', 'coolwarm', 'RdBu', 'Greens' و ... استفاده کنی
plt.title('هیت‌مپ با Colormap تغییر یافته', fontsize=16)
plt.show()

انتخاب `Colormap` مناسب خیلی مهمه؛ مثلاً `coolwarm` برای نمایش داده‌های با مقادیر مثبت و منفی و `Greens` برای داده‌هایی که فقط مقادیر مثبت دارن عالیه.

اضافه کردن حاشیه و خطوط (Linewidths)

اگه می‌خوای سلول‌های هیت‌مپت مشخص‌تر باشن و از هم جدا بشن، می‌تونی از پارامتر `linewidths` برای اضافه کردن خطوط بین سلول‌ها استفاده کنی. `linecolor` هم رنگ این خطوط رو مشخص می‌کنه.

plt.figure(figsize=(10, 8))
sns.heatmap(df, cmap='YlGnBu', linewidths=0.5, linecolor='black') # خطوط سیاه با ضخامت 0.5
plt.title('هیت‌مپ با خطوط جداکننده', fontsize=16)
plt.show()

نمایش مقادیر (Annotating Values)

گاهی اوقات فقط رنگ‌ها کافی نیستن و دوست داری مقدار دقیق هر سلول رو هم ببینی. پارامتر `annot=True` این کارو برات می‌کنه. اگه بخوای اعداد رو فرمت کنی (مثلاً تا دو رقم اعشار)، می‌تونی از `fmt` استفاده کنی.

plt.figure(figsize=(10, 8))
sns.heatmap(df, cmap='BuPu', annot=True, fmt=".2f", # نمایش اعداد با دو رقم اعشار
            linewidths=0.5, linecolor='gray', annot_kws={"size": 10}) # تنظیمات فونت اعداد
plt.title('هیت‌مپ با مقادیر نمایش داده شده', fontsize=16)
plt.show()

نکته کاربردی: اگه دیتاستت خیلی بزرگه، استفاده از `annot=True` باعث شلوغی نمودار می‌شه و خواناییشو کم می‌کنه. در این مواقع بهتره فقط از رنگ‌ها برای نمایش الگوها استفاده کنی.

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

`Seaborn` فقط برای کشیدن هیت‌مپ ساده نیست؛ قابلیت‌های پیشرفته‌ای هم داره که تحلیل داده‌هات رو یه لول بالا می‌بره. بیا چند تاش رو بررسی کنیم.

خوشه‌بندی (Clustering) با `sns.clustermap`

`Clustermap` یه ابزار فوق‌العاده برای دیدن خوشه‌های طبیعی توی داده‌هاته. این تابع همزمان با رسم هیت‌مپ، ردیف‌ها و ستون‌ها رو بر اساس شباهت به هم گروه‌بندی می‌کنه و بهت یه دید عمیق‌تر از ساختار داده‌ها می‌ده. این قابلیت توی تحلیل داده ژنتیکی یا دسته‌بندی مشتری‌ها خیلی مفیده.

# از همون دیتافریم 'df' استفاده می‌کنیم
sns.clustermap(df, cmap='mako', figsize=(10, 10))
plt.suptitle('Clustermap از داده‌های تصادفی', fontsize=16, y=1.02) # عنوان کلی برای clustermap
plt.show()

نتیجه `clustermap` یه نمودار پیچیده‌تره که در کنار هیت‌مپ، درخت‌های خوشه‌بندی رو هم توی حاشیه نمایش می‌ده. این درخت‌ها بهت نشون می‌دن که کدوم ردیف‌ها یا ستون‌ها توی یه گروه قرار می‌گیرن.

استفاده از ماسک (Masking)

بعضی وقتا نمی‌خوای تمام سلول‌های هیت‌مپ نشون داده بشن. مثلاً توی ماتریس همبستگی، نیمه بالایی یا پایینی ماتریس تکراریه و می‌تونی اون رو مخفی کنی. پارامتر `mask` یه آرایه بولی (True/False) می‌گیره که جاهایی که `True` باشن رو مخفی می‌کنه.

# ساخت یک ماتریس همبستگی نمونه
corr = df.corr()

# ساخت ماسک برای نیمه بالایی ماتریس
mask = np.triu(np.ones_like(corr, dtype=bool)) # np.triu نیمه بالایی رو True می‌کنه

plt.figure(figsize=(10, 8))
sns.heatmap(corr, mask=mask, cmap='coolwarm', annot=True, fmt=".2f",
            linewidths=0.5, linecolor='gray')
plt.title('هیت‌مپ ماتریس همبستگی با ماسک (نیمه بالایی مخفی)', fontsize=16)
plt.show()

این تکنیک برای وقتی که داری با ماتریس‌های متقارن مثل ماتریس همبستگی کار می‌کنی، خیلی کاربردیه و نمودارت رو مرتب‌تر می‌کنه.

هیت‌مپ با داده‌های دسته‌بندی شده (Categorical Data)

اگرچه هیت‌مپ عمدتاً برای داده‌های عددیه، ولی می‌تونی ازش برای بصری‌سازی داده‌های دسته‌بندی شده هم استفاده کنی. کافیه اول داده‌های دسته‌بندی شده رو به فرمت عددی تبدیل کنی (مثلاً با One-Hot Encoding یا Label Encoding) و بعد هیت‌مپ رو رسم کنی. این کار برای فهمیدن روابط بین ویژگی‌های دسته‌بندی شده عالیه.

# ساخت یه دیتافریم با داده‌های دسته‌بندی شده
data_cat = {'میوه': ['سیب', 'موز', 'سیب', 'پرتقال', 'موز', 'پرتقال'],
            'رنگ': ['قرمز', 'زرد', 'سبز', 'نارنجی', 'زرد', 'نارنجی'],
            'امتیاز': [5, 4, 3, 5, 4, 2]}
df_cat = pd.DataFrame(data_cat)

# تبدیل داده‌های دسته‌بندی شده به عددی با One-Hot Encoding
df_encoded = pd.get_dummies(df_cat[['میوه', 'رنگ']])
# اضافه کردن ستون عددی امتیاز
df_final = pd.concat([df_encoded, df_cat['امتیاز']], axis=1)

print("نمونه‌ای از دیتافریم کدگذاری شده:")
print(df_final.head())

plt.figure(figsize=(10, 6))
sns.heatmap(df_final.corr(), cmap='coolwarm', annot=True, fmt=".2f", linewidths=0.5)
plt.title('هیت‌مپ همبستگی داده‌های دسته‌بندی شده (بعد از One-Hot Encoding)', fontsize=16)
plt.show()

جدول مقایسه‌ای: پارامترهای کلیدی هیت‌مپ

برای اینکه بتونی سریع‌تر پارامترهای مهم `heatmap` رو مرور کنی، یه جدول کوچیک آماده کردم. این جدول بهت کمک می‌کنه تا توی کدهای آماده و اسنیپت‌هات سریع‌تر به گزینه دلخواهت برسی.

پارامتر کاربرد
`data` دیتافریم یا آرایه عددی که می‌خوای رسم کنی.
`cmap` نقشه رنگی (Colormap) برای نمایش شدت مقادیر (مثلاً `viridis`, `coolwarm`).
`annot` اگر `True` باشد، مقادیر عددی داخل هر سلول نمایش داده می‌شوند.
`fmt` فرمت نمایش اعداد در سلول‌ها (مثلاً `”.2f”` برای دو رقم اعشار).
`linewidths` ضخامت خطوط جداکننده بین سلول‌ها.
`linecolor` رنگ خطوط جداکننده.
`mask` یک آرایه بولی که سلول‌های `True` در آن نمایش داده نمی‌شوند.
`cbar` اگر `False` باشد، نوار رنگی (colorbar) کنار نمودار حذف می‌شود.

عیب‌یابی سریع: مشکلات رایج و راه‌حل‌ها

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

مشکل ۱: “ValueError: Data must be 2D”

علت: این خطا وقتی پیش میاد که داده‌ای که به `heatmap` می‌دی 2 بعدی (ماتریس یا دیتافریم) نیست. مثلاً یه سری تک‌بعدی از اعداد رو بهش دادی.

راه‌حل: مطمئن شو که داده‌های شما یک `DataFrame` پاندا یا یک آرایه 2 بعدی `NumPy` باشه. اگه یه `Series` داری، باید اول اون رو به `DataFrame` تبدیل کنی.

# اشتباه:
# series_data = pd.Series(np.random.rand(10))
# sns.heatmap(series_data)

# درست:
df_single_col = pd.DataFrame(np.random.rand(10, 1), columns=['مقدار'])
sns.heatmap(df_single_col)

مشکل ۲: اعداد روی هیت‌مپ ناخوانا هستن یا خیلی کوچیکن

علت: این مشکل معمولاً وقتی پیش میاد که دیتاستت خیلی بزرگه و تعداد سلول‌ها زیاده، یا اینکه تنظیمات فونت مناسب نیست.

راه‌حل:

  • اگه دیتاستت واقعاً بزرگه، `annot=False` رو امتحان کن و فقط روی الگوهای رنگی تمرکز کن.
  • اندازه نمودار رو با `plt.figure(figsize=(X, Y))` افزایش بده.
  • اندازه فونت `annot` رو با `annot_kws={“size”: N}` (مثلاً `size=8`) تنظیم کن.
  • فرمت نمایش اعداد رو با `fmt` کنترل کن تا اعشار زیادی نمایش نده (مثلاً `fmt=”.1f”`).

مشکل ۳: `Colormap` مناسب پیدا نمی‌کنم

علت: انتخاب `Colormap` بستگی به نوع داده و پیامی که می‌خوای منتقل کنی داره. یه `Colormap` نامناسب می‌تونه نمودارت رو گیج‌کننده کنه.

راه‌حل:

  • برای داده‌های با مقادیر مثبت و منفی (مثل همبستگی): از `coolwarm`, `RdBu`, `bwr` استفاده کن.
  • برای داده‌های فقط مثبت (یا فقط منفی): از `viridis`, `plasma`, `magma`, `Greens`, `Blues` استفاده کن.
  • اگه می‌خوای `Colormap` رو معکوس کنی، یه `_r` به آخر اسمش اضافه کن (مثلاً `viridis_r`).

مشکل ۴: نمودار در نهایت نمایش داده نمی‌شود

علت: این تقریباً همیشه به خاطر فراموش کردن `plt.show()` هست.

راه‌حل: همیشه بعد از اینکه تمام تنظیمات نمودار رو انجام دادی، خط `plt.show()` رو اضافه کن. اگه در محیط ژوپیتر نوت‌بوک هستی، می‌تونی `matplotlib inline%` (بدون `!`) رو در ابتدای سلول یا نوت‌بوک بنویسی.

حرف آخر و یه خداحافظی باحال

خب رفیق، تا اینجا با هم سفر جذابی رو طی کردیم و یاد گرفتیم چطور با `Seaborn` هیت‌مپ‌های باحال و کاربردی بکشیم. از آماده‌سازی داده‌ها گرفته تا کشیدن یه هیت‌مپ ساده، کاستومایز کردنش با رنگ‌ها و خطوط، و حتی استفاده از تکنیک‌های پیشرفته‌تر مثل خوشه‌بندی و ماسک. دیگه فکر نمی‌کنم مشکلی توی این زمینت داشته باشی!

یادت باشه که ویژوال‌سازی داده‌ها یه هنره و با تمرین و تجربه می‌تونی نمودارهایی بکشی که هم از نظر علمی دقیق باشن و هم از نظر بصری جذاب. این کدهای آماده فقط یه نقطه شروع هستن. حالا دیگه دستت بازه که خلاقیت به خرج بدی و هیت‌مپ‌های خودت رو با سلیقه خودت درست کنی. اگه دنبال کدهای پایتون، CSS، JavaScript، HTML یا حتی WordPress هستی، حتماً یه سر به بخش اسنیپت‌های fa-tools.ir بزن. اونجا کلی چیز به درد بخور پیدا می‌کنی که سرعت کارت رو چندین برابر می‌کنه.

تا یه مقاله دیگه، برنامه‌نویس خفن، بدرود!

برای کسب اطلاعات بیشتر و دسترسی به کدهای آماده، از fa-tools.ir دیدن کنید.

Table of Contents

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