تحليل البيانات في بايثونعلم النفس الإحصائي

كيفية ضبط حجم الفئات في المدرجات التكرارية في Matplotlib

دليل أكاديمي شامل يشرح كيفية ضبط وتعديل حجم الفئات (Bin Size) في المدرجات التكرارية باستخدام مكتبة Matplotlib في بايثون عبر مختلف الطرق والخوارزميات.

تاريخ النشر

تُعد عملية استكشاف البيانات الإحصائية وتصويرها بصرياً ركيزة جوهرية من ركائز البحث العلمي الحديث والتحليل الاستدلالي المتقدم. وفي سياق تحليل البيانات الكمية المستمرة، يبرز المدرج التكراري (Histogram) بوصفه أحد أهم النماذج البيانية وأكثرها استخداماً لتقدير وتلخيص التوزيع الاحتمالي التجريبي للبيانات. يتيح هذا التمثيل للباحثين والمحللين معاينة معالم التوزيع الأساسية، مثل التمركز الإحصائي، ومقاييس التشتت، والالتواء، والتفرطح، إضافة إلى الكشف السريع عن الأنماط الشاذة أو التجمعات الفرعية المتباينة داخل العينة المدروسة.

ومع ذلك، فإن القوة التفسيرية للمدرج التكراري تعتمد اعتماداً كلياً وحرجاً على كيفية تقسيم نطاق البيانات إلى فترات أو فئات فرعية تُعرف اصطلاحاً باسم “الفئات” أو Bins. إن اختيار حجم الفئة وعرضها ليس مجرد تفصيل شكلي أو تفضيل تجميلي عابر، بل هو قرار رياضي وإحصائي محوري يؤثر بصورة مباشرة على بنية التمثيل البياني الناتج؛ فالإفراط في توسيع الفئات قد يؤدي إلى ظاهرة التنعيم المفرط وطمس المعالم الجوهرية للبيانات، في حين أن الإفراط في تضييقها يقود إلى تجزئة مشتتة تطغى عليها تقلبات العينة العشوائية والتشويش الإحصائي غير ذي الدلالة.

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

1. مقدمة شاملة للمدرجات التكرارية وأهمية ضبط حجم الفئات

1.1 مفهوم المدرج التكراري ودوره في الاستكشاف الإحصائي

يُعرَّف المدرج التكراري من منظور الإحصاء الوصفي بأنه تمثيل بياني ثنائي الأبعاد يُستخدم لعرض التوزيع التكراري للبيانات الرقمية المتصلة أو المستمرة. يتكون المدرج من مستطيلات رأسية متجاورة، حيث يمثل المحور الأفقي (السيني) نطاق القيم المقاسة مقسماً إلى فترات متتالية تُعرف بالفئات، بينما يمثل المحور الرأسي (الصادي) التكرار المطلق، أو التكرار النسبي، أو كثافة الاحتمال المقابلة لكل فترة. تنبع الأهمية الاستكشافية للمدرج من قدرته الفريدة على تحويل سلاسل الأرقام الخام المجردة إلى هيئة بصرية تمكن العين البشرية من استيعاب معالم التوزيع الاحتمالي الكامن خلف العينة التجريبية بكفاءة عالية.

يسهم المدرج التكراري مساهمة حاسمة في مرحلة تحليل البيانات الاستكشافية (EDA)؛ إذ يُعين الباحث على تحديد موضع النزعة المركزية للبيانات، واكتشاف مدى تناظر التوزيع أو ميله نحو اليمين (التواء موجب) أو نحو اليسار (التواء سالب)، وتقييم درجة تفرطح القمم وحدتها مقارنة بالتوزيع الطبيعي المعياري. كما تبرز قيمته الإجرائية في الكشف الفوري عن تعدد الأنماط، حيث تشير القمم المتعددة في المدرج إلى احتمالية وجود مجتمعات فرعية غير متجانسة مدمجة داخل العينة ذاتها، مما يوجه الباحث نحو إعادة هيكلة فرضياته وتصنيف عينات الدراسة بدقة أكبر قبل تطبيق الاختبارات الإحصائية الاستدلالية.

ومن الضروري الإشارة إلى التفريق الدقيق بين المدرج التكراري والمخطط الشريطي (Bar Chart)؛ فالمخطط الشريطي يُستخدم لتمثيل المتغيرات النوعية أو الفئوية المنفصلة وتفصل بين أشرطته مسافات بينية واضحة تعكس استقلالية الفئات، في حين أن المدرج التكراري مخصص حصرياً للمتغيرات الكمية المتصلة، وتتلاصق أشرطته فيزيائياً لتعكس استمرارية المدى العددي. في المدرج التكراري، لا تقتصر الدلالة على ارتفاع الشريط فحسب، بل تمتد لتشمل المساحة الكلية لكل مستطيل، والتي ترتبط ارتباطاً طردياً مع الكتلة الاحتمالية للقيم الواقعة ضمن حدوده.

1.2 الأثر العلمي لاختيار حجم الفئات (Bin Size) على تفسير البيانات

يعد اختيار حجم الفئات، الذي يحدد في الوقت ذاته عدد الفئات وعرض كل منها، عاملاً حاسماً يوجه مسار التفسير الإحصائي برمته. إذا اختار الباحث عدداً صغيراً جداً من الفئات (أي جعل عرض الفئة واسعاً بصورة مفرطة)، يقع التمثيل البياني فيما يُعرف بظاهرة “التنعيم المفرط” (Over-smoothing). في هذه الحالة، تُدمج الملاحظات الدقيقة والقمم المتفرقة في كتلة عريضة واحدة، مما يخفي الخصائص الهيكلية الحرجة، مثل غياب التماثل أو وجود قمم ثانوية، وهو ما يقود إلى استنتاجات مضللة تفترض بساطة توزيع البيانات أو اقترابها الزائف من التوزيع الطبيعي المنتظم.

وعلى النقيض من ذلك تماماً، يؤدي اختيار عدد كبير جداً من الفئات (أي جعل الفئات ضيقة للغاية) إلى ظاهرة “نقص التنعيم” أو التشويش الإحصائي (Under-smoothing). يترتب على هذا الإجراء تفتيت البيانات إلى مستطيلات متباعدة وفارغة أحياناً، وتظهر في الرسم قمم عشوائية عديدة ليست سوى انعكاس لتقلبات العينة العشوائية وأخطاء القياس اللحظية وليست خصائص حقيقية للمجتمع الإحصائي الأصلي. يحول هذا التشويش البصري دون قدرة المحلل على استنباط التوجه العام للبيانات ويفقد المدرج التكراري غايته الأساسية في التلخيص والاختزال المفاهيمي.

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

1.3 نظرة عامة على مكتبة Matplotlib والتعامل مع الكائنات البيانية

تُعد مكتبة Matplotlib البيئة البرمجية الأساسية والأكثر رسوخاً لتوليد الرسوم البيانية العلمية والرسوم التوضيحية داخل النظام البيئي للغة بايثون. تعتمد المكتبة على معمارية كائنية التوجه تتيح الفصل المنطقي بين كائن الشكل العام (Figure) ومحاور الرسم التابعة له (Axes). تُوفر واجهة البرمجة الشهيرة pyplot مساراً تفاعلياً مبسطاً لتوليد الرسوم البيانية السريعة، إلى جانب الواجهة الكائنية التي تمنح المطورين والباحثين تحكماً كاملاً في كل عنصر بصري وتكوين رياضي داخل اللوحة البيانية.

تتكامل دالة الرسم التكراري الأساسية plt.hist() (أو تابع الكائن ax.hist()) تكاملاً وثيقاً ومباشراً مع المصفوفات العددية الموجهة في مكتبة NumPy، وكذلك مع هياكل السلاسل والأطر البيانية في مكتبة Pandas. هذا التكامل يتيح معالجة مجموعات البيانات الضخمة وحساب التوزيعات التكرارية والحدود الفئوية بسرعات فائقة بالاعتماد على خوارزميات لغة C المضمنة في البنية التحتية لـ NumPy، دون الحاجة إلى إنشاء حلقات تكرارية بطيئة في بيئة بايثون الأساسية.

تتميز Matplotlib بتوفير مرونة برمجية استثنائية فيما يتعلق بإدارة المعاملات الإحصائية؛ فالدالة hist() لا تكتفي برسم الأشرطة بل تتولى إجراء الحسابات الإحصائية التجميعية، وتحديد نقاط الفصل، وتطبيع المساحات الاحتمالية، وتوليد الكائنات الرسومية المسماة Patches. هذه المرونة تجعل من السهل تخصيص حجم الفئات وفق أشكال هندسية متعددة، والجمع بين التحليل الرياضي والتصميم المرئي المتقدم لتلبية معايير النشر في المجلات العلمية المحكمة.

2. المفاهيم الرياضية والإحصائية المؤطرة لتقسيم الفئات

2.1 التعريف الرياضي لعرض الفئة (Bin Width) والمدى الكلي

يستند التقسيم المتساوي للفئات في المدرج التكراري إلى مبادئ رياضية بسيطة ومحددة. تبدأ العملية بحساب المدى الإجمالي للبيانات ($R$)، والذي يمثل الفرق الرياضي المطلق بين أعلى قيمة مسجلة في مجموعة البيانات ($x_{\max}$) وأدنى قيمة مسجلة ($x_{\min}$):

$$R = x_{\max} – x_{\min}$$

وعند الرغبة في تجزئة هذا المدى إلى عدد محدد من الفئات المتساوية مقداره $k$، يُحسب العرض الفردي لكل فئة ($w$ أو $h$) بقسمة المدى الإجمالي على عدد الفئات وفق المعادلة التالية:

$$w = \frac{R}{k} = \frac{x_{\max} – x_{\min}}{k}$$

توضح هذه العلاقة الرياضية التناسب العكسي الدقيق بين عدد الفئات وعرضها؛ فكلما ازداد عدد الفئات $k$، تناقص عرض الفئة الواحدة $w$، مما يؤدي إلى تضييق نطاق تجميع البيانات وزيادة التفاصيل الدقيقة المعروضة. وعلى العكس من ذلك، يؤدي خفض عدد الفئات إلى زيادة عرضها، مما يسهم في زيادة قدرة التجميع وتلخيص البيانات على حساب التفاصيل الصغرى. يُحدد هذا التوازن كيفية تجميع التكرارات المطلقة (عدد المشاهدات الواقعة ضمن كل نطاق) والتكرارات النسبية (نسبة مشاهدات الفئة إلى المجموع الكلي للمشاهدات $N$).

يؤثر اتساع الفئات تأثيراً مباشراً على حساب الكثافات؛ فإذا كانت الفئات متساوية العرض، فإن ارتفاع المستطيل يكون متناسباً طردياً وبشكل مباشر مع كل من التكرار المطلق والتكرار النسبي. أما إذا كانت الفئات متباينة الاتساع، فإن الاعتماد على الارتفاع وحده يؤدي إلى تشويه رياضي، مما يفرض إعادة صياغة الارتفاعات لتمثل الكثافة التكرارية الناتجة عن قسمة التكرار النسبي على عرض الفئة المقابلة لضمان ثبات الدلالة الرياضية للمساحات.

2.2 أثر التوزيع الاحتمالي على هندسة الفئات

تتأثر القرارات المتعلقة بهندسة الفئات بطبيعة التوزيع الاحتمالي الأساسي للبيانات. في حالة البيانات التي تتبع التوزيع الطبيعي المتماثل (Gaussian Distribution)، يتمركز الجزء الأكبر من الملاحظات حول المتوسط الحسابي، مما يجعل استخدام الفئات المتساوية والمستندة إلى مقاييس الانحراف المعياري خياراً ملائماً وكافياً لتوضيح شكل التوزيع الجرسي المألوف دون إحداث تشوهات بصرية.

في المقابل، تفرض التوزيعات شديدة الالتواء (Skewed Distributions)، مثل توزيعات الدخل المالي أو زمن الاستجابة في الاختبارات النفسية، تحديات إحصائية معقدة. ففي مثل هذه التوزيعات، تتجمع أغلبية الملاحظات في نطاق ضيق جداً بالقرب من أحد الأطراف، بينما تمتد قلة ضئيلة من الملاحظات عبر ذيل طويل جداً نحو الطرف الآخر. يؤدي استخدام الفئات المتساوية في هذه الحالات إما إلى تكديس معظم العينة في فئة واحدة أو فئتين، أو توليد عدد هائل من الفئات الفارغة على امتداد الذيل الطويل، مما يستدعي استخدام مقاييس قوية مثل المدى الربيعي (IQR) أو الاعتماد على فئات ذات عروض متغيرة هندسياً.

علاوة على ذلك، تؤدي القيم الشاذة والمتطرفة (Outliers) إلى توسيع المدى الإجمالي للبيانات ($R$) بصورة غير متناسبة، مما يفرض زيادة عرض الفئات المتساوية بصورة تجعل النواة المركزية للبيانات تبدو مضغوطة وغير واضحة. يتقاطع هذا السلوك مع النظرية الإحصائية لتقدير دالة كثافة الاحتمال غير المعلمية (Nonparametric Probability Density Estimation)، حيث يُنظر إلى المدرج التكراري بوصفه أبسط تقدير تقريبي موضعي للدالة الحقيقية $f(x)$، وتحدد هندسة الفئات مدى اقتراب هذا التقدير من المنحنى الرياضي الحقيقي دون الوقوع في خطأ التحيز المفرط أو التباين المفرط.

2.3 حساب التكرارات داخل الحدود المغلقة والمفتوحة

تتطلب عملية الفرز الإحصائي للقيم داخل الفئات وضع قواعد رياضية حاسمة لتحديد كيفية معاملة النقاط الحدية التي تتطابق تماماً مع أطراف الفترات. في التحليل الرياضي، تُعرف الفترات إما بأنها مغلقة من اليسار ونصف مفتوحة من اليمين $[a, b)$، مما يعني أن الفترة تشمل القيمة $a$ وكل قيمة أصغر تماماً من $b$ ($a le x < b$)، أو أنها نصف مفتوحة من اليسار ومغلقة من اليمين $(a, b]$، مما يعني أن الفترة تستبعد $a$ وتشمل $b$ ($a < x le b$).

تتبع مكتبة Matplotlib ومكتبة NumPy في الوضع الافتراضي معيار الفترة المغلقة من اليسار والمفتوحة من اليمين لجميع الفئات باستثناء الفئة الأخيرة؛ أي أن الفئات تُعرّف وفق النمط $[x_i, x_{i+1})$، بينما تُعامل الفئة النهائية كفترة مغلقة تماماً من الطرفين $[x_{k-1}, x_k]$ لضمان احتواء القيمة القصوى $x_{\max}$ وتفادي إسقاطها خارج نطاق الرسم. يُعد هذا الضبط الرياضي ضرورياً للحفاظ على الاتساق الداخلي لمجموع التكرارات لكي يتطابق تطابقاً تاماً مع الحجم الكلي للعينة ($N$).

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

3. البنية البرمجية لدالة plt.hist() في Matplotlib

3.1 تشريح المعاملات الأساسية للدالة plt.hist()

تمثل الدالة matplotlib.pyplot.hist() واجهة متكاملة تجمع بين إجراء الحسابات الإحصائية المجمعة وإنشاء الرسوم البيانية المتطورة. تستقبل الدالة عدداً واسعاً من المعاملات الموضعية والاسمية، ويأتي في مقدمتها المعامل الأساسي x، والذي يقبل مصفوفة أحادية البعد من البيانات العددية، أو متجهاً من مكتبة NumPy، أو سلسلة بيانات من Pandas Series، بالإضافة إلى إمكانية تمرير قائمة من المصفوفات لرسم مدرجات متعددة متزامنة.

يحتل المعامل bins الموقع الأهم في توجيه سلوك الدالة الرياضي؛ إذ يمتاز بمرونة فائقة تسمح له بقبول أشكال بيانات متباينة:

  • قيمة عددية صحيحة (Integer): لتحديد عدد الفئات المتساوية المطلوب إنشاؤها تلقائياً عبر نطاق البيانات.
  • متتالية أو مصفوفة رقمية (Sequence of numbers): لتحديد المواقع الدقيقة لحدود الفئات، مما يتيح بناء فئات متساوية أو غير متساوية بدقة مطلقة.
  • سلسلة نصية خوارزمية (String): لاختيار إحدى الطرق الإحصائية المعتمدة مثل 'sturges'، 'fd'، 'scott'، أو 'auto' لحساب التقسيم الأمثل برمجياً.

يتكامل المعامل bins مع معاملات وظيفية حاسمة أخرى، مثل المعامل range الذي يقبل زوجاً عددياً يحدد الحدين الأدنى والأعلى للنطاق المشمول في الفرز وتجاهل ما يقع خارجهما، والمعامل المنطقي density الذي يقوم عند ضبطه على القيمة True بتطبيع التكرارات وتحويل المساحة الكلية لجميع المستطيلات إلى وحدة واحدة مساوية لـ 1، ليعبر المحور الرأسي عن كثافة الاحتمال بدلاً من عدد الملاحظات الخام، إضافة إلى المعامل cumulative الذي يُستخدم لبناء التوزيع التكراري التراكمي.

3.2 القيم المرجوعة من استدعاء دالة الرسم

على خلاف دوال الرسم التي تُرجع كائنات رسومية بحتة، تقوم الدالة plt.hist() بتنفيذ حسابات إحصائية داخلية متقدمة وتُرجع مصفوفة ثلاثية (Tuple) تحتوي على مكونات رياضية وبصرية فائقة الأهمية للمحلل، يمكن تفكيكها برمجياً إلى ثلاثة متغيرات رئيسية كالتالي:

n, bins_edges, patches = plt.hist(data, bins=...)

يمثل العنصر الأول n مصفوفة أحادية البعد من نوع NumPy Array تحتوي على التكرارات الفعلية المحسوبة لكل فئة (أو قيم الكثافة الاحتمالية في حال تفعيل density=True). إذا تم تحديد $k$ فئة، فإن المصفوفة n تتألف من $k$ عناصر عددية تمثل أطوال أو ارتفاعات المستطيلات البيانية على التوالي من اليسار إلى اليمين.

يمثل العنصر الثاني bins_edges مصفوفة تحتوي على الحدود الفاصلة الدقيقة للفئات (Bin Edges)؛ وبناءً على القواعد الرياضية للفترات المتجاورة، فإن المصفوفة تحتوي دائماً على $k + 1$ عنصراً لتحديد بدايات ونهايات الفئات الـ $k$. أما العنصر الثالث patches، فهو عبارة عن حاوية تضم كائنات رسومية فردية من نوع matplotlib.patches.Rectangle، يمثل كل كائن منها مستطيلاً مرسوماً داخل الشكل، مما يتيح للمبرمج الوصول المباشر إلى خصائص كل شريط بياني وتعديل لونه وموضعه وتنسيقه بصورة مستقلة ولاحقة لعملية الرسم الأساسية.

4. الطريقة الأولى: تحديد عدد الفئات مباشرة عبر المعامل bins

4.1 آلية التمرير العددي الصحيح (Integer Specification)

تُعد طريقة تمرير قيمة عددية صحيحة مباشرة إلى المعامل bins الصيغة الأكثر شيوعاً وسهولة في الاستخدام عند التعامل مع مكتبة Matplotlib. تُكتب هذه الصيغة برمجياً بالهيئة: plt.hist(data, bins=k)، حيث تمثل $k$ عدداً صحيحاً موجباً يحدد إجمالي عدد الفئات التي يرغب الباحث في تجزئة البيانات إليها عبر المدى الممتد من أدنى قيمة إلى أقصى قيمة مسجلة في المتجه الرقمي.

عند استقبال القيمة $k$، تستدعي Matplotlib داخلياً دالة التقسيم الإحصائي من مكتبة NumPy، والتي تقوم بحساب المدى الكلي عبر طرح القيمة الدنيا من القيمة القصوى ثم قسمة الناتج بدقة على $k$ لاستخراج العرض المتساوي $w$. بناءً على ذلك، يتم توليد مصفوفة حدود الفئات تلقائياً بحيث تبدأ عند $x_{\min}$ وتنتهي عند $x_{\max}$ بفواصل خطية متطابقة، ثم يتم فرز عناصر العينة وتوزيعها داخل تلك الفترات وفق الشروط الحدية القياسية وحساب التكرارات الناتجة لرسم المستطيلات الموافقة.

matplotlib histogram with specific number of bins
matplotlib histogram with specific number of bins

يوضح التحليل البرمجي لهذه الطريقة أنها توفر حلاً فعالاً وسريعاً للحصول على نظرة عامة أولية حول بنية البيانات دون الحاجة إلى كتابة خوارزميات مساعدة. ومع ذلك، فإن هذه الطريقة تتطلب من المحلل تحديد قيمة $k$ استناداً إلى معرفة مسبقة بحجم العينة وطبيعة التوزيع، لتفادي اختيار أعداد غير متناسبة تؤدي إلى إخفاء معالم التوزيع الأساسية.

4.2 دراسة مقارنة لسلوك الدالة مع أعداد فئات مختلفة

لإدراك التأثير المباشر لتغيير قيمة $k$ على الدلالة البيانية، يمكن إجراء دراسة مقارنة على مجموعة بيانات واحدة تحتوي على قمتين واضحتين (Bimodal Distribution). عند ضبط المعامل بقيمة منخفضة مثل bins=5، يُلاحظ حدوث تنعيم جائر يؤدي إلى دمج القمتين في كتلة مركزية عريضة واحدة تبدو شبيهة بتوزيع طبيعي واسع التشتت، مما يضلل المحلل ويخفي حقيقة وجود مجتمعين فرعيين متباينين داخل العينة.

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

وعند اختيار قيمة وسيطة متوازنة، مثل bins=20، يستقر الشكل البياني عند نقطة التوازن المثلى؛ حيث تنفصل القمتان بوضوح كافٍ وتتراجع الفجوات العشوائية، مما يمنح الباحث رؤية إحصائية متزنة تعكس الخصائص التوزيعية الحقيقية بدقة وبساطة في آن واحد. يبرز هذا التباين أهمية المعايرة التجريبية الدقيقة لقيمة $k$ عند الاعتماد على التمرير العددي المباشر.

4.3 حالات الاستخدام المثالية لتمرير عدد الفئات

يُوصى بالاعتماد على طريقة التمرير العددي الصحيح للمعامل bins في سيناريوهات تحليلية واستكشافية محددة. يبرز في طليعة هذه السيناريوهات مرحلة الاستكشاف الأولي السريع للبيانات (Initial Data Exploration)؛ ففي مستهل التعامل مع بيانات خام مجهولة التوزيع، يحتاج المحلل إلى معاينة سريعة وسهلة لشكل التوزيع العام دون الانشغال في حساب الحدود الرياضية المعقدة.

كما تلائم هذه الطريقة مجموعات البيانات ذات الأحجام المتوسطة التي تتوزع بانتظام على مدى رقمي مستمر ومتجانس وتخلو من الالتواءات الشديدة أو القيم الشاذة المتباعدة جداً. في مثل هذه البيئات المتجانسة، يؤدي التقسيم الآلي إلى فترات متساوية إلى نتائج تمثيلية دقيقة وقابلة للتفسير المباشر دون إدخال تشوهات هندسية على المحور السيني.

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

5. الطريقة الثانية: تحديد حدود الفئات عبر القوائم والمصفوفات المخصصة

5.1 التعريف الدقيق لنقاط البداية والنهاية عبر Sequence of Edges

تُمثل طريقة التمرير اليدوي لمصفوفة أو قائمة رقمية تحدد حدود الفئات (Bin Edges) الأسلوب الأكثر دقة وإحكاماً للتحكم في مواضع الفئات في Matplotlib. في هذه الطريقة، لا يُمرر عدد صحيح، بل متتالية تصاعدية تحدد بدقة متناهية أين تبدأ وأين تنتهي كل فئة على طول المحور السيني، كأن تُكتب الدالة بالصيغة: plt.hist(data, bins=[0, 4, 8, 12, 16, 20]).

في هذا المثال النموذجي، يُنشئ الكود خمس فئات محددة بدقة: الفئة الأولى من 0 إلى 4، والثانية من 4 إلى 8، والثالثة من 8 إلى 12، والرابعة من 12 إلى 16، والخامسة من 16 إلى 20. يمنح هذا الأسلوب الباحث سلطة كاملة لربط حدود الفئات بمعايير قياس تجريبية خارجية محددة مسبقاً، أو تقسيم المدى العددي وفق أطر مرجعية نظرية لا تعتمد بالضرورة على الحدين الأدنى والأعلى المشتقين آلياً من العينة.

يجب التأكد من أن المصفوفة الممرضة مرتبة ترتيباً تصاعدياً صارماً، وأن تغطي الحدود المحددة كامل نطاق البيانات المدخلة؛ إذ إن أي قيمة في العينة تقع دون الحد الأدنى الأول (مثل قيم أقل من 0) أو تتجاوز الحد الأقصى الأخير (مثل قيم أكبر من 20) سيتم استبعادها تماماً وإسقاطها من الحساب والرسم، مما يقلل من حجم العينة الفعلي الممثل على الرسم ما لم يكن هذا الاستبعاد مقصوداً لعزل نطاق محدد.

5.2 إنشاء فئات غير متساوية العرض (Unequal Bin Widths)

من أهم المزايا المتقدمة لتمرير مصفوفة الحدود المخصصة إمكانية إنشاء مدرجات تكرارية تحتوي على فئات متباينة وغير متساوية العرض (Unequal Bin Widths). يُعد هذا الأسلوب أداة إحصائية متطورة للتعامل مع البيانات التي تتسم بتركيزات كثيفة للغاية في مجالات ضيقة وندرة شديدة في مجالات أخرى ممتدة، مثل توزيعات الثروة أو فترات البقاء على قيد الحياة بعد التدخلات الطبية الجراحية.

يمكن على سبيل المثال تمرير متتالية مثل bins=[0, 5, 10, 20, 50, 100]، حيث تكون الفئات الأولى ضيقة لاستيعاب التباينات الدقيقة في مناطق الكثافة العالية، بينما تتسع الفئات اللاحقة تدريجياً لدمج الملاحظات المتباعدة في الذيل الطويل ومنع تفتتها إلى فئات فارغة متتالية. يتيح هذا التصميم تمثيل البيانات المتطرفة بصرياً ضمن نطاق مضغوط ومقروء.

ومع ذلك، فإن استخدام فئات غير متساوية العرض يفرض التزاماً رياضياً وإحصائياً حاسماً: يجب بالضرورة تفعيل المعامل density=True في الدالة. فإذا استمر الرسم بالاعتماد على التكرارات المطلقة، فإن الفئات العريضة ستبدو ضخمة ومرتفعة بصورة مصطنعة نظراً لاتساع نطاقها التجميعي، مما يولد خداعاً بصرياً فادحاً يوحي بأنها تمثل مناطق تركز كثيف للمشاهدات، بينما يعيد تفعيل معامل الكثافة ضبط الارتفاعات لتمثل المعدل النسبي لكل وحدة طول، مما يحفظ الأمانة العلمية للتمثيل البياني.

5.3 تطبيقات الحدود المخصصة في تصنيف الدرجات والمقاييس

تجد طريقة الحدود المخصصة تطبيقات واسعة في مجالات القياس التربوي، وعلم النفس القياسي، والتقييم المؤسسي؛ حيث تتطلب الممارسات المهنية في هذه المجالات تقسيم الدرجات الخام إلى مستويات أداء نوعية محددة مسبقاً وفق معايير مقننة، بدلاً من الاعتماد على تقسيمات رياضية متساوية غير ذات دلالة تطبيقية.

على سبيل المثال، عند تحليل درجات اختبار أكاديمي تتراوح مقاييسه بين 0 و100، يمكن تمرير مصفوفة حدود تتماشى تماماً مع التقديرات الأكاديمية المعتمدة: bins=[0, 60, 70, 80, 90, 100] لتمثل تصنيفات (راسب، مقبول، جيد، جيد جداً، ممتاز). يُتيح هذا التقسيم قراءة مباشرة لنسب ومعدلات الطلاب الواقعين في كل مستوى تقييمي دون الحاجة إلى معالجات يدوية إضافية.

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

6. الطريقة الثالثة: تحديد عرض الفئة باستخدام دوال NumPy الحسابية

6.1 توظيف الدالة np.arange() لضبط العرض الدقيق

عندما تتطلب الدراسة العلمية تحديد عرض هندسي ثابت ودقيق للفئة الواحدة (وليكن $w$) بدلاً من تحديد العدد الكلي للفئات، تبرز الدالة الحسابية numpy.arange() بوصفها الخيار البرمجي الأكثر كفاءة وأناقة في بايثون. تتيح هذه الدالة توليد متتالية عددية تبدأ من نقطة محددة وتنتهي عند نقطة أخرى بزيادة خطية ثابتة تمثل بدقة عرض الفئة المطلوب.

تُصاغ هذه الطريقة برمجياً وفق النمط الرياضي التالي:

bin_width = w

bins = np.arange(data.min(), data.max() + bin_width, bin_width)

plt.hist(data, bins=bins)

في هذا البناء، يحدد المتغير bin_width الاتساع الفيزيائي للفئة الواحدة (مثلاً: 0.5، 1، 5، أو 10 وحدات قياسية). ويُعد إضافة المقدار + bin_width إلى الحد الأقصى في الدالة إجراءً تقنياً واجباً لمعالجة الطبيعة الرياضية للدالة arange التي تستثني نقطة التوقف النهائية افتراضياً، مما يضمن اشتمال المصفوفة الناتجة على القيمة العظمى للبيانات وعدم بترها.

تمنح هذه الطريقة الباحث تحكماً قياسياً دقيقاً يتناسب مع وحدات القياس الفيزيائية أو السلوكية المعتمدة؛ فإذا كانت البيانات تعبر عن قياسات بالسنتيمتر أو المللي ثانية، يمكن ضبط الفئات لتعكس بدقة شرائح قياسية متجانسة يسهل تفسيرها ونقلها في المتون العلمية المحكمة.

6.2 استخدام الدالة np.linspace() لتقسيم مجالات خطية محددة

تُقدم مكتبة NumPy أداة توليد حسابية أخرى لا تقل أهمية، وهي الدالة numpy.linspace(). تختلف هذه الدالة مفاهيمياً عن np.arange() في أنها لا تستقبل العرض كمعامل، بل تستقبل القيمة الابتدائية، والقيمة النهائية، والعدد الإجمالي المطلوب من النقاط المتساوية البينية، متضمنة نقطتي البداية والنهاية بصورة قطعية.

تُستخدم هذه الطريقة بالصيغة البرمجية:

bins = np.linspace(start_point, end_point, num_edges)

تتجلى قوة linspace الرياضية في تجنبها الدقيق لمشاكل الفاصلة العائمة وأخطاء التقريب الحسابي المتراكمة (Floating-point precision issues) التي قد تصاحب دالة arange عند توليد خطوات كسرية دقيقة وصغيرة جداً (مثل الخطوات بمقدار 0.1 أو 0.01).

تُفضل هذه الطريقة عندما يرغب الباحث في تثبيت نطاق الرسم ضمن مجال نظري قياسي محدد مسبقاً (مثلاً: من 0 إلى 100) وتجزئته بدقة رياضية مطلقة إلى عدد محدد من الفواصل المغلقة تماماً، مما يضمن ثبات مصفوفة الحدود عبر مختلف العينات التجريبية المستقلة ومقارنتها دون حدوث أي انزياح ميكروي في مواقع الحدود الفاصلة.

6.3 أمثلة تطبيقية تفصيلية وتحليل الأكواد

لتطبيق هذه المنهجيات بصورة عملية متكاملة، يمكن استعراض كود برمجي يوضح كيفية توليد عينة بيانات مستمرة وتطبيق عروض فئات متغيرة عليها باستخدام np.arange()، مع معاينة التحول البصري الناتج وإعادة ضبط علامات المحاور السينية لتتطابق تماماً مع الفواصل الهندسية للفئات:

import numpy as np
import matplotlib.pyplot as plt

# توليد بيانات مستمرة عشوائية تمثل قياسات تجريبية
np.random.seed(42)
measurements = np.random.normal(loc=50, scale=10, size=500)

# ضبط عرض الفئة بمقدار محدد (مثلاً 5 وحدات)
bin_width = 5.0
custom_bins = np.arange(np.floor(measurements.min()), np.ceil(measurements.max()) + bin_width, bin_width)

# إنشاء الرسم وضبط الخصائص الجمالية والمحاور
fig, ax = plt.subplots(figsize=(10, 6))
counts, edges, patches = ax.hist(measurements, bins=custom_bins, edgecolor='black', alpha=0.75, color='#1f77b4')

# مطابقة علامات المحور السيني مع حدود الفئات
ax.set_xticks(custom_bins)
ax.set_title("مدرج تكراري بعرض فئات ثابت ومحاور مضبوطة هندسياً", fontsize=14)
ax.set_xlabel("القيم المقاسة (وحدات قياسية)", fontsize=12)
ax.set_ylabel("التكرار المطلق", fontsize=12)
ax.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

يُظهر تحليل هذا الكود أن استخدام الدوال الحسابية np.floor وnp.ceil يضمن أن تكون نقاط البداية والنهاية أرقاماً صحيحة ومريحة للقراءة البصرية، في حين يضمن استخدام ax.set_xticks(custom_bins) مطابقة دقيقة لا لبس فيها بين موضع كل خط تقسيم على المحور السيني والحدود الفيزيائية لأشرطة المدرج التكراري، مما يحقق أعلى درجات الوضوح والصرامة الأكاديمية في العرض البياني.

7. الخوارزميات التلقائية لتحديد حجم الفئات في Matplotlib

7.1 قاعدة ستورجس (Sturges’ Rule) واستخداماتها

تُعد قاعدة ستورجس، التي صاغها عالم الإحصاء هربرت ستورجس عام 1926، واحدة من أقدم وأشهر القواعد الرياضية الكلاسيكية لحساب عدد الفئات الأمثل في المدرجات التكرارية. تستند هذه القاعدة إلى افتراض ضمني بأن البيانات تتبع توزيعاً طبيعياً متماثلاً، وتُشتق رياضياً من خلال تقريب التوزيع الثنائي ذي الحدين، حيث يُحسب عدد الفئات $k$ باستخدام المعادلة التالية:

$$k = \lceil \log_2(n) \rceil + 1$$

حيث يمثل $n$ إجمالي حجم العينة، بينما تشير الدالة $lceil dots rceil$ إلى التقريب الرياضي للأعلى نحو أقرب عدد صحيح.

يمكن تفعيل هذه القاعدة مباشرة في مكتبة Matplotlib عبر تمرير السلسلة النصية: bins='sturges'. تتميز قاعدة ستورجس ببساطتها الحسابية وسرعة معالجتها، وهي تؤدي أداءً جيداً للغاية مع العينات الصغيرة والمتوسطة (أقل من 200 مشاهدة) التي تقترب من التوزيع الطبيعي المعياري.

ومع ذلك، توجه الأدبيات الإحصائية الحديثة انتقادات منهجية لقاعدة ستورجس؛ نظراً لأنها تؤدي إلى “تنعيم مفرط” حاد عند تطبيقها على مجموعات البيانات الضخمة (البيانات الكبيرة)، حيث يزداد عدد الفئات ببطء شديد تماشياً مع الدالة اللوغاريتمية، مما يحرم المحلل من رصد البنى التفصيلية للعينات الكبيرة. كما أنها تفشل تماماً في التعامل مع البيانات غير المتماثلة أو التوزيعات الملتوية ومتعددة القمم، مما يجعل الاعتماد عليها مقصوراً على العينات المحدودة المتماثلة.

7.2 قاعدة فريدمان-دياكونيس (Freedman-Diaconis Rule) للبيانات القوية

تُمثل قاعدة فريدمان-دياكونيس، التي طُرحت عام 1981، واحدة من أكثر الطرق الإحصائية اللامعلمية متانة ورسوخاً لتحديد عرض الفئة الأمثل. تتجاوز هذه القاعدة عيوب قاعدة ستورجس من خلال اعتمادها على المدى الربيعي (Interquartile Range – IQR) بدلاً من المدى الإجمالي أو الانحراف المعياري، مما يجعلها مقاومة تماماً للتأثر بالقيم الشاذة والمتطرفة.

تُحدد هذه الخوارزمية العرض الأمثل للفئة الواحدة ($h$) بالمعادلة التالية:

$$h = 2 \cdot \frac{\text{IQR}(x)}{\sqrt[3]{n}} = 2 \cdot \text{IQR}(x) \cdot n^{-1/3}$$

وبمجرد حساب العرض $h$، يُستخرج عدد الفئات المطلوب بقسمة المدى الكلي للبيانات على هذا العرض:

$$k = \left\lceil \frac{x_{\max} – x_{\min}}{h} \right\rceil$$

تُفعل هذه الخوارزمية برمجياً عبر تمرير المعامل bins='fd' إلى دالة الرسم في Matplotlib. تُعد هذه الطريقة الخيار القياسي الأكثر موثوقية عند التعامل مع التوزيعات الملتوية، والبيانات ذات الذيول الثقيلة، والتوزيعات الحاوية على قيم متطرفة، حيث تتكيف هندسة الفئات تلقائياً لتعكس التركيز الإحصائي للكتلة المركزية للعينة دون أن تتأثر بالانحرافات الطرفية الحادة.

7.3 قواعد سكوت (Scott) ودوين (Doane) وAuto

إلى جانب القاعدتين السابقتين، تدعم مكتبة Matplotlib مجموعة متكاملة من الخوارزميات الرياضية التلقائية المتطورة:

  • قاعدة سكوت (Scott’s Rule): تُفعل عبر bins='scott'، وتعتمد على تقليل الخطأ المربعي التكاملي المتوسط (MISE) لتقدير الكثافة الاحتمالية للتوزيعات الغاوسية. يُحسب العرض فيها بالمعادلة $h = 3.49 \cdot s \cdot n^{-1/3}$ (حيث $s$ هو الانحراف المعياري للعينة). وهي ممتازة للبيانات المستمرة المتماثلة ذات الأحجام الكبيرة.
  • قاعدة دوين (Doane’s Rule): تُفعل عبر bins='doane'، وهي تعديل متقدم لقاعدة ستورجس يدمج معامل الالتواء المحسوب للعينة ($\gamma_1$) لتعديل عدد الفئات تصاعدياً كلما زادت درجة عدم تماثل التوزيع، مما يجعلها متفوقة على ستورجس في معالجة البيانات المنحرفة باعتدال.
  • الخيار التلقائي الهجين (Auto): يُفعل عبر bins='auto'، وهو المعامل الافتراضي والذكي في كل من NumPy وMatplotlib الحديثة؛ حيث يقوم تلقائياً بالمفاضلة الحسابية بين قاعدتي 'fd' و'sturges'، واختيار العرض الأكثر ملاءمة الذي يضمن توليد فئات آمنة إحصائياً وأكثر تفصيلاً وفقاً لطبيعة حجم العينة ومداها الربيعي.

8. معالجة الفئات غير المتساوية وتطبيع الكثافة الاحتمالية

8.1 المأزق الإحصائي للمساحة مقابل الارتفاع في المدرج التكراري

ينص المبدأ التأسيسي للمدرج التكراري على أن المساحة الكلية لكل مستطيل بياني يجب أن تتناسب تناسباً طردياً ومباشراً مع عدد الملاحظات (أو الاحتمال الرياضي) التي تنتمي لتلك الفئة. في حالة الفئات المتساوية العرض ($w = \text{constant}$)، تكون المساحة عبارة عن الارتفاع مضروباً في العرض الثابت، مما يعني بالضرورة أن الارتفاع وحده يُعبر بصورة أمينة ومباشرة عن التكرار المطلق.

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

لحل هذا التناقض الرياضي، يجب إعادة ضبط الارتفاع الرأسي ليمثل “كثافة التكرار” (Frequency Density)، وهي القيمة الناتجة عن قسمة التكرار على اتساع الفئة، مما يجعل مساحة المستطيل (الارتفاع $\times$ العرض) مطابقة تماماً للقيمة التكرارية الفعلية وتستعيد الرؤية البصرية دقتها ونزاهتها الرياضية.

8.2 تفعيل معامل density وتحويل التكرارات إلى كثافة احتمال

تُعالج مكتبة Matplotlib مسألة تطبيع المساحات ومعايرة الفئات المتفاوتة عبر المعامل المنطقي density=True. عند تفعيل هذا المعامل، تُجري الدالة تحويلاً رياضياً شاملاً لمصفوفة التكرارات $n_i$ المقابلة لكل فئة $i$ ذات عرض $w_i$ وحجم عينة كلي $N$، لتصبح القيمة الرأسية المحسوبة $y_i$ ممثلة لـ دالة كثافة الاحتمال (PDF) وفق المعادلة التالية:

$$y_i = \frac{n_i}{N \cdot w_i}$$

يضمن هذا التطبيع الرياضي أن حاصل جمع المساحات لجميع المستطيلات البيانية داخل المدرج التكراري يتطابق بدقة مطلقة مع الواحد الصحيح (أي: $\sum y_i \cdot w_i = 1$)، وهو الشرط الأساسي الذي يجب أن تستوفيه جميع دوال الكثافة الاحتمالية في نظرية الاحتمالات والإحصاء الرياضي.

تتجلى الأهمية الكبرى لتفعيل هذا المعامل عند الرغبة في مقارنة مدرجين تكراريين لعنتين مختلفتين تماماً في الحجم الإجمالي (مثلاً: عينة بحجم $N=100$ مقابل عينة بحجم $N=10000$)، أو عند استخدام فئات غير متساوية الأبعاد؛ حيث يلغي التطبيع أثر حجم العينة المطلق ويوحد مقياس الرسم للمقارنة الموضوعية المباشرة.

8.3 تراكب منحنيات دالة الكثافة الاحتمالية (KDE Overlay)

يُعد الجمع البصري بين المدرج التكراري ومنحنى تقدير كثافة النواة (Kernel Density Estimation – KDE) أحد أفضل الممارسات الإحصائية المتقدمة للتحقق من جودة اختيار حجم الفئات. يوفر منحنى KDE تقديراً مستمراً وناعماً لدالة الكثافة الاحتمالية، متجاوزاً الانقطاعات المكانية المترتبة على حدود الفئات الصندوقية في المدرج التكراري.

لتحقيق هذا التراكب في بيئة بايثون، يتم أولاً رسم المدرج التكراري باستخدام plt.hist(..., density=True) لضمان توحيد مقياس الكثافة على المحور الرأسي، ثم يتم حساب منحنى KDE بالاعتماد على دوال متخصصة مثل scipy.stats.gaussian_kde أو عبر الدوال الجاهزة في مكتبة Seaborn مثل sns.kdeplot() وإسقاطه فوق المحاور البيانية ذاتها.

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

9. تقنيات التخصيص الجمالي والتحكم البصري في حدود الفئات

9.1 تحديد حواف الفئات وتنسيق الفواصل اللونية

تظهر المدرجات التكرارية المولدة بالوضع الافتراضي في Matplotlib أحياناً ككتلة لونية موحدة متصلة يصعب معها على القارئ تمييز الفواصل الدقيقة بين الفئات المتجاورة، لا سيما عند استخدام لوحات ألوان أحادية النبرة. للتغلب على هذه المشكلة التنسيقية، توفر الدالة المعامل edgecolor، والذي يسمح بتلوين الحدود المحيطية للمستطيلات بلون مغاير (مثل edgecolor='black' أو edgecolor='white').

كما يُمكن التحكم في سماكة خطوط الحواف عبر المعامل linewidth (مثلاً: linewidth=1.2)، واختيار نمط الخطوط عبر المعامل linestyle ليكون متصلاً أو متقطعاً. يسهم هذا التحديد البصري الصارم في فصل الفئات هندسياً، مما يعزز قدرة العين البشرية على رصد ارتفاع كل فئة وتحديد موضعها على المحور الأفقي بدقة دون أي التباس بصري.

بالإضافة إلى ذلك، يلعب معامل الشفافية alpha (المتراوح بين 0 و1) دوراً محورياً عند تراكب مدرجين تكراريين داخل اللوحة ذاتها؛ إذ يسمح ضبط الشفافية (مثل alpha=0.6) برؤية المساحات المشتركة ومواقع التقاطع والافتراق بين توزيعين إحصائيين مختلفين بوضوح تام، مما يعزز جمالية الشكل النهائي ويرفع من قيمته التفسيرية.

9.2 محاذاة الفئات ومطابقة علامات المحاور (Tick Marks)

توفر مكتبة Matplotlib تحكماً دقيقاً في كيفية محاذاة أشرطة المدرج بالنسبة لنقاط البيانات المرجعية عبر المعامل align، والذي يقبل إحدى القيم الثلاث:

  • 'mid': وهو الخيار الافتراضي، حيث يتوسط كل شريط بياني المسافة الفاصلة بين الحدين الأدنى والأعلى لتلك الفئة.
  • 'left': حيث تتم محاذاة الحافة اليسرى للشريط البياني لتنطلق تماماً من الحد الأدنى للفئة.
  • 'right': حيث تتم محاذاة الحافة اليمنى للشريط البياني لتستند إلى الحد الأعلى للفئة.

ولإضفاء لمسة جمالية تزيد من قابلية القراءة، يُمكن استخدام المعامل rwidth (Relative Width)، والذي يحدد النسبة المئوية لعرض الشريط الفعلي مقارنة بعرض الفئة الكامل (مثلاً: rwidth=0.9). يؤدي ضبط هذه القيمة على نسبة أقل من 1 إلى إنشاء فراغات هوائية ضيقة وجمالية تفصل بين الأعمدة المتجاورة، مما يجعل المدرج يبدو أكثر ترتيباً وأسهل في القراءة في العروض والمطبوعات.

ويكتمل الضبط الهندسي المتقدم من خلال برمجة علامات المحور الأفقي عبر التابع ax.set_xticks(bins)؛ حيث يتم تمرير مصفوفة حدود الفئات الفعلية ذاتها إلى المحور السيني، مما يضمن أن الأرقام المطبوعة على المحور تقع بدقة متناهية تحت الفواصل الهيكلية للمستطيلات البيانية، وهو ما يقضي تماماً على ظاهرة الإزاحة البصرية ويمنح القارئ قراءة رياضية فورية لحدود كل فئة.

9.3 إضافة التسميات التوضيحية والإحصاءات الوصفية فوق الفئات

تتيح المعمارية البرمجية المرنة لـ Matplotlib إمكانية استخراج البيانات الإحصائية المجمعة المرجوعة من الدالة وإعادة كتابتها مباشرة فوق كل عمود بياني. يتم ذلك من خلال عمل حلقة تكرارية على كائنات patches واستخراج الارتفاع والموضع الأفقي لكل مستطيل واستخدام الدالة plt.text() لإدراج القيم الرقمية للتكرارات أو النسب المئوية فوق قمم الأعمدة، مما يحول الرسم إلى أداة مرئية غنية بالتفاصيل دون الحاجة للرجوع المستمر للمحور الرأسي.

علاوة على ذلك، يُعد إدراج الخطوط المرجعية الرأسية للمعالم الإحصائية الوصفية عبر التابع ax.axvline() من أرقى الممارسات في الرسم البياني العلمي. يتيح ذلك رسم خطوط رأسية ملونة ومتقطعة تمثل المتوسط الحسابي ($\mu$)، والوسيط الإحصائي ($\text{Median}$)، ومجالات الانحرافات المعيارية ($\pm 1\sigma, \pm 2\sigma$) فوق المدرج التكراري مباشرة.

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

10. التطبيقات العملية: تحليل وتصوير البيانات السلوكية والنفسية

10.1 تصوير أوقات الاستجابة في الاختبارات السلوكية والإدراكية

تتميز بيانات أوقات الاستجابة (Reaction Times – RT) في دراسات علم النفس التجريبي والعلوم العصبية السلوكية بخصائص توزيعية فريدة؛ إذ تتسم بالالتواء الإيجابي الحاد (Positive Skewness) ووجود ذيل طويل ممتد نحو اليمين يعكس الاستجابات البطيئة وفترات شرود الانتباه اللحظي، فضلاً عن وجود حد فيزيولوجي أدنى يستحيل تسجيل استجابات تحته (حوالي 150 إلى 200 مللي ثانية).

يتطلب تصوير هذه البيانات السلوكية دقة بالغة في ضبط حجم الفئات؛ فالاعتماد على الفئات الآلية العريضة قد يؤدي إلى طمس الفوارق الزمنية الدقيقة (التي تُقاس بعشرات المللي ثوانٍ) بين الظروف التجريبية المختلفة، مثل مقارنة زمن التعرف على المثيرات المتطابقة مقابل غير المتطابقة في مهام ستروب (Stroop Task). يُفضل في هذه الحالة استخدام الطريقة الحسابية np.arange() لضبط فئات زمنية ثابتة وموحدة تتراوح مثلاً بين 20 إلى 50 مللي ثانية لكل فئة عبر النطاق الممتد من 150 إلى 1500 مللي ثانية.

يضمن هذا الضبط المحكم إبراز موقع القمة الاستجابية السلوكية بدقة، مع الحفاظ على الرؤية الواضحة للذيل الطويل، مما يمكن الباحث من تطبيق النماذج الرياضية المتقدمة لتوزيعات زمن الاستجابة (مثل نموذج التوزيع اللوغاريتمي الطبيعي أو توزيع Ex-Gaussian) ومطابقتها بصرياً مع الفئات التجريبية المدروسة.

10.2 تمثيل درجات مقاييس الشخصية والاستبيانات النفسية

تتعامل البحوث النفسية والاجتماعية باستمرار مع متغيرات تُقاس عبر مقاييس ليكرت المتعددة (Likert Scales) واستبيانات الشخصية التقريرية (مثل مقياس العوامل الخمسة الكبرى للشخصية أو مقاييس القلق والاكتئاب). تتسم هذه البيانات بأنها بيانات ترتيبية متقطعة أو كمية محصورة بدقة ضمن مجال قياسي ثابت ومغلق (مثلاً: درجات تتراوح من 0 إلى 40 نقطة).

في هذه السيناريوهات، يُحقق استخدام الطريقة الثانية (تحديد مصفوفة الحدود المخصصة bins) أعلى درجات الكفاءة التحليلية؛ حيث يمكن مواءمة حدود الفئات مع المعايير التشخيصية والمستويات الإكلينيكية المعتمدة (مثل: درجات من 0-9: قلق طبيعي، 10-18: قلق خفيف، 19-29: قلق متوسط، 30-40: قلق شديد). يتيح هذا الربط الهندسي للمدرج التكراري إظهار التوزيع السريري للمشاركين مباشرة عبر أعمدة تمثل الفئات التشخيصية المعيارية.

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

10.3 دراسة حالة تفصيلية بكود بايثون متكامل

لتوضيح التطبيق المتكامل لهذه المنهجيات في سياق الأبحاث النفسية، نستعرض دراسة حالة برمجية تحاكي درجات مقياس القلق العام (GAD-7) المطبق على عينتين من المشاركين (مجموعة تجريبية خضعت لبرنامج تأملي ومجموعة ضابطة)، مع تطبيق فئات مضبوطة بدقة وفق المعايير السريرية المعتمدة ومقارنة النتائج بيانياً:

import numpy as np
import matplotlib.pyplot as plt

# توليد بيانات محاكاة لدرجات مقياس القلق (المدى: 0 - 21)
np.random.seed(101)
control_group = np.random.normal(loc=14, scale=3.5, size=200).clip(0, 21)
treatment_group = np.random.normal(loc=8, scale=3.0, size=200).clip(0, 21)

# تحديد الحدود المعيارية السريرية للمقياس (أدنى، خفيف، متوسط، شديد)
clinical_bins = [0, 5, 10, 15, 21]

# إنشاء اللوحة البيانية المقارنة
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6), sharey=True)

# رسم المجموعة الضابطة
n1, bins1, patches1 = ax1.hist(control_group, bins=clinical_bins, color='#d95f02', edgecolor='black', alpha=0.8, rwidth=0.9)
ax1.set_title("المجموعة الضابطة (بدون تدخل)", fontsize=13)
ax1.set_xlabel("درجات مقياس القلق (GAD-7)", fontsize=11)
ax1.set_ylabel("عدد المشاركين (التكرار)", fontsize=11)
ax1.set_xticks(clinical_bins)
ax1.grid(axis='y', linestyle=':', alpha=0.6)

# رسم المجموعة التجريبية
n2, bins2, patches2 = ax2.hist(treatment_group, bins=clinical_bins, color='#1b9e77', edgecolor='black', alpha=0.8, rwidth=0.9)
ax2.set_title("المجموعة التجريبية (بعد البرنامج التأملي)", fontsize=13)
ax2.set_xlabel("درجات مقياس القلق (GAD-7)", fontsize=11)
ax2.set_xticks(clinical_bins)
ax2.grid(axis='y', linestyle=':', alpha=0.6)

plt.suptitle("مقارنة التوزيع التكراري لدرجات القلق وفق المستويات السريرية المعتمدة", fontsize=15, y=1.02)
plt.tight_layout()
plt.show()

يُظهر هذا التطبيق العملي كيف يُسهم الضبط المحكم لمصفوفة clinical_bins في تقديم مقارنة سريرية فورية؛ إذ يُلاحظ بوضوح انزياح كتلة التوزيع في المجموعة التجريبية نحو الفئات السريرية الدنيا (0-5 و 5-10)، بينما تتركز المجموعة الضابطة في الفئات المرتفعة (10-15 و 15-21)، مما يمنح التقرير البياني دلالة إحصائية وتطبيقية بالغة القوة والوضوح.

11. الأخطاء الشائعة واستراتيجيات استكشاف الأخطاء وإصلاحها

11.1 أخطاء الفواصل العشرية وتراكم أخطاء التقريب

تُعد أخطاء الفواصل العائمة (Floating-Point Representation Errors) من المشكلات التقنية الخفية التي تواجه المحللين عند توليد الفئات باستخدام بايثون ودوال NumPy الحسابية. تنشأ هذه المشكلة من الطبيعة الثنائية لحفظ الأرقام الكسرية في المعالجات الحاسوبية، حيث قد ينتج عن عملية جمع متكررة بسيطة مثل 0.1 + 0.2 قيمة رقمية ميكروية غير دقيقة مثل 0.30000000000000004.

عند استخدام هذه الفواصل في توليد الفئات، قد تسقط قيم بيانات تقع تماماً على الحد الفاصل المفترض (مثل القيمة 0.3) في الفئة المجاورة أو تنشأ فئات فارغة دقيقة للغاية لا تتطابق مع التوزيع الحقيقي. للتغلب على هذه المشكلة الحسابية، يُنصح بشدة باستخدام الدالة np.round() لتقريب مصفوفة الحدود إلى عدد محدد من المنازل العشرية بعد توليدها، أو الاستعاضة عن ذلك باستخدام الدالة np.linspace() التي تضمن ثبات الفواصل بدقة متناهية.

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

11.2 تجاهل القيم الحدية وسوء تقدير المدى الأقصى

من الأخطاء البرمجية الشائعة جداً عند استخدام الدالة np.arange(min_val, max_val, step) نسيان أن هذه الدالة تستبعد القيمة النهائية max_val من المصفوفة الناتجة. يترتب على هذا النسيان إسقاط القيمة القصوى المسجلة في العينة تماماً خارج مصفوفة الفئات، مما يؤدي إلى استبعاد أعلى مشاهدة من الرسم البياني دون أن ينتبه الباحث لذلك.

يتمثل العلاج البرمجي الحاسم لهذه المشكلة في إضافة خطوة العرض دائماً إلى الحد الأقصى داخل الدالة كالتالي: np.arange(data.min(), data.max() + step, step). كما يمكن استخدام المعامل الصريح range=(data.min(), data.max()) داخل الدالة plt.hist() لتأكيد الحدود المعتمدة بصورة قاطعة.

ولضمان الأمانة الإحصائية للتحليل، يُعد من أفضل الممارسات التحقق البرمجي الدائم من أن مجموع مصفوفة التكرارات المرجوعة n.sum() يتطابق تماماً وبلا أي نقص مع حجم العينة الكلي len(data) قبل اعتماد الرسم النهائي ونشره.

11.3 المقارنة الخاطئة بين مجموعات بيانية ذات فئات غير متطابقة

يقع كثير من المحللين في خطأ منهجي فادح عند محاولة مقارنة توزيع مجموعتين مختلفتين من البيانات، حيث يقومون برسم كل مجموعة باستخدام استدعاء مستقل يولد فئاته تلقائياً (مثلاً: الاعتماد على الإعداد الافتراضي bins=10 لكل منهما). نظراً لاختلاف المدى الأدنى والأقصى بين المجموعتين، فإن Matplotlib ستُنشئ حدود فئات مختلفة وعروضاً متباينة لكل مدرج، مما يجعل المقارنة البصرية المباشرة مضللة وغير صحيحة رياضياً.

لتصحيح هذا الخطأ المنهجي، يجب بناء مصفوفة فئات موحدة ومشتركة تغطي النطاق الشامل لكلا المجموعتين معاً، عبر حساب الحد الأدنى العام $\min(x_1, x_2)$ والحد الأقصى العام $\max(x_1, x_2)$، وتوليد مصفوفة حدود واحدة يتم تمريرها نصاً للمدرجين معاً.

وعند تطبيق هذه المصفوفة الموحدة، يمكن عرض المدرجين إما جنباً إلى جنب في لوحتين فرعيتين تشتركان في نفس مقياس المحاور (sharex=True, sharey=True)، أو تراكبهما داخل نفس اللوحة مع تفعيل الشفافية ومعامل الكثافة density=True، مما يضمن مقارنة علمية نزيهة تعكس الفوارق التوزيعية الفعلية بدقة وتجرد.

12. المقارنة المعيارية وأفضل الممارسات لاختيار حجم الفئات الأمثل

12.1 مصفوفة اتخاذ القرار لاختيار طريقة ضبط الفئات المناسبة

يوضح الجدول المعياري التالي مصفوفة اتخاذ القرار التي تلخص المقارنة الشاملة بين الطرق المختلفة لضبط الفئات في Matplotlib، مبيناً مزايا وعيوب وحالات الاستخدام الأنسب لكل منهجية برمجية:

المنهجية البرمجية الصيغة التمثيلية أبرز المزايا الإحصائية القيود والمحاذير حالات الاستخدام المثالية
التمرير العددي المباشر bins=k بساطة برمجية مطلقة، وسرعة فائقة في الاستكشاف الأولي. قد يخفي معالم التوزيع إذا كانت قيمة $k$ غير مناسبة؛ حساس لحجم العينة. الاستكشاف السريع للبيانات، والعروض التقديمية المبسطة.
الحدود المخصصة الثابتة bins=[a, b, c, ...] تحكم هندسي مطلق؛ إمكانية إنشاء فئات غير متساوية؛ مطابقة المعايير الخارجية. تتطلب جهداً يدوياً؛ تفرض استخدام density=True عند تفاوت العروض. مقاييس التقييم التربوي، المعايير السريرية، البيانات شديدة الالتواء.
دوال NumPy الحسابية bins=np.arange(...) ضبط هندسي دقيق لعرض الفئة الفيزيائي ($w$)؛ مطابقة كاملة لعلامات المحاور. حساسة لأخطاء الفاصلة العائمة؛ تتطلب معالجة دقيقة لاحتواء الحد الأقصى. البيانات التجريبية الفيزيائية والزمنية ذات وحدات القياس القياسية.
الخوارزميات التلقائية bins='auto' أو 'fd' تأسيس رياضي محكم؛ متانة عالية ضد القيم الشاذة؛ تحسين دقة تقدير الكثافة. قد تولد فئات بحدود كسرية غير مريحة في القراءة البصرية المباشرة. التحليلات الإحصائية المتقدمة، والنشر العلمي في المجلات المحكمة.

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

12.2 أفضل الممارسات الأكاديمية والتوثيقية للرسوم البيانية

تفرض التقاليد الأكاديمية الصارمة في توثيق الأبحاث العلمية المنشورة مجموعة من المعايير الواجب اتباعها عند تضمين المدرجات التكرارية في الأوراق والمقالات العلمية. يأتي في مقدمة هذه المعايير التوثيق الصريح لحجم الفئات أو الخوارزمية المستخدمة في التقسيم داخل الشرح التوضيحي المرفق بالشكل (Figure Caption)، كأن يُذكر بوضوح: “المدرج التكراري يمثل توزيع أوقات الاستجابة بعرض فئات موحد مقداره 25 مللي ثانية، مع تطبيق قاعدة فريدمان-دياكونيس لتحديد الاتساع الأمثل”.

كما يُعد تحقيق مبدأ “إعادة الإنتاجية العلمية” (Scientific Reproducibility) مطلباً جوهرياً لا غنى عنه. يتطلب ذلك تثبيت البذور العشوائية (Random Seeds) عند توليد أو محاكاة أي بيانات تجريبية، وإتاحة الشيفرات البرمجية المصدرية (Source Code) بوضوح كملفات ملحقة، مع توثيق كافة المعاملات المستخدمة في استدعاء الدوال البيانية بدقة تامة.

وأخيراً، يُنصح بالالتزام بالتنسيقات البصرية الرصينة عبر تجنب الألوان الصارخة أو التباينات غير المريحة، والاعتماد على لوحات ألوان علمية مقننة (مثل لوحات ColorBrewer أو Matplotlib Viridis)، مع توفير تسميات واضحة وشاملة لكافة المحاور البيانية متضمنة وحدات القياس الدقيقة، لضمان استيفاء الشكل البياني لأعلى معايير الجودة والنزاهة الأكاديمية.

خاتمة واستنتاجات ختامية

قدمت هذه الدراسة دليلاً منهجياً وشاملاً حول آليات وضوابط تحديد حجم الفئات (Bin Size) في المدرجات التكرارية باستخدام مكتبة Matplotlib. وتأسيساً على ما تم استعراضه، يتضح جلياً أن المدرج التكراري يظل أداة استكشافية وتحليلية لا غنى عنها في الإحصاء التطبيقي، شريطة أن يتم تشييده وفق أسس رياضية وهندسية واعية تراعي حساسية التمثيل البياني لتغيرات اتساع وحدود الفئات.

إن الانتقال من التمرير العددي البسيط إلى استخدام المصفوفات المخصصة، أو الدوال الحسابية الموجهة في NumPy، أو الخوارزميات الإحصائية التلقائية مثل قاعدة فريدمان-دياكونيس وقاعدة سكوت، يمنح الباحثين في مختلف الحقول المعرفية، وخاصة في العلوم السلوكية والطبية والتجريبية، القدرة على استخلاص الرؤى الكامنة في البيانات بموثوقية عالية وشفافية مطلقة بعيداً عن التنعيم المضلل أو التشويش البصري غير المبرر.

وختاماً، فإن الارتقاء بجودة التمثيل البياني يمثل جزءاً لا يتجزأ من جودة البحث العلمي ذاته؛ حيث يضمن الجمع الواعي بين الصرامة الرياضية، والمرونة البرمجية، والحس الجمالي التنسيقي تقديم رسوم بيانية علمية رصينة قادرة على إيصال النتائج البحثية بدقة متناهية ودعم اتخاذ القرارات الاستدلالية بثقة واقتدار.

المصادر والمراجع (References)

اقتباس هذا المقال

looti, M. (2026, أغسطس 30). كيفية ضبط حجم الفئات في المدرجات التكرارية في Matplotlib. عرب سايكلوجي. https://arabpsychology.com/statistics/how-to-adjust-bin-size-matplotlib-histograms/
looti, Mohammed. “كيفية ضبط حجم الفئات في المدرجات التكرارية في Matplotlib.” عرب سايكلوجي, 30 أغسطس 2026, https://arabpsychology.com/statistics/how-to-adjust-bin-size-matplotlib-histograms/.
looti, Mohammed. “كيفية ضبط حجم الفئات في المدرجات التكرارية في Matplotlib.” عرب سايكلوجي. أغسطس 30, 2026. https://arabpsychology.com/statistics/how-to-adjust-bin-size-matplotlib-histograms/.