0Pricing
Pandas & NumPy Academy · درس

قائمة فحص توصيف مجموعة البيانات

افحص منهجيًا الشكل والأنواع dtypes وعدد القيم المفقودة والقيم الفريدة والإحصاءات الأساسية عند التعامل مع مجموعة بيانات جديدة.

قائمة فحص توصيف مجموعة البيانات درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Pandas & NumPy Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

الدقائق الخمس الأولى مع مجموعة البيانات

يتبع محللو البيانات ذوو الخبرة قائمة فحص منهجية لتوصيف البيانات كلما واجهوا مجموعة بيانات جديدة. فبدلًا من البدء بالتحليل مباشرة، يجيبون أولًا عن مجموعة من الأسئلة التشخيصية: ما حجم البيانات؟ ما أنواع الأعمدة؟ كم عدد القيم المفقودة؟ هل توجد حالات شاذة واضحة؟ يمنع هذا النهج المنظم إهدار ساعات من العمل بسبب سوء فهم أنواع البيانات أو وجود قيم null مخفية تؤدي إلى إفساد الحسابات.

import pandas as pd

# Simulate loading a new dataset
df = pd.read_csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')

# Step 1: size
print('Shape:', df.shape)
print('Rows:', len(df))

الخطوة 1: الشكل والأعمدة و dtypes

تتمثل الفحوصات الثلاثة الأولى دائمًا في الشكل (الصفوف × الأعمدة)، وأسماء الأعمدة (هل تطابق التوقعات؟)، وdtypes (هل الأعمدة الرقمية رقمية فعلًا؟). ومن المفاجآت الشائعة تحميل الأعمدة الرقمية كنوع object لأنها تحتوي على إدخالات نصية مثل 'unknown' أو أرقام مختلطة بتنسيق الفواصل. ويساعد اكتشاف ذلك في مرحلة التوصيف على تجنب عمليات التجميع التي تُرجع نتائج خاطئة بصمت.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

print('Shape:', df.shape)
print('\nColumns:', df.columns.tolist())
print('\nData Types:')
print(df.dtypes)

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

استدعِ df.isna().sum() لعدّ القيم المفقودة في كل عمود، ثم اقسم الناتج على len(df) للحصول على النسبة المئوية. عادةً ما تكون الأعمدة التي تزيد نسبة القيم المفقودة فيها على 50% مرشحة للحذف؛ أما نسبة القيم المفقودة بين 1% و20% فتستدعي عادةً الإسناد؛ بينما تتطلب نسبة 0% فحصًا للتأكد من سلامتها — فقد يكون الاكتمال التام مريبًا بحد ذاته إذا كانت البيانات الحقيقية نادرًا ما تصل بهذه النظافة. رتّب الناتج ترتيبًا تنازليًا لرؤية الأعمدة الأكثر تضررًا أولًا.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Missing value audit
missing = df.isna().sum()
missing_pct = (missing / len(df) * 100).round(1)
audit = pd.DataFrame({'count': missing, 'pct': missing_pct})
audit = audit[audit['count'] > 0].sort_values('pct', ascending=False)
print(audit)

الخطوة 3: الإحصاءات الوصفية الأساسية

يُرجع df.describe() العدد والمتوسط والانحراف المعياري والحد الأدنى والربيعات والحد الأقصى لكل عمود رقمي في استدعاء واحد. افحص دائمًا الحد الأدنى والحد الأقصى بحثًا عن قيم مستحيلة (مثل العمر = -3 أو العمر = 999)، والمتوسط مقارنةً بالوسيط لاكتشاف الالتواء (فالفارق الكبير يشير إلى قيم شاذة)، والعدد (فإذا كان أقل من إجمالي عدد الصفوف، فهذا يعني وجود قيم null). أضف include='all' لتضمين إحصاءات أعمدة object أيضًا (عدد القيم الفريدة، والقيمة الأكثر تكرارًا، والتكرار).

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Describe numeric columns
print('Numeric statistics:')
print(df.describe().round(2))

print('\nObject column statistics:')
print(df.describe(include='object'))

الخطوة 4: أعداد القيم الفريدة

بالنسبة إلى الأعمدة الفئوية، تحقّق من عدد القيم الفريدة باستخدام df[col].nunique() وافحص القيم الأكثر شيوعًا باستخدام value_counts(). انتبه إلى الأعمدة التي تبدو فئوية لكنها تحتوي على مئات القيم الفريدة (فقد تكون حقل نص حر أو معرّفًا)، وإلى الأعمدة التي يُفترض أن تكون منطقية لكنها تحتوي على ثلاث قيم (True وFalse وNaN). تحقّق أيضًا من اتساق حالة الأحرف: إذ تُعامل 'Male' و'male' كفئتين منفصلتين.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

categorical = df.select_dtypes(include='object').columns
for col in categorical:
    n = df[col].nunique()
    top_vals = df[col].value_counts().head(3).to_dict()
    print(f'{col}: {n} unique — top3: {top_vals}')

الخطوة 5: عينات من الصفوف باستخدام head وtail

يعرض df.head(10) وdf.tail(10) أول الصفوف وآخرها على التوالي. ويفيد فحص كليهما لأن مجموعات البيانات غالبًا ما تحتوي على صفوف عناوين نظيفة وصفوف أخيرة فوضوية ناتجة عن مشكلات التصدير (مثل إلحاق صف ملخص 'Total' بتصدير CSV). استخدم أيضًا df.sample(10) لرؤية عينة عشوائية من الصفوف، مما يتجنب أي تحيز نحو بداية مجموعة البيانات.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

print('First 3 rows:')
print(df.head(3))

print('\nLast 3 rows:')
print(df.tail(3))

print('\nRandom sample of 3:')
print(df.sample(3, random_state=42))

الخطوة 6: التحقق من التكرارات

استدعِ df.duplicated().sum() لعدّ الصفوف المكررة بالكامل (حيث تتطابق كل الأعمدة). فإذا كانت مجموعة بيانات يُفترض أنها تحتوي على سجلات عملاء فريدة تتضمن حتى تكرارًا واحدًا، فهذه إشارة تحذيرية إلى وجود مشكلات في جودة البيانات. استخدم df[df.duplicated(keep=False)] لفحص الصفوف المكررة الفعلية. وعندما يُفترض أن يحتوي الجدول على مفاتيح فريدة (مثل معرّف المستخدم)، تحقّق أيضًا من التفرد على مستوى المفتاح باستخدام df['id'].duplicated().sum().

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Full-row duplicates
full_dups = df.duplicated().sum()
print(f'Fully duplicated rows: {full_dups}')

# Key-level duplicates (e.g. passenger class + name)
key_dups = df.duplicated(subset=['pclass', 'sex', 'age', 'fare']).sum()
print(f'Near-duplicate rows (pclass+sex+age+fare): {key_dups}')

الخطوة 7: أعمدة التاريخ والوقت

إذا كانت مجموعة البيانات تحتوي على أعمدة للتاريخ أو الطابع الزمني، فتحقّق من أن Pandas حمّلها كنوع datetime64 (وليس object). حوّلها باستخدام pd.to_datetime(df['col']). ثم افحص نطاق التاريخ: df['date'].min() وdf['date'].max(). وابحث عن طوابع زمنية بعيدة في المستقبل (سنة 2099) أو الماضي (بداية العصر: 1970-01-01)، إذ تشير إلى قيم بديلة مستخدمة لتمثيل التواريخ المفقودة.

import pandas as pd

# Synthetic example with a date column
df = pd.DataFrame({
    'order_id': [1, 2, 3, 4],
    'order_date': ['2024-01-10', '2024-02-05', '1970-01-01', '2024-12-31']
})

df['order_date'] = pd.to_datetime(df['order_date'])

print('Date range:', df['order_date'].min(), 'to', df['order_date'].max())
print('\nSuspect dates (before 2020):')
print(df[df['order_date'] < '2020-01-01'])

أتمتة قائمة الفحص في دالة

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

import pandas as pd

def profile(df, name='DataFrame'):
    print(f'=== Profile: {name} ===')
    print(f'Shape: {df.shape[0]} rows x {df.shape[1]} cols')
    print(f'Duplicates: {df.duplicated().sum()}')
    print(f'\nMissing values (top 5):')
    missing = (df.isna().sum() / len(df) * 100).sort_values(ascending=False)
    print(missing[missing > 0].head(5).round(1).to_string())
    print(f'\ndtypes:')
    print(df.dtypes.value_counts().to_string())
    print('=' * 35)

import seaborn as sns
df = sns.load_dataset('titanic')
profile(df, 'Titanic')

ydata-profiling لتحليل البيانات الاستكشافي الآلي

تُنشئ مكتبة ydata-profiling (المعروفة سابقًا باسم pandas-profiling) تقرير HTML شاملًا من DataFrame بسطر واحد: ProfileReport(df).to_file('report.html'). يتضمن التقرير مدرجات تكرارية، ومصفوفات ارتباط، وخرائط حرارية للقيم المفقودة، واكتشاف الصفوف المكررة، ومخططات التفاعل. وتُعد هذه أسرع طريقة لمشاركة ملف تعريفي كامل لمجموعة بيانات مع صاحب مصلحة يحتاج إلى فهم البيانات من دون كتابة تعليمات برمجية.

# Install: pip install ydata-profiling
# from ydata_profiling import ProfileReport
# import pandas as pd
# import seaborn as sns

# df = sns.load_dataset('titanic')
# profile = ProfileReport(df, title='Titanic Profiling Report', explorative=True)
# profile.to_file('titanic_profile.html')

# The above generates a full HTML report automatically.
# Alternatively, use minimal mode for faster generation:
# profile = ProfileReport(df, minimal=True)
print('ydata-profiling generates HTML EDA reports automatically.')
print('Run: pip install ydata-profiling')

ملخص قائمة التحقق من توصيف البيانات

تتضمن قائمة التحقق الكاملة لتوصيف أي مجموعة بيانات جديدة سبع خطوات: 1) الشكل والأعمدة، 2) أنواع البيانات وتعيينات الأنواع المشبوهة، 3) عدد القيم المفقودة ونسبتها المئوية لكل عمود، 4) الإحصاءات الوصفية (الحد الأدنى، والحد الأقصى، والمتوسط، والوسيط)، 5) القيم الفريدة وتكرارات القيم للأعمدة الفئوية، 6) اكتشاف الصفوف المكررة، و7) التحقق من نطاق التواريخ. يؤدي إكمال قائمة التحقق هذه قبل إجراء أي تحليل إلى منع الأخطاء الصامتة التي تفسد النتائج في المراحل اللاحقة.

تحقق سريع

اختبر مدى فهمك لقائمة التحقق من توصيف مجموعة البيانات الواردة في هذا الدرس.

مراجعة الدرس

تعلمت في هذا الدرس: قائمة التحقق ذات الخطوات السبع لتوصيف البيانات (الشكل، وأنواع البيانات، والقيم المفقودة، والإحصاءات، وعدد القيم الفريدة، والتكرارات، والتواريخ)، وتجميع عمليات التحقق في دالة ملف تعريفي قابلة لإعادة الاستخدام، واستخدام ydata-profiling لإنشاء تقارير HTML تلقائية. بعد ذلك، سننتقل إلى التحليل أحادي المتغير — أي دراسة كل عمود بشكل مستقل لاكتشاف القيم الشاذة، والالتواء، والتوزيعات غير المعتادة.

الأسئلة الشائعة

هل درس «قائمة فحص توصيف مجموعة البيانات» مجاني؟

نعم — نص درس «قائمة فحص توصيف مجموعة البيانات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

ماذا ستتعلم في «قائمة فحص توصيف مجموعة البيانات»؟

افحص منهجيًا الشكل والأنواع dtypes وعدد القيم المفقودة والقيم الفريدة والإحصاءات الأساسية عند التعامل مع مجموعة بيانات جديدة. تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟

لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «قائمة فحص توصيف مجموعة البيانات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟

نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. قائمة فحص توصيف مجموعة البيانات
  2. التحليل أحادي المتغير
  3. التحليل ثنائي المتغير وتحليل الارتباط
  4. تلخيص النتائج في تقرير
← العودة إلى Pandas & NumPy Academy