الدرس 17 · الوحدة 9: تحويل البيانات إلى معلومات قيمة
التصور البصري بـ Matplotlib
رسمةٌ تكشف ما يخفيه ألف صفّ؛ أيّ رسمٍ لأيّ سؤال؟ ⏱ نحو 45 دقيقة.
بعد هذا الدرس ستستطيع أن:
- تختار نوع الرسم المناسب للسؤال.
- ترسم أعمدة وخطوطًا بـ
Matplotlib. - ترسم مدرّجات وانتثارًا.
- تضيف عنوانًا وتسمية محاور لكل رسم.
١العين تفهم ما يخفيه الجدول
جدولٌ من مئة صفّ يخفي اتجاهاته؛ رسمةٌ واحدة تكشفها في لحظة. لكل سؤالٍ رسمٌ يناسبه:
| تريد أن ترى | الرسم | الدالة |
|---|---|---|
| مقارنة فئات | أعمدة Bar | plt.bar |
| اتجاهًا عبر الزمن | خط Line | plt.plot |
| توزيع قيمة | مدرّج Histogram | plt.hist |
| علاقة متغيّرين | انتثار Scatter | plt.scatter |
٢الأعمدة والخطوط
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()
>>> %Run main.py
>>>
subplots(1, 2) يضع رسمتين جنبًا إلى جنب. الأعمدة للمقارنة بين فئات منفصلة، والخط حين يكون المحور متتابعًا (زمن، ترتيب).
٣المدرّج والانتثار
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()
>>> %Run main.py
>>>
توقّع وتحقّق
لمقارنة فئات منفصلة:
لرؤية اتجاه عبر الزمن:
لرؤية توزيع قيمة رقمية:
لرؤية علاقة متغيّرين:
الخلاصة
- لكل سؤالٍ رسمٌ: أعمدة للمقارنة، خطّ للاتجاه، مدرّج للتوزيع، انتثار للعلاقة.
subplotsيضع عدّة رسومٍ معًا؛ ولكل رسمٍ محاوره.- الرسم الجيّد يجيب عن سؤالٍ واحدٍ بعنوانٍ ومحاورَ واضحة.
- التصور يكشف ما يخفيه الجدول: اتجاهاتٍ وشواذَّ وعلاقات.
تحدٍّ برمجي: اختر وحلّل
متوسطقبل الرسم، احسب: اطبع اسم الصفحة الأعلى زيارةً، ومتوسط الارتداد مقرّبًا لمنزلتين. (الرسم مهارةٌ تجرّبها في المختبر.)
المطلوب:
- اطبع
pageصاحبة أعلىvisits. - اطبع متوسط
bounceمقرّبًا لمنزلتين.
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
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).حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
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))