إتقان تحويل البيانات في الباندا باستخدام هذه التقنيات الثلاثة المفيدة

الغوص في التصفية والتلاعب والأداء

تصوير ميلاد فاكوريان on Unsplash

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

حسنًا، من الرائع أن تخرج من أحلام اليقظة وتستأنف العمل في الفوضى اليائسة من الصفوف المكسورة والتسميات غير المنطقية أمامك.

لا يوجد شيء اسمه بيانات نظيفة (في شكلها الأصلي). إذا كنت عالم بيانات، فأنت تعرف هذا. إذا كنت قد بدأت للتو، فيجب عليك قبول هذا. ستحتاج إلى تحويل بياناتك حتى تتمكن من التعامل معها بفعالية.

دعونا نتحدث عن ثلاث طرق للقيام بذلك.

التصفية - ولكن تم شرحها بشكل صحيح

دعونا نتحدث عن التصفية - ولكن بشكل أعمق قليلاً مما قد تكون معتادًا على القيام به. باعتبارها واحدة من أكثر عمليات تحويل البيانات شيوعًا وإفادة، تعد التصفية الفعالة مهارة لا بد منها لأي عالم بيانات. إذا كنت تعرف الباندا، فمن المحتمل أن تكون هذه إحدى العمليات الأولى التي تعلمت القيام بها.

دعونا نراجع، باستخدام المثال المفضل لدي، والمتعدد الاستخدامات بشكل غريب: DataFrame لدرجات الطلاب، يسمى على نحو مناسب grades:

صورة للمؤلف

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

الدرجات[الدرجات['النتيجة'] >= 90]
صورة للمؤلف

هذا يتركنا مع جاك وهيرميون. رائع. لكن ماذا حدث هنا بالضبط؟ لماذا هل يعمل سطر التعليمات البرمجية أعلاه؟ دعونا نتعمق قليلاً من خلال النظر إلى ناتج التعبير الموجود داخل الأقواس الخارجية أعلاه:

الدرجات['النتيجة'] >= 90
صورة للمؤلف

آه حسنا. منطقي. يبدو أن هذا السطر من التعليمات البرمجية يُرجع كائن سلسلة Pandas الذي يحمل Boolean ( True / False ) القيم التي تحددها ماذا >= 90 عاد لكل صف على حدة. هذه هي الخطوة الوسيطة الرئيسية. بعد ذلك، يتم تمرير سلسلة القيم المنطقية هذه إلى الأقواس الخارجية، وتقوم بتصفية جميع الصفوف وفقًا لذلك.

من أجل الإكمال، سأذكر أيضًا أنه يمكن تحقيق نفس السلوك باستخدام loc الكلمة:

Grades.loc[grades['النتيجة'] >= 90]
صورة للمؤلف

هناك عدد من الأسباب التي قد نختار استخدامها loc (أحدها أنه يسمح لنا بالفعل بتصفية الصفوف والأعمدة من خلال عملية واحدة)، ولكن هذا يفتح عمليات Pandora's Box of Pandas التي من الأفضل تركها لمقال آخر.

في الوقت الحالي، الهدف التعليمي المهم هو: عندما نقوم بالتصفية في Pandas، فإن بناء الجملة المربك ليس نوعًا من السحر الغريب. نحتاج ببساطة إلى تقسيمها إلى خطوتين مكونتين: 1) الحصول على سلسلة منطقية من الصفوف التي تلبي شرطنا، و2) استخدام السلسلة لتصفية DataFrame بالكامل.

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

هيا لنذهب.

جمال وظائف لامدا

في بعض الأحيان، تتطلب بياناتك تحويلات ليست مدمجة في وظائف Pandas. حاول قدر المستطاع، لن يكشف أي قدر من البحث في Stack Overflow أو استكشاف وثائق Pandas بجدية عن حل لمشكلتك.

أدخل وظائف لامدا - وهي ميزة لغوية مفيدة تتكامل بشكل جميل مع Pandas.

كمراجعة سريعة، إليك كيفية عمل لامدا:

>>> add_function = لامدا س، ص: س + ص
>>> add_function(2, 3)
5

لا تختلف وظائف Lambda عن الوظائف العادية، باستثناء حقيقة أنها تحتوي على بناء جملة أكثر إيجازًا:

  • اسم الدالة على يسار علامة المساواة
  • lambda الكلمة الأساسية الموجودة على يمين علامة المساواة (على غرار def الكلمة الرئيسية في تعريف دالة بايثون التقليدية، وهذا يتيح لبيثون معرفة أننا نحدد دالة).
  • المعلمة (المعلمات) بعد lambda الكلمة الأساسية، على يسار النقطتين.
  • إرجاع القيمة إلى يمين النقطتين.

الآن، دعونا نطبق وظائف لامدا على موقف واقعي.

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

صورة للمؤلف

الآن، باعتبارنا أصحاب البيانات الرئيسية لهذه الشركة، فقد حصلنا على بعض المعلومات السرية للغاية: سيحصل كل فرد في هذه الشركة على زيادة بنسبة 10% بالإضافة إلى 1000 دولار إضافية. من المحتمل أن يكون هذا محددًا جدًا لعملية حسابية بحيث لا يمكن العثور على طريقة محددة له، ولكنه واضح بما فيه الكفاية مع دالة لامدا:

تحديث_الدخل = رقم لامدا: num + (num * .10) + 1000

ثم، كل ما يتعين علينا القيام به هو استخدام هذه الوظيفة مع الباندا apply وظيفة، والتي تتيح لنا تطبيق وظيفة على كل عنصر من عناصر السلسلة المحددة:

الأموال['الدخل الجديد'] = الأموال['الدخل'].apply(update_income)
الأموال
صورة للمؤلف

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

سأبقي النقطة هنا بسيطة.

تعتبر Lambdas مفيدة للغاية، وبالتالي يجب عليك استخدامها. يتمتع!

وظائف معالجة السلسلة

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

على سبيل المثال، لنفترض أن لدينا DataFrame التالي يسمى names الذي يخزن الأسماء الأولى والأخيرة للأشخاص:

صورة للمؤلف

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

الأسماء ["اسم العائلة"] = الأسماء ["اسم العائلة"].apply(lambda s: s[:1])
أسماء
صورة للمؤلف

من الواضح أن هذا يعمل، لكنه قديم بعض الشيء، وبالتالي ليس بايثونيًا كما يمكن أن يكون. لحسن الحظ، مع جمال وظائف معالجة السلسلة في Pandas، هناك طريقة أخرى أكثر أناقة (لغرض السطر التالي من التعليمات البرمجية، ما عليك سوى المضي قدمًا وافترض أننا لم نغير بالفعل 'Last Name' العمود الذي يحتوي على الكود أعلاه):

الأسماء['اسم العائلة'] = الأسماء['اسم العائلة'].str[:1]
أسماء
صورة للمؤلف

تا دا! ال .str تتيح لنا خاصية سلسلة Pandas ربط كل سلسلة في السلسلة بعملية سلسلة محددة، تمامًا كما لو كنا نعمل مع كل سلسلة على حدة.

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

الأسماء['الاسم الأول'] = الأسماء['الاسم الأول'].str.lower()
الأسماء['اسم العائلة'] = الأسماء['اسم العائلة'].str.lower()
أسماء
صورة للمؤلف

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

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

استخدمها بحرية. إنهم ممتازون.

الأفكار النهائية وخلاصة

إليك ورقة الغش الصغيرة الخاصة بتحويل البيانات:

  1. تصفية وكأنك تقصد ذلك. تعرف على ما يحدث بالفعل حتى تعرف ما تفعله.
  2. أحب لامدا الخاص بك. يمكنهم مساعدتك في التعامل مع البيانات بطرق مذهلة.
  3. الباندا تحب الخيوط بقدر ما تحبها أنت. هناك الكثير من الوظائف المضمنة - يمكنك استخدامها أيضًا.

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

أنا أشجعك على الخروج والعثور على المزيد.

مراجع حسابات

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

تحويل البيانات الرئيسية في الباندا باستخدام هذه التقنيات الثلاث المفيدة المعاد نشرها من المصدر https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 عبر https://towardsdatascience.com/feed

<!–

->

الطابع الزمني:

اكثر من مستشارو Blockchain