محتويات الدورة

تحليل البيانات / الأساسي: الأسئلة والجداول الموثوقة / الدرس 4

القيم المفقودة والسجلات المكررة

افحص الغياب والتكرار كخصائص تحتاج تفسيراً، واحفظ أثر معالجتهما على المجتمع الممثل ومقام كل مقياس.

وقت القراءة التقريبي: 5 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تمييز المفقود والصفر وغير الصالح وما لا ينطبق.
  • شرح آليات الغياب كافتراضات لا كتصنيفات مكتشفة تلقائياً.
  • إزالة التكرار وفق وحدة حدث ومفتاح وسياسة تعارض صريحة.

لا تفسر الخلية الفارغة سبب غيابها

قد تعني القيمة المفقودة أنها لم تجمع أو تعذر الوصول إليها أو حُجبت أو لا تنطبق أو فشل تحويلها. ليست هذه المعاني ملزمة بالمعالجة نفسها. الصفر قيمة مرصودة، أما المجهول فحالة معلومات. احفظ علامات المصدر وحدد ما يتحول إلى غياب تحليلي، دون مساواة الفراغ والشرطة والصفر تلقائياً.

قد يصنع المحلل الغياب أيضاً: ينتج ربط فاشل أو تحويل غير صالح قيمة مفقودة رغم وجود نص أصلي. سجل المرحلة التي نشأت فيها الحالة. قد يكشف جدول غياب حسب الحقل والفئة مشكلة تسجيل منهجية تخفيها نسبة اكتمال كلية واحدة، ولذلك لا يكفي عد الخلايا الفارغة دون سياق.

اعرض عدد القياسات التي استخدمها الملخص

لدى البرنامج الأول أربعة سجلات مؤهلة وقياسان معروفان فقط، أحدهما صفر. يعرض عدد المعروف بجانب متوسطه. يحول استبدال None بالصفر المتوسط من خمسة إلى اثنين ونصف، ويفترض قيماً لم تُقَس. وحذف الصفر تعديل آخر غير مبرر، لأنه يزيل مشاهدة صحيحة من الحساب.

يصف ملخص المعروف فقط من لديهم قياس، ولا يقدر المجتمع المؤهل كله تلقائياً. اذكر عدد المفقود وفكر هل تختلف فئته. إن لم يبق أي قياس، فاتبع سياسة معلنة لغياب النتيجة، بدلاً من القسمة على صفر أو اختراع متوسط صفري يبدو كأنه معلومة مقاسة.

python أبق الصفر وأظهر مقام القياسات المعروفة
from statistics import mean

values = [10, None, 0, None]
observed = [value for value in values if value is not None]
if not observed:
    raise ValueError("no observed measurements")
print(f"observed={len(observed)}/{len(values)} mean={mean(observed):.2f}")
الناتج المتوقع
observed=2/4 mean=5.00

العشرة والصفر قياسان ومتوسطهما خمسة، بينما يغيب القياس عن نصف السجلات. لا يحمل غياب القياس معنى الصفر المرصود.

آلية الغياب افتراض عن العملية المنتجة للبيانات

يعني الغياب العشوائي تماماً استقلاله عن البيانات ذات الصلة. ويسمح الغياب العشوائي باعتماده على المعلومات المشاهدة بعد الاشتراط عليها. أما غير العشوائي فقد يتعلق بالقيم غير المشاهدة حتى بعد مراعاة المعروف. هذه افتراضات عن توليد البيانات وليست تسميات نستنتجها بثقة من جدول أعداد الغياب وحده.

قد يصلح حذف السجلات غير المكتملة أو التعويض تحت أغراض وافتراضات معينة، ولا يصلح أيهما دائماً. قد يخفض التعويض بالمتوسط التباين الظاهر ويشوه العلاقات. احفظ عدم اليقين بشأن المفقود، وقارن معالجات معقولة، واشرح أي جمع إضافي أو معرفة بالمجال يمكن أن يميز الافتراضات بدلاً من إخفائها.

حدد ما الذي يجعل سجلين الحدث نفسه

قد يكون التكرار إعادة استخراج أو أحداثاً متكررة صحيحة أو تحديثات متعارضة للمفتاح نفسه. يعد البرنامج الثاني تكرر معرف الحدث ومحتواه مطابقين نسخة استخراج زائدة. يرفض المحتوى المتعارض بدلاً من اختيار الأول صامتاً، بينما يبقي حدثين بمعرفين مختلفين للعميل نفسه حدثين منفصلين في العد.

تجيب إزالة التطابق بكل الحقول وإزالة التكرار بمعرف العميل عن سؤالين مختلفين. تحتاج قاعدة «الأحدث» حقلاً زمنياً موثوقاً وسياسة تعادل، لا ترتيب صفوف CSV العرضي. طابق عدد المحذوف والمجاميع واحفظ دليلاً كافياً يبين لماذا استبعد السجل، حتى لا تتحول سهولة التنفيذ إلى تعريف للحدث.

python أزل نسخ الحدث المتطابقة فقط
rows = [("e1", "c1", 10), ("e1", "c1", 10), ("e2", "c1", 20)]
by_event = {}
for event, customer, amount in rows:
    payload = (customer, amount)
    if event in by_event and by_event[event] != payload:
        raise ValueError("conflicting event payload")
    by_event[event] = payload
print(f"input={len(rows)} events={len(by_event)} total={sum(value[1] for value in by_event.values())}")
الناتج المتوقع
input=3 events=2 total=30

تُحسب النسخة المتكررة من e1 مرة واحدة ويبقى e2 المختلف، فينتج حدثان ومجموع 30. لم يُدمج الحدثان بسبب العميل المشترك.

راجع دلالة الغياب وفق الأداة ونوع العمود

تختلف قواعد Python None وNaN العائمة وSQL NULL وعلامات pandas في المقارنة والتجميع. افحص الغياب بعملية الأداة المقصودة، لا بمساواة NaN بنفسها. تتعرف isna في pandas على حالات مدعومة، وللأنواع الاختيارية قواعدها؛ وليس تحويل pd.NA إلى قرار منطقي عادي إجراءً آمناً.

وثق هل تستبعد الدالة المفقود وما المقام الذي تعرضه. تعد SQL COUNT(*) الصفوف وتعد COUNT(column) غير المفقود، وسيُفصل ذلك لاحقاً. اختبر مجموعة كلها مفقودة ومفتاحاً غائباً صراحة، واحفظ الفرق بين مجموع مرصود يساوي صفراً ومجموعة لا تملك قياساً صالحاً واحداً.

الأخطاء الشائعة وإصلاحها

تغير المتوسط بعدما صارت القيم المفقودة أصفاراً.

لماذا يحدث؟
حُولت حالة غياب المعلومة إلى قياسات فعلية بلا دليل.
كيف تصلحه؟
أظهر الغياب وقدم مبرراً لأي تعويض تريد تطبيقه.
كيف تتجنب تكراره؟
اعرض عدد المعروف بجانب عدد المؤهل.

حذفت إزالة التكرار طلبات متكررة صحيحة.

لماذا يحدث؟
اختلطت هوية العميل بهوية الحدث الذي يراد عده.
كيف تصلحه؟
استخدم وحدة الحدث ومفتاحه المعلنين بدلاً من دمج كل نشاط العميل.
كيف تتجنب تكراره؟
اختبر حدثين صحيحين يخصان الكيان نفسه.

اختيرت نسخة من سجل متعارض صامتاً.

لماذا يحدث؟
استُخدم ترتيب الإدخال مكان قاعدة تحديث موثوقة.
كيف تصلحه؟
ارفض التعارض أو طبق سياسة زمن وتَعادل معلنة.
كيف تتجنب تكراره؟
افحص اختلاف المحتوى بين السجلات ذات المفتاح المتكرر.

اختبر فهمك

1. هل تعرض [None,None] و[0,0] كمجموع صفر دون أي تمييز؟

اعرض الحل المشروح

لا؛ للمجموعة الثانية قياسان صفريان، بينما لا قياسات للأولى. قد تعيد دالة معينة الرقم نفسه آلياً، لكن المعنيين مختلفان. اعرض عدد المعروف وحالة لا بيانات أو نتيجة مفقودة للأولى وفق العقد. لا تستنتج انعدام النشاط من غياب تسجيله.

2. تكرر مفتاح حدث بمبلغين 10 و12. اذكر سياستين مبررتين وما يلزمهما من دليل.

اعرض الحل المشروح

ارفض المفتاح كتعارض ينتظر مراجعة المصدر، أو اختر نسخة مخولة أو أحدث بطابع تحديث موثوق وقاعدة تعادل. لا تستنتج السلطة من ترتيب الملف. احفظ الخام وعد المتأثر وافحص تغير المقياس؛ وليس الاحتفاظ بالأول لراحته حجة عن أصل البيانات.

أهم ما تعلمته

  • الغياب حالة معلومات لا قياس صفر تلقائياً.
  • تحتاج إزالة التكرار وحدة سجل ومفتاحاً وسياسة تعارض واضحة.
  • يجب أن يكشف الملخص مقام البيانات الصالحة التي استخدمها.

المراجع الرسمية