تخيل أن لديك مجموعة بيانات تحدق بها فتشعر أنها لغز يحتوي ألف قطعة غير متطابقة، هنا يبرز دور تحليل البيانات الاستكشافي (EDA). إذ يعتبر بمثابة المحادثة الأولى التي تجرَى مع البيانات لفهمها والكشف عن الأنماط المخفية التي قد تعرقل العمل فيما بعد. فبدون القيام بها سيكون الأمر محفوف بالمخاطر أو حتى كارثياً! دعنا نستعرض أدناه مفهوم تحليل البيانات الاستكشافي وأهميته وكيفية إجراءه.
مفهوم تحليل البيانات الاستكشافي
تحليل البيانات الاستكشافي أي فهم واستكشاف بياناتك من خلال طرح أسئلة مثل: “ما نوع البيانات التي أعمل بها؟” “هل هناك مشكلات كبيرة كالقيم المفقودة أو القيم المتطرفة؟” “هل تتصرف البيانات بالطريقة التي أتوقعها؟” تستطيع فحص البيانات وتصويرها لمعرفة ما تحاول إخبارك به.
على سبيل المثال: إذا نفترض أنك تتعامل مع بيانات المبيعات، ربما تحتاج رسم مخطط خطي بسيط لتحديد الاتجاهات، أو حساب المتوسطات لفهم المبيعات النموذجية، أو إنشاء رسوم بيانية للتحقق من الشذوذ.
الأدوات المستخدمة في تحليل البيانات الاستكشافي (EDA)
يعتمد محللو البيانات على أدوات برمجية قوية لإجراء تحليل البيانات الاستكشافي بفعالية فهي تبسط عملية تنظيف البيانات وتصورها وفهمها، ومن أكثر الأدوات شيوعاً:
لغة بايثون في تحليل البيانات الاستكشافي
بايثون هي لغة برمجة متعددة الاستخدامات تستخدم بشكل كبير في تحليل البيانات الاستكشافي لكونها تمتلك نظام بيئي القوي من المكتبات وهي:
- Pandas: مثالية لمعالجة البيانات وتنظيفها، مما يسمح للمستخدمين بتحميل مجموعات البيانات ومعالجة القيم المفقودة وإجراء عمليات كالفرز والتجميع.
- Matplotlib: مكتبة رسم بياني لإنشاء تصورات ثابتة وتفاعلية ومتحركة. بحيث تستطيع إنشاء مخططات خطية أو شريطية.
- Seaborn: مبني على Matplotlib يبسط إنشاء مخططات إحصائية ممتعة جمالياً ومفيدة كالهستوجرامات ومخططات الصناديق ومخططات التشتت.
لغة R في تحليل البيانات الاستكشافي
R هي لغة برمجة إحصائية تتفوق في تحليل البيانات وتصويرها، تحتوي عدة حزم قوية مصممة خصيصاً لـ EDA منها:
- dplyr: مصممة لمعالجة البيانات، فهي تسهل تصفية مجموعات البيانات وفرزها وتلخيصها.
تُعتمَد بشكل كبير لمرونتها وقدرتها على التعامل مع مجموعات البيانات المتنوعة.
- ggplot2: حزمة مرنة جداً لإنشاء تصورات معقدة بشكل سهل، إذ تستطيع إنشاء مخططات تشتت أو مخططات شريطية.
يمكنك استعمال اللغة التي تفلضها Python أو R الإحصائية، فكلاهما يوفر أطر عمل قوية لإجراء EDA فعال للبيانات.
خطوات التحليل الاستكشافي للبيانات
يعتبر تحليل البيانات الاستكشافي عملية منهجية تسمح باكتشاف القصة وراء مجموعة البيانات، فباتباع هذه الخطوات الواضحة والقابلة للتنفيذ، بحيث تستطيع فهم بياناتك بشكل أفضل وتحديد الأنماط وإعدادها لأنواع أخرى من التحليل.
لإنشاء مجموعة DataFrame
في بايثون نكتب:
import pandas as pd
data = {‘A’: [1, 2, None, 4], ‘B’: [None, 2, 2, 4]}
df = pd.DataFrame(data)
في R نكتب:
data <- data.frame(A = c(1, 2, NA, 4), B = c(NA, 2, 2, 4))
1. فهم البيانات الأولية
يجب التعرف على مجموعة البيانات، حيث تساعد هذه الخطوة في وضع الأساس للعملية بأكملها وتتجلى:
- معاينة البيانات: عرض بضعة صفوف من مجموعة البيانات باستخدام head() لفهم بنيتها ومحتواها، استخدم info() للحصول على نظرة عامة على أنواع البيانات وعدد الإدخالات غير الفارغة.
- معرفة أنواع البيانات والمتغيرات: حدّد إذا كانت كل عمود رقمياً أو فئوياً أو نصياً، ضرورية لاختيار تقنيات التحليل المناسبة فما بعد. str(data)
2. تنظيف البيانات
يضمن تنظيف البيانات أنك ستعمل بمعلومات دقيقة قابلة للاستخدام وتشمل عملية تنظيف البيانات:
التعامل مع القيم المفقودة
تستطيع استخدم تقنيات كملء القيم المفقودة بالوسيط أو المتوسط الحسابي أو المنوال أو حتى تقنيات أكثر تقدماً مثل نماذج الاستنباط، أو ربما إزالة الصفوف التي تحتوي على عدد كبير من الإدخالات المفقودة.
- لمعرفة عدد القيم المفقودة:
في بايثون نكتب:
print(df.isnull())
في R نكتب:
is.na(data)
- استبدال القيم المفقودة بالمتوسط :
في بايثون نكتب:
df[‘ data$Column’] = df[‘data$Column’].fillna(df[‘ data$Column ‘].mean())
في R نكتب:
data$Column[is.na(data$Column)] <- mean(data$Column, na.rm = TRUE)
- استبدال القيم المفقودة بالوسيط:
في بايثون نكتب:
df[‘Column’].fillna(df[‘Column’].median(), inplace=True)
في R نكتب:
df[‘Column’].fillna(df[‘Column’].median(), inplace=True)
- ملء القيم المفقودة بقيم ثابتة:
في بايثون نكتب:
df_filled = df.fillna(0)
- حذف القيم المفقودة:
في بايثون نكتب:
حذف الصفوف التي تحتوي على قيم مفقودة df_cleaned = df.dropna()
حذف الأعمدة التي تحتوي على قيم مفقودة df_cleaned_cols = df.dropna(axis=1)
في R نكتب:
data_cleaned <- na.omit(data)
الجدير بالذّكر أنّه من الضروري التفكير في السياق لاتّخاذ الإجراء الأصح، فعلى سبيل المثال: إذا كنت تحلل المبيعات الشهرية، ليس من المنطقي استبدال القيم المفقودة بالأصفار، بل إنَّ غياب البيانات يدل على شيء أعمق.
التعامل مع القيم المتطرفة
حدد القيم المتطرفة باستخدام مخططات الصناديق ومخططات التشتت تكشف عن نقاط بيانات بعيدة عن المخططات البيانية. أو استخدم الأساليب الإحصائية: احسب النطاق الربعي (IQR) أو استخدم درجات Z لتحديد القيم المتطرفة المحتملة. وقرر ما إذا كنت تريد إزالتها أو تعديلها. مما يضمن عدم تشويه القيم المتطرفة لتحليلك.
boxplot(data$Column)
3. استكشاف التوزيع
هل البيانات متماثلة؟ منحرفة؟ مليئة بالقمم والوديان؟ يوفر فهم كيفية توزيع كل متغير رؤى حول شكل البيانات وانتشارها واتجاهها المركزي. مما يساهم في إيجاد الأنماط أو الانحرافات أو القمم غير العادية أو الشذوذ الذي قد يدل إلى أخطاء في البيانات، كما يساعد في معرفة نوع التحليل أو النماذج التي قد تعمل بشكل أفضل.
يمكن دراسة التوزيع باستخدام الرسوم البيانية من خلال عمل تصور لكل متغير باستخدام المدرجات التكرارية أو مخططات الكثافة.
في بايثون نكتب:
sns.histplot(df[‘Column’], kde=True)
plt.show()
في R نكتب:
library(ggplot2)
ggplot(data, aes(x = Column)) + geom_histogram(bins = 30, fill = ‘blue’, color = ‘black’)
إذا كانت البيانات منحرفة، فكر في التحويلات كاللوغاريتم أو الجذر التربيعي لجعلها أكثر “طبيعية”.
4. تحليل العلاقات بين المتغيرات
يبيّن استكشاف كيفية تفاعل المتغيرات مع بعضها الاتجاهات أو الأفكار الخفية، يمكن فعل ذلك ب:
- استخدام الارتباط: احسب معاملات الارتباط لفهم قوة واتجاه العلاقات بين المتغيرات العددية.
في بايثون نكتب:
print(df.corr())
في R نكتب:
cor(data$Column1, data$Column2)
- تصور العلاقات: يمكن استخدام مخططات التشتت لتصور العلاقات بين متغيرين، وخرائط الحرارة الارتباطية لتحديد الارتباطات بين عدة متغيرات.
في بايثون نكتب:
sns.scatterplot(x=’Variable1′, y=’Variable2′, data=df)
sns.heatmap(x=’Variable1′, y=’Variable2′, z=’Variable3’, data=df)
sns.regplot(x=’Variable1′, y=’Variable2′, data=df)
في R نكتب:
ggplot(data, aes(x = Column1, y = Column2)) + geom_point() + geom_smooth(method = ‘lm’, color = ‘red’)
الجدير بالذكر أنَّ الارتباط لا يعني دائمًا السببية بمعنى آخر ارتباط شيئين لا يعني أنَّ أحدهما يسبب الآخر.
5. تلخيص البيانات
يوفر التلخيص نظرة عامة عالية المستوى للبيانات تسمح بفهم الخصائص الرئيسية بسرعة، وتتضمن هذه الخطوة:
- عرض الإحصائيات الأساسية: فأحياناً تتحدث الأرقام بصوت أعلى من الرسوم البيانية، استخدم إحصائيات التلخيص كالمتوسط والوسيط والمنوال والانحراف المعياري والنطاق لوصف البيانات عدديًا.
في بايثون نكتب:
print(df.describe())
في R نكتب:
summary(data)
يضمن اتباع الخطوات السابقة مجموعة البيانات نظيفة ومفهومة وجاهزة لتحليل أو نمذجة أكثر تقدماً.
فوائد تحليل البيانات الاستكشافي (EDA)
يوفر تحليل EDA عدة فوائد تجعله خطوة حاسمة في أي مشروع بيانات، تتمثل هذه المزايا فيما يلي:

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