الدرس 5 · الوحدة 3: تحليل البيانات وتقنيات التنبؤ على الويب
إطار البيانات: التحديد والترشيح
اعزل الصفوف والأعمدة التي تهمّك: نصف التحليل اختيارٌ ذكيّ للبيانات. ⏱ نحو 40 دقيقة.
بعد هذا الدرس ستستطيع أن:
- تختار الأعمدة والصفوف والخلايا.
- ترشّح الصفوف بشروط منطقية بسيطة ومركّبة.
- ترتّب الجدول وتعدّ القيم المميّزة.
- تتجنّب أخطاء
and/orوالأقواس.
١اختيار الأعمدة والصفوف
التحليل يبدأ باختيار ما يهمّك. في Pandas: عمودٌ بـ df["col"]، وعدّة أعمدة بقائمة، وصفوفٌ أوائل بـ head:
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)) # أول صفّين
>>> %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 الصفوف المطابقة فقط:
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"]))
>>> %Run main.py
page visits
0 home 1200
1 products 860
4 blog 640
عددها: 3
صفحات جوّال مرتدّة: ['home', 'blog']
>>>
٣الفرز والقيم المميّزة
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())
>>> %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:
رابط «و» في الشروط المركّبة:
لعدّ تكرار كل قيمة في عمود:
للترتيب حسب عمود:
الخلاصة
- اختر عمودًا بـ
df["c"]، وعدّة بقائمة، وخلية بـdf.loc. - رشّح الصفوف بشرط داخل القوسين؛ استخدم & و | والأقواس للشروط المركّبة.
sort_valuesللترتيب، وvalue_countsلعدّ تكرار قيم عمود فئوي.- الترشيح هو جوهر «ماذا تقول البيانات»: اعزل ما يهمّك ثم احسب.
تحدٍّ برمجي: رشّح وعُدّ
متوسطمن الجدول، اطبع عدد صفحات الجوّال، واسم الصفحة الأعلى ارتدادًا بين صفحات الجوّال.
المطلوب:
- رشّح صفوف
device == "mobile"واطبع عددها. - من صفحات الجوّال اطبع
pageصاحبة أعلىbounce.
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
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"].حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
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"])