تحليل البيانات بلغة البايثون – تطبيق عملي
تحليل البيانات بلغة البايثون من المهام التي يسأل عنها العديد من الأشخاص المهتمون في مجال تحليل البيانات. السبب في ذلك يعود للشهرة الواسعة والقوة التي تتمتع فيه لغة البايثون في هذا المجال البحثي والتطبيقي النشط. أهلا بكم في بايثونات في هذا المقال السريع والذي نتحدث فيه عن مجموعة بيانات تُسمى “Medical Appointment No Shows” وسنقدم خلال المقال مستند Jupyter يشرح بالتفصيل أهم العمليات التحليلية بلغة البايثون، فأهلا وسهلا بكم.
عن المشروع
في هذا المشروع، قمت بدراسة مجموعة بيانات تحتوي على ما يقرب من 100 ألف من سجلات المواعيد الطبية من نظام الصحة العامة البرازيلي المعروف باسم SUS. تم تحميل مجموعة بيانات No Show Appointments وحفظتها باسم “noshowappointments.csv”. في هذا المشروع، يركز التحليل على إيجاد الاتجاهات التي تؤثر على المرضى للتحقق مما إذا كان المرضى سيحضرون إلى المواعيد المحجوزة معهم مسبقا أم لا.
يمكن العثور على وصف المشكلة الأصلي ومجموعة البيانات هنا.
في هذا التحليل ، سيتم الرد على الأسئلة التالية:
1) هل للعمر أي تأثير أو علاقة بحالة الحضور/عدم الحضور للمواعيد؟
2) هل للجمع بين العمر والجنس تأثير أو علاقة بحالة الحضور/عدم الحضور للمواعيد؟
في البداية نقوم باستيراد المكتبات اللازمة للعمل:
معالجة البيانات
في هذا الجزء من العمل سنجهز البيانات للاستخدام والمعالجة ثم نستكشفها ونعالجها.
الخصائص العامة
في الشيفرات البرمجية (الأكواد) التالية، أريد استكشاف مجموعة البيانات وتقييمها بعمق لفهمها بعمق وإيجاد الإجابة على الأسئلة التفصيلية التالية:
- كم عدد العينات في مجموعة البيانات؟
- كم عدد الأعمدة في مجموعة البيانات؟
- ما نوع (أنواع البيانات) في المتغيرات؟
- هل هناك حاجة لهندسة البيانات؟ مثل تحويل نوع البيانات أو إنشاء المزيد من الأعمدة ببيانات مفيدة؟
- هل هناك أي تكرارات؟
- هل هناك أي قيمة مفقودة؟
- هل هناك أي صفوف مكررة في مجموعة البيانات
- كم عدد القيم الفريدة غير الفارغة في مجموعة البيانات؟
- ما هي هذه القيم الفريدة وأهميتها بالنسبة لكل منها؟
لفحص أنواع البيانات والبحث عن حالات البيانات المفقودة أو التي يحتمل أن تكون خاطئ، تساعد وظيفة الوصف describe في الحصول على نظرة عامة على البيانات من وجهة نظر الملخص الإحصائي. هذا مفيد أيضًا لاكتشاف أي أخطاء محتملة قد تحتاج إلى نظرة فاحصة.
الشيفرة البرمجية التالية تُجيب على سؤال:
- كم عدد العينات في مجموعة البيانات؟
- كم عدد الأعمدة في مجموعة البيانات؟
النتيجة هي:
(110527, 14)
تقييم البيانات
الدالة التالية تُجيب على الأسئلة التفصيلية التي طُرحت في الأعلى من السؤال الثالث وحتى النهاية:
النتيجة:
تفاصيل الأعمدة وأنواع البيانات فيها
الجدول التالي يُوضح تفاصيل كل عمود ونوع البيانات الموجودة فيه. جميع الأعمدة هنا هي independent variables وعمود التصنيف او depedent variable هو No-Show:
لفحص اذا كان هناك سجلات مُكررة أم لا نستخدم السطر التالي:
والنتيجة هي 0، حيث لا يُوجد سجلات مكررة في البيانات. للتعرف اذا كانت البيانات متوزانة ام لا، نقوم بإحصاء عدد القيم المتاحة للعمود المستقل No-Show كما يلي:
إليكم بعض الاستنتاجات السريعة:
- هناك 13 متغيرًا مستقلاً ومتغيرًا واحدًا تابعًا (no_show) في مجموعة البيانات.
- لا تحتوي مجموعة البيانات على أي قيم مفقودة (NaNs).
- يجب تغيير نوع العمودين Schedule_day وointment_day إلى datetime.
- مجموعة البيانات غير متوازنة
- لم يتم تحديد موعد الساعة (وهو ما يعادل 00:00:00). لن نتمكن من تحليل ما إذا كانت ساعة الموعد لها علاقة بعدم الحضور.
تنظيف البيانات
في هذا الجزء من العمل، سأقوم بحل المشكلات الموجودة في مجموعة البيانات من الملاحظات التي حصلنا عليها في الأعلى:
- الحد الأدنى للعمر هو -1 ، ومن الواضح أن الأشخاص لا يمكن أن يكون لديهم سن -1.
- نحذف الأعمدة ‘PatientId’ و ‘AppointmentID’ من إطار البيانات لأنهما مجرد بعض الأرقام المولدة من النظام ولا ينبغي استخدامها للتنبؤ بالمتغير التابع، وكذلك لتحسين إمكانية إعادة تعديل قاعدة البيانات.
- نعيد تسمية الأعمدة لاستخدام أسماء أسهل أثناء الاستكشاف مع إصلاح الأخطاء الإملائية.
- قم بتغيير قيمة الإعاقة إلى ثنائي (0 و 1) ، لأننا نريد فقط معرفة ما إذا كان المريض يعاني من إعاقة وليس عدد الإعاقات التي يعاني منها.
- يجب تغيير نوع العمودين Schedule_day وointment_day إلى datetime.
- نظرًا لأن موعد الموعد يحتوي على 00:00:00 في طابعه الزمني، فسوف نتجاهله ونزيله.
وستكون النتيجة كما يلي:
والنتيجة هي:
وستكون النتيجة:
من التفاصيل أعلاه يمكننا أن نرى أن تاريخ الموعد يتراوح من 2016-04-29 إلى 2016-06-08. يمتد يوم الموعد ما يزيد قليلاً عن شهر واحد على عكس اليوم المجدول الذي يمتد حوالي 7 أشهر.
العمليات الاستكشافية على البيانات
بعد تنظيف مجموعة البيانات، في هذا الجزء من العمل، سنستخدم الاخراج الرسومي للبيانات للإجابة على الأسئلة وفهم البيانات بعمق.
الاستنتاجات التي حصلنا عليها من الخطوة السابقة:
- العمر: هناك العديد من الشباب في مجموعة البيانات ولكن بشكل عام يمكننا أن نرى أن هناك قممًا للرضع ثم يبدأ التوزيع في التوحد. ينخفض
- عدد المرضى بشكل كبير بالنسبة للمرضى الذين تزيد أعمارهم عن 60 عامًا، ويُمكننا أن نرى توزيع منحرف لليمين.
- إدمان الكحول: معظم المرضى ليسوا مدمنين على الكحول.
- داء السكري: معظم المرضى ليسوا من مرضى السكر ولكن أكثر من مدمنين على الكحول.
- الإعاقة: هناك فئات للإعاقة حيث أن معظم الناس ليسوا معاقين.
- تم استلام الرسائل القصيرة: تلقى معظم المرضى رسالة
- ارتفاع ضغط الدم: لا يتم تشخيص ارتفاع ضغط الدم لدى معظم المرضى.
من المعلومات المذكورة أعلاه يمكننا أن نرى أنه من الواضح أن هناك اختلالًا في التوازن. من بين 110500 مريض ، يأتي حوالي 88000 (80٪) من المرضى للزيارة بعد الموعد وحوالي 20000 (20٪) يتخطون مواعيدهم.
تذكير “لا” يعني إذا حضر المريض لموعده ، و “نعم” إذا لم يحضر
من الشكل البياني أعلاه يمكننا أن نرى بوضوح أن المرضى “الإناث” عادة ما يكون لديهم مواعيد أكثر من المرضى “الذكور”. لذلك، قد يكون الجنس عاملاً مهمًا. ولكن إذا نظرنا عن كثب إلى توزيع NoShow عبر Male’s و Female فهو متماثل تقريبًا. لذلك، قد لا يلعب الجنس دورًا مهمًا في تحديد ما إذا كان المريض يأتي في زيارة أم لا.
الاستقصاء والبحث في السؤال الأول: هل للعمر أي تأثير أو علاقة بحالة الحضور/عدم الحضور للمواعيد؟
من الشكل في الأعلى يمكننا أن نرى أن متوسط العمر حوالي 30 وأن معدل الذكاء بين 18 و 55. أيضًا، يمكننا أن نرى الأشخاص الذين لم يحضروا لمواعيدهم كانوا أصغر سناً. من ناحية أخرى، المرضى الذين حضروا للموعد، يبدو أن الفئة العمرية من 40 إلى 60 قد أبدت بالفعل اهتمامًا بالموعد والحضور عند مقارنتها بالفئات العمرية من 0 إلى 20.
كما أوضحنا من قبل، فإن مجموعة البيانات هذه غير متوازنة، لذا أعتقد أنه إذا كان لكل مجموعة أرقام أقرب أو متشابهة، فإن المرئيات “نعم” و “لا” ستكون أكثر تشابهًا. يمكن إجراء مزيد من التحليل لمعادلة أرقام المجموعة “نعم” و “لا” ثم إعادة الشكل البياني BoxPlot. أخيرًا، كان سبب اختيار هذه الصورة المرئية لأنها تعرض “مخططًا” إحصائيًا للمجموعتين.
الاستقصاء والبحث في السؤال الثاني: هل للجمع بين العمر والجنس تأثير أو علاقة بحالة الحضور/عدم الحضور للمواعيد؟
يمكننا أن نلاحظ من الشكل أعلاه أن المرضى الإناث من الفئة العمرية من 20 إلى 40 لا ينشطون في الحصول على موعد مع الأطباء عند مقارنتهم بالفئة العمرية المماثلة للذكور.
الاستنتاجات
كان الغرض من هذا التحليل إجراء تحليل لقاعدة بيانات الاستشارات الطبية “Medical Appointment No Shows”، والتي تحتوي على أكثر من 100 ألف موعد لم يحضرها ما يقرب من 30 ٪ من المرضى. كان الغرض من هذا التحليل هو جمع بعض الأفكار حول الأسباب المحتملة لهذه المواعيد المفقودة.
أهم الاستنتاجات المثيرة للاهتمام:
- معظم المرضى ليسوا مدمنين على الكحول.
- بدأت مواعيد الزيارات بتاريخ 2015/11/10 وانتهت بتاريخ 08/06/2016.
- هناك العديد من الشباب في مجموعة البيانات (معظمهم من عمر 0) وينخفض عدد المرضى بشكل كبير بالنسبة للمرضى الذين تزيد أعمارهم عن 60 عامًا.
- يبلغ متوسط عمر المرضى 37 عامًا. 25٪ من المرضى تقل أعمارهم عن 18 عامًا ومعظمهم تحت سن 55.
- معظم المرضى ليسوا من مرض السكري ولكن أكثر من مدمنين على الكحول.
- لا يتم تشخيص ارتفاع ضغط الدم لدى معظم المرضى.
- بالنسبة لجميع المتغيرات الفئوية، تبدو توزيعات الحضور/عدم الحضور للفئات المختلفة متشابهة جدًا. لا يوجد مؤشر واضح على أن أي من هذه المتغيرات لها تأثير أكبر من تأثير الآخرين على خصائص الحضور/عدم الحضور. تؤكد الرسوم البيانية حوالي 20٪ من معدل عدم الحضور لمعظم الفئات.
- لدينا عدد كبير من المرضى من النساء، على افتراض أن النساء تميل إلى الاهتمام بصحتهن أكثر من الرجل بسبب الاختلاف الهائل من الاستشاريين كما نرى هنا.
محددات
- إذا عرفنا طبيعة عمل المريض، فسيكون ذلك مفيدًا في التحليل
- احتوت البيانات على بيانات سبعة أشهر فقط – إذا كانت هناك بيانات كاملة للسنة كاملة على أساس شهري، فسيساعدنا ذلك في تحديد أكثر الأشهر مواعيدا.
- إذا كانت لدينا بيانات حول عدد الرسائل القصيرة التي يتم إرسالها إلى المريض، فيمكننا في الواقع معرفة عدد رسائل التذكير عبر الرسائل النصية القصيرة المطلوبة لكي ينشط المريض في الموعد.
- إذا كنا سنحصل على شدة المرض لكل مريض، فيمكننا محاولة الإجابة عن سبب قيام بعض المرضى من الفئات العمرية بزيارات أكثر مقارنة بالفئات العمرية الأخرى.
بذلك انتهينا من تحليل هذه المجموعة من البيانات، ونرجو أن نكون وفقنا في تقديم الفائدة.
شكرا لبنى ،البحث جدا ملهم