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

إطار البيانات: التحديد والترشيح

اعزل الصفوف والأعمدة التي تهمّك: نصف التحليل اختيارٌ ذكيّ للبيانات. ⏱ نحو 40 دقيقة.

بعد هذا الدرس ستستطيع أن:
  • تختار الأعمدة والصفوف والخلايا.
  • ترشّح الصفوف بشروط منطقية بسيطة ومركّبة.
  • ترتّب الجدول وتعدّ القيم المميّزة.
  • تتجنّب أخطاء and/or والأقواس.

١اختيار الأعمدة والصفوف

التحليل يبدأ باختيار ما يهمّك. في Pandas: عمودٌ بـ df["col"]، وعدّة أعمدة بقائمة، وصفوفٌ أوائل بـ head:

main.py
import pandas as pddf = 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],    "device": ["mobile", "desktop", "mobile", "desktop", "mobile"],})print(df["page"])              # عمود واحد (Series)print("---")print(df[["page", "visits"]])  # عدة أعمدة (DataFrame)print("---")print(df.head(2))              # أول صفّين
Shell×
>>> %Run main.py
0 home
1 products
2 cart
3 checkout
4 blog
Name: page, dtype: str
---
page visits
0 home 1200
1 products 860
2 cart 430
3 checkout 210
4 blog 640
---
page visits bounce device
0 home 1200 0.52 mobile
1 products 860 0.31 desktop
>>>
تريدالكتابة
عمودًاdf["visits"]
عدة أعمدةdf[["page", "visits"]]
أول n صفّdf.head(n)
خليةًdf.loc[0, "page"]

٢الترشيح بشرط منطقي

أقوى أداة: اختيار الصفوف التي تحقّق شرطًا. نكتب الشرط داخل القوسين، فيعيد Pandas الصفوف المطابقة فقط:

main.py
import pandas as pddf = 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],    "device": ["mobile", "desktop", "mobile", "desktop", "mobile"],})# الصفحات التي تجاوزت 500 زيارةbusy = df[df["visits"] > 500]print(busy[["page", "visits"]])print("عددها:", len(busy)) # شرطان معًا: جوّال وارتداد مرتفعbad_mobile = df[(df["device"] == "mobile") & (df["bounce"] > 0.5)]print("صفحات جوّال مرتدّة:", list(bad_mobile["page"]))
Shell×
>>> %Run main.py
page visits
0 home 1200
1 products 860
4 blog 640
عددها: 3
صفحات جوّال مرتدّة: ['home', 'blog']
>>>

٣الفرز والقيم المميّزة

main.py
import pandas as pddf = 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],    "device": ["mobile", "desktop", "mobile", "desktop", "mobile"],})# ترتيب تنازلي حسب الزياراتprint(df.sort_values("visits", ascending=False)[["page", "visits"]])print("---")# الأجهزة الفريدة وتكرار كلٍّprint(df["device"].value_counts())
Shell×
>>> %Run main.py
page visits
0 home 1200
1 products 860
4 blog 640
2 cart 430
3 checkout 210
---
device
mobile 3
desktop 2
Name: count, dtype: int64
>>>

sort_values يرتّب، وvalue_counts يعدّ تكرار كل قيمة — من أكثر الأدوات استعمالًا في فهم عمودٍ فئوي بسرعة.

توقّع وتحقّق

لاختيار الصفوف التي visits > 500:

رابط «و» في الشروط المركّبة:

لعدّ تكرار كل قيمة في عمود:

للترتيب حسب عمود:

الخلاصة

تحدٍّ برمجي: رشّح وعُدّ

متوسط

من الجدول، اطبع عدد صفحات الجوّال، واسم الصفحة الأعلى ارتدادًا بين صفحات الجوّال.

المطلوب:
  • رشّح صفوف device == "mobile" واطبع عددها.
  • من صفحات الجوّال اطبع page صاحبة أعلى bounce.

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

main.py
import pandas as pddf = 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],    "device": ["mobile", "desktop", "mobile", "desktop", "mobile"],})# اطبع عدد صفحات الجوّال ثم الأعلى ارتدادًا بينها
المطلوب×
3
blog
💡 تلميح 1
رشّح أولًا: mobile = df[df["device"] == "mobile"].
💡 تلميح 2
الأعلى ارتدادًا: mobile.loc[mobile["bounce"].idxmax(), "page"].

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

main.py
import pandas as pddf = 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],    "device": ["mobile", "desktop", "mobile", "desktop", "mobile"],})mobile = df[df["device"] == "mobile"]print(len(mobile))print(mobile.loc[mobile["bounce"].idxmax(), "page"])
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

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