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

الإحصاء الوصفي: المركز والانتشار

رقمان يختصران ألف قيمة: أين تتجمّع البيانات، وكم تتباعد؟ ⏱ نحو 40 دقيقة.

بعد هذا الدرس ستستطيع أن:
  • تحسب مقاييس المركز والانتشار.
  • تميّز متى يصدق الوسيط أكثر من المتوسط.
  • تقرأ ملخّص describe كاملًا.
  • تستشعر الشذوذ من فجوة المتوسط والوسيط.

١رقمان يلخّصان عمودًا

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

main.py
import pandas as pdsessions = pd.DataFrame({    "user": ["u1","u2","u3","u4","u5","u6","u7","u8"],    "seconds": [12, 45, 30, 90, 52, 8, 300, 25],    "pages": [1, 4, 2, 6, 3, 1, 9, 2],})s = sessions["seconds"]print("المتوسط mean:", round(s.mean(), 1))print("الوسيط median:", s.median())print("الانحراف المعياري std:", round(s.std(), 1))print("الأدنى والأعلى:", s.min(), s.max())
Shell×
>>> %Run main.py
المتوسط mean: 70.2
الوسيط median: 37.5
الانحراف المعياري std: 96.4
الأدنى والأعلى: 8 300
>>>

٢المتوسط يكذب أحيانًا: الوسيط

انظر: متوسط seconds مرتفع بسبب جلسةٍ واحدة طولها 300 ثانية (قيمة شاذّة). الوسيط — القيمة الوسطى — لا تتأثّر بالشواذّ، فهو أصدق لوصف «الزائر المعتاد»:

main.py
import pandas as pdsessions = pd.DataFrame({    "user": ["u1","u2","u3","u4","u5","u6","u7","u8"],    "seconds": [12, 45, 30, 90, 52, 8, 300, 25],    "pages": [1, 4, 2, 6, 3, 1, 9, 2],})s = sessions["seconds"]print("المتوسط:", round(s.mean(), 1), "← يجذبه الشاذّ 300")print("الوسيط:", s.median(), "← يصف الزائر المعتاد") # بلا القيمة الشاذّةtypical = s[s < 200]print("المتوسط بلا الشاذّ:", round(typical.mean(), 1))
Shell×
>>> %Run main.py
المتوسط: 70.2 ← يجذبه الشاذّ 300
الوسيط: 37.5 ← يصف الزائر المعتاد
المتوسط بلا الشاذّ: 37.4
>>>

٣describe: اللقطة الكاملة

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

main.py
import pandas as pdsessions = pd.DataFrame({    "user": ["u1","u2","u3","u4","u5","u6","u7","u8"],    "seconds": [12, 45, 30, 90, 52, 8, 300, 25],    "pages": [1, 4, 2, 6, 3, 1, 9, 2],})print(sessions.describe().round(1)) # الربيعيات يدويًّاprint("الربع الأول Q1:", sessions["seconds"].quantile(0.25))print("الربع الثالث Q3:", sessions["seconds"].quantile(0.75))
Shell×
>>> %Run main.py
seconds pages
count 8.0 8.0
mean 70.2 3.5
std 96.4 2.8
min 8.0 1.0
25% 21.8 1.8
50% 37.5 2.5
75% 61.5 4.5
max 300.0 9.0
الربع الأول Q1: 21.75
الربع الثالث Q3: 61.5
>>>

describe أول ما تفعله مع جدولٍ جديد بعد head: يكشف المدى والشذوذ المحتمل في نظرة.

توقّع وتحقّق

المقياس الأقل تأثّرًا بالقيم الشاذّة:

مقياس الانتشار:

للملخّص الإحصائي الكامل:

تباعد المتوسط عن الوسيط يدلّ على:

الخلاصة

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

متوسط

للعمود pages: اطبع المتوسط مقرّبًا لمنزلة واحدة، والوسيط، وعدد الجلسات التي تجاوزت المتوسط.

المطلوب:
  • اطبع المتوسط (منزلة واحدة) ثم الوسيط.
  • اطبع عدد القيم الأكبر من المتوسط.

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

main.py
import pandas as pdsessions = pd.DataFrame({    "user": ["u1","u2","u3","u4","u5","u6","u7","u8"],    "seconds": [12, 45, 30, 90, 52, 8, 300, 25],    "pages": [1, 4, 2, 6, 3, 1, 9, 2],})# للعمود pages: المتوسط (منزلة واحدة)، الوسيط، وعدد القيم فوق المتوسط
المطلوب×
3.5
2.5
3
💡 تلميح 1
احفظ المتوسط: m = sessions["pages"].mean().
💡 تلميح 2
الوسيط: .median()؛ والعدّ: (p > m).sum().

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

main.py
import pandas as pdsessions = pd.DataFrame({    "user": ["u1","u2","u3","u4","u5","u6","u7","u8"],    "seconds": [12, 45, 30, 90, 52, 8, 300, 25],    "pages": [1, 4, 2, 6, 3, 1, 9, 2],})p = sessions["pages"]m = p.mean()print(round(m, 1))print(p.median())print(int((p > m).sum()))
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

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