انتقل إلى المحتوى الرئيسي

الدرس 2 — NumPy وpandas

هاتان المكتبتان تحت كلّ شيء آخر. scikit-learn يعيد مصفوفات NumPy. وPyTorch يستنسخ واجهته. وكلّ درس عن البيانات يفترض pandas. فهمهما ليس تفصيلاً بل الأساس.

NumPy: المصفوفة والسبب في سرعتها

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

هذا التفصيل — كتلة متّصلة ونوع واحد — هو مصدر الأداء. فقائمة بايثون العادية تحتوي مؤشّرات إلى كائنات مبعثرة في الذاكرة، كلٌّ منها بترويسة ونوع. والمصفوفة تحتوي أرقاماً متلاصقة، فيستطيع المعالج قراءتها ومعالجتها بدفعات.

العمل المتّجهي: الفكرة التي يجب استيعابها

الفرق بين مبتدئ ومحترف في بايثون العلمية يظهر في سطر واحد.

المبتدئ يكتب حلقة تمرّ على مليون عنصر وتضرب كلّ واحد في اثنين. والمحترف يكتب arr * 2. النتيجة نفسها، والزمن مختلف بعامل قد يبلغ مئة أو أكثر، لأنّ النسخة الثانية تنفّذ الضرب كلّه داخل كود C مترجَم، دفعةً واحدة.

القاعدة التي توفّر ساعات

إذا كتبت حلقة for تمرّ على صفوف بيانات في NumPy أو pandas، فتوقّف واسأل: هل توجد عملية متّجهية تقوم بذلك؟ الجواب «نعم» في تسع حالات من عشر. والحلقات على البيانات الضخمة هي السبب الأول لبطء لا يفهمه صاحبه.

الأشكال (shapes): أكثر ما يعطّل المبتدئين

كلّ مصفوفة لها شكل: صورة رمادية 28×28 شكلها (28, 28)، ودفعة من 64 صورة ملوّنة 224×224 شكلها (64, 3, 224, 224).

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

pandas: الجدول القابل للبرمجة

NumPy ممتاز للأرقام المتجانسة، وسيّئ للواقع: عمود بالاسم، وعمود بالتاريخ، وعمود بالمبلغ، وقيم ناقصة في الوسط.

هنا يأتي pandas، وقطعته المركزية هي DataFrame: جدول بأعمدة مسمّاة، كلّ عمود بنوعه، مع فهرس للصفوف. تصوّره ورقة عمل تُقاد بالكود بدل الفأرة.

العمليةما تفعلهلماذا تهمّ
القراءةتحميل CSV أو Excel أو JSON أو SQLنقطة الدخول لكلّ مشروع
الفحصالأنواع، القيم الناقصة، الإحصاءات الوصفيةيكشف مشكلات البيانات قبل النموذج
التصفية والاختيارانتقاء صفوف وأعمدة بشروطبناء مجموعة العمل
الدمج (join)ربط جدولين على مفتاح مشتركمعظم البيانات موزّعة على جداول
التجميع (groupby)حساب إحصاءات لكلّ فئةأساس فهم البيانات وبناء السمات
المعالجة الزمنيةإعادة التجميع، النوافذ المتحرّكةلا غنى عنها في السلاسل الزمنية

القيم الناقصة: القرار الذي لا يمكن تفويضه

البيانات الحقيقية ناقصة دائماً. وpandas يمثّل الناقص بقيمة خاصّة، ويعرض عليك خيارات: حذف الصفوف، حذف العمود، أو التعويض بقيمة (المتوسّط، الوسيط، الأكثر تكراراً، أو قيمة محسوبة).

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

حيث يذهب الوقت فعلاً

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

كيف تعمل المكتبتان معاً

سير العمل النمطي بسيط ومتكرّر:

تنظّف وتستكشف بـpandas، ثمّ تحوّل الجدول النهائي إلى مصفوفات NumPy، وتسلّمها إلى مكتبة النماذج. هذا الانتقال — من جدول بأعمدة مسمّاة إلى مصفوفة أرقام صافية — هو الحدّ الفاصل بين مرحلة البيانات ومرحلة النموذج.

ثلاثة أخطاء شائعة

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

الثقة بأنواع الأعمدة. عمود مبالغ قُرِئ كنصّ لأنّ صفّاً واحداً يحتوي فاصلة، وعمود تاريخ قُرِئ كنصّ لأنّ التنسيق مختلط. فحص الأنواع بعد كلّ قراءة ليس وسوسة، بل عادة تمنع أخطاء صامتة.

النسخة مقابل العرض. بعض عمليات pandas تعيد عرضاً على البيانات لا نسخة منها، فتعديلها قد يعدّل الأصل أو لا يعدّله، بحسب الحالة. عند الشكّ، أنشئ نسخة صريحة.


في ثلاث جمل

NumPy يوفّر المصفوفة العددية المتّصلة في الذاكرة، وهذا ما يجعل العمليات المتّجهية أسرع بمراتب من الحلقات، ويجعل قراءة الأشكال أهمّ مهارة تصحيح. وpandas يبني فوقه جدولاً بأعمدة مسمّاة وأنواع مختلطة وقيم ناقصة، أي أداة الواقع. وفي مشروع حقيقي يذهب معظم الوقت إلى تنظيف البيانات وفهمها، لا إلى تدريب النموذج.


التاليالدرس 3: الدفاتر وسير العمل ←