التجميع والتلخيص (Groupby & Aggregation): إنشاء تقارير إحصائية برمجية
التجميع والتلخيص (Groupby & Aggregation): إنشاء تقارير إحصائية برمجية
يُعدّ Groupby من أهم المفاهيم العملية في تحليل البيانات، لأنه يحوّل الجداول الخام إلى تقارير قابلة للقراءة واتخاذ القرار. فبدلاً من النظر إلى ملايين الصفوف الفردية، يمكن تجميع البيانات حسب المدينة أو المنتج أو الفترة الزمنية، ثم تطبيق عمليات Aggregation لاستخراج المقاييس الأساسية مثل المجموع، المتوسط، العدد، والانحراف.
عملياً، لا تبدأ التقارير الإحصائية من خطوة التجميع مباشرة، بل تأتي بعد مراحل القراءة والتنظيف والفهم البنيوي للبيانات. لذلك يرتبط هذا الموضوع بشكل طبيعي بمقالات سابقة مثل مكتبة Pandas (1): قراءة واستدعاء البيانات من ملفات CSV و Excel برمجياً، ومكتبة Pandas (2): استكشاف هيكل البيانات وفهم DataFrame و Series، ثم تنظيف البيانات (Data Cleaning): اكتشاف ومعالجة القيم المفقودة (Missing Values) قبل الوصول إلى طبقة التقارير النهائية.
في بيئات Big Data، تتضاعف أهمية التجميع لأن الهدف لا يكون فقط حساب أرقام وصفية، بل بناء طبقة تلخيص تشغيلية تدعم لوحات المتابعة، أنظمة التوصية، ومراقبة الأداء المالي أو التشغيلي. ولهذا فإن إتقان Groupby هو مهارة مركزية لكل من يعمل في Data Science وETL وهندسة البيانات الحديثة.
ما الذي يفعله Groupby فعلياً؟
من الناحية المفاهيمية، تقوم عملية Groupby بتقسيم البيانات إلى مجموعات فرعية وفق مفتاح أو أكثر، ثم تُطبَّق دوال تلخيص على كل مجموعة بشكل مستقل. مثال ذلك: تجميع المبيعات حسب الفرع، أو حسب الشهر، أو حسب الفرع والشهر معاً.
هذه الآلية مفيدة عندما تكون البيانات غير قابلة للقراءة كصفوف منفصلة. فمدير الأعمال لا يحتاج إلى كل عملية شراء على حدة، بل يريد مثلاً إجمالي الإيراد، عدد الطلبات، ومتوسط قيمة السلة لكل منطقة. هنا تتحول البيانات من شكل تشغيلي تفصيلي إلى شكل تحليلي قابل للمقارنة.
- اختيار مفتاح التجميع مثل الفرع أو التصنيف.
- تحديد الأعمدة الرقمية أو النصية المراد تلخيصها.
- تطبيق دوال مثل
sumوmeanوcountوmax. - إعادة تشكيل الناتج ليصبح تقريراً جاهزاً للتصدير أو العرض.
التجميع في Pandas: من جدول خام إلى تقرير تنفيذي
في بيئات التحليل اليومية، تعتمد نسبة كبيرة من التقارير على مكتبة Pandas بسبب مرونتها العالية في التعامل مع DataFrame. بعد الانتهاء من الفلترة المتقدمة (Filtering & Sorting): استخراج رؤى دقيقة من ملايين السجلات وتهيئة الجدول، يمكن تنفيذ التجميع خلال أسطر قليلة مع المحافظة على قوة تحليلية كبيرة.
import pandas as pd
df = pd.DataFrame({
"branch": ["Riyadh", "Jeddah", "Riyadh", "Dammam", "Jeddah", "Riyadh"],
"category": ["Electronics", "Electronics", "Furniture", "Furniture", "Electronics", "Furniture"],
"sales": [1500, 2300, 1800, 900, 2700, 2100],
"orders": [10, 15, 8, 5, 17, 9]
})
report = (
df.groupby(["branch", "category"])
.agg(
total_sales=("sales", "sum"),
avg_sales=("sales", "mean"),
total_orders=("orders", "sum"),
order_count=("orders", "count")
)
.reset_index()
.sort_values(by="total_sales", ascending=False)
)
print(report)
في المثال السابق، قمنا بتجميع البيانات باستخدام مفتاحين هما الفرع والتصنيف. ثم استُخدمت دالة agg لبناء أكثر من مقياس في خطوة واحدة، وهي أفضل من كتابة كل عملية تجميع منفصلة عندما نحتاج إلى تقرير احترافي متكامل.
متى نستخدم أكثر من دالة تلخيص؟
غالباً لا يكفي مقياس واحد للحكم على الأداء. فإجمالي المبيعات قد يكون مرتفعاً، لكن عدد الطلبات منخفض، ما يعني أن متوسط قيمة الطلب مرتفع. وفي حالات أخرى قد يكون العدد كبيراً لكن المبيعات ضعيفة، وهنا تختلف القراءة تماماً. لذلك من الأفضل الجمع بين مؤشرات حجم النشاط ومؤشرات القيمة.
في تصميم طبقة التقارير داخل أنظمة
Data Architecture، يفضّل فصل الجداول التفصيلية عن الجداول المجمعة. هذا الأسلوب يقلل تكلفة الاستعلامات المتكررة، ويسرّع بناء لوحاتBI، ويحسن تجربة المستخدم في الأنظمة التحليلية.
التجميع في SQL: القلب التحليلي لقواعد البيانات
إذا كانت البيانات مخزنة في مستودع تحليلي أو قاعدة تشغيلية كبيرة، فإن تنفيذ Group By مباشرة داخل SQL يكون أكثر منطقية من سحب البيانات بالكامل إلى الذاكرة. هذه المقاربة تقلل نقل البيانات وتستفيد من الفهارس وخطط التنفيذ الخاصة بمحرك قاعدة البيانات.
SELECT
branch,
category,
SUM(sales) AS total_sales,
AVG(sales) AS avg_sales,
SUM(orders) AS total_orders,
COUNT(*) AS row_count
FROM sales_transactions
WHERE sales_date >= '2024-01-01'
GROUP BY branch, category
ORDER BY total_sales DESC;
هذا النوع من الاستعلامات شائع جداً في بناء طبقات ETL Pipeline، حيث تُحتسب المؤشرات داخل قاعدة البيانات، ثم تُرسل النتائج المختصرة إلى أنظمة العرض أو ملفات التقارير النهائية.
عندما تكبر البيانات: التجميع باستخدام PySpark
في البيئات الموزعة التي تعتمد على Apache Spark أو Hadoop، يصبح التجميع أكثر حساسية من حيث الأداء، لأن العمليات تتطلب غالباً إعادة توزيع البيانات بين العقد. لذلك يجب كتابة منطق التجميع بعناية، خاصة عندما تكون مفاتيح المجموعات ذات توزيع غير متوازن.
from pyspark.sql import SparkSession
from pyspark.sql.functions import sum, avg, count, col
spark = SparkSession.builder.appName("AggregationReport").getOrCreate()
df = spark.read.option("header", True).csv("sales.csv", inferSchema=True)
report = (
df.groupBy("branch", "category")
.agg(
sum("sales").alias("total_sales"),
avg("sales").alias("avg_sales"),
sum("orders").alias("total_orders"),
count("*").alias("row_count")
)
.orderBy(col("total_sales").desc())
)
report.show()
الميزة الأساسية هنا أن Spark ينفذ عمليات التجميع على مستوى موزع، ما يجعله مناسباً للملفات الضخمة وسجلات الأحداث والبيانات شبه اللحظية. لكن الأداء الفعلي يعتمد على تصميم البيانات أكثر من اعتماده على الكود وحده.
في مشاريع
Performance Optimization، احذر من التجميع على أعمدة عالية الكاردينالية جداً مثل المعرفات الفريدة لكل مستخدم إذا لم تكن هناك حاجة تحليلية حقيقية. هذا يؤدي إلى تضخم عدد المجموعات وزيادة عملياتshuffleواستهلاك الذاكرة.
أخطاء شائعة قبل بناء التقرير الإحصائي
نجاح التلخيص لا يعتمد فقط على كتابة دالة صحيحة، بل على جودة البيانات نفسها. فإذا كانت القيم المفقودة أو السجلات المكررة أو الحالات الشاذة موجودة دون معالجة، فإن التقرير النهائي سيكون مضللاً. ولهذا ينبغي الربط دائماً بين التجميع ومراحل الإعداد السابقة مثل معالجة البيانات المكررة والمشوهة (Duplicates & Outliers) باستخدام بايثون.
- التجميع قبل تنظيف القيم الفارغة في الحقول الأساسية.
- احتساب المتوسط على بيانات تحتوي على قيم شاذة غير منضبطة.
- نسيان توحيد أنواع البيانات مثل تحويل التاريخ أو المبالغ الرقمية.
- تنفيذ التجميع بعد عمليات دمج وتوحيد الجداول (Merge, Join, Concat) لبناء قاعدة بيانات تحليلية شاملة دون فحص التكرار الناتج عن الربط.
حالات استخدام حقيقية في الأعمال
تظهر قيمة Aggregation بوضوح عندما نربطها بسيناريوهات واقعية. فالتقارير المالية تعتمد على تجميع الحركات حسب الفترة والمركز المالي، والتجارة الإلكترونية تعتمد على تلخيص الطلبات حسب المنتج أو القناة، كما تستخدمها فرق العمليات لمراقبة أزمنة التنفيذ ونسب الأعطال.
من أفضل
Use Casesللتجميع إنشاء جداول يومية أو أسبوعية مختصرة بدلاً من إعادة تحليل السجلات الخام كل مرة. هذه الاستراتيجية تقلل زمن الاستجابة، وتدعم التوسع المستقبلي، وتُسهّل حوكمة مؤشرات الأداء الرئيسية داخل المؤسسة.
الخلاصة
يمثل Groupby & Aggregation الجسر العملي بين البيانات الخام وصناعة القرار. فمن خلاله يمكن تحويل ملايين السجلات إلى مؤشرات دقيقة، قابلة للمقارنة، وسهلة العرض برمجياً داخل تقارير أو لوحات تحليلية.
سواء كنت تعمل باستخدام Pandas على جهاز محلي، أو تبني معالجة موزعة عبر PySpark، أو تنفذ التلخيص داخل SQL، فإن المبدأ واحد: تجميع ذكي، مقياس صحيح، ووعي كامل بجودة البيانات ومعمارية الأداء. وعند إتقان هذه الطبقة، تنتقل من مجرد قراءة البيانات إلى إنتاج معرفة تشغيلية ذات قيمة استراتيجية، تماماً كما ناقشنا في مدخل إلى علوم البيانات: كيف تحول الأرقام العشوائية إلى قرارات استراتيجية؟.