التحليل الاستكشافي للبيانات

15.4 التحليل الاستكشافي للبيانات

أهداف التعلم

في نهاية هذا القسم، ينبغي أن تكون قادرًا على:

  • وصف التحليل الاستكشافي للبيانات.
  • فحص إدخالات إطار البيانات من خلال الفهرسة المناسبة.
  • استخدام التصفية والتقطيع للحصول على مجموعة فرعية من إطار البيانات.
  • تحديد قيم Null في إطار البيانات.
  • إزالة أو استبدال قيم Null في إطار البيانات.

التحليل الاستكشافي للبيانات

التحليل الاستكشافي للبيانات (Exploratory Data Analysis) عملية تحليل البيانات لاكتساب رؤى، وتحديد الأنماط، وفهم البنية الأساسية للبيانات. خلال التحليل الاستكشافي للبيانات، يفحص علماء البيانات البيانات بصريًا وإحصائيًا للكشف عن العلاقات والشذوذات والاتجاهات، ولتوليد فرضيات لمزيد من التحليل. الهدف الرئيسي للتحليل الاستكشافي للبيانات هو التعرف على البيانات وتقييم جودتها. بمجرد فهم البيانات وتنظيفها، قد يُنشئ علماء البيانات السمات ويكوّنون الفرضيات. السِمة (feature) مُتغيِّر فردي أو سِمة تُحسب من البيانات الخام في مجموعة البيانات.

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

  • الفهرسة المستندة إلى التسميات باستخدام loc[]: loc[] تسمح لك بالوصول إلى البيانات في إطار البيانات باستخدام تسميات الصفوف/الأعمدة. مثال: df.loc[row_label, column_label] تُرجع بيانات محددة عند تقاطع row_label و column_label.
  • الفهرسة المستندة إلى الأعداد الصحيحة باستخدام iloc[]: iloc[] تسمح لك بالوصول إلى البيانات في إطار البيانات باستخدام فهارس مستندة إلى الأعداد الصحيحة. يمكن تمرير الفهارس الصحيحة لاسترداد بيانات محددة. مثال: df.iloc[row_index, column_index] تُرجع بيانات محددة عند الفهرس row_index و column_index.

نقطة تحقق

فهرسة إطار البيانات

مفاهيم تطبيقية

فهرسة إطار البيانات

تأمل الشِفرة التالية، أجب عن الأسئلة أدناه.

    import pandas as pd

    # إنشاء بيانات نموذجية
    data = {
      "A": ["a", "b", "c", "d"],
      "B": [12, 20, 5, -10],
      "C": ["C", "C", "C", "C"]
    }

    df = pd.DataFrame(data)
1.
ما ناتج print(df.iloc[0, 0])؟
  1. a
  2. b
  3. IndexError
2.
ما ناتج print(df.iloc[1, 1])؟
  1. a
  2. b
  3. 20
3.
ما ناتج print(df.loc[2, 'A'])؟
  1. c
  2. C
  3. b

تقطيع البيانات وتصفيتها

يتضمن تقطيع البيانات وتصفيتها تحديد مجموعات فرعية معينة من البيانات بناءً على شروط معينة أو نطاقات الفهرس/التسمية. تقطيع البيانات (Data slicing) يشير إلى تحديد مجموعة فرعية من الصفوف و/أو الأعمدة من إطار البيانات. يمكن إجراء التقطيع باستخدام النطاقات أو القوائم أو الشروط المنطقية.

  • التقطيع باستخدام النطاقات: مثال: df.loc[start_row:end_row, start_column:end_column] يحدد الصفوف والأعمدة ضمن النطاقات المحددة.
  • التقطيع باستخدام قائمة: مثال: df.loc[[label1, label2, ...], :] يحدد الصفوف الموجودة في القائمة [label1, label2, ...] ويتضمن جميع الأعمدة نظرًا لأن جميع الأعمدة محددة بواسطة عامل النقطتين.
  • التقطيع بناءً على شرط: df[condition] يحدد فقط الصفوف التي تستوفي condition المعطى.

تصفية البيانات (Data filtering) يتضمن تحديد الصفوف أو الأعمدة بناءً على شروط معينة. مثال: في التعبير df[df['column_name'] > threshold]، تُصفَّى إطار البيانات df باستخدام عامل التحديد ([]) والشرط (df['column_name'] > threshold) المُمرَّر. تُرجَع جميع الإدخالات في إطار البيانات df حيث تكون القيمة المقابلة في إطار البيانات هي True.

نقطة تحقق

الفهرسة على مجموعة بيانات رحلات الطيران

مفاهيم تطبيقية

تقطيع وتصفية إطار البيانات

تأمل الشِفرة التالية، أجب عن الأسئلة.

    import pandas as pd

    # إنشاء بيانات نموذجية
    data = {
      "A": [1, 2, 3, 4],
      "B": [5, 6, 7, 8],
      "C": [9, 10, 11, 12]
    }

    df = pd.DataFrame(data)
4.
أي مما يلي يُرجع الصفوف الثلاثة الأولى من العمود A؟
  1. df.loc[1:3, "A"]
  2. df.loc[0:2, "A"]
  3. df.loc[0:3, "A"]
5.
أي مما يلي يُرجع الصف الثاني؟
  1. df.iloc[2]
  2. df[2]
  3. df.loc[1]
6.
أي مما يلي يُرجع العمود الأول؟
  1. df.loc[0, :]
  2. df.iloc[:, 0]
  3. df.loc["A"]
7.
أي مما يلي يؤدي إلى تحديد الصفين الثاني والرابع من إطار البيانات؟
  1. df[df.loc[:, "A"] % 2 == 0]
  2. df[df[:, "A"] % 2 == 0]
  3. df[df.loc["A"] % 2 == 0]

معالجة البيانات المفقودة

يمكن أن تحدث القيم المفقودة في مجموعة البيانات عندما لا تكون البيانات متاحة أو لم يتم تسجيلها بشكل صحيح. يُعد تحديد القيم المفقودة وإزالتها خطوة مهمة في تنظيف البيانات ومعالجتها المسبقة. يجب على عالم البيانات مراعاة الاعتبارات الأخلاقية طوال عملية التحليل الاستكشافي للبيانات، خاصة عند معالجة البيانات المفقودة. قد يفكرون في الإجابة على أسئلة مثل "لماذا البيانات مفقودة؟"، "بيانات مَن المفقودة؟"، و"بالنظر إلى البيانات المفقودة، هل لا تزال مجموعة البيانات عينة ممثلة للمجتمع قيد الدراسة؟". الدوال التالية مفيدة في فهم وتحليل البيانات المفقودة.

  • isnull(): يمكن استخدام دالّة isnull() لتحديد الإدخالات Null في إطار البيانات. القيمة المُرجَعة للدالّة هي إطار بيانات منطقي، بنفس أبعاد إطار البيانات الأصلي مع قيم True حيث توجد قيم مفقودة.
  • dropna(): يمكن استخدام دالّة dropna() لإسقاط الصفوف التي تحتوي على قيم Null.
  • fillna(): يمكن استخدام دالّة fillna() لاستبدال قيم Null بقيمة بديلة مقدمة. مثال: df.fillna(df.mean()) يستبدل جميع قيم Null بمتوسط قيمة العمود المحدد.

لتعريف قيمة Null في إطار البيانات، يمكنك استخدام القيمة np.nan من مكتبة NumPy. الدوال التي تساعد في تحديد وإزالة الإدخالات الفارغة موصوفة في الجدول أسفل الشِفرة التالية.

    import pandas as pd
    import numpy as np

    # إنشاء بيانات نموذجية
    data = {
      "Column 1": ["A", "B", "C", "D", "E"],
      "Column 2": [np.NAN, 200, 500, 0, -10],
      "Column 3": [True, True, False, np.NaN, np.NaN]
    }
    
    df = pd.DataFrame(data)
العمود 1 العمود 2 العمود 3
0 A NaN True
1 B 200.0 True
2 C 500.0 False
3 D 0.0 NaN
4 E -10.0 NaN
جدول 15.5
الدالّة مثال الناتج الشرح
isnull()
df.isnull()
العمود 1 العمود 2 العمود 3
0 False True False
1 False False False
2 False False False
3 False False True
4 False False True

دالّة df.isnull() تُرجع مصفوفة منطقية بقيم منطقية تمثل ما إذا كان كل إدخال هو Null.

fillna()
df["Column 2"] =\
df["Column 2"].fillna(df["Column 2"]
  .mean())
العمود 1 العمود 2 العمود 3
0 A 172.5 True
1 B 200.0 True
2 C 500.0 False
3 D 0.0 NaN
4 E -10.0 NaN

تُستبدل قيم Null في Column 2 بمتوسط القيم غير Null في العمود.

dropna()
# يُطبَّق بعد تنفيذ 
# الصف السابق
df = df.dropna()
العمود 1 العمود 2 العمود 3
0 A 172.5 True
1 B 200.0 True
2 C 500.0 False

تُحذف جميع الصفوف التي تحتوي على قيمة Null من إطار البيانات.

جدول 15.6 أمثلة تحديد وإزالة القيم الفارغة.

مفاهيم تطبيقية

معالجة القيم المفقودة

8.
أي مما يلي يُستخدم للتحقق من إطار البيانات بحثًا عن قيم Null؟
  1. isnan()
  2. isnull()
  3. isnone()
9.
بافتراض وجود إطار بيانات df، أي مما يلي يستبدل قيم Null بالأصفار؟
  1. df.fillna(0)
  2. df.replacena(0)
  3. df.fill(0)
10.
بافتراض وجود إطار بيانات df، ماذا يفعل التعبير df.isnull().sum()؟
  1. يحسب مجموع القيم غير Null في كل عمود
  2. يحسب عدد قيم Null في إطار البيانات
  3. يحسب عدد قيم Null في كل عمود

ممارسة البرمجة مع غوغل

استخدم مستند بيئة غوغل كولاب أدناه لممارسة التحليل الاستكشافي للبيانات على مجموعة بيانات معينة.

مستند بيئة غوغل كولاب