📝 ملخص الصفحة
📚 استخدام وظيفة (df.groupby) لتجميع إطار البيانات في أعمدة متعددة
المفاهيم الأساسية
تجميع البيانات (Grouping): وضع عناصر البيانات في مجموعات بناءً على معايير وتطبيق دوال عليها (مثل `sum`).
خريطة المفاهيم
```markmap
استكشاف البيانات
المجموعات والتجميع (Grouping and Aggregating)
وظيفة Groupby
#### الغرض: تقسيم البيانات إلى مجموعات لإجراء حسابات وتحليل أفضل
#### التجميع حسب عمود واحد
##### مثال: `df.groupby('المنطقة الإدارية').sum()`
#### التجميع حسب عمودين
##### الكود: `data.groupby(['المنطقة الإدارية', 'المرحلة'], as_index=False)['مجموع الطلبة'].sum()`
###### معلمة `as_index=False`
####### الغرض: جعل الفهرس هو رقم الصف بدلاً من أسماء الأعمدة
#### التجميع وتحديد أعمدة للجمع
##### الكود: `studentsTeachers.groupby('المنطقة الإدارية')[['مجموع الطلبة', 'مجموع المعلمين']].sum()`
```
نقاط مهمة
- يمكن استخدام `groupby()` لتجميع البيانات حسب عمود واحد أو أكثر.
- عند استخدام `as_index=False`، تكون نتيجة التجميع بإطار بيانات جديد يكون فهرسه أرقاماً متسلسلة.
- يمكن تحديد الأعمدة المراد جمعها (`sum`) بعد عملية التجميع مباشرة.
- مثال: تجميع الطلبة حسب المنطقة الإدارية والمرحلة الدراسية وحساب المجموع لكل مجموعة.
📋 المحتوى المنظم
📖 محتوى تعليمي مفصّل
مجموعة المنطقة الأولى
نوع: محتوى تعليمي
في هذا المثال، سنقوم بتجميع الطلبة وفقاً لمناطقهم، ومنطقتهم، ومرحلتهم الدراسية، ونحسب مجموع الطلبة في كل منطقة.
نوع: محتوى تعليمي
# Group by two columns, first group the table by Region and
# then by level and for each group calculate the total NumOfStud
data.groupby(['المنطقة الإدارية', 'المرحلة'], as_index=False)['مجموع الطلبة'].sum()
نوع: محتوى تعليمي
تم ضبط as_index=false ليكون الفهرس هو رقم الصف بدلاً من أسماء الأعمدة.
نوع: METADATA
65 rows × 3 columns
مجموعة المنطقة الأخيرة
نوع: محتوى تعليمي
وفي هذا المثال، سنقوم بإنشاء إطار بيانات جديد للمنطقة وعدد المعلمين، ثم نجمع حسب المنطقة ونحسب مجموع الطلبة ومجموع المعلمين في كل منطقة.
نوع: محتوى تعليمي
# Create a table with one column for Regions, one column for total #students and one for total #teachers
studentsTeachers = data.loc[:, ['المنطقة الإدارية', 'مجموع الطلبة', 'مجموع المعلمين']]
studentsTeachers = studentsTeachers.groupby('المنطقة الإدارية')[['مجموع الطلبة', 'مجموع المعلمين']].sum()
نوع: METADATA
الشكل 3.28: استخدام وظيفة (df.groupby) لتجميع إطار البيانات في أعمدة متعددة
نوع: METADATA
الشكل 3.29: استخدام وظيفة (df.groupby) وتحديد العمود المصنف كمؤشر للبيانات الجديدة
🔍 عناصر مرئية
📄 النص الكامل للصفحة
--- SECTION: مجموعة المنطقة الأولى ---
في هذا المثال، سنقوم بتجميع الطلبة وفقاً لمناطقهم، ومنطقتهم، ومرحلتهم الدراسية، ونحسب مجموع الطلبة في كل منطقة.
# Group by two columns, first group the table by Region and
# then by level and for each group calculate the total NumOfStud
data.groupby(['المنطقة الإدارية', 'المرحلة'], as_index=False)['مجموع الطلبة'].sum()
تم ضبط as_index=false ليكون الفهرس هو رقم الصف بدلاً من أسماء الأعمدة.
65 rows × 3 columns
--- SECTION: مجموعة المنطقة الأخيرة ---
وفي هذا المثال، سنقوم بإنشاء إطار بيانات جديد للمنطقة وعدد المعلمين، ثم نجمع حسب المنطقة ونحسب مجموع الطلبة ومجموع المعلمين في كل منطقة.
# Create a table with one column for Regions, one column for total #students and one for total #teachers
studentsTeachers = data.loc[:, ['المنطقة الإدارية', 'مجموع الطلبة', 'مجموع المعلمين']]
studentsTeachers = studentsTeachers.groupby('المنطقة الإدارية')[['مجموع الطلبة', 'مجموع المعلمين']].sum()
الشكل 3.28: استخدام وظيفة (df.groupby) لتجميع إطار البيانات في أعمدة متعددة
الشكل 3.29: استخدام وظيفة (df.groupby) وتحديد العمود المصنف كمؤشر للبيانات الجديدة
--- VISUAL CONTEXT ---
**TABLE**: Untitled
Description: No description
Table Structure:
Headers: المنطقة الإدارية | مجموع الطلبة | مجموع المعلمين
Rows:
Row 1: الباحة | 11092 | 84464
Row 2: الجوف | 12503 | 151527
Row 3: الحدود الشمالية | 7156 | 88482
Row 4: الرياض | 114635 | 1473236
Row 5: الشرقية | 62982 | 909884
Row 6: القصيم | 29971 | 292996
Row 7: المدينة المنورة | 37617 | 443254
Row 8: تبوك | 16048 | 205573
Row 9: جازان | 26487 | 354608
Row 10: حائل | 17289 | 162909
Row 11: عسير | 46965 | 480060
Row 12: مكة المكرمة | 108309 | 1421176
Row 13: نجران | 10039 | 145397
Context: This table shows the total number of students and teachers grouped by administrative region.
🎴 بطاقات تعليمية للمراجعة
عدد البطاقات: 3 بطاقة لهذه الصفحة
ما الغرض الرئيسي من استخدام الدالة `groupby()` في مكتبة pandas عند تحليل البيانات؟
- أ) فرز البيانات تصاعدياً أو تنازلياً بناءً على عمود واحد.
- ب) تجميع البيانات في مجموعات بناءً على قيم عمود أو أكثر، ثم تطبيق دالة تجميعية (مثل sum, mean) على كل مجموعة.
- ج) حذف الصفوف التي تحتوي على قيم مفقودة (NaN) من إطار البيانات.
- د) دمج إطارين من البيانات أفقيًا بناءً على عمود مشترك.
الإجابة الصحيحة: b
الإجابة: تجميع البيانات في مجموعات بناءً على قيم عمود أو أكثر، ثم تطبيق دالة تجميعية (مثل sum, mean) على كل مجموعة.
الشرح: 1. الدالة `groupby()` تقسم إطار البيانات إلى مجموعات فرعية بناءً على قيم عمود محدد. 2. ثم تُطبق دالة تجميعية (مثل `sum()` أو `mean()`) على كل مجموعة. 3. النتيجة هي إطار بيانات جديد يلخص البيانات الأصلية حسب المجموعات.
تلميح: فكر في كيفية تنظيم البيانات المتشابهة معًا لاستخراج إحصاءات موجزة.
التصنيف: مفهوم جوهري | المستوى: متوسط
في الكود `data.groupby(['المنطقة الإدارية', 'المرحلة'], as_index=False)['مجموع الطلبة'].sum()`، ما تأثير المعلمة `as_index=False`؟
- أ) تجاهل الصفوف التي تحتوي على قيم فارغة في أعمدة التجميع.
- ب) تحديد عدد المجموعات القصوى المسموح بها في عملية التجميع.
- ج) جعل الفهرس في إطار البيانات الناتج أرقامًا تسلسلية للصفوف بدلاً من استخدام أسماء الأعمدة التي تم التجميع عليها كمؤشر.
- د) دمج جميع المجموعات في مجموعة واحدة نهائية.
الإجابة الصحيحة: c
الإجابة: جعل الفهرس في إطار البيانات الناتج أرقامًا تسلسلية للصفوف بدلاً من استخدام أسماء الأعمدة التي تم التجميع عليها كمؤشر.
الشرح: عند تعيين `as_index=False`، لا تُستخدم أعمدة التجميع (المنطقة الإدارية والمرحلة) كمؤشر (index) للصفوف في النتيجة. بدلاً من ذلك، تظهر كأعمدة عادية، ويُستخدم فهرس رقمي تسلسلي للصفوف.
تلميح: ما الذي يحدد تسمية الصفوف في الجدول الناتج؟
التصنيف: مفهوم جوهري | المستوى: متوسط
ما الفرق بين ناتج الكودين التاليين في تجميع البيانات حسب 'المنطقة الإدارية'؟
1. `data.groupby('المنطقة الإدارية')['مجموع الطلبة'].sum()`
2. `data.groupby('المنطقة الإدارية', as_index=False)['مجموع الطلبة'].sum()`
- أ) الكود (1) يحسب المتوسط بينما الكود (2) يحسب المجموع.
- ب) الكود (1) يتعامل مع قيم نصية فقط بينما الكود (2) يتعامل مع قيم رقمية فقط.
- ج) في الكود (1)، ستكون 'المنطقة الإدارية' هي المؤشر (index) للصفوف في الناتج. في الكود (2)، ستكون 'المنطقة الإدارية' عمودًا عاديًا في الناتج مع فهرس رقمي تسلسلي.
- د) الكود (1) يقوم بالتجميع على عمود واحد بينما الكود (2) يقوم بالتجميع على عمودين.
الإجابة الصحيحة: c
الإجابة: في الكود (1)، ستكون 'المنطقة الإدارية' هي المؤشر (index) للصفوف في الناتج. في الكود (2)، ستكون 'المنطقة الإدارية' عمودًا عاديًا في الناتج مع فهرس رقمي تسلسلي.
الشرح: الفرق يكمن في هيكل إطار البيانات الناتج. الكود (1) بدون `as_index=False` ينتج سلسلة (Series) حيث تكون أسماء المناطق هي المؤشرات. الكود (2) مع `as_index=False` ينتج إطار بيانات (DataFrame) حيث تكون المناطق في عمود منفصل والفهرس أرقام تسلسلية.
تلميح: ركز على بنية الجدول الناتج وموقع عمود 'المنطقة الإدارية' فيه.
التصنيف: فرق بين مفهومين | المستوى: صعب