سير عمل EDA وتحليل مواصفات البيانات
df.info() وdf.describe() وتدقيق القيم المفقودة وفحص أنواع البيانات وتحليل التعددية.
سير عمل EDA وتحليل مواصفات البيانات درس مجاني في Learn AI with Python على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn AI with Python، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
ما تحليل البيانات الاستكشافي؟
تحليل البيانات الاستكشافي (EDA) هو أول ما تقومون به مع أي مجموعة بيانات قبل بناء النماذج. وهدفه فهم البنية، واكتشاف المشكلات، وتكوين حدس حول البيانات.
تجيب قائمة التحقق للاستكشاف الأولي المنهجية عن الأسئلة التالية: ما حجم البيانات؟ ما أنواع الأعمدة؟ أين توجد القيم المفقودة؟ هل توجد صفوف مكررة؟ كيف تتوزع القيم؟
- اكتشاف مشكلات جودة البيانات مبكرًا
- تحديد الميزات التي تحتاج إلى تنظيف
- صياغة فرضيات لاختبارها لاحقًا
تحميل البيانات
يبدأ كل شيء بتحميل DataFrame وإلقاء نظرة سريعة باستخدام head() وshape.
تعيد shape صفًا من الشكل (rows, columns)، ولذلك تعرفون فورًا حجم البيانات التي تعملون عليها.
import pandas as pd
df = pd.read_csv("customers.csv")
print(df.shape) # (10000, 8)
print(df.head()) # first 5 rowsdf.info() — الأنواع وأعداد القيم غير الفارغة
يُعد df.info() الأمر الأول الأكثر فائدة. فهو يطبع اسم كل عمود، وdtype الخاص به، وعدد القيم غير الفارغة.
إذا ظهر عمود رقمي من النوع object، فهناك خطأ ما، مثل نص زائد أو فواصل أو رموز عملات. وإذا اختلفت أعداد القيم غير الفارغة بين الأعمدة، فهذا يعني وجود بيانات مفقودة.
df.info()
# <class pandas.DataFrame>
# RangeIndex: 10000 entries
# age 9800 non-null float64
# city 10000 non-null object
# income 9500 non-null float64df.describe() — الملخص الرقمي
يوفر df.describe() العدد والمتوسط والانحراف المعياري والحد الأدنى والربيعات (25/50/75%) والحد الأقصى لكل عمود رقمي.
ابحثوا عن مؤشرات الخطر: قيمة min تساوي -1 في عمود العمر، أو قيمة max أعلى بكثير من الربيع 75% (قيم شاذة)، أو متوسط بعيد جدًا عن الوسيط (التواء).
print(df.describe())
# Use include="all" to also summarize categorical columns
print(df.describe(include="all"))df.isnull().sum() — عدّ القيم المفقودة
يؤدي ربط isnull() بـ sum() إلى عدّ القيم المفقودة في كل عمود. أضيفوا .sum() أخرى للحصول على الإجمالي الكلي.
حوّلوا العدد إلى نسبة مئوية لتقييم مدى خطورة المشكلة: قد يكون من الأفضل حذف عمود ت missing فيه 60% من القيم، بينما يسهل تعويض 2% من القيم المفقودة.
print(df.isnull().sum())
missing_pct = df.isnull().sum() / len(df) * 100
print(missing_pct.sort_values(ascending=False))df.duplicated().sum() — العثور على الصفوف المكررة
تعيد df.duplicated() سلسلة منطقية تحدد الصفوف المطابقة تمامًا لصف سابق. ويؤدي جمع هذه السلسلة إلى عدّ عدد الصفوف المكررة.
يمكنكم تحديد الأعمدة الأساسية التي يُبحث عن التكرار ضمنها باستخدام subset، وهذا مفيد عندما يجب أن تكون قيمة id فريدة.
print(df.duplicated().sum()) # exact duplicate rows
print(df.duplicated(subset=["id"]).sum()) # duplicate ids
df = df.drop_duplicates()value_counts() — تكرارات الفئات
تحصي value_counts() عدد مرات ظهور كل قيمة فريدة في العمود. وهي الأداة الأساسية لفحص البيانات الفئوية.
استخدموا normalize=True لعرض النسب بدلًا من الأعداد الخام، وdropna=False لإدراج القيم المفقودة في الإحصاء.
print(df["city"].value_counts())
print(df["city"].value_counts(normalize=True))
print(df["city"].value_counts(dropna=False))فحص عدد القيم المميزة
عدد القيم المميزة هو عدد القيم المختلفة في العمود، وتحسبه الدالة nunique().
- عدد قليل من القيم المميزة (بضع فئات) → مناسب للترميز أحادي التفعيل.
- عدد كبير من القيم المميزة (آلاف السلاسل الفريدة، مثل معرّفات المستخدمين) → لا يكون عادةً ميزة مفيدة بصورته الحالية.
for col in df.select_dtypes("object").columns:
print(col, "->", df[col].nunique(), "unique")اكتشاف الأعمدة الثابتة والشبيهة بالمعرّفات
يجدر الانتباه إلى حالتين متطرفتين أثناء توصيف البيانات:
- الأعمدة الثابتة (
nunique() == 1) لا تحمل أي معلومات، لذا احذفوها. - الأعمدة الشبيهة بالمعرّفات (
nunique() == len(df)) تكون فريدة لكل صف، ولا تقدم عادةً أي معلومات مفيدة لمعظم النماذج.
n = len(df)
for col in df.columns:
u = df[col].nunique()
if u == 1:
print(col, "is constant")
elif u == n:
print(col, "is ID-like")dtypes واستخدام الذاكرة
تحققوا من df.dtypes للتأكد من تخزين الأعمدة بالشكل الصحيح، ومن df.memory_usage(deep=True) للعثور على الأعمدة التي تستهلك قدرًا كبيرًا من الذاكرة.
يمكن أن يؤدي تقليل دقة الأنواع الرقمية وتحويل السلاسل ذات عدد القيم المميزة المنخفض إلى category إلى تقليص استهلاك الذاكرة كثيرًا في مجموعات البيانات الكبيرة.
print(df.dtypes)
print(df.memory_usage(deep=True))
df["city"] = df["city"].astype("category")مقطع برمجي قابل لإعادة الاستخدام لتوصيف البيانات
يمكنكم جمع قائمة التحقق بأكملها في دالة مساعدة واحدة، بحيث تحصل كل مجموعة بيانات جديدة على المعالجة الأولية نفسها.
شغّلوها فور تحميل أي DataFrame لإظهار الحجم والأنواع والقيم المفقودة والصفوف المكررة وعدد القيم المميزة مباشرةً.
def profile(df):
print("Shape:", df.shape)
print(df.info())
print("Missing:\n", df.isnull().sum())
print("Dupes:", df.duplicated().sum())
for c in df.select_dtypes("object"):
print(c, df[c].nunique(), "unique")
profile(df)فحص سريع: القيم المفقودة
تريدون معرفة نسبة القيم المفقودة في كل عمود.
مراجعة: قائمة التحقق للاستكشاف الأولي للبيانات
أصبح لديكم الآن أسلوب افتتاحي قابل للتكرار مع أي مجموعة بيانات:
shapeوhead()لمعرفة الحجم وإلقاء نظرة عامةinfo()لمعرفة أنواع البيانات وأعداد القيم غير الفارغةdescribe()للحصول على الملخصات الرقمية ومؤشرات القيم الشاذةisnull().sum()لمعرفة القيم المفقودةduplicated().sum()لمعرفة الصفوف المكررةvalue_counts()وnunique()لمعرفة تكرارات الفئات وعدد القيم المميزة
سننتقل بعد ذلك إلى التعمق في الأعمدة الفردية باستخدام التحليل أحادي المتغير.
الأسئلة الشائعة
هل درس «سير عمل EDA وتحليل مواصفات البيانات» مجاني؟
نعم — نص درس «سير عمل EDA وتحليل مواصفات البيانات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn AI with Python، انتقل إلى CoddyKit PRO. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
ماذا ستتعلم في «سير عمل EDA وتحليل مواصفات البيانات»؟
df.info() وdf.describe() وتدقيق القيم المفقودة وفحص أنواع البيانات وتحليل التعددية. تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn AI with Python؟
لا تُشترط خبرة سابقة. Learn AI with Python على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «سير عمل EDA وتحليل مواصفات البيانات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn AI with Python هذا؟
نعم. كل درس في Learn AI with Python يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- سير عمل EDA وتحليل مواصفات البيانات
- التحليل أحادي المتغير
- التحليل ثنائي ومتعدد المتغيرات
- تحليل توزيع السمات والهدف