Pandas & NumPy Academy · درس

المخططات البعثرية ومخططات الأزواج

أنشئ مخططات بعثرية ملوّنة حسب متغير ثالث باستخدام sns.scatterplot، واعرض جميع العلاقات الثنائية باستخدام sns.pairplot.

الدرس 3 من 413 خطوة

المخططات البعثرية ومخططات الأزواج درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Pandas & NumPy Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

تصوير العلاقات بين المتغيرات

تعرض مخططات التوزيع متغيرًا واحدًا في كل مرة. وعندما تريدون فهم العلاقة بين متغيرين رقميين، فإنكم تحتاجون إلى المخططات المبعثرة والتصورات المرتبطة بها. تساعدكم هذه المخططات على اكتشاف الارتباط (هل يزداد المتغيران معًا؟)، والعناقيد (هل توجد مجموعات فرعية في البيانات؟)، والقيم الشاذة (هل توجد نقاط غير معتادة بعيدة عن السحابة الرئيسية؟). ويجعل Seaborn كل ذلك سهلًا باستخدام scatterplot وpairplot.

import seaborn as sns
import matplotlib.pyplot as plt

# Load the classic iris dataset
iris = sns.load_dataset('iris')
print(iris.head())
print('\nShape:', iris.shape)

مخطط مبعثر أساسي باستخدام sns.scatterplot

ترسم sns.scatterplot(data, x, y) كل مشاهدة كنقطة عند إحداثياتها (x, y). وخلافًا لـ plt.scatter في Matplotlib، ترتبط نسخة Seaborn تلقائيًا بإطار بيانات، وتتكامل مع دلالات hue وsize وstyle. والنتيجة مخططات مفيدة متعددة المتغيرات باستدعاء دالة واحدة، مع وسيلة إيضاح تلقائية.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.scatterplot(data=tips, x='total_bill', y='tip')
plt.title('Tip vs Total Bill')
plt.xlabel('Total Bill ($)')
plt.ylabel('Tip ($)')
plt.show()

ترميز متغير ثالث باستخدام hue

يُسند معامل hue لونًا إلى كل نقطة بناءً على متغير ثالث، سواء كان فئويًا أم رقميًا. عندما يكون hue عمودًا فئويًا، مثل 'smoker'، يستخدم Seaborn ألوانًا مميزة. وعندما يكون hue عمودًا رقميًا، يستخدم تدرجًا لونيًا متسلسلًا. يتيح لكم ذلك رؤية ثلاثة متغيرات في آن واحد على مخطط ثنائي الأبعاد من دون إضافة محور ثالث.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.scatterplot(
    data=tips,
    x='total_bill',
    y='tip',
    hue='time',       # Lunch vs Dinner
    style='smoker',   # marker shape
    palette='deep'
)
plt.title('Tip vs Bill by Time and Smoker Status')
plt.legend(bbox_to_anchor=(1, 1))
plt.tight_layout()
plt.show()

ترميز الحجم والنمط

إضافةً إلى hue، تدعم المخططات المبعثرة في Seaborn معامل size، الذي يرمّز متغيرًا رقميًا بمساحة النقطة، ومعامل style، الذي يرمّز متغيرًا فئويًا بشكل العلامة. قد يكشف استخدام الدلالات الثلاث معًا أنماطًا معقدة متعددة المتغيرات، لكنه قد يحمّل المشاهد معلومات أكثر من اللازم. والإرشاد العملي هو استخدام hue أولًا (الأكثر وضوحًا)، ثم style، ثم size عند الضرورة فقط.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.scatterplot(
    data=tips,
    x='total_bill',
    y='tip',
    hue='day',
    size='size',      # party size controls marker area
    sizes=(20, 200),  # min and max dot area
    alpha=0.7
)
plt.title('Tip vs Bill — Colour=Day, Size=Party Size')
plt.legend(bbox_to_anchor=(1, 1))
plt.tight_layout()
plt.show()

إضافة خط انحدار باستخدام regplot

ترسم sns.regplot() مخططًا مبعثرًا وتضيف فوقه خط انحدار خطي مع نطاق ثقة مظلل بنسبة 95%. ويفيد ذلك في تصوير قوة العلاقة الخطية بين متغيرين واتجاهها. ويضيق نطاق الثقة في المناطق ذات البيانات الكثيفة، ويتسع عند الأطراف حيث توجد نقاط أقل تسهم في ملاءمة النموذج.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.regplot(
    data=tips,
    x='total_bill',
    y='tip',
    scatter_kws={'alpha': 0.4},
    line_kws={'color': 'red'}
)
plt.title('Tip vs Bill with Regression Line')
plt.show()

lmplot: مخططات انحدار مقسّمة إلى لوحات

‏sns.lmplot() هي النسخة على مستوى الشكل من regplot. وهي تدعم hue (خطوط انحدار منفصلة لكل مجموعة في اللوحة نفسها) وcol/row (لوحات منفصلة). وتفيد هذه الطريقة في اختبار ما إذا كانت العلاقة بين متغيرين تختلف باختلاف المجموعات الفرعية — مثل اختبار ما إذا كانت العلاقة بين الفاتورة والإكرامية أكثر انحدارًا في العشاء منها في الغداء.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Separate regression line per time (Lunch / Dinner)
sns.lmplot(
    data=tips,
    x='total_bill',
    y='tip',
    hue='time',
    scatter_kws={'alpha': 0.4},
    height=5
)
plt.suptitle('Regression by Meal Time', y=1.02)
plt.show()

مقدمة إلى مخططات الأزواج

ينشئ sns.pairplot(df) شبكة من المخططات المبعثرة لكل زوج من الأعمدة الرقمية في إطار البيانات، مع مخططات توزيع على القطر. وهذه أسرع طريقة لتصوير جميع العلاقات الثنائية في مجموعة بيانات باستدعاء واحد. وبالنسبة إلى إطار بيانات يحتوي على n من الأعمدة الرقمية، ينشئ pairplot شبكة n×n. وتكون هذه الطريقة عملية أكثر عندما يتراوح n بين 3 و8، إذ تصبح الشبكات الأكبر من الصعب قراءتها.

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset('iris')

# Create pairplot coloured by species
sns.pairplot(iris, hue='species', diag_kind='kde', plot_kws={'alpha': 0.5})
plt.suptitle('Iris Dataset Pairplot', y=1.02)
plt.show()

تخصيص القطر في pairplot

يتحكم معامل diag_kind فيما يظهر على قطر شبكة pairplot. استخدموا 'hist' للمدرجات التكرارية أو 'kde' لتقديرات كثافة النواة. ويعرض القطر التوزيع أحادي المتغير لكل متغير، بينما تعرض اللوحات خارج القطر المخططات المبعثرة الثنائية. ويمكنكم أيضًا استخدام corner=True لعرض المثلث السفلي فقط، مما يقلل عدد اللوحات إلى النصف ويحد من التكرار.

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset('iris')

# Show only lower triangle
sns.pairplot(
    iris,
    hue='species',
    diag_kind='hist',
    corner=True
)
plt.show()

PairGrid للتخصيص الكامل

يمنحكم sns.PairGrid تحكمًا كاملًا في نوع المخطط الذي يظهر في كل قسم من أقسام المصفوفة. استخدموا g.map_upper() وg.map_lower() وg.map_diag() لتعيين دوال مختلفة، مثل regplot في المثلث العلوي وkdeplot في المثلث السفلي. وينتج عن ذلك مخططات بجودة مناسبة للنشر، بحيث تنقل كل لوحة معلومات مميزة عن زوج المتغيرات.

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset('iris')
numeric_iris = iris.drop(columns=['species'])

g = sns.PairGrid(numeric_iris)
g.map_upper(sns.scatterplot, alpha=0.3)
g.map_lower(sns.kdeplot, fill=True)
g.map_diag(sns.histplot, kde=True)

plt.suptitle('Custom PairGrid', y=1.02)
plt.show()

تحديد الارتباط في المخططات المبعثرة

عند قراءة مخطط التشتت، قدّر اتجاه العلاقة (هل يميل سُحب النقاط إلى الأعلى أم إلى الأسفل؟)، وقوتها (ما مدى تقارب النقاط من الاتجاه؟)، وشكلها (خطي أم منحني؟). يتراوح معامل الارتباط r بين ‎-1‎ (ارتباط سلبي تام) و‎+1‎ (ارتباط إيجابي تام)، بينما يعني 0 عدم وجود علاقة خطية. تذكّر: الارتباط لا يعني السببية، وقد تكون العلاقة غير الخطية ذات قيمة r ≈ 0.

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

np.random.seed(0)
x = np.linspace(0, 10, 100)

fig, axes = plt.subplots(1, 3, figsize=(12, 4))

# Strong positive correlation
axes[0].scatter(x, x + np.random.normal(0, 0.5, 100))
axes[0].set_title('Strong Positive (r≈0.99)')

# Weak correlation
axes[1].scatter(x, np.random.normal(5, 3, 100))
axes[1].set_title('No Correlation (r≈0)')

# Non-linear (quadratic) — r can be low
axes[2].scatter(x, (x-5)**2 + np.random.normal(0, 1, 100))
axes[2].set_title('Non-linear (r low despite pattern)')

plt.tight_layout()
plt.show()

jointplot للبيانات ثنائية المتغير مع التوزيعات الهامشية

تجمع sns.jointplot() بين مخطط مركزي ثنائي المتغيرات ومخططين هامشيين أحاديي المتغيرات على الحافتين العلوية واليمنى. مرّر kind='scatter' أو 'hex' أو 'kde' أو 'reg'. يُفيد النوع hex عند وجود آلاف النقاط المتداخلة؛ إذ يجمعها في مسدسات ويستخدم الألوان لإظهار الكثافة، وبذلك يحل مشكلة تراكب النقاط التي تجعل مخططات التشتت غير قابلة للقراءة مع مجموعات البيانات الكبيرة.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# KDE joint plot with marginal distributions
sns.jointplot(
    data=tips,
    x='total_bill',
    y='tip',
    kind='reg',
    marginal_kws={'bins': 20}
)
plt.suptitle('Joint Distribution of Bill and Tip', y=1.02)
plt.show()

اختبار سريع

اختبر مدى فهمك لمخططات التشتت ومخططات الأزواج في Seaborn من هذا الدرس.

مراجعة الدرس

تعلّمت في هذا الدرس أن sns.scatterplot يشفّر ما يصل إلى أربعة متغيرات باستخدام x وy وhue وsize وstyle، وأن sns.regplot/lmplot يضيف خط انحدار لقياس العلاقات الخطية، وأن sns.pairplot ينشئ شبكة لجميع أزواج المتغيرات، وهي مثالية للتحليل الاستكشافي لمجموعات البيانات متعددة المتغيرات. بعد ذلك، سنستكشف خرائط التمثيل الحراري لتصوير مصفوفات الارتباط.

البدء مجانًا

تعلم Python مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
30
الدروس
120

الأسئلة الشائعة

هل درس «المخططات البعثرية ومخططات الأزواج» مجاني؟

نعم — نص درس «المخططات البعثرية ومخططات الأزواج» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

ماذا ستتعلم في «المخططات البعثرية ومخططات الأزواج»؟

أنشئ مخططات بعثرية ملوّنة حسب متغير ثالث باستخدام sns.scatterplot، واعرض جميع العلاقات الثنائية باستخدام sns.pairplot. تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟

لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «المخططات البعثرية ومخططات الأزواج»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟

نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مخططات التوزيع: histplot وkdeplot
  2. المخططات الفئوية: boxplot وbarplot وviolinplot
  3. المخططات البعثرية ومخططات الأزواج
  4. خرائط حرارية لمصفوفات الارتباط
← العودة إلى Pandas & NumPy Academy