تحليل البيانات / دليل حلول تحريري
تشخيص أنواع CSV وتشوه القيم المفقودة
احفظ الرموز الخام وحدد المخطط وافصل الصفر المرصود من المفقود والخاطئ قبل التلخيص.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
قد تفقد المعرفات الأصفار البادئة، أو يلصق المجموع نصوصا، أو يرمي التحويل ValueError، أو يتغير المتوسط بعد ملء الفراغ بصفر. قد يجمعها خلل جلب واحد لكن علاجها يحتاج قرارات مجال مختلفة. لا يثبت مظهر العمود العددي صلاحية كل رمز ولا مناسبة الصفر بديلا للغياب.
افهم الأسباب المحتملة
- تكشف قارئات CSV نصا بلهجة، وتضيف الأنواع المستنتجة وافتراضيات الغياب افتراضات. قد يختلط النص الفارغ والكلمة الخاطئة والمحجوب والصفر المرصود. وتزيد الفواصل المحلية والاقتباس والعناوين المكررة والوحدات المختلطة فساد المعنى حتى دون خطأ محلل.
1. حفظ إعادة إنتاج خام صغيرة
استخدم مقتطفا اصطناعيا في الذاكرة بلهجة الاقتباس والعناوين ونمط المشكلة. افحص التمثيل النصي وعدد الحقول لا عرض الجدول المنسق. سجل الترميز والأسطر للملف الحقيقي، واحفظ المعرف نصا قبل التحويل؛ لا تستعاد الأصفار المفقودة عموما من العدد المتبقي وحده.
2. تحديد المخطط وسياسة الغياب
حدد العناوين المطلوبة الفريدة ودور المعرف ووحدة المبلغ والإشارة وعلامات الغياب. قرر رفض الصف وما يبقى مفقودا، ولا تصلح التحويل بملء الصفر إلا إذا كان قياسا حقيقيا. تحتاج خيارات dtype والغياب في read_csv مراجعة صريحة؛ ولا تنفذ pandas في هذه البيئة.
3. التحليل ومطابقة الحالات المختلفة
يعد البرنامج الفراغ مفقودا والمبلغ المعيب أو غير المحدود خاطئا والصفر مرصودا. يحفظ المعرفات نصا ويحسب المتوسط من القياسات المقبولة فقط ويبني Decimal من النص. يكشف الخرج حالات الصفوف الأربع بدلا من تغيير المجتمع خلف المتوسط بصمت.
import csv
import io
from decimal import Decimal, InvalidOperation
text = "id,amount\n001,12.50\n002,\n003,bad\n004,0\n"
rows = list(csv.DictReader(io.StringIO(text, newline="")))
observed = []
missing = invalid = 0
for row in rows:
token = row["amount"].strip()
if token == "":
missing += 1
continue
try:
value = Decimal(token)
except InvalidOperation:
invalid += 1
continue
if not value.is_finite() or value < 0:
invalid += 1
continue
observed.append(value)
assert len(observed) + missing + invalid == len(rows)
print(f"rows={len(rows)} observed={len(observed)} missing={missing} invalid={invalid}")
print(f"total={sum(observed):.2f} mean={sum(observed) / len(observed):.2f}")
rows=4 observed=2 missing=1 invalid=1
total=12.50 mean=6.25
يطابق قياسان ومفقود وخاطئ أربعة صفوف ويبقى الصفر قياسا.
4. فحص الثقافة والوحدة والتوحيد
قد يعني1,200 ألفا ومئتين أو عشريا وفق الاصطلاح. يغير حذف الترقيم عميانا القيمة. افحص تنسيق المصدر الموثق ووحد الوحدات في خطوة مسماة مستقلة. راجع أعداد التحويل وعينة مضبوطة ولا تستبدل الدليل الخام الوحيد أثناء التجريب.
5. إعادة فحص مقام المقياس
يصف متوسط المرصود القيم الموجودة لا كل المؤهلين تلقائيا. قارن الغياب والرفض حسب الفئات وافحص حالة الكل مفقودا. عند تغير النتيجة وضح هل أصلحت بيانات أم غيرت المجتمع أم افتراض غير المرصود؛ فهي تحديثات مختلفة لا تكفيها تسمية «نظفنا».
تحقق من نجاح الإصلاح
شغل المثال واشترط الأعداد والمجموع12.50 ومتوسط6.25 بالضبط. اختبر الكل مفقودا والكل خاطئا والصفر والاقتباس والعناوين المكررة وغير المحدود والوحدات وفق المخطط. اشترط مطابقة الحالات وبقاء المعرف، ولا تعد الخروج الناجح برهان ثبات المقياس.
امنع تكرار المشكلة
- احفظ قاموسا ذا نسخة وسياسات صريحة ولقطات خام وأسباب الرفض. اختبر الحدود قبل التقرير وسجل النسخ عند تغير افتراضات الاستنتاج. فضل حالة عدم بيانات قابلة للتدقيق على صفر مختلق.