طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 244 · علم البيانات للويب
الدرس 17 · الوحدة 9: تحويل البيانات إلى معلومات قيمة

التصور البصري بـ Matplotlib

رسمةٌ تكشف ما يخفيه ألف صفّ؛ أيّ رسمٍ لأيّ سؤال؟ ⏱ نحو 45 دقيقة.

بعد هذا الدرس ستستطيع أن:
  • تختار نوع الرسم المناسب للسؤال.
  • ترسم أعمدة وخطوطًا بـ Matplotlib.
  • ترسم مدرّجات وانتثارًا.
  • تضيف عنوانًا وتسمية محاور لكل رسم.

١العين تفهم ما يخفيه الجدول

جدولٌ من مئة صفّ يخفي اتجاهاته؛ رسمةٌ واحدة تكشفها في لحظة. لكل سؤالٍ رسمٌ يناسبه:

تريد أن ترىالرسمالدالة
مقارنة فئاتأعمدة Barplt.bar
اتجاهًا عبر الزمنخط Lineplt.plot
توزيع قيمةمدرّج Histogramplt.hist
علاقة متغيّرينانتثار Scatterplt.scatter

٢الأعمدة والخطوط

main.py
import pandas as pdimport matplotlib.pyplot as pltdf = pd.DataFrame({    "page": ["home", "products", "cart", "checkout", "blog"],    "visits": [1200, 860, 430, 210, 640],    "bounce": [0.52, 0.31, 0.40, 0.22, 0.61],})fig, ax = plt.subplots(1, 2, figsize=(8, 3)) # أعمدة: زيارات كل صفحةax[0].bar(df["page"], df["visits"], color="#0F766E")ax[0].set_title("Visits per page")ax[0].tick_params(axis="x", rotation=45) # خط: نفس البيانات كاتجاهax[1].plot(df["page"], df["visits"], marker="o", color="#F59E0B")ax[1].set_title("Trend")ax[1].tick_params(axis="x", rotation=45) plt.tight_layout()
Shell×
>>> %Run main.py
>>>

subplots(1, 2) يضع رسمتين جنبًا إلى جنب. الأعمدة للمقارنة بين فئات منفصلة، والخط حين يكون المحور متتابعًا (زمن، ترتيب).

٣المدرّج والانتثار

main.py
import pandas as pdimport matplotlib.pyplot as pltdf = pd.DataFrame({    "page": ["home", "products", "cart", "checkout", "blog"],    "visits": [1200, 860, 430, 210, 640],    "bounce": [0.52, 0.31, 0.40, 0.22, 0.61],})import numpy as npnp.random.seed(0)times = np.random.gamma(2, 20, 200)   # أزمنة بقاء محاكاة fig, ax = plt.subplots(1, 2, figsize=(8, 3))ax[0].hist(times, bins=15, color="#0F766E")ax[0].set_title("Session time distribution") # علاقة الزيارات بالارتدادax[1].scatter(df["visits"], df["bounce"], color="#F59E0B", s=60)ax[1].set_xlabel("visits"); ax[1].set_ylabel("bounce")ax[1].set_title("Visits vs bounce")plt.tight_layout()
Shell×
>>> %Run main.py
>>>

توقّع وتحقّق

لمقارنة فئات منفصلة:

لرؤية اتجاه عبر الزمن:

لرؤية توزيع قيمة رقمية:

لرؤية علاقة متغيّرين:

الخلاصة

تحدٍّ برمجي: اختر وحلّل

متوسط

قبل الرسم، احسب: اطبع اسم الصفحة الأعلى زيارةً، ومتوسط الارتداد مقرّبًا لمنزلتين. (الرسم مهارةٌ تجرّبها في المختبر.)

المطلوب:
  • اطبع page صاحبة أعلى visits.
  • اطبع متوسط bounce مقرّبًا لمنزلتين.

ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:

main.py
import pandas as pdimport matplotlib.pyplot as pltdf = pd.DataFrame({    "page": ["home", "products", "cart", "checkout", "blog"],    "visits": [1200, 860, 430, 210, 640],    "bounce": [0.52, 0.31, 0.40, 0.22, 0.61],})# اطبع الصفحة الأعلى زيارة ومتوسط الارتداد (منزلتين)
المطلوب×
home
0.41
💡 تلميح 1
الأعلى زيارة: df.loc[df["visits"].idxmax(), "page"].
💡 تلميح 2
المتوسط: round(df["bounce"].mean(), 2).

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

main.py
import pandas as pdimport matplotlib.pyplot as pltdf = pd.DataFrame({    "page": ["home", "products", "cart", "checkout", "blog"],    "visits": [1200, 860, 430, 210, 640],    "bounce": [0.52, 0.31, 0.40, 0.22, 0.61],})print(df.loc[df["visits"].idxmax(), "page"])print(round(df["bounce"].mean(), 2))
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس