تحليل البيانات / الأساسي: الأسئلة والجداول الموثوقة / الدرس 6
التجميع والمعدلات والمقامات
ابنِ ملخصات فئات تجيب عن السؤال نفسه، مع بيان الأوزان والقيم المفقودة وقواعد الأهلية عند كل مستوى.
في هذه الصفحة
أهداف الدرس
- تمييز عدد الصفوف من عدد القياسات المعروفة ومن المعدلات.
- دمج المعدلات بأوزان التعرض المناسبة للسؤال.
- مطابقة نتائج الفئات بالمجتمع الكلي بعد الاستبعادات المعلنة.
ينشئ مفتاح التجميع وحدة تحليل جديدة
يقسم التجميع السجلات إلى فئات ويلخص كل فئة. حدد المفتاح وقاعدة الأهلية ودالة التجميع وما يمثله صف النتيجة. يجيب مجموع الفئة ومتوسطها عن سؤالين مختلفين. أبق تسميات الفئات المجهولة ظاهرة إذا غيّر استبعادها المجتمع، وميّز فئة غائبة من فئة رُصدت فيها قيمة صفرية فعلاً.
يمكن للملخص المفيد عرض الصفوف المؤهلة والقياسات المعروفة وعدد الأحداث والتعرض والبسط والمقام المستخدمين في المعدل. تتيح هذه الأعداد معرفة هل يعود الفرق إلى الأداء أو حجم الفئة أو تسجيل البيانات. تخفي النسبة المئوية المفردة الاحتمالات الثلاثة.
لا تجمع المعدلات دون مقاماتها
يقارن البرنامج الأول متوسط نسبتين بمعدل الأحداث المجمع. للفئة A نجاح واحد من فرصتين، وللفئة B تسعة من تسعين. متوسط النسب غير الموزون 30%، بينما المعدل لكل الفرص نحو 10.87%. الحسابان ممكنان رياضياً، لكن نسبة مجموع الأحداث إلى مجموع الفرص وحدها تجيب عن السؤال الكلي على مستوى الفرصة.
قد يكون متوسط معدلات الفئات بلا وزن ذا معنى إذا أعطى السؤال كل فئة أهمية متساوية. يجب عندئذ تسميته بهذا الهدف، لا معدل الأفراد أو الفرص العام. اختر الأوزان وفق السؤال ولا تنتقِ الصيغة التي تنتج جواباً مفضلاً، لأن اختلاف الوزن يغير ما تمثله النتيجة.
groups = [(1, 2), (9, 90)]
unweighted = sum(successes / total for successes, total in groups) / len(groups)
combined = sum(successes for successes, _ in groups) / sum(total for _, total in groups)
print(f"unweighted={unweighted:.2f} combined={combined:.2f}")
unweighted=0.30 combined=0.11
تعطي 0.30 كل فئة وزناً متساوياً، وتمثل 0.11 المعدل المقرب عبر 92 فرصة كلها. يختلف المقام والهدف، لا صحة الحساب فقط.
عد الصفوف والقياسات المعروفة كلّاً على حدة
ينشئ المثال الثاني جدول SQLite معزولاً في الذاكرة. تشمل COUNT(*) كل صف، وتستخدم COUNT(value) وAVG(value) القياسات غير المفقودة وفق SQL. لذلك تضم A صفين وقياساً واحداً، ولدى B صفر معروف يجب ألا يعامل كغياب. تجعل ORDER BY الصريحة ترتيب الخرج قابلاً للتكرار.
يغلق البرنامج الاتصال ولا يمس قاعدة مهيأة. صرح بلهجة SQL وتحقق من أنواع المخطط عند كتابة استعلام فعلي. فقد يكون التجميع صحيح الصياغة مع وحدة سجل خاطئة، أو يخفي غياب القياسات إذا اقتصر المختار على المتوسط.
import sqlite3
from contextlib import closing
with closing(sqlite3.connect(":memory:")) as connection:
connection.execute("CREATE TABLE measurements (team TEXT, value INTEGER)")
connection.executemany("INSERT INTO measurements VALUES (?, ?)", [("A", 10), ("A", None), ("B", 0)])
query = "SELECT team, COUNT(*), COUNT(value), AVG(value) FROM measurements GROUP BY team ORDER BY team"
for team, rows, observed, average in connection.execute(query):
print(f"{team} rows={rows} observed={observed} average={average:.1f}")
A rows=2 observed=1 average=10.0
B rows=1 observed=1 average=0.0
لدى A قياس صالح واحد من صفين، ولدى B قياس صفري حقيقي واحد. يكشف عرض عدد الصفوف والمعروف الفرق الذي يخفيه المتوسط وحده.
قد يغير خليط الفئات المقارنة الظاهرة
قد يعكس الفرق الكلي تبدل خليط الفئات لا تحسناً داخلها. قارن نسب الفئات وأوزانها قبل نسبة الحركة إلى الأداء. قد ينخفض معدل نجاح موقع يستقبل حالات أصعب، رغم قوة نتيجته داخل كل نوع حالة. يدعو ذلك إلى التقسيم والمراجعة، ولا يمنح استنتاجاً سببياً تلقائياً من المقارنة نفسها.
حافظ على الأهلية والفترة الزمنية نفسيهما بين مجموعات المقارنة. قد يصح عدد الحالات المكتملة على كل الوافد كمعدل إكمال، بينما يستخدم النجاح بين المكتملين مقاماً آخر. لا ينبغي أن يستبدل أحدهما الآخر صامتاً بين فترتين، وإلا لم يعد التغير المعلن يقارن تعريفاً تحليلياً ثابتاً.
صرح بخيارات الأدوات وطابق المجاميع
تضبط خيارات pandas groupby المفاتيح المفقودة وتركيبات الفئات والترتيب، وقد تغيرت بعض الافتراضيات بين الإصدارات. حدد dropna وobserved عمداً وفق المجتمع المطلوب، ولا تنسخ مقطعاً قديماً دون نسخته. تستند مراجع pandas هنا إلى التوثيق لا إلى تنفيذ محلي. تختلف مجموعة SQL ذات NULL عن نتيجة إسقاط المفتاح المفقود.
طابق مجموع أعداد المؤهلين في الفئات بالعدد الكلي بعد الاستبعاد المعلن. يجب أن تطابق مجاميع المقاييس القابلة للجمع المجموع العام عند الوحدة نفسها، بينما تعاد المعدلات عبر المقامات. اختبر الفئة الفارغة والمفقودة كلها والتعرض الصفري والفئة الكبيرة، كيلا تخفي الصيغة وزناً متساوياً أُضيف دون قصد.
الأخطاء الشائعة وإصلاحها
حُسب المعدل العام كمتوسط نسب الفئات.
- لماذا يحدث؟
- أُعطيت الفئات وزناً متساوياً رغم اختلاف حجم التعرض.
- كيف تصلحه؟
- اجمع البسوط والمقامات لحساب معدل على مستوى الفرصة.
- كيف تتجنب تكراره؟
- احفظ الأعداد التي تقف وراء كل نسبة.
أخفى متوسط الفئة نقص تسجيل القياس.
- لماذا يحدث؟
- اقتصر التقرير على AVG دون عرض عدد القيم المستخدمة.
- كيف تصلحه؟
- أضف عدد المؤهلين والمعروف بجانب المتوسط لتظهر التغطية.
- كيف تتجنب تكراره؟
- اختبر فئة فيها صفر مرصود وقيمة مفقودة.
أسقط التقرير فئات مجهولة بعد تحديث مكتبة.
- لماذا يحدث؟
- بقيت خيارات التجميع الحساسة للإصدار ضمنية وغير موثقة.
- كيف تصلحه؟
- ثبّت الإصدار وحدد خيارات التجميع المقصودة صراحة.
- كيف تتجنب تكراره؟
- طابق أعداد الفئات بالمجموع المؤهل في الاختبارات.
اختبر فهمك
1. للفئتين 50% من 1/2 و10% من 9/90. ما التسمية الصادقة لكل دمج؟
اعرض الحل المشروح
يمثل 30% متوسط معدلات الفئات بوزن متساوٍ. أما المعدل لكل فرصة فهو 10/92 أي نحو 10.87%. اعرض الهدف والأعداد ولا تسمِّ الاثنين نجاحاً عاماً. إذا كان الوزن المتساوي اختيار سياسة، ففسر أهمية هذا السؤال بدلاً من إخفائه كمعدل على مستوى الفرد.
2. لفئة خمسة صفوف لكن COUNT(value)=0. ماذا تقول عن متوسطها ومعدلها؟
اعرض الحل المشروح
توجد سجلات مؤهلة ولا قياسات معروفة للحقل. اعرض حالة لا بيانات لمتوسط القياس، مع خمسة مؤهلين وصفر معروف، ولا تفترض قيمة صفر مقاسة. وللمعدل افحص البسط والتعرض وفق تعريفهما؛ يحتاج المقام الصفري سياسة صريحة لغير المعرّف أو غير المنطبق، لا قسمة آلية أو صفراً مختلقاً.
أهم ما تعلمته
- يحتاج كل معدل بسطاً ومقاماً ووحدة أهلية محددة.
- يجيب وزن الفئات ووزن الأفراد أو الفرص عن سؤالين مختلفين.
- طابق الأعداد وصرح بدلالة المفاتيح المفقودة وخيارات التجميع.