لماذا ننظف البيانات باستخدام pandas بدلًا من تنظيفها يدويًا؟
تنظيف البيانات في pandas يستحق الجهد لأن كل خطوة موثّقة ويمكن إعادة تنفيذها على ملف التصدير للشهر التالي في ثوانٍ، بينما تستغرق التصحيحات اليدوية في جدول البيانات وقتًا طويلًا، ويسهل نسيانها، ويستحيل تدقيقها.
تخيّل مجموعة افتراضية من مراكز مستلزمات البستنة لها أربعة مواقع، اسمها فيرنهيل غاردنز. يتلقى المحلل المالي، توماش، ملف CSV شهريًا بالطلبات عبر الإنترنت. في العينة أدناه، يظهر الطلب نفسه مرتين، ويُكتب اسم الموقع بعدة طرق، وتتضمن المبالغ رمز عملة وفاصلة، وتختلط في التواريخ صيغ تبدأ باليوم وأخرى تبدأ بالسنة، وتظهر القيم المفقودة على هيئة خانات فارغة و'غير متاح' و'-'. يستغرق تصحيح الملف يدويًا يومًا، ولا تتطابق المجاميع تمامًا مع تقرير مزوّد خدمات الدفع.
| order_id | site | order_date | amount | postcode |
|---|---|---|---|---|
| 10231 | ليدز | 03/11/2026 | £1,240.00 | LS6 |
| 10231 | ليدز | 03/11/2026 | £1,240.00 | LS6 |
| 10232 | ليدز | 2026-11-04 | 86.50 | لا ينطبق |
| 10233 | يورك | 05/11/2026 | - | YO1 |
| 10234 | هاروغيت | 142 |
كيف تنظّف البيانات باستخدام pandas خطوة بخطوة؟
نظّف البيانات في pandas بتحميلها مع تحديد علامات القيم المفقودة، ثم فحصها، وتوحيد النصوص، وتحويل الأرقام والتواريخ، وإزالة التكرارات، وتحديد كيفية التعامل مع الفجوات المتبقية، ثم التحقق من النتيجة بمقارنتها بإجمالي موثوق. تنفيذ الخطوات بهذا الترتيب يمنع أي إصلاح من إبطال أثر إصلاح آخر.
1. حمّل البيانات مع تحديد رموز القيم المفقودة
تقرأ الدالة read_csv في pandas الملف وتحمّله في DataFrame. وتتيح لك الوسيطة na_values تحديد سلاسل نصية إضافية، مثل 'غير متاح' و'-'، للتعامل معها كقيم مفقودة، إلى جانب القيم الافتراضية التي تتعرف عليها pandas بالفعل، مثل الحقول الفارغة. وتحديدها هنا يغنيك عن البحث عنها لاحقًا.
2. افحص قبل تغيير أي شيء
اطّلع على الصفوف الأولى باستخدام head، وأنواع الأعمدة وأعداد القيم غير المفقودة باستخدام info، وعدد القيم المفقودة في كل عمود بدمج isna مع sum. دوّن ما تجده: في فيرنهيل، يُخزَّن amount كنص، ويحتوي order_date على تنسيقات مختلفة.
3. وحّد تنسيق النص
استخدم أساليب معالجة السلاسل النصية على عمود: يزيل str.strip المسافات في بداية النص ونهايته، ويوحّد str.lower أو str.title حالة الأحرف، بحيث تشير ' Leeds' و'leeds ' و'LEEDS' إلى موقع واحد. ثم اعرض القيم الفريدة باستخدام unique لاكتشاف أي اختلافات إملائية متبقية.
4. حوّل الأرقام
أزِل رمز العملة وفاصلة الآلاف باستخدام str.replace، ثم حوّل القيم باستخدام to_numeric. يؤدي ضبط الوسيطة errors على coerce إلى تحويل أي قيمة يتعذر تفسيرها إلى قيمة مفقودة بدلًا من إيقاف العملية، لتتمكن من عدّ تلك الصفوف ومراجعتها بدلًا من فقدانها دون أن تلاحظ.
5. حوّل التواريخ
تحوّل to_datetime النص إلى تواريخ بتنسيق صحيح. عند وجود تنسيقات مختلطة، حدّد التنسيق صراحةً حيثما أمكن، أو اضبط dayfirst للتواريخ التي تتبع النمط البريطاني، واضبط errors على coerce لكي تتحول التواريخ التي يتعذر تحليلها إلى NaT، وهي العلامة التي تستخدمها pandas للتاريخ المفقود. لاحظ أن dayfirst تفضيل وليس قاعدة صارمة، لذا تحقّق من النتائج.
6. أزل التكرارات
تزيل drop_duplicates الصفوف المكررة. افتراضيًا، لا يُعدّ الصف مكررًا إلا إذا تطابقت القيم في جميع الأعمدة؛ ويتيح لك الوسيط subset تحديد التكرارات بناءً على أعمدة تختارها، مثل order_id، بينما يحدد keep ما إذا كانت النسخة الأولى أو الأخيرة هي التي ستبقى.
7. قرّر كيفية التعامل مع الفجوات المتبقية
تزيل dropna الصفوف التي تحتوي على قيم مفقودة، لكنها تحذف الصف افتراضيًا إذا كانت هناك قيمة مفقودة في أي عمود. استخدم الوسيط subset لحذف الصفوف التي تفتقد فقط إلى القيم التي تحتاجها فعلًا، مثل amount، أو استخدم fillna لملء القيمة المفقودة بقيمة محددة. ثم استخدم astype لتعيين الأنواع النهائية للأعمدة، مثل النوع الفئوي للعمود site.
كيف تبدو جولة تنظيف البيانات في صورتها الضعيفة وفي صورتها المحسّنة؟
تُحمّل المعالجة الضعيفة الملف باستخدام read_csv، ثم تستدعي dropna بلا معاملات، وبعدها drop_duplicates بلا معاملات. ولأن الرمز البريدي يكون فارغًا في كثير من الأحيان، تحذف dropna نسبة كبيرة من الطلبات الصحيحة. ولأن ' Leeds' و'leeds ' تظلان قيمتين مختلفتين، تبقى بعض التكرارات. فتظهر الإيرادات أقل بكثير من قيمتها الفعلية، ولا يعرف أحد الصفوف التي حُذفت.
تتعامل المعالجة المحسّنة مع 'N/A' و'-' بوصفهما قيمًا مفقودة عند التحميل، وتزيل المسافات الزائدة من site وتحوّل بدايات كلماته إلى أحرف كبيرة، وتحوّل amount باستخدام to_numeric بعد إزالة '£' والفواصل، وتحوّل order_date باستخدام dayfirst وcoerce، وتزيل التكرارات بناءً على order_id مع الإبقاء على أول ظهور، وتحذف فقط الصفوف التي تفتقر إلى amount. ثم تطبع عدد الصفوف التي أزالتها كل خطوة وتقارن إجمالي الإيرادات بتقرير مزوّد خدمات الدفع. يستطيع توماش الآن تفسير كل فرق.
كيف تتحقق من نجاح تنظيف البيانات؟
تحقق من تنظيف البيانات بعدّ الصفوف قبل كل خطوة وبعدها، ومقارنة مجموع رئيسي بمصدر مستقل، ومراجعة الصفوف التي حُوّلت قيمها قسرًا إلى قيم مفقودة. شغّل info مرة أخرى للتأكد من أنواع الأعمدة، واعرض القيم الفريدة للفئات مثل الموقع. إذا حذفت خطوة عددًا من الصفوف أكبر من المتوقع، فراجعها قبل المتابعة.
كيف يمكن لمساعد ذكاء اصطناعي أن يساعد في تنظيف البيانات باستخدام pandas؟
يمكن لمساعد الذكاء الاصطناعي صياغة خطوات تنظيف البيانات إذا وصفت كل عمود ومشكلاته والقاعدة التي تريد تطبيقها، ويمكنه شرح الدوال غير المألوفة. صِف البنية باستخدام قيم أمثلة مختلقة بدلًا من لصق بيانات عملاء حقيقية مثل الأسماء أو العناوين أو الرموز البريدية الكاملة. اطلب منه ذكر أعداد الصفوف بعد كل خطوة، وتحقّق من كل وسيطة يستخدمها في الدوال بالرجوع إلى وثائق pandas الرسمية، لأن المساعدين يقترحون أحيانًا خيارات غير موجودة أو تغيّرت بين الإصدارات.
ما الأخطاء الشائعة عند تنظيف البيانات باستخدام pandas؟
الخطأ الأكثر شيوعاً هو استدعاء dropna دون أي معاملات، وفقدان صفوف سليمة لا ينقصها سوى قيمة في عمود اختياري. ومن الأخطاء الأخرى: إزالة التكرارات قبل توحيد النصوص، وتحويل التواريخ دون التحقق من ترتيب اليوم والشهر، والكتابة فوق الملف الأصلي، وعدم مقارنة الإجمالي بعد التنظيف برقم موثوق.
أين يقع هذا الدرس ضمن Tosheo.ai؟
هذا درس برمجي ضمن فئة علم البيانات والتحليلات في دورة علم البيانات. يبدأ كل موضوع في Tosheo.ai بالمفاهيم والتطبيق دون برمجة، وتوفر الدروس البرمجية مسارًا اختياريًا أكثر تعمقًا: بعد التسجيل، تتيح لك النسخة التطبيقية الكاملة من هذا الدرس كتابة كل خطوة من خطوات تنظيف البيانات وتشغيلها بلغة بايثون باستخدام مكتبة بانداس، مع تقييمها وفق دليل معايير واضح. إذا كنت جديدًا على بايثون، فابدأ بدورتها. يهدف المسار إلى بناء مهارة عملية، وليس معسكرًا تدريبيًا مكثفًا ولا ضمانًا للحصول على وظيفة.
المصادر والنطاق
توثيق pandas: read_csv (تم التحقق في 19 أكتوبر 2026) ↗
دليل مستخدم pandas: التعامل مع البيانات المفقودة (تم التحقق في 19 أكتوبر 2026) ↗
توثيق pandas: DataFrame.dropna (تم التحقق في 19 أكتوبر 2026) ↗
توثيق pandas: DataFrame.drop_duplicates (تم التحقق في 19 أكتوبر 2026) ↗
توثيق pandas: DataFrame.astype (تم التحقق في 19 أكتوبر 2026) ↗
توثيق pandas: to_numeric (تم التحقق في 19 أكتوبر 2026) ↗
توثيق pandas: to_datetime (تم التحقق في 19 أكتوبر 2026) ↗
توثيق pandas: Series.str.strip (تم التحقق في 19 أكتوبر 2026) ↗