Pandas: تصور البيانات
آخر تحديث: 2026-08-26
لا أحد يريد أن يحدق في الأرقام الخام -- يريد رئيسك رسومًا بيانية، وتتطلبه التقارير، وتحتاج إليه عروض الشرائح. يُنشئ df.plot من Pandas رسمًا بيانيًا بسطر واحد، بفضل محرك Matplotlib الذي يعمل في الخلفية. يغطي هذا القسم أكثر 8 أنواع من الرسوم البيانية استخدامًا، وتخطيطات الرسوم الفرعية، وتخصيص الأنماط حتى تتمكن من تحويل أي DataFrame إلى تقرير مرئي بسرعة.
⚠️ ملاحظة: يجب تشغيل الرمز أدناه في بيئة Python محلية مع تثبيت matplotlib.
1. What You Will Learn
- ❶ df.plot basics
- ❷ Chart types (line/bar/hist/box/scatter/pie/area/kde)
- ❸ subplots تخطيط
- ❹ Style customization
- ❺ Saving and exporting
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) ▶ شجرة اتخاذ القرار لاختيار الرسم البياني
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 لتمييزها.📖 ملخص
- df.plot(kind=...) يُنشئ رسمًا بيانًا بسطر واحد، مدعومًا من Matplotlib في الخلفية
- 8 أنواع من الرسوم البيانية: خط (اتجاهات) / شريط (مقارنة) / histogram (توزيع) / صندوق (توزيع + قيم شاذة) / مبعثر (ارتباط) / دائري (نسب) / منطقة (تراكمي) / KDE (كثافة)
- subplots=True لرسوم بيانية متعددة، تخطيط=(r,c) لتنسيق الشبكة
- تخصيص النمط: style/color/figsize/title/grid/alpha/axhline
- df.plot يُرجع كائن Axes -- يمكنك التحسين المستمر باستخدام طرق Matplotlib
- الحفظ: plt.savefig(path, dpi, bbox_inches)
- الاستراتيجية: df.plot للمسودة السريعة، ثم Matplotlib لضبط التفاصيل الدقيقة
📝 تمارين
- أساسي (صعوبة ⭐): أنشئ DataFrame للمبيعات الشهرية واعرضه باستخدام الرسم البياني الخطي، العمودي، والدائري. قارن كيف يمثل كل نوع من الرسوم البيانية نفس البيانات.
- متوسط (صعوبة ⭐⭐): أنشئ DataFrame متعدد الأعمدة واستخدم
subplots=Trueلرسم شبكة فرعية بحجم 2x2 (خطي/عمودي/مربع/هيستوغرام). أضف عناوين وخطوط الشبكة. - تحدي (صعوبة ⭐⭐⭐): حاكي بيانات مبيعات 12 شهرًا عبر 4 فئات من المنتجات. أنشئ تقريرًا يتضمن 4 رسوم بيانية: رسم بياني خطي للاتجاه، رسم عمودي سنوي، رسم دائري للنسب، ورسم مبعثر للسعر مقابل التقييم. احفظ النتيجة كملف PNG.
← Previous: Window Functions · Next: Performance Optimization →