بايثون-30: تحليل البيانات بلغة بايثون المشروع الاول-3


السلام عليكم ورحمة الله وبركاته

اخوتي الكرام اخواتي الفاضلات

وصلنا الى المرحلة الثانية من مراحل تحليل البيانات وهي مرحلة معالجة البيانات (تنظيف وترتيب وتقليل للحجم وغيرها) لتكون جاهزة لتطبيق احد خوارزميات التحليل والتصنيف عليها في الخطوة القادمة فتابعوا معنا:

اثناء استكشاف البيانات وجدنا فيها مجموعة من المشاكل التي يجب حلها قبل ان تكون البيانات جاهزة للتحليل النهائي ويتم حل هذه المشاكل ضمن هذه المرحلة الثانية المسماة (data munging) وفي ادناه بعض المشاكل التي اكتشفناها حتى الان:

1- هنا بعض القيم المفقودة لبعض المتغيرات (والتي اشرنا لها في الدرس السابق) وهنا يجب علينا ملء كل الجداول بقيم مناسبة تعتمد على كمية البيانات المفقودة واهميتها للنتيجة النهائية.

2- لاحظنا ان قيم (دخل المتقدمين للحصول على القروض) و(مقدار القرض المطلوب) فيها قيم شاذة عن المعدل وهنا يستوجب مراعاة ذلك لأنه يعني وجود حالات تخالف القاعدة (القيم القريبة من المعدل) فيجب معالجتها قبل اكمال التحليل.

وبالاضافة الى هذه المشاكل في الحقول الرقمية فنحن يجب ان نهتم بالقيم في المتغيرات الغير رقمية مثل الحالة الزوجية والجنس ومساحة البناء ومستوى التعليم وغيرها لمحاولة الحصول منها على معلومات مفيدة.

الخطوة الاول: تدقيق القيم المفقودة في المتغيرات المختلفة:

اغلب خوارزميات التحليل لا تتعامل مع جداول ناقصة ومعلومات غير كاملة وحتى لو كانت كذلك فأن النتائج ستكون غير منطقية ولذلك يجب اولاً ايجاد القيم المفقودة ومحاولة ملئها بطريقة ما. اولاً سنبحث عن الحقول الفارغة التي تحتوي (null) او (NaN) بأستخدام مكتبة (pandas) وكما في المثال ادناه:

1

حيث يقوم هذا الايعاز بأرجاع عدد القيم الفارغة (isnull) في كل عمود من الجدول المخزون اصلاً في المتغير المسمى (df) وكما نرى بعض الاعمدة فيها عدد القيم المفقودة صفر اي انها مكتملة وبعضها فيها قيم مفقودة تتراوح بين 3 و 50.

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

انقر هنا لزيارة درس استكشاف البيانات والتعامل مع المفقودات بالتفصيل

ويمكن تلخيص هذه الطرق بما يلي:

1- حذف السطر كاملاً ان كان احد متغيراته مفقوداً: وهذه الطريقة مفيدة لبساطتها ولكنها قد تجعلنا نفقد الكثير من المعلومات الضرورية التي تؤثر على الناتج النهائي.

2- ملء المكانات الفارغة بقيمة تمثل معدل القيم الاخرى في العمود وبالتالي نحرص على ان هذه القيمة المضافة لن تكون شاذة عن المعدل العام للقيم في ذلك المتغير.

3- ملء القيم المفقودة بقيم اخرى غير المعدل مثل الوسيط او المنوال وبحسب توزيع البيانات (هنا نحتاج بعض الاساسيات في العمليات الاحصائية على البيانات) فعندما نقوم برسم البيانات المتوفرة في عمود ما نستطيع معرفة هل ان اغلب البيانات متزوعة حول المعدل او الوسيط او المنوال او غيرها فنختار القيمة الاكثر احتمالاً ونملأ بها الحقول الفارغة.

4- يمكن ايضاً الاستعانة بالاعمدة البقية لملء المعلومات المفقودة من الاعمدة الاخرى فمثلاً اذا كان الحقل الفارغ خاص بشخص ونحن نعرف طوله ولكننا لا نعرف جنسه فمن خلال اخذ معدل الطول للذكور والاناث ثم مقارنة الطول لدينا مع المعدلات المتوفرة نستطيع ان “نخمن” هل هذا الحقل المفقود هو لذكر او لأنثى وهكذا. كما قلنا التفاصيل كاملة موجودة في الرابط اعلاه.

والان نرجع الى مثالنا ومشروعنا ولملء الحقول الفارغة من مقدار القرض المطلوب يمكننا ببساطة ملئها بمعدل القروض البقية ويتم ذلك بلغة بايثون وباستخدام مكتبة (pandas) بأيعاز واحد وكما يلي:

2

وهنا نلاحظ ان عدد الحقول المفقودة في ال (loanAmount) كان 22 قبل تطبيق الايعاز السابق وبعد تطبيقه اصبح صفر اي ان كل الحقول في هذا العمود تم ملئها بنجاح بقيمة المعدل للحقول البقية.

طبعاً هناك طرق اخرى اكثر صعوبة وهي ببناء نموذج تحليل متكامل (مثل الذي نريد عمله في النهاية) فقط لتخمين قيم كل حقل مفقود ولكن هذه العملية تأخذ وقت طويل (رغم انها تعطي نتائج افضل في اغلب الاحيان) ولكن يبقى الخيار هنا لمحلل البيانات وهل يحتاج كل هذه الدقة في التحليل وملء الفراغات او لا وطبعاً يعتمد القرار على اهمية البيانات ونتائجها.

والان لملء الفراغات في عمود (self employed) اي هل يعمل المتقدم لطلب لقرض عمل خاص او لا فهنا نقوم بعرض كم واحد نعم وكم واحد لا ثم نقرر وكما في الايعاز التالي:

3

وبما ان اغلب المتقدمين لطلب القروض هم ليسوا موظفين ذاتياً (No=500) فمن الطبيعي ان نقوم بملء الحقول الفارغة ب(No) لأن تكرارها اكثر (طبعاً العملية كلها احتمالية ولا شيء مضمون وهنا يبرز ذكاء محلل البيانات لأختيار الاكثر احتمالية ومنطقية ولذلك يفترض ان يكون محلل البيانات ملماً بالكثير من العلوم الاخرى مثل الاحصاء والاحتمالية والتحليل المنطقي وغيرها).

نقوم بملء الحقل بقيمة (No) بأستخدام الايعاز التالي:

df[‘Self_Employed’].fillna(‘No’,inplace=True)

ولتجنب تكرار هذه العملية لكل عمود يدوياً نقوم بأنشاء دالة تقوم بحساب الوسيط (median) للحقول الاخرى وملء الفراغات بها وكما في الكود التالي:

4

وبهذا يفترض ان تكون كل الحقول قد تم ملئها بالوسيط (median) لكل منها.

كيف نقوم بمعالجة القيم المتطرفة (extreme values)؟

من المهم كما قلنا سابقاً فهم القيم المحتملة والمنطقية لكل متغير وبالتالي سنعرف هل ان بعض القيم شاذة وغير منطقية او انها منطقية ولكنها بعيدة عن المعدل (طفرات غير محسوبة) ولنأخذ مثالاً على ذلك وهو مقدار القرض المطلوب والذي يمكننا رسمه بطريقة الاعمدة (bar chart) بأستخدام الايعاز التالي:

5

هنا نرى ان كل القيم (او اغلبها) تدور حول المعدل وذلك لأننا اخذنا التحويل اللوغارتيمي (log transformation) لها وهي احد الطرق لمعالجة القيم المتطرفة.

والان للتخلص من القيم المتطرفة في عمود معدل دخل المتقدمين للحصول على القرض (ApplicantIncome) نقوم ايضاً بحساب التحويل اللوغارتيمي لها وكما في الكود التالي:

6

وفي ادناه شرح الكود السابق:

السطر الاول هو انشاء عمود جديد في الجدول الذي خزناه في البداية في متغير اسمه (df) واسم هذا العمود هو الدخل الكلي (TotalIncome) والذي قمنا فيه بجمع دحل المتقدم (ApplicantIncome) ودخل المتقدم الزميل او شريك السكن (CoapplicantIncome).

السطر الثاني: قمنا فقط بأنشاء عمود جديد ووضعنا فيه ال (log) الخاص بالعمود السابق. وكما هو واضح استخدمنا دالة ال (log) من مكتبة (NumPy) بكتابة (np.log())

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

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

الى هنا ينتهي درس اليوم على امل اللقاء بكم في درس قادم ان شاء الله.

كما نوهنا في الدروس السابقة فأن هذا المشروع والخطوات المتبعة في العمل عليه مأخوذة من الرابط التالي (انقر هنا لزيارة الرابط الاصلي باللغة الانكليزية) وكل ما قمنا به هو الترجمة والتوضيح والتبسيط ومن الله التوفيق.

تحياتي للجميع

اخوكم

مصطفى صادق لطيف.

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   /  تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   /  تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   /  تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   /  تغيير )

w

Connecting to %s