NumPy هي مكتبة Python توفر بنية بيانات بسيطة لكنها قوية
هذا هو الأساس الذي تُبنى عليه كل قوة مجموعة أدوات علوم البيانات في Python تقريبًا ، وتعلم NumPy هو الخطوة الأولى في رحلة أي عالم بيانات Python. سيوفر لك هذا البرنامج التعليمي المعرفة التي تحتاجها لاستخدام NumPy والمكتبات عالية المستوى التي تعتمد عليها.
ستتعلم في هذا البرنامج التعليمي:
المفاهيم الأساسية لمكتبة Numpy
كيفية إنشاء مصفوفات NumPy باستخدام طرق مختلفة
كيفية معالجة مصفوفات NumPy لإجراء عمليات حسابية مفيدة
كيفية تطبيق هذه المهارات الجديدة على مشاكل العالم الحقيقي
لتحقيق أقصى استفادة من هذا البرنامج التعليمي NumPy ، يجب أن تكون على دراية بكتابة كود Python. يعد العمل من خلال مقدمة إلى مسار تعلم Python طريقة رائعة للتأكد من تغطية المهارات الأساسية. إذا كنت معتادًا على رياضيات المصفوفات ، فمن المؤكد أن ذلك سيكون مفيدًا أيضًا. ومع ذلك ، لا تحتاج إلى معرفة أي شيء عن علم البيانات. سوف تتعلم ذلك هنا.
فوائد مكتبة Numpy
نظرًا لأنك تعرف Python بالفعل ، فقد تسأل نفسك عما إذا كان عليك حقًا تعلم نموذج جديد تمامًا للقيام بعلوم البيانات. حلقات for في Python رائعة! يمكن قراءة ملفات CSV وكتابتها باستخدام الكود التقليدي. ومع ذلك ، هناك بعض الحجج المقنعة لتعلم نموذج جديد.
فيما يلي أهم أربع مزايا يمكن أن يجلبها NumPy إلى التعليمات البرمجية الخاصة بك:
المزيد من السرعة: يستخدم NumPy خوارزميات مكتوبة بلغة C تكتمل في نانوثانية بدلاً من ثوانٍ.
حلقات أقل: يساعدك NumPy على تقليل الحلقات ومنع التشابك في مؤشرات التكرار.
برنامج أوضح: بدون حلقات ، ستبدو شفرتك أشبه بالمعادلات التي تحاول حسابها.
جودة أفضل: هناك الآلاف من المساهمين الذين يعملون للحفاظ على NumPy سريعًا ووديًا وخاليًا من الأخطاء.
بسبب هذه الفوائد ، NumPy هو المعيار الفعلي للصفائف متعددة الأبعاد في علم بيانات Python ، وقد تم بناء العديد من المكتبات الأكثر شيوعًا فوقه. يعد تعلم NumPy طريقة رائعة لوضع أساس متين بينما تقوم بتوسيع معرفتك في مجالات أكثر تحديدًا في علم البيانات.
تثبيت NumPy
حان الوقت لإعداد كل شيء حتى تتمكن من البدء في تعلم كيفية العمل مع NumPy. هناك عدة طرق مختلفة للقيام بذلك ، ولا يمكنك أن تخطئ باتباع الإرشادات الموجودة على موقع NumPy على الويب. ولكن هناك بعض التفاصيل الإضافية التي يجب أن تكون على دراية بها موضحة أدناه.
ستقوم أيضًا بتثبيت Matplotlib. ستستخدمه في أحد الأمثلة اللاحقة لاستكشاف كيفية استخدام المكتبات الأخرى لـ NumPy.
تثبيت NumPy مع اناكوندا
توزيع Anaconda هو مجموعة من أدوات علوم بيانات Python الشائعة المجمعة حول مدير الحزم الذي يساعد في إدارة البيئات الافتراضية وتبعيات المشروع. إنه مبني على كوندا ، وهو مدير الحزم الفعلي. هذه هي الطريقة التي أوصى بها مشروع NumPy ، خاصةً إذا كنت تخطو إلى علم البيانات في Python دون إعداد بيئة تطوير معقدة بالفعل.
بمجرد تثبيت conda ، يمكنك تشغيل أمر التثبيت للمكتبات التي ستحتاج إليها:
conda install numpy matplotlib
تثبيت NumPy عن طريق pip
على الرغم من أن مشروع NumPy يوصي باستخدام conda إذا كنت تبدأ جديدًا ، فلا حرج في إدارة بيئتك بنفسك واستخدام النقطة القديمة الجيدة أو Pipenv أو Poetry أو أي بديل آخر لـ pip هو المفضل لديك.
pip install numpy matplotlib
المفاهيم الأساسية في NumPy
يقدم هذا المثال الأول بعض المفاهيم الأساسية في NumPy والتي ستستخدمها خلال بقية البرنامج التعليمي:
تكوين المصفوفات باستخدام numpy.array ()
معالجة المصفوفات الكاملة مثل القيم الفردية لجعل الحسابات الموجهة أكثر قابلية للقراءة
استخدام وظائف NumPy المضمنة لتعديل البيانات وتجميعها
هذه المفاهيم هي جوهر استخدام NumPy بشكل فعال.
الحصول على الشكل: الأشكال والمحاور ( Shape & Axes )
الشكل هو المفهوم الأساسي عند استخدام المصفوفات متعددة الأبعاد. في مرحلة معينة ، يكون من الأسهل نسيان تصور شكل بياناتك واتباع بعض القواعد العقلية بدلاً من ذلك والثقة في NumPy لإخبارك بالشكل الصحيح.
تحتوي جميع المصفوفات على خاصية تسمى .shape تُرجع مجموعة بالحجم في كل بُعد. ليس من المهم تحديد أي بُعد ، ولكن من المهم أن تكون المصفوفات التي تمررها إلى الوظائف (functions) بالشكل الذي تتوقعه الوظائف. من الطرق الشائعة للتأكد من أن بياناتك بالشكل المناسب طباعة البيانات وشكلها حتى تتأكد من أن كل شيء يعمل كما تتوقع.
هنا ، يمكنك استخدام طريقة numpy.ndarray تسمى .reshape () لتكوين كتلة 2 × 2 × 3 من البيانات. عندما تتحقق من شكل المصفوفة في الإدخال 3 ، فهذا هو بالضبط ما أخبرتها به. ومع ذلك ، يمكنك أن ترى كيف يصبح من الصعب تصور المصفوفات المطبوعة بسرعة في ثلاثة أبعاد أو أكثر. بعد تبديل المحاور باستخدام .swapaxes () ، يصبح من الواضح قليلاً أي بُعد هو. سترى المزيد حول المحاور في القسم التالي.
سيظهر الشكل(Shape ) مرة أخرى في القسم الخاص بالبث(broadcasting). في الوقت الحالي ، ضع في اعتبارك أن هذه الفحوصات الصغيرة لا تكلف شيئًا. يمكنك دائمًا حذف الخلايا أو التخلص من الكود بمجرد أن تسير الأمور بسلاسة.
فهم المحاور (Axes )
يوضح المثال أعلاه مدى أهمية معرفة ليس فقط شكل البيانات الخاصة بك ولكن أيضًا البيانات الموجودة في أي محور. في مصفوفات NumPy ، تكون المحاور مفهرسة صفريًا وتحدد أي بُعد هو.
على سبيل المثال ، يحتوي الصفيف(Array ) ثنائي الأبعاد على محور عمودي (المحور 0) ومحور أفقي (المحور 1). تعمل الكثير من الوظائف والأوامر في NumPy على تغيير سلوكها بناءً على المحور الذي تطلب منهم معالجته.
بشكل افتراضي ، تُرجع .max () أكبر قيمة في المصفوفة بأكملها ، بغض النظر عن عدد الأبعاد الموجودة. ومع ذلك ، بمجرد تحديد محور ، فإنه يقوم بإجراء هذا الحساب لكل مجموعة من القيم على طول هذا المحور المحدد. على سبيل المثال ، باستخدام وسيطة المحور = 0 ، يحدد .max () الحد الأقصى للقيمة في كل مجموعة من المجموعات الرأسية الأربع للقيم في الجدول ويرجع مصفوفة تمت تسويتها أو تجميعها في مصفوفة أحادية البعد.
في الواقع ، تتصرف العديد من وظائف NumPy بهذه الطريقة: إذا لم يتم تحديد أي محور ، فإنها تؤدي عملية على مجموعة البيانات بأكملها. خلاف ذلك ، فإنهم يؤدون العملية بطريقة المحور.
البث (Broadcasting)
لقد شاهدت حتى الآن مثالين أصغر للبث ، لكن الموضوع سيبدأ في أن يصبح أكثر منطقية كلما شاهدت المزيد من الأمثلة. في الأساس ، يعمل حول قاعدة واحدة: يمكن بث المصفوفات مقابل بعضها البعض إذا كانت أبعادها متطابقة أو إذا كان حجم إحدى المصفوفات 1.
إذا كانت المصفوفات متطابقة في الحجم على طول المحور ، فسيتم تشغيل العناصر على أساس عنصر بعنصر ، على غرار الطريقة التي تعمل بها وظيفة zip () المضمنة في Python. إذا كان حجم إحدى المصفوفات 1 في المحور ، فسيتم بث هذه القيمة على طول هذا المحور ، أو تكرارها عدة مرات حسب الضرورة لمطابقة عدد العناصر على طول هذا المحور في المصفوفة الأخرى.
إليك مثال سريع. المصفوفة A لها الشكل (4 ، 1 ، 8) ، والمصفوفة B لها الشكل (1 ، 6 ، 8). بناءً على القواعد المذكورة أعلاه ، يمكنك العمل على هذه المصفوفات معًا:
في المحور 0 ، يحتوي A على 4 ويحتوي B على 1 ، لذلك يمكن بث B على طول هذا المحور.
في المحور 1 ، يحتوي A على 1 ويحتوي B على 6 ، لذلك يمكن بث A على طول هذا المحور.
في المحور 2 ، يكون للمصفوفين أحجام متطابقة ، بحيث يمكن تشغيلهما بنجاح.
جميع المحاور الثلاثة تتبع القاعدة بنجاح.
تستخدم الفهرسة العديد من نفس العبارات الاصطلاحية التي يستخدمها كود Python العادي. يمكنك استخدام المؤشرات الموجبة أو السالبة للفهرسة من الجزء الأمامي أو الخلفي من المصفوفة. يمكنك استخدام نقطتين (:) لتحديد "الباقي" أو "الكل" ، ويمكنك حتى استخدام نقطتين لتخطي العناصر كما هو الحال مع قوائم بايثون العادية.
إليك الفرق: تستخدم مصفوفات NumPy الفواصل بين المحاور ، بحيث يمكنك فهرسة عدة محاور في مجموعة واحدة من الأقواس المربعة.
مثال هو أسهل طريقة لاظهار هذا. حان الوقت لتأكيد ساحة دورر السحرية Dürer’s magic square!
يحتوي مربع الأرقام أدناه على بعض الخصائص المدهشة. إذا جمعت أيًا من الصفوف أو الأعمدة أو الأقطار ، فستحصل على نفس الرقم ، 34. هذا أيضًا ما ستحصل عليه إذا جمعت كل من الأرباع الأربعة ، والمربعات الأربعة المركزية ، والأركان الأربعة مربعات ، أو مربعات الزاوية الأربعة لأي من شبكات 3 × 3 المضمنة. سوف تثبت ذلك!
حقيقة ممتعة: في الصف السفلي ، يوجد الرقمان 15 و 14 في المنتصف ، ويمثلان العام الذي أنشأ فيه دورر هذا المربع. الرقمان 1 و 4 موجودان أيضًا في هذا الصف ، ويمثلان الحرفين الأول والرابع من الأبجدية ، A و D ، وهما الأحرف الأولى لمُنشئ المربع ، Albrecht Dürer!
داخل حلقة for ، تتحقق من أن جميع الصفوف وجميع الأعمدة يصل عددها إلى 34. بعد ذلك ، باستخدام الفهرسة الانتقائية ، تتحقق من أن كل رباعي يصل أيضًا إلى 34.
آخر شيء يجب ملاحظته هو أنك قادر على أخذ مجموع أي مصفوفة لجمع كل عناصرها بشكل عام باستخدام square.sum (). يمكن أن تأخذ هذه الطريقة أيضًا وسيطة محور لإجراء تجميع حسب المحور بدلاً من ذلك.
الاخفاء والتصفية Masking & Filtering
يعد الاختيار المستند إلى الفهرس أمرًا رائعًا ، ولكن ماذا لو كنت تريد تصفية بياناتك بناءً على معايير غير موحدة أو غير متسلسلة أكثر تعقيدًا؟ هذا هو المكان الذي يلعب فيه مفهوم ال Mask
Mask عبارة عن مصفوفة لها نفس شكل بياناتك تمامًا ، ولكن بدلاً من القيم الخاصة بك ، فإنها تحتوي على قيم منطقية: إما True أو False. يمكنك استخدام مصفوفة ال Mask هذه للفهرسة في مصفوفة بياناتك بطرق غير خطية ومعقدة. سيعيد جميع العناصر حيث يكون للمصفوفة المنطقية قيمة True.
إليك مثال يوضح العملية ، أولاً بالحركة البطيئة ثم كيف تتم عادةً ، كل ذلك في سطر واحد:
التحويل والفرز والتسلسل Transposing, Sorting, and Concatenating
قد تكون المعالجات الأخرى ، بالرغم من أنها ليست شائعة تمامًا مثل الفهرسة أو التصفية ، مفيدة جدًا اعتمادًا على الموقف الذي تعيش فيه. سترى بعض الأمثلة في هذا القسم.
إليك نقل مصفوفة: (Transposing )
يُظهر مقطع التعليمات البرمجية التالي الفرز ، ولكنك سترى أيضًا تقنية فرز أكثر فاعلية في القسم التالي حول البيانات المنظمة:
أحد العوائق المهمة التي يجب ملاحظتها هو أن كل هذه الوظائف تأخذ مجموعة من المصفوفات كوسيطة أولى بدلاً من عدد متغير من الوسائط كما قد تتوقع. يمكنك معرفة ذلك نظرًا لوجود زوج إضافي من الأقواس.
محطتك الأخيرة في هذه الجولة من الوظائف قبل الغوص في بعض الموضوعات والأمثلة الأكثر تقدمًا هي التجميع. لقد رأيت بالفعل عددًا غير قليل من طرق التجميع ، بما في ذلك .sum () و .max () و .mean () و .std (). يمكنك الرجوع إلى مكتبة وظائف NumPy الأكبر لمعرفة المزيد. تستخدم العديد من الدالات الرياضية والمالية والإحصائية التجميع لمساعدتك على تقليل عدد الأبعاد في بياناتك.
مكتبات أكثر قوة
في هذا القسم التالي ، ستنتقل إلى أدوات القوة التي تم إنشاؤها فوق اللبنات الأساسية التي رأيتها أعلاه. في ما يلي بعض المكتبات التي قد ترغب في إلقاء نظرة عليها كخطواتك التالية على طريق إتقان علم بيانات Python بالكامل.
الباندا Pandas
الباندا هي مكتبة تأخذ مفهوم المصفوفات المهيكلة . إذا كنت بحاجة إلى استيراد البيانات من أي مكان بشكل أساسي ، وتنظيفها ، وإعادة تشكيلها ، وتلميعها ، ثم تصديرها إلى أي تنسيق بشكل أساسي ، فإن الباندا هي المكتبة المناسبة لك. من المحتمل أنه في مرحلة ما ، ستستورد الباندا كـ pd في نفس الوقت الذي تستورد فيه numpy كـ np.
scikit-learn
إذا كانت أهدافك تتجه أكثر نحو التعلم الآلي ، فإن الخطوة التالية هي scikit-Learn. بالنظر إلى البيانات الكافية ، يمكنك إجراء التصنيف والانحدار والتجميع والمزيد في بضعة أسطر فقط.
إذا كنت مرتاحًا بالفعل للرياضيات ، فإن وثائق scikit-Learn تحتوي على قائمة رائعة من البرامج التعليمية التي تساعدك على العمل في بايثون. إذا لم يكن الأمر كذلك ، فإن مسار تعلم الرياضيات لعلوم البيانات يعد مكانًا جيدًا للبدء. بالإضافة إلى ذلك ، هناك أيضًا مسار تعليمي كامل للتعلم الآلي.
من المهم بالنسبة لك أن تفهم على الأقل أساسيات الرياضيات وراء الخوارزميات بدلاً من مجرد استيرادها والتعامل معها. يعد التحيز في نماذج التعلم الآلي قضية أخلاقية واجتماعية وسياسية ضخمة.
يُعد إلقاء البيانات على النماذج دون التفكير في كيفية معالجة التحيز طريقة رائعة للوقوع في المشاكل والتأثير سلبًا على حياة الأشخاص. يعد إجراء بعض الأبحاث وتعلم كيفية التنبؤ بالمكان الذي قد يحدث فيه التحيز بداية جيدة في الاتجاه الصحيح.
Matplotlib
بغض النظر عما تفعله ببياناتك ، ستحتاج في وقت ما إلى توصيل نتائجك إلى أشخاص آخرين ، وتعد Matplotlib إحدى المكتبات الرئيسية لرسم البيانات بعدة طرق مختلفة و متميزة.
خاتمة
بغض النظر عن عدد الأبعاد الموجودة في بياناتك ، يمنحك NumPy الأدوات اللازمة للعمل معها. يمكنك تخزينها وإعادة تشكيلها ودمجها وتصفيتها وفرزها ، وستتم قراءة الكود كما لو كنت تعمل على رقم واحد فقط في كل مرة بدلاً من المئات أو الآلاف.