التصور النهائي وتصدير التقرير
أنشئ شكلًا متعدد اللوحات باستخدام Matplotlib مع مخططات مشروحة، وصدّره إلى PNG وPDF، واكتب ملخصًا منظمًا في ملف markdown
التصور النهائي وتصدير التقرير درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Pandas & NumPy Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.
المخرج النهائي
تحوّل المرحلة الأخيرة من المشروع التطبيقي مؤشرات الأداء الرئيسية المحسوبة إلى مخرج متقن وسهل المشاركة: شكل Matplotlib متعدد اللوحات يضم مخططات مشروحة، وتقريرًا منظمًا بصيغة markdown يتضمن مراجع إلى التصورات المضمّنة. هذا هو ما يتلقاه أصحاب المصلحة فعليًا: تصورات واضحة وملخصًا سرديًا. يحوّل التصور الجيد الأرقام إلى رؤى، بينما يجعل تنظيم التقرير الجيد هذه الرؤى قابلة للتنفيذ. يغطي هذا الدرس بنية الشكل، وإضافة التعليقات التوضيحية، والتصدير إلى PNG/PDF، وإنشاء ملفات markdown منظمة.
إعداد الشكل متعدد اللوحات
استخدم plt.subplots() مع figsize وgridspec_kw لإنشاء شكل ذي لوحات بأحجام مختلفة. ومن التخطيطات الشائعة للتقارير التنفيذية: مخطط اتجاهات عريض في الأعلى، وخريطة حرارية للاحتفاظ ومخطط أعمدة للمناطق في الصف السفلي. اضبط النمط بشكل متسق منذ البداية باستخدام plt.style.use('seaborn-v0_8-whitegrid') للحصول على مخططات نظيفة واحترافية دون تنسيق كل عنصر يدويًا.
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
plt.style.use('seaborn-v0_8-whitegrid')
# 2x2 layout with custom row heights
fig = plt.figure(figsize=(16, 12))
gs = gridspec.GridSpec(2, 2,
height_ratios=[1, 1.2],
hspace=0.4, wspace=0.35)
ax_trend = fig.add_subplot(gs[0, :]) # full width top row
ax_heatmap = fig.add_subplot(gs[1, 0]) # bottom left
ax_bar = fig.add_subplot(gs[1, 1]) # bottom right
print('Figure with 3 panels created.')اللوحة 1: خط اتجاه الإيرادات الشهرية
اعرض إجمالي الإيرادات الشهرية في شكل خط مزود بعلامات، وأضف فوقه متوسطًا متحركًا لثلاثة أشهر، وظلّل المنطقة أسفل الخط الفعلي. أضف تعليقات توضيحية إلى أشهر الذروة والقاع باستخدام الأسهم والنص عبر ax.annotate(). يوضح ذلك القصة فورًا: متى بلغت الإيرادات أقوى مستوياتها، ومتى انخفضت، وما إذا كان الاتجاه طويل الأمد إيجابيًا. استخدم ألوانًا تميز بين القيم الفعلية والمُنعّمة دون تعارض بصري.
import pandas as pd
import matplotlib.pyplot as plt
monthly = pd.read_parquet('output/kpi_monthly_category_revenue.parquet')
monthly_total = monthly.sum(axis=1)
ax = plt.gca()
ax.plot(monthly_total.index, monthly_total.values,
marker='o', linewidth=2, color='#2196F3', label='Monthly Revenue')
ax.plot(monthly_total.index,
monthly_total.rolling(3, min_periods=1).mean().values,
linewidth=2, linestyle='--', color='#FF5722', label='3-Month Avg')
ax.fill_between(monthly_total.index, monthly_total.values, alpha=0.1, color='#2196F3')
# Annotate peak
peak_idx = monthly_total.idxmax()
ax.annotate(f'Peak: ${monthly_total[peak_idx]/1e3:.0f}K',
xy=(peak_idx, monthly_total[peak_idx]),
xytext=(0, 20), textcoords='offset points',
arrowprops=dict(arrowstyle='->', color='#E91E63'),
color='#E91E63', fontsize=10)
ax.set_title('Monthly Revenue Trend', fontsize=14, fontweight='bold')
ax.legend()
plt.show()اللوحة 2: الخريطة الحرارية للاحتفاظ بالفوج
اعرض مصفوفة الاحتفاظ بالفوج في صورة خريطة حرارية ملوّنة باستخدام Seaborn. طبّع القيم بحيث يكون 100% (الفترة 0) هو اللون الأكثر سطوعًا، ويصبح الاحتفاظ المتناقص أغمق تدريجيًا. أخفِ خلايا NaN، وهي الفترات المستقبلية التي لم تحدث بعد، للحفاظ على نظافة المخطط. أضف قيمة النسبة المئوية إلى كل خلية لتسهيل القراءة السريعة. يُعد هذا المخطط من أكثر الأدوات قيمة لفهم أنماط ولاء العملاء.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
retention = pd.read_parquet('output/kpi_cohort_retention.parquet')
fig, ax = plt.subplots(figsize=(10, 6))
sns.heatmap(
retention,
annot=True,
fmt='.0%',
cmap='YlOrRd_r',
mask=retention.isna(),
linewidths=0.5,
ax=ax,
cbar_kws={'label': 'Retention Rate'}
)
ax.set_title('Cohort Retention Matrix', fontsize=14, fontweight='bold')
ax.set_xlabel('Months After First Purchase')
ax.set_ylabel('Cohort Month')
plt.tight_layout()
plt.show()اللوحة 3: مخطط أعمدة أفقي لأفضل المناطق
يُعد مخطط الأعمدة الأفقي مثاليًا لمقارنة أسماء المناطق، بوصفها تسميات نصية على المحور y، حسب الإيرادات. رتّب الأعمدة ترتيبًا تنازليًا بحيث تظهر أفضل منطقة في الأعلى. أضف قيم الإيرادات في نهاية كل عمود باستخدام ax.text(). استخدم لوحة ألوان متباينة تستند إلى حصة الإيرادات؛ بحيث تحصل المنطقة الأعلى على أعمق لون. يوضح هذا المخطط فورًا مدى التركز الجغرافي ومستوى الأداء الإقليمي.
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
region_kpi = pd.read_parquet('output/kpi_region_summary.parquet')
top5 = region_kpi.head(5).sort_values('total_revenue')
fig, ax = plt.subplots(figsize=(8, 5))
colors = cm.Blues(np.linspace(0.4, 0.9, len(top5)))
bars = ax.barh(top5['region'], top5['total_revenue'], color=colors)
for bar, val in zip(bars, top5['total_revenue']):
ax.text(bar.get_width() * 1.01, bar.get_y() + bar.get_height()/2,
f'${val/1e3:.0f}K', va='center', fontsize=9)
ax.set_title('Top 5 Regions by Revenue', fontsize=13, fontweight='bold')
ax.set_xlabel('Total Revenue ($)')
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.tight_layout()
plt.show()حفظ الشكل متعدد اللوحات
صدّر الشكل المكتمل بصيغتين: PNG لتضمينه في العروض التقديمية وتقارير الويب، وPDF للطباعة عالية الدقة. استخدم dpi=150 أو قيمة أعلى مع PNG لضمان وضوح الشكل عند عرضه على الشاشة. مرّر bbox_inches='tight' لتجنب قص التسميات عند حافة الشكل. احفظ الملف في مجلد الإخراج الذي أُنشئ في مرحلة إعداد المشروع.
import matplotlib.pyplot as plt
# After assembling all panels in the figure
fig.suptitle('2024 Sales Performance Report', fontsize=16,
fontweight='bold', y=1.02)
# Save as PNG (for web/presentations)
fig.savefig('output/report_figure.png',
dpi=150,
bbox_inches='tight',
facecolor='white')
# Save as PDF (for print)
fig.savefig('output/report_figure.pdf',
bbox_inches='tight',
facecolor='white')
print('Figures saved:')
print(' output/report_figure.png')
print(' output/report_figure.pdf')كتابة تقرير Markdown منظم
أنشئ التقرير النصي بكتابة ملف markdown منظم برمجيًا. ضمّن رأسًا، وملخصًا تنفيذيًا يشتمل على مؤشرات الأداء الرئيسية الأساسية، وأهم النتائج من كل قسم تحليلي، ومراجع إلى ملفات الأشكال المحفوظة. يضمن إنشاء التقرير من الشيفرة بدلًا من كتابته يدويًا أن ينتج كل تشغيل تقريرًا جديدًا ودقيقًا يعكس القيم المحسوبة فعليًا. استخدم سلاسل f في Python لتضمين الأرقام المحسوبة مباشرةً في النص.
import pandas as pd
from datetime import datetime
df = pd.read_parquet('output/analysis_ready.parquet')
region_kpi = pd.read_parquet('output/kpi_region_summary.parquet')
retention = pd.read_parquet('output/kpi_cohort_retention.parquet')
report = f'''
# 2024 Sales Performance Report
Generated: {datetime.now().strftime('%Y-%m-%d %H:%M')}
## Executive Summary
- **Total Revenue**: ${df['revenue'].sum():,.0f}
- **Total Orders**: {df['order_id'].nunique():,}
- **Unique Customers**: {df['customer_id'].nunique():,}
- **Top Region**: {region_kpi.iloc[0]['region']} (${region_kpi.iloc[0]['total_revenue']:,.0f})
- **Average Month-3 Retention**: {retention.get(3, pd.Series([0])).mean():.1%}
## Key Findings
1. Revenue grew steadily through the year with a peak in October.
2. The top region accounts for {region_kpi.iloc[0]['revenue_share']:.0%} of total revenue.
3. Month-3 cohort retention averages {retention.get(3, pd.Series([0])).mean():.1%}.
## Figures

'''
with open('output/report.md', 'w') as f:
f.write(report)
print('Report written to output/report.md')إضافة تعليقات توضيحية إلى المخططات
تحكي المخططات الفعّالة قصة من خلال التعليقات التوضيحية. استخدم ax.axvline() لتحديد الأحداث المهمة، مثل إطلاق منتج أو تغيير في الأسعار، واستخدم ax.axhspan() لتظليل فترات الركود، وax.annotate() للإشارة إلى نقاط بيانات بارزة باستخدام النصوص والأسهم. سمِّ المحاور بوحداتها (ax.set_ylabel('Revenue ($)'))، وأضف عنوانًا وصفيًا، وأدرج وسيلة إيضاح عند عرض سلاسل متعددة، ونسّق تسميات التدريج لتسهيل القراءة باستخدام ax.yaxis.set_major_formatter(FuncFormatter(...)).
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import pandas as pd
monthly_total = pd.read_parquet('output/kpi_monthly_category_revenue.parquet').sum(axis=1)
fig, ax = plt.subplots(figsize=(12, 5))
ax.plot(monthly_total.index, monthly_total.values, linewidth=2.5, color='#1565C0')
# Format y-axis as $K
ax.yaxis.set_major_formatter(
mticker.FuncFormatter(lambda x, _: f'${x/1e3:.0f}K')
)
# Mark a hypothetical event
ax.axvline(x='2024-06', color='red', linestyle=':', alpha=0.6)
ax.text('2024-06', monthly_total.max() * 0.95,
' Campaign\n Launch', color='red', fontsize=9)
ax.set_title('Monthly Revenue 2024', fontsize=14, fontweight='bold')
ax.set_xlabel('Month')
ax.set_ylabel('Revenue')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()تصدير جداول البيانات إلى Excel
يفضّل بعض أصحاب المصلحة استخدام Excel بدلًا من تقارير markdown. استخدم pd.ExcelWriter لتصدير إطارات بيانات متعددة إلى أوراق مختلفة ضمن مصنف Excel واحد. يُعد هذا مخرجًا احترافيًا لأصحاب المصلحة في الأعمال الذين يريدون استكشاف البيانات بأنفسهم. استخدم startrow وstartcol لترتيب الجداول داخل الورقة، وأضف ورقة 'Summary' تتضمن الأرقام الإجمالية الأساسية بوصفها علامة التبويب الأولى.
import pandas as pd
region_kpi = pd.read_parquet('output/kpi_region_summary.parquet')
retention = pd.read_parquet('output/kpi_cohort_retention.parquet')
product_rank = pd.read_parquet('output/kpi_product_ranking.parquet')
with pd.ExcelWriter('output/sales_report_2024.xlsx', engine='openpyxl') as writer:
region_kpi.to_excel(writer, sheet_name='Region KPIs', index=False)
retention.to_excel(writer, sheet_name='Cohort Retention')
product_rank.head(50).to_excel(writer, sheet_name='Top 50 Products', index=False)
print('Excel workbook written: output/sales_report_2024.xlsx')أتمتة إنشاء التقارير
غلّف خط الأنابيب بأكمله — استيعاب البيانات، وتنظيفها، وحساب مؤشرات الأداء الرئيسية، والتصور، وتصدير التقرير — داخل دالة main() يمكن تنفيذها من سطر الأوامر. استخدم وحدة logging في Python لتسجيل أوقات البدء والانتهاء، وعدد الصفوف في كل مرحلة، وأي حالات شاذة يتم اكتشافها. يصبح خط الأنابيب الذي يعمل من البداية إلى النهاية باستخدام أمر واحد هو python pipeline.py جاهزًا للأتمتة المجدولة عبر cron أو Airflow أو أداة جدولة سحابية.
import logging
import time
from datetime import datetime
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s [%(levelname)s] %(message)s'
)
def main():
start = time.time()
logging.info('Pipeline started')
logging.info('Step 1: Data ingestion')
# load_and_merge() # returns df
logging.info('Step 2: Data cleaning')
# clean(df) # returns df_clean
logging.info('Step 3: KPI computation')
# compute_kpis(df_clean) # saves parquet files
logging.info('Step 4: Visualisation and report export')
# build_report() # saves PNG, PDF, markdown, Excel
elapsed = time.time() - start
logging.info(f'Pipeline complete in {elapsed:.1f}s')
if __name__ == '__main__':
main()إكمال الدورة والخطوات التالية
لقد أكملت مسار تحليل البيانات: Pandas & NumPy. يمكنك الآن: إنشاء مصفوفات NumPy وتحويلها باستخدام البث والجبر الخطي، وبناء إطارات بيانات Pandas ومعالجتها من أي مصدر بيانات، وتنظيف مجموعات البيانات الواقعية وإعادة تشكيلها وتجميعها، وإنشاء تصورات عالية الجودة للنشر باستخدام Matplotlib وSeaborn، وتطبيق الاختبارات الإحصائية باستخدام SciPy، والتوسع إلى مجموعات البيانات الكبيرة باستخدام التجزئة وDask، ودمج Pandas مع قواعد بيانات SQL، وتصميم خطوط أنابيب بيانات قابلة لإعادة الإنتاج من البداية إلى النهاية. تشكل هذه المهارات أساس كل دور يعتمد على البيانات في مجال الصناعة.
تحقق سريع
اختبر مدى فهمك لمفاهيم تحليل البيانات التي تناولها هذا الدرس.
مراجعة الدرس
تعلمت في هذا الدرس الختامي أن أشكال Matplotlib متعددة اللوحات مع GridSpec تتيح تخطيطات احترافية للتقارير تجمع أنواعًا متعددة من المخططات، وأن التعليقات التوضيحية (axvline وannotate وtext) تضيف سياقًا سرديًا إلى المخططات، وأن إنشاء التقارير آليًا (markdown وExcel وPNG وPDF) داخل دالة main() يجعل خط الأنابيب قابلًا للجدولة وقابلًا لإعادة الإنتاج. تهانينا على إكمال مسار Pandas وNumPy؛ فأنت مستعد الآن لمواجهة تحديات تحليل البيانات الواقعية!
تعلم Python مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «التصور النهائي وتصدير التقرير» مجاني؟
نعم — نص درس «التصور النهائي وتصدير التقرير» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.
ماذا ستتعلم في «التصور النهائي وتصدير التقرير»؟
أنشئ شكلًا متعدد اللوحات باستخدام Matplotlib مع مخططات مشروحة، وصدّره إلى PNG وPDF، واكتب ملخصًا منظمًا في ملف markdown تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟
لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «التصور النهائي وتصدير التقرير»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟
نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إعداد المشروع واستيعاب البيانات
- تنظيف البيانات وهندسة السمات
- التحليل وحساب مؤشرات الأداء الرئيسية
- التصور النهائي وتصدير التقرير