Pandas: تصور البيانات

آخر تحديث: 2026-08-26

لا أحد يريد أن يحدق في الأرقام الخام -- يريد رئيسك رسومًا بيانية، وتتطلبه التقارير، وتحتاج إليه عروض الشرائح. يُنشئ df.plot من Pandas رسمًا بيانيًا بسطر واحد، بفضل محرك Matplotlib الذي يعمل في الخلفية. يغطي هذا القسم أكثر 8 أنواع من الرسوم البيانية استخدامًا، وتخطيطات الرسوم الفرعية، وتخصيص الأنماط حتى تتمكن من تحويل أي DataFrame إلى تقرير مرئي بسرعة.

⚠️ ملاحظة: يجب تشغيل الرمز أدناه في بيئة Python محلية مع تثبيت matplotlib.

1. What You Will Learn


2. تقرير بوب المرئي للمبيعات

(1) المشكلة: لا أحد يقرأ الجداول

يقدم بوب المبيعات الشهرية لمديره، لكن لا أحد يكلف نفسه عناء النظر إلى الجداول العادية.

(2) الحل: الرسم البياني بسطر واحد باستخدام df.plot

▶ مثال: أساسيات df.plot (الصعوبة ⭐)

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

# Sample data
df = pd.DataFrame({
    'month': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
    'sales': [3200, 3500, 3800, 3600, 4100, 4500],
    'cost': [2000, 2200, 2400, 2300, 2600, 2800]
})
df = df.set_index('month')

# Line chart — one line of code!
df['sales'].plot(kind='line', title='Monthly Sales Trend', figsize=(8, 4))
plt.ylabel('Sales ($)')
plt.tight_layout()
# plt.savefig('sales_trend.png', dpi=150)
# plt.show()
print("Line chart created!")
TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston ليس لديه pandas مثبتة مسبقاً -- يرجى تثبيتها محليًا (`pip install pandas`) واتباع الخطوات. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas الخاص بك.

3. مرجع سريع لأنواع الرسوم البيانية

(1) 8 أنواع شائعة من الرسوم البيانية

النوع الرسم البياني حالة الاستخدام
line رسم بياني خطي الاتجاهات الزمنية
bar رعم بياني شريطي مقارنة الفئات
barh رسم بياني شريطي أفقي الفئات ذات التسميات الطويلة
hist رسم بياني histogram التوزيع
box رسم صندوقي التوزيع + القيم المتطرفة
scatter رسم بياني مبعثر الارتباط
pie رسم بياني دائري النسب
area رسم بياني مساحي الاتجاهات التراكمية
kde تقدير كثافة النواة توزيع سلس

▶ مثال

TEXT 📖 للعرض فقط
> **الخرج:** قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقًا -- يرجى تثبيته محليًا (`pip install pandas`) والعمل عليه. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas الخاص بك.

: أنواع رسوم بيانية متعددة (الصعوبة ⭐⭐)

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

np.random.seed(42)
df = pd.DataFrame({
    'category': ['الإلكترونيات', 'الملابس', 'المنزل', 'الرياضة', 'الكتب'],
    'sales': [5000, 3000, 2000, 1500, 800],
    'avg_price': [299, 55, 75, 45, 15],
    'rating': [4.5, 4.2, 3.9, 4.0, 4.3]
})

# رسم بياني شريطي — مقارنة الفئات
df.plot(kind='bar', x='category', y='sales', title='المبيعات حسب الفئة', figsize=(8, 4))
# plt.show()

# شريط أفقي — أفضل للتسميات الطويلة
df.plot(kind='barh', x='category', y='sales')
# plt.show()

# رسم بياني دائري — النسب
df.set_index('category')['sales'].plot(kind='pie', autopct='%1.1f%%', figsize=(6, 6))
# plt.show()

# رسم بياني histogram — التوزيع
prices = pd.Series(np.random.normal(100, 30, 500))
prices.plot(kind='hist', bins=20, title='توزيع الأسعار')
# plt.show()

# رسم صندوقي — التوزيع + القيم المتطرفة
scores = pd.DataFrame({
    'الرياضيات': np.random.normal(75, 10, 100),
    'الإنجليزية': np.random.normal(80, 12, 100),
    'العلوم': np.random.normal(70, 15, 100)
})
scores.plot(kind='box', title='توزيع الدرجات حسب المادة')
# plt.show()

# رسم مبعثر — الارتباط
df.plot(kind='scatter', x='avg_price', y='rating', title='السعر مقابل التقييم', s=100)
# plt.show()
TEXT 📖 للعرض فقط
> **الخرج:** قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقًا -- يرجى تثبيته محليًا (`pip install pandas`) والعمل عليه. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas الخاص بك.

4. تخطيط الرسوم الفرعية

▶ مثال

TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا -- يرجى تثبيتها محليًا (`pip install pandas`) واتباع الخطوات. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas الخاص بك.

: تخطيط رسوم بيانية متعددة (مستوى الصعوبة ⭐⭐)

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

np.random.seed(42)
df = pd.DataFrame({
    'A': np.random.randn(50).cumsum(),
    'B': np.random.randn(50).cumsum(),
    'C': np.random.randn(50).cumsum(),
    'D': np.random.randn(50).cumsum()
})

# Each column in its own subplot
df.plot(subplots=True, layout=(2, 2), figsize=(10, 8), sharey=True)
plt.suptitle('4 Series Trend')
plt.tight_layout()
# plt.show()

# Custom layout
df[['A', 'B']].plot(subplots=True, layout=(1, 2), figsize=(12, 4))
# plt.show()
TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا -- يرجى تثبيتها محليًا (`pip install pandas`) واتباع الخطوات. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas الخاص بك.

5. تخصيص النمط

▶ مثال

TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا -- يرجى تثبيتها محليًا (`pip install pandas`) والتقدم بالتنفيذ. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas الذي تستخدمه.

: تخصيص النمط (الصعوبة ⭐⭐)

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

np.random.seed(42)
df = pd.DataFrame({
    'sales': np.random.randint(100, 500, 12),
    'profit': np.random.randint(10, 150, 12)
}, index=pd.date_range('2024-01', periods=12, freq='MS').strftime('%b'))

# Custom colors, markers, line style
ax = df.plot(
    kind='line',
    style=['o-', 's--'],     # markers + line style
    color=['#2196F3', '#FF5722'],  # custom colors
    figsize=(10, 5),
    title='Monthly Sales & Profit',
    xlabel='Month',
    ylabel='Amount ($)',
    grid=True,
    alpha=0.8
)

# Add annotations
ax.axhline(y=df['sales'].mean(), color='gray', linestyle=':', label='Avg Sales')
ax.legend(loc='upper left')
plt.tight_layout()
# plt.show()
print("Styled chart created!")
TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا -- يرجى تثبيتها محليًا (`pip install pandas`) والتقدم بالتنفيذ. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas الذي تستخدمه.

6. Pandas مقابل Matplotlib

الميزة df.plot Matplotlib
عدد الأسطر من الكود 1 5-15
المرونة متوسطة عالية
منحنى التعلم منخفض عالٍ
التخصيص أساسي غير محدود
العلاقة يغلف Matplotlib المحرك الأساسي
💡 نصيحة: df.plot يُرجع كائن Matplotlib Axes، لذا يمكنك الاستمرار في تحسينه باستخدام أساليب Matplotlib. الاستراتيجية: استخدم df.plot لإنشاء مسودة سريعة، ثم دقّق التفاصيل عبر كائن Axes.


7. مثال كامل: تقرير تصور المبيعات للتجارة الإلكترونية

(4) ▶ شجرة اتخاذ القرار لاختيار الرسم البياني

100%
graph TB
    A[ما الذي تريد إظهاره؟] --> B{اتجاه عبر الزمن؟}
    B -->|نعم| C[رسم بياني خطي]
    B -->|لا| D{مقارنة الفئات؟}
    D -->|نعم| E[رسم بياني شريطي]
    D -->|لا| F{توزيع البيانات؟}
    F -->|نعم| G[هيستوجرام hist / صندوق الإحداثيات]
    F -->|لا| H{ارتباط؟}
    H -->|نعم| I[رسم بياني مبعثر]
    H -->|لا| J{نسب مئوية؟}
    J -->|نعم| K[رسم بياني دائري]
    J -->|لا| L[رسم بياني مساحي]
TEXT 📖 للعرض فقط
> **الناتج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبّتًا مسبقًا -- يرجى تثبيته محليًا (`pip install pandas`) واتباع الخطوات. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas الخاص بك.

▶ مثال

TEXT 📖 للعرض فقط
> **الناتج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبّتًا مسبقًا -- يرجى تثبيته محليًا (`pip install pandas`) واتباع الخطوات. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas الخاص بك.

: سير عمل تقرير التصور الكامل (الصعوبة ⭐⭐⭐)

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

# ============================================
# Comprehensive example: E-commerce sales
# visualization report with multiple charts
# ============================================

np.random.seed(42)
df = pd.DataFrame({
    'month': pd.date_range('2024-01', periods=12, freq='MS'),
    'Electronics': np.random.randint(3000, 8000, 12),
    'Clothing': np.random.randint(1000, 4000, 12),
    'Home': np.random.randint(500, 2500, 12),
    'Sports': np.random.randint(300, 1500, 12)
})
df = df.set_index('month')

# 1. Line: monthly trend
fig, axes = plt.subplots(2, 2, figsize=(14, 10))

df.plot(ax=axes[0, 0], kind='line', title='Monthly Sales by Category')
axes[0, 0].set_ylabel('Sales ($)')

# 2. Bar: total by category
df.sum().plot(ax=axes[0, 1], kind='bar', title='Annual Sales by Category', color='steelblue')
axes[0, 1].set_ylabel('Total Sales ($)')

# 3. Pie: market share
df.sum().plot(ax=axes[1, 0], kind='pie', autopct='%1.1f%%', title='Market Share')

# 4. Area: cumulative trend
df.plot(ax=axes[1, 1], kind='area', alpha=0.5, title='Cumulative Sales Trend')
axes[1, 1].set_ylabel('Sales ($)')

plt.suptitle('2024 E-Commerce Sales Report', fontsize=16)
plt.tight_layout()
# plt.savefig('sales_report.png', dpi=150, bbox_inches='tight')
print("4-chart report created!")
TEXT 📖 للعرض فقط
> **الناتج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبّتًا مسبقًا -- يرجى تثبيته محليًا (`pip install pandas`) واتباع الخطوات. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas الخاص بك.

❓ أسئلة شائعة

س ما العلاقة بين Pandas plot و Matplotlib؟
ج df.plot هو غلاف من المستوى الأعلى حول Matplotlib -- يستدعي matplotlib.pyplot تحت الغطاء ويعيد كائن Axes. استخدم df.plot للرسوم البيانية البسيطة (سطر واحد ينجز المهمة)، و Matplotlib للتخصيص المعقد (ابدأ بـ df.plot للرسم الأساسي، ثم صقّل باستخدام أساليب Axes). يعمل الاثنان معًا بسلاسة.
س ما القيم التي يقبلها المعامل kind؟
ج line (رسم بياني خطي/افتراضي)، bar (رسم أعمدة)، barh (أعمدة أفقية)، hist (رسم توزيع)، box (مخطط صندوق)، kde/density (كثافة نواة)، area (رسم مساحي)، pie (رسم دائري)، scatter (رسم مبعثر)، hexbin (تجميع سداسي). الأكثر استخدامًا هي: line/bar/hist/scatter.
س كيف أرتب الرسوم الفرعية؟
ج subplots=True يعطي كل عمود رسمًا فرعيًا خاصًا به، و تخطيط=(rows, cols) يحدد الشبكة. على سبيل المثال، تخطيط=(2,2) ينشئ شبكة 2x2. sharex/sharey=True يشارك المحاور عبر الرسوم الفرعية. يمكنك أيضًا القيام بذلك يدويًا: fig, axes = plt.subplots(2,2) ثم df.plot(ax=axes[0,0]) لوضع الرسوم في مواضع محددة.
س كيف أحفظ الرسم البياني كصورة؟
ج استخدم plt.savefig('filename.png', dpi=150, bbox_inches='tight'). المعامل dpi يتحكم في الدقة (150 = متوسطة، 300 = جودة عالية). bbox_inches='tight' يمنع قص التسميات. الصيغ المدعومة تشمل png/jpg/svg/pdf. لا تستدعِ plt.show() قبل الحفظ (show يمسح الشكل).
س كيف أصلح تشوه الأحرف الصينية؟
ج خياران: (1) plt.rcParams['font.sans-serif'] = ['SimHei'] لتعيين خط صيني (Windows)؛ (2) استخدم الإنجليزية للعناوين والتسميات (موصى به، يتجنب مشاكل توافق الخطوط). الخيار 2 أكثر عالمية -- يعمل عبر الأنظمة الأساسية دون الاعتماد على ملفات الخطوط.
س كيف أضيف تعيين ألوان إلى الرسم المبعثر؟
ج استخدم المعامل c لتحديد عمود اللون: df.plot(kind='scatter', x='price', y='rating', c='sales', cmap='viridis', colorbar=True). المعامل cmap يعيّن خريطة الألوان (viridis/coolwarm/RdYlGn)، و colorbar يعرض الأسطورة. المعامل s يتحكم في حجم العلامة.
س كيف أطبق رسومًا بيانية على نفس المحاور؟
ج استخدم المعامل ax: ax1 = df1.plot() ثم df2.plot(ax=ax1). الرسم الثاني يطبق فوق الأول، مشاركًا نفس المحاور. هذا ممتاز لمقارنة مجموعات بيانات متعددة.عيّن label و legend لتمييزها.

📖 ملخص


📝 تمارين

  1. أساسي (صعوبة ⭐): أنشئ DataFrame للمبيعات الشهرية واعرضه باستخدام الرسم البياني الخطي، العمودي، والدائري. قارن كيف يمثل كل نوع من الرسوم البيانية نفس البيانات.
  2. متوسط (صعوبة ⭐⭐): أنشئ DataFrame متعدد الأعمدة واستخدم subplots=True لرسم شبكة فرعية بحجم 2x2 (خطي/عمودي/مربع/هيستوغرام). أضف عناوين وخطوط الشبكة.
  3. تحدي (صعوبة ⭐⭐⭐): حاكي بيانات مبيعات 12 شهرًا عبر 4 فئات من المنتجات. أنشئ تقريرًا يتضمن 4 رسوم بيانية: رسم بياني خطي للاتجاه، رسم عمودي سنوي، رسم دائري للنسب، ورسم مبعثر للسعر مقابل التقييم. احفظ النتيجة كملف PNG.

← Previous: Window Functions · Next: Performance Optimization →

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%