التحليل الإحصائيبرمجة بايثونتصوير البيانات

كيفية إنشاء مدرج تكراري نسبي في Matplotlib

دليل أكاديمي شامل يشرح كيفية إنشاء وتخصيص المدرج التكراري النسبي في بايثون باستخدام مكتبة Matplotlib وحساب الأوزان الإحصائية بدقة.

تاريخ النشر

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

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

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

1. مفهوم المدرج التكراري النسبي وأسسه في التحليل الإحصائي

1.1 التعريف النظري للمدرج التكراري النسبي (Relative Frequency Histogram)

يُعرَّف المدرج التكراري النسبي في الإحصاء الرياضي بأنه تمثيل بياني لتوزيع تكراري معدل، حيث يُستبدل فيه التكرار الخام أو المطلق لكل فئة (Bin) بنسبة ذلك التكرار إلى المجموع الكلي للملاحظات في العينة قيد الدراسة. رياضياً، إذا كانت العينة تتألف من عدد إجمالي للمشاهدات يُرمز له بالرمز $N$، وكان التكرار المطلق للفئة الفرعية $i$ هو $f_i$، فإن التكرار النسبي المقابل $RF_i$ يُحسب وفق المعادلة البسيطة: $RF_i = \frac{f_i}{N}$. يترتب على هذا التعريف قيد رياضي أساسي يتمثل في أن مجموع التكرارات النسبية لجميع الفئات المكونة للمدى يجب أن يساوي بالضرورة الواحد الصحيح، أي أن $\sum_{i=1}^{k} RF_i = 1.0$ (أو 100% إذا ما عُبِّر عنها بصيغة مئوية)، حيث يمثل $k$ العدد الإجمالي للفئات.

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

1.2 أهمية التكرار النسبي في الدراسات النفسية والسلوكية

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

علاوة على ذلك، تُعد البيانات السلوكية عرضة لتباينات حادة في معدلات الاستجابة بين المجموعات الفرعية. فعند دراسة الفروق الفردية في سمات مثل “القلق الاجتماعي” أو “المرونة المعرفية” بين شرائح عمرية متفاوتة، يتيح التكرار النسبي نمذجة منحنيات الاستجابة دون الوقوع في انحياز الحجم، مما يسهم في معايرة الاختبارات النفسية وتحديد نقاط القطع السريرية (Clinical Cut-off Scores) التي تستند إلى التوزيع التراكمي النسبي للمجتمع المعياري.

1.3 متى يجب تفضيل المدرج التكراري النسبي على التكرار المطلق

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

يبرز التفضيل كذلك عند الرغبة في مضاهاة البيانات المجمعة تجريبياً مع توزيعات احتمالية نظرية معروفة، مثل التوزيع الطبيعي المعياري (Standard Normal Distribution) أو توزيع غاما وتوزيع بواسون. فالنماذج الرياضية النظرية تُبنى دائماً على فضاء احتمالي يتكامل إلى القيمة 1، وبالتالي يستحيل إجراء تقييم بصري مباشر لمدى جودة المطابقة (Goodness of Fit) ما لم تكن البيانات التجريبية ممثلة على نفس المقياس الاحتمالي المعياري، وهو ما يضمنه المدرج التكراري النسبي بدقة متناهية.

2. المقارنة المنهجية بين التكرار المطلق والتكرار النسبي

2.1 الفروق الجوهرية في البنية الحسابية والتمثيل البصري

تتمحور الفروق الجوهرية بين التكرار المطلق والتكرار النسبي حول طبيعة المحور الرأسي (Y-axis) والمعنى الهندسي للمساحات الواقعة تحت الأعمدة البيانية. في المدرج التكراري المطلق، يعبر المحور الرأسي عن أعداد صحيحة موجبة تمثل التعداد الفعلي، ويتغير المدى العددي لهذا المحور طردياً مع زيادة حجم العينة، مما يجعل أقصى ارتفاع للأعمدة دالة مباشرة في $N$. في المقابل، يقتصر المحور الرأسي في المدرج النسبي على قيم كسرية تنحصر حصراً في المجال المغلق $[0, 1]$، أو نسب مئوية تنحصر في المدى $[0%, 100%]$، بغض النظر عن حجم البيانات المدخلة، سواء كانت عشرات الحالات أو مئات الآلاف.

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

2.2 التحديات الإحصائية المرتبطة بالتكرار المطلق في العينات غير المتكافئة

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

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

2.3 معايير اختيار نوع المدرج التكراري المناسب لنوع البيانات

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

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

3. إعداد بيئة العمل البرمجية واستيراد المكتبات الأساسية

3.1 تهيئة بيئة بايثون وتثبيت الحزم المطلوبة

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

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

3.2 استيراد المكتبات وفق المعايير البرمجية القياسية

تفرض التقاليد البرمجية في مجتمع علوم البيانات وبايثون استيراد الوحدات النمطية وفق أسماء مستعارة (Aliases) قياسية متفق عليها عالمياً، مما يسهل قراءة الأكواد ومشاركتها بين الباحثين. يتم استيراد واجهة البرمجة الرسومية الأساسية matplotlib.pyplot تحت الاسم المستعار plt، بينما يتم استدعاء مكتبة numpy بالاسم المختصر np. كما يستحسن عند العمل التفاعلي استدعاء وحدة التنسيق الدقيق للمحاور matplotlib.ticker، والتي تلعب دوراً محورياً في ضبط علامات المحور الرأسي وتحويلها إلى نسب مئوية مقروءة.

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

3.3 إعداد هيكل الشكل والمحاور (Figure and Axes)

توفر مكتبة Matplotlib منهجين برمجين للتعامل مع الرسوم: المنهج الإجرائي القائم على استدعاء دوال plt مباشرة، والمنهج الكائني (Object-Oriented API) الذي يمنح المحلل تحكماً مطلقاً في كافة عناصر الرسم البياني من خلال الفصل الصارم بين كائن “الشكل” العام (Figure) وكائن “المحاور” الداخلية (Axes). في السياقات الأكاديمية والبحثية المتقدمة، يُعد المنهج الكائني هو الخيار الحصري المقبول برمجياً نظراً لمرونته وقابليته للتوسع وإمكانية إعادة استخدام وتعديل خصائص المخطط دون آثار جانبية غير متوقعة.

يبدأ إعداد المخطط بإنشاء كائن الشكل والمحور باستخدام الدالة المركزية fig, ax = plt.subplots()، مع تحديد الأبعاد الفيزيائية للمخطط عبر وسيط الحجم figsize=(width, height) المقاس بالبوصة، وضبط كثافة النقاط في البوصة dpi (Dots Per Inch) لضمان وضوح الرسم عند تكبيره أو طباعته بدقة فائقة. يُشكل كائن ax الناتج اللوحة الإحصائية الحقيقية التي ستستقبل بيانات المدرج التكراري النسبي، والتي سيتم تطبيق كافة عمليات التخصيص اللوني، وتنسيق الفئات، وضبط العناوين عليها بشكل منهجي منظم.

4. الآلية الرياضية لحساب مصفوفة الأوزان (Weights) في NumPy

4.1 شرح وظيفة الدالة np.ones_like() ودورها الحسابي

يكمن السر التقني والبرمجي لإنشاء مدرج تكراري نسبي حقيقي في Matplotlib في الفهم العميق لكيفية عمل وسيط الأوزان weights داخل دالة الرسم. لا توفر دالة hist معاملاً مباشراً يحمل اسم “نسبة مئوية”، بل توفر آلية مرنة تسمح للمستخدم بتعيين وزن إحصائي لكل نقطة بيانات مفردة في المصفوفة المدخلة. لحساب التكرار النسبي، نحتاج إلى إعطاء كل نقطة في البيانات وزناً مقداره $\frac{1}{N}$، بحيث عندما تقوم الدالة بجمع النقاط الواقعة داخل فئة معينة، تجمع أوزانها المتساوية بدلاً من عدّها كقيم صحيحة، ليكون الناتج النهائي مساوياً تماماً لنسبة تلك الفئة من الإجمالي.

لتحقيق هذا التوزيع المتساوي للأوزان بأعلى كفاءة حسابية وتجنب الحلقات التكرارية البطيئة (For Loops)، نستخدم الدالة المتخصصة np.ones_like(data) من مكتبة NumPy. تقوم هذه الدالة بتوليد مصفوفة جديدة مملوءة بالرقم 1 بالكامل، متطابقة في أبعادها ونوع بياناتها مع مصفوفة البيانات الأصلية data. تضمن هذه الطريقة التوافق الرياضي الكامل وسرعة التنفيذ على مستوى الذاكرة الحاسوبية، حتى عند التعامل مع مجموعات بيانات تتجاوز ملايين المشاهدات.

4.2 القسمة على حجم العينة الإجمالي len(data)

بمجرد توليد مصفوفة الآحاد، تأتي الخطوة الحسابية التالية وهي قسمة هذه المصفوفة عنصرية النمط (Element-wise Division) على الحجم الكلي للعينة، والذي نحصل عليه برمجياً عبر استدعاء len(data) أو خاصية data.size. تأخذ المعادلة البرمجية الصيغة الدقيقة التالية:

weights = np.ones_like(data) / len(data)

ينتج عن هذه العملية الحسابية مصفوفة أحادية البعد تحتوي على القيمة الكسرية $\frac{1}{N}$ مكررة لجميع العناصر. رياضياً، يمكن التحقق التام من صحة هذا الإجراء من خلال حساب المجموع الإجمالي لكافة قيم مصفوفة الأوزان باستخدام الدالة np.sum(weights)، حيث يجب أن يكون الناتج دائماً مساوياً للرقم $1.0$ بدقة رياضية متناهية، وهو ما يضمن رياضياً أن تكامل أو مجموع ارتفاعات كافة أعمدة المدرج التكراري النسبي سيعطي النسبة الكلية 100%.

4.3 المقارنة بين معامل weights ومعامل density في Matplotlib

يقع الكثير من محللي البيانات في خطأ شائع وخطير يتمثل في الاعتقاد بأن تفعيل المعامل density=True داخل دالة ax.hist() يؤدي إلى إنتاج مدرج تكراري نسبي، وهو تصور غير صحيح رياضياً. يقوم المعامل density=True بتطبيع البيانات لإنشاء دالة كثافة احتمالية (Probability Density Function – PDF)، حيث يفرض القيد الرياضي بأن تكون المساحة الكلية الواقعة تحت منحنى المدرج مساوية للواحد الصحيح، أي أن: $\sum (\text{Height}_i \times \text{Width}_i) = 1.0$.

يترتب على ذلك أن ارتفاع العمود عند استخدام density=True يُحسب بالمعادلة: $\text{Height}_i = \frac{f_i}{N \times \text{Width}_i}$. وبالتالي، إذا كان عرض الفئة (Bin Width) لا يساوي تماماً الرقم 1، فإن ارتفاعات الأعمدة لن تعبر عن النسب المئوية أو الكسرية للحالات، بل قد تتجاوز القيمة 1.0 لتصل إلى أرقام كبيرة إذا كانت الفئات ذات نطاقات ضيقة جداً. في المقابل، يضمن استخدام مصفوفة الأوزان weights أن يكون الارتفاع المباشر للعمود مساوياً تماماً للتكرار النسبي $\frac{f_i}{N}$ بصرف النظر عن اتساع أو ضيق الفئات، مما يجعله الخيار السليم الوحيد لتمثيل التكرار النسبي المباشر.

5. بناء المدرج التكراري النسبي خطوة بخطوة في Matplotlib

5.1 تجهيز بيانات العينة وتحديد المتغيرات

تبدأ عملية التطبيق العملي بتجهيز البيانات المراد تمثيلها وتحويلها إلى مصفوفات NumPy متجانسة وخالية من الشوائب. في سياق القياس النفسي على سبيل المثال، قد نقوم بتوليد أو استيراد درجات عينة من المفحوصين على مقياس تقدير الذات (Self-Esteem Scale)، وتكون الدرجات ممثلة بأرقام تقع ضمن مدى محدد. من الضروري فحص البيانات مسبقاً للتأكد من خلوها من القيم المفقودة (Missing Values / NaNs) التي قد تتسبب في تشويه حساب حجم العينة الإجمالي في دالة len(data).

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

5.2 كتابة وتنفيذ دالة ax.hist() مع تمرير الأوزان

يتم استدعاء الدالة المركزية ax.hist() عبر تمرير مصفوفة البيانات ومصفوفة الأوزان التي تم حسابها في الخطوة السابقة. تأخذ الدالة وسائط متعددة تتحكم في البنية الحسابية والجمالية للأعمدة، ويجب دائماً تحديد لون حواف الأعمدة باستخدام المعامل edgecolor='black' لضمان وجود فواصل بصرية واضحة بين الفئات المتجاورة تمنع تداخلها البصري أمام القارئ.

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

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

عقب تنفيذ أمر الرسم، تأتي مرحلة التدقيق الحسابي للتأكد من أن المخطط يعكس بالفعل مدرجاً تكرارياً نسبياً دقيقاً. يتم ذلك برمجياً من خلال طباعة مصفوفة الارتفاعات n والتأكد من أن جميع قيمها تنحصر بشكل صارم بين $0$ و $1$، بالإضافة إلى استخدام الأمر np.sum(n) للتحقق من أن المجموع التراكمي لارتفاعات الأعمدة يساوي تماماً $1.0$.

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

6. التحكم المتقدم في الفئات والحاويات (Bins) وتأثيرها على التمثيل

6.1 استراتيجيات تحديد عدد الفئات وحجمها

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

  • قاعدة ستورجس (Sturges’ Rule): تُحسب بالمعادلة $k = 1 + \log_2(N)$، وهي ممتازة للعينات الصغيرة والمتوسطة المأخوذة من مجتمعات تتبع التوزيع الطبيعي تقريباً.
  • قاعدة سكوت (Scott’s Normal Reference Rule): تحدد عرض الفئة الأمثل بناءً على الانحراف المعياري للعينة عبر المعادلة $w = 3.49 \times \sigma \times N^{-1/3}$، وهي مثالية للبيانات المتصلة دون قيم شاذة حادة.
  • قاعدة فريدمان-دياكونيس (Freedman-Diaconis Rule): تُعد القاعدة الأكثر متانة وحصانة ضد القيم الشاذة، حيث تعتمد على المدى الربيعي (IQR) وفق المعادلة: $w = 2 \times \text{IQR}(x) \times N^{-1/3}$.

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

6.2 التعامل مع الفئات غير متساوية العرض في التكرار النسبي

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

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

6.3 محاذاة الأعمدة وضبط حدود الفئات (Bin Alignment and Edges)

يوفر Matplotlib وسائط دقيقة لضبط كيفية وضع الأعمدة بالنسبة لحدود الفئات الرقمية. يتحكم المعامل align في موضع العمود، ويأخذ قيمتين رئيسيتين: align='mid' حيث يتمركز العمود في منتصف الفترة العددية للفئة، وهو الخيار القياسي للمتغيرات المتصلة، و align='left' حيث يبدأ العمود من الحد الأدنى للفئة، وهو مفيد عند التعامل مع بيانات متقطعة أو درجات منفصلة تمثل مستويات محددة بدقة.

كذلك يمكن استخدام المعامل rwidth (Relative Width) لضبط نسبة العرض الفعلي للعمود بالنسبة للمساحة المتاحة له في الفئة (مثلاً rwidth=0.9)، مما يخلق فراغات رأسية ضيقة وجمالية بين الأعمدة تسهم في تمييز الفئات عند الرغبة في تصميم رسوم بيانية عصرية وغير متلاصقة. كما يتيح المعامل range=(min, max) استبعاد القيم المتطرفة جداً وتركيز الرسم على النطاق الجوهري الذي تتمركز فيه الظاهرة دون التأثير على حساب مصفوفة الأوزان الكلية إذا تم ضبطها مسبقاً.

7. تخصيص المظهر البصري والجمالي للمدرج التكراري

7.1 إدارة الألوان والتدرجات والشفافية

يعد الاختيار اللوني الواعي في الرسوم البيانية الإحصائية عنصراً وظيفياً يتجاوز مجرد التزيين الجمالي؛ فالألوان المدروسة تعزز وضوح الأنماط وتسهل استيعابها الفوري. تتيح Matplotlib استخدام أنظمة ألوان احترافية متوافقة مع متطلبات النشر العلمي وسهلة التمييز لذوي عمى الألوان، مثل لوحات viridis، magma، أو التدرجات الهادئة مثل steelblue و teal. يتم ضبط لون جسم العمود باستخدام المعامل facecolor ولون الحواف الخارجية باستخدام edgecolor.

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

7.2 إضافة النصوص التعريفية والرموز الرياضية في المحاور

تكتسب المخططات الإحصائية قيمتها العلمية من دقة التسميات التوضيحية للمحاور والعناوين. يجب تسمية المحور الأفقي ($X$) باسم المتغير بوضوح لا يقبل اللبس مع تضمين وحدة القياس المستخدمة بين قوسين (مثال: “درجات مقياس بيك للاكتئاب (BDI-II)”). أما المحور الرأسي ($Y$)، فيتعين تسميته بصورة قاطعة تشير إلى طبيعته النسبية، مثل “التكرار النسبي” (Relative Frequency) أو “النسبة المئوية للمستجيبين (%)”، لتفادي أي التباس لدى القارئ قد يدفعه لتفسير القيم كتكرارات خام.

تدعم مكتبة Matplotlib محرك الحروف الرياضية المتقدم المبني على لغة LaTeX، مما يسمح بكتابة الرموز الإحصائية بدقة فائقة داخل العناوين؛ كأن يُكتب المتوسط الحسابي بصيغة $\mu = 24.5$ والانحراف المعياري $\sigma = 4.2$ والحجم الكلي للعينة $N = 1,500$. تضفي هذه التفاصيل الرياضية الاحترافية رصانة أكاديمية على الشكل البياني وتجعله مستوفياً لمعايير الجمعيات العلمية الدولية مثل جمعية علم النفس الأمريكية (APA).

7.3 تنسيق خطوط الشبكة والعلامات (Gridlines and Ticks)

تلعب خطوط الشبكة (Gridlines) دوراً مساعداً في تسهيل التقدير البصري للقيم الكسرية الواقعة على المحور الرأسي، ولكن يجب ضبطها بحذر حتى لا تتحول إلى عنصر مشتت (Visual Clutter). يتم تفعيل خطوط الشبكة عبر الدالة ax.grid(True) مع تحديد تطبيقها حصراً على المحور الرأسي axis='y'، واستخدام نمط خط متقطع linestyle='--'، ولون رمادي باهت color='gray'، مع ضبط الشفافية alpha=0.4 لتظل في الخلفية بصرياً دون أن تقطع أعمدة المدرج التكراري.

يتطلب التصميم العصري والأكاديمي أيضاً التحكم في الحواف الهيكلية للمخطط (Spines). يُفضل إحصائياً إخفاء الإطار العلوي والأيمن للشكل باستخدام الأوامر البرمجية المخصصة ax.spines['top'].set_visible(False) و ax.spines['right'].set_visible(False)، مما يمنح المخطط تصميماً نظيفاً يركز انتباه القارئ على البيانات والمحاور الأساسية فقط، مع ضبط علامات المحاور (Tick marks) لتتجه للخارج أو إزالتها لتسهيل القراءة.

8. تحويل وتنسيق المحور الرأسي إلى نسب مئوية مخصصة

8.1 استخدام وحدة matplotlib.ticker لتنسيق المحاور

على الرغم من أن مصفوفة الأوزان تعطي قيماً كسرية صحيحة تقع بين $0.0$ و $1.0$، فإن قراءة الأرقام بصيغة النسب المئوية (مثل 15% بدلاً من 0.15) تكون أكثر سلاسة وفهماً لدى الغالبية العظمى من القراء والباحثين. توفر Matplotlib وحدة نمطية متخصصة ومحترفة تُدعى matplotlib.ticker، تحتوي على الفئة البرمجية PercentFormatter المصممة خصيصاً لتحويل الأرقام العشرية إلى تمثيل مئوي منسق تلقائياً.

يتم تطبيق هذا المنسق عبر استدعاء السطر البرمجي المنهجي:

ax.yaxis.set_major_formatter(PercentFormatter(xmax=1.0, decimals=1))

يحدد المعامل xmax=1.0 أن القيمة 1.0 في البيانات تمثل النسبة الكاملة 100% (وهو أمر حيوي لأن الوضع الافتراضي لبعض المنسقات قد يفترض أن 100 هي القيمة العظمى)، بينما يتيح المعامل decimals تحديد عدد الخانات العشرية المطلوبة بعد الفاصلة، مما يمنع تشوه ملصقات المحور بأرقام طويلة غير ضرورية.

8.2 إضافة ملصقات النسب المئوية المباشرة فوق الأعمدة البيانية

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

داخل الحلقة، يُستخرج ارتفاع المستطيل عبر دالة patch.get_height()، ويُحسب منتصف عرضه الأفقي باستخدام patch.get_x() + patch.get_width() / 2. ثم يتم استدعاء الدالة ax.annotate() أو ax.text() لوضع النص المنسق مع تطبيق محاذاة أفقية ha='center' ومحاذاة رأسية va='bottom'، مع ترك إزاحة نقطية صغيرة للأعلى لتفادي ملامسة النص لحافة العمود العلوية، كما هو موضح بالمنهجية العلمية المتبعة في إعداد التقارير الإحصائية المتقدمة.

8.3 تخصيص حدود المحور الرأسي لتوفير مساحة للملصقات

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

لحل هذه المشكلة برمجياً، يتم استخراج أعلى قيمة تكرار نسبي في التوزيع ومضاعفتها بهامش أمان بسيط (مثلاً زيادة بمقدار 15% إلى 20%)، ثم تطبيق هذا الحد الأعلى الجديد باستخدام الدالة ax.set_ylim(bottom=0, top=max_val * 1.2). يضمن هذا الإجراء وجود مساحة تنفس بصرية كافية في الجزء العلوي من الشكل تستوعب النصوص دون أي تداخل مع العناوين أو حدود المخطط الخارجي.

Matplotlib relative frequency histogram
Matplotlib relative frequency histogram

9. مقارنة مجموعات متعددة باستخدام المدرجات التكرارية النسبية

9.1 إنشاء مدرجات تكرارية نسبية متراكبة (Overlaid Histograms)

تعد مقارنة توزيع استجابات مجموعتين مختلفتين (كالمجموعة التجريبية والضابطة، أو الذكور والإناث) على نفس المحاور أحد أقوى التطبيقات الإحصائية للمدرج التكراري النسبي. لرسم هذا النوع من المخططات، يتم حساب مصفوفة أوزان مستقلة تماماً لكل عينة على حدة استناداً إلى حجمها الخاص، أي $weights_1 = \frac{1}{N_1}$ و $weights_2 = \frac{1}{N_2}$.

عقب ذلك، يتم استدعاء دالة ax.hist() مرتين متتاليتين على نفس كائن المحور ax، مع تمرير الأوزان الخاصة بكل عينة، واستخدام فئات (bins) موحدة تماماً ومحسوبة على أساس المدى الشامل لكلا المجموعتين معاً لضمان اتساق المقارنة. يتم تعيين قيم شفافية متساوية (مثلاً alpha=0.5) واختيار ألوان متباينة، مع تفعيل وسيلة الإيضاح ax.legend() لربط كل لون باسم المجموعة المعنية بدقة، مما يتيح الرؤية المباشرة لمناطق التقاطع والتمايز بين التوزيعين.

9.2 بناء مدرجات تكرارية نسبية متجاورة (Side-by-Side)

على الرغم من جاذبية المخططات المتراكبة، إلا أنها قد تصبح مربكة بصرياً إذا كانت هناك مناطق تداخل كثيفة بين أكثر من مجموعتين. في هذا السياق، يبرز النمط المتجاور (Side-by-Side) كبديل أكثر وضوحاً ودقة. تدعم دالة ax.hist() في Matplotlib تمرير قائمة تحتوي على مصفوفات البيانات المتعددة كمدخل أولي، متبوعة بقائمة موازية تحتوي على مصفوفات الأوزان المقابلة لكل عينة:

ax.hist([data_group1, data_group2], weights=[weights1, weights2], bins=shared_bins, label=['المجموعة أ', 'المجموعة ب'])

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

9.3 استخدام الشبكات متعددة اللوحات (Subplots / Small Multiples)

عندما يمتد التحليل ليشمل أربع أو خمس مجموعات تجريبية أو مراحل نمائية مختلفة، يصبح تكديس الأعمدة في مخطط واحد أمراً معيباً بصرياً ويؤدي إلى تشويش المعرفة الإحصائية. هنا تُطبق أفضل الممارسات من خلال إنشاء مصفوفة من اللوحات البيانية الصغيرة والمتعددة (Small Multiples) عبر الدالة fig, axes = plt.subplots(nrows, ncols, sharex=True, sharey=True).

يضمن تفعيل وسيطي المشاركة sharex=True و sharey=True توحيد المقاييس الأفقية والرأسية عبر جميع اللوحات بدقة مطلقة، مما يسمح للعين البشرية بإجراء مقارنات فورية وصحيحة بين مختلف اللوحات الفرعية دون الحاجة لإعادة قراءة تدريج المحاور في كل مرة. يُخصص لكل لوحة عنوان فرعي موجز يشير إلى المجموعة، مع وضع عنوان عام جامع لكامل الشكل باستخدام fig.suptitle().

10. دمج التكرار النسبي مع منحنيات الكثافة ودوال التوزيع

10.1 تراكب منحنى تقدير كثافة النواة (KDE) فوق المدرج النسبي

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

ومع ذلك، ينشأ هنا تحدٍ رياضي دقيق في المقياس: فمنحنى الكثافة الاحتمالية يتكامل إلى المساحة 1.0، بينما تمثل أعمدة المدرج النسبي ارتفاعات نسبية. لمطابقة مقياس منحنى الكثافة مع ارتفاعات الأعمدة النسبية، يتعين ضرب قيم دالة الكثافة المحسوبة في عرض الفئة الموحد ($\text{Bin Width}$). بعد إجراء هذا التعديل القياسي، يمكن رسم منحنى KDE كخط متصل انسيابي فوق الأعمدة، مما يكشف بدقة متناهية عن القمم المتعددة (Multimodality) والتركزات الدقيقة للمتغير المستهدف.

10.2 مقارنة التوزيع التجريبي بالتوزيع الطبيعي المعياري

تعتمد العديد من الاختبارات الإحصائية البارامترية على فرضية اعتدالية التوزيع (Normality Assumption). يوفر المدرج التكراري النسبي بيئة مثالية لتقييم مدى مطابقة البيانات لتوزيع غاوس الطبيعي بصرياً. يتم ذلك بحساب المتوسط الحسابي التجريبي $\bar{X}$ والانحراف المعياري $s$ من العينة، ثم توليد دالة الكثافة الاحتمالية للتوزيع الطبيعي النظري المقابل باستخدام الدالة scipy.stats.norm.pdf(x, mean, std).

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

10.3 رسم دالة التوزيع التراكمي النسبي (Empirical CDF)

بالإضافة إلى التوزيع التكراري المنفصل، يحتاج الإخصائي النفسي في كثير من الأحيان إلى معرفة النسبة المئوية للمشاركين الذين حققوا درجات تقع “عند أو دون” مستوى معين (الرتب المئينية). يمكن لمكتبة Matplotlib بناء هذا التوزيع التراكمي النسبي مباشرة وبكفاءة متناهية بمجرد تفعيل المعامل cumulative=True داخل دالة ax.hist() مع الاحتفاظ بنفس مصفوفة الأوزان النسبية.

ينتج عن ذلك مدرج تصاعدي يبدأ من تكرار نسبي منخفض ويصل حتماً عند الفئة الأخيرة إلى القيمة $1.0$ (أو 100%). يُعد هذا التمثيل البصري أداة بالغة النفع في تحديد نقاط الفصل السريرية (Cutoff Thresholds) بدقة؛ حيث يستطيع الفاحص تحديد النقطة الحرجة التي تقع عندها نسبة معينة (ولتكن 90% أو 95%) من المفحوصين، مما يدعم اتخاذ القرارات الإكلينيكية والتشخيصية المستندة إلى معايير إحصائية صلبة.

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

11.1 الخلط بين وسيط density=True ومصفوفة الأوزان النسبية

يظل الخلط بين مفهوم “الكثافة الاحتمالية” ومفهوم “التكرار النسبي” الخطأ الأكثر انتشاراً في الأدبيات التحليلية الحديثة. عندما يستخدم المبرمج المعامل density=True مع بيانات مقسمة إلى فئات صغيرة جداً (مثلاً عرض الفئة $0.1$)، سيلاحظ أن المحور الرأسي يرتفع ليصل إلى أرقام مثل $2.5$ أو $4.0$. يثير هذا الأمر ارتباكاً شديداً إذا كان المخطط معنوناً بـ “النسبة المئوية”، حيث يستحيل منطقياً أن تتجاوز نسبة أي فئة 100%.

يكمن التصحيح المنهجي في إدراك أن الكثافة تقيس الاحتمال لكل وحدة طول، وبالتالي فإن المساحة هي التي تساوي 1 وليس الارتفاع. إذا كان الهدف هو إظهار نسبة الحالات ضمن كل عمود، يجب الاستغناء تماماً عن معامل density=True والاعتماد حصراً على بناء مصفوفة الأوزان weights = np.ones_like(data) / len(data) لضمان مطابقة الارتفاعات للنسب الحقيقية بصورة مباشرة ومطلقة.

11.2 أخطاء أبعاد المصفوفات وحسابات الأوزان غير المتطابقة

من الأخطاء البرمجية الشائعة التي تطلق استثناءات برمجية صريحة في بيئة العمل (مثل ValueError: weights should have the same shape as x)، تمرير مصفوفة أوزان تم حسابها على حجم العينة الأولي قبل إجراء عمليات التنظيف والتصفية للبيانات. يحدث هذا غالباً عندما تحتوي البيانات على قيم مفقودة (NaNs) ويتم إسقاطها أثناء الرسم، مما يجعل طول مصفوفة البيانات أقصر من طول مصفوفة الأوزان المحسوبة مسبقاً.

لتجنب هذا الخطأ، يجب تطبيق بروتوكول برمجي وقائي يضمن تنظيف البيانات أولاً وعزل أي قيم غير رقمية عبر استخدام دوال مثل np.isnan() أو dropna() في مكتبة Pandas، وفقط بعد الحصول على المتجه النهائي النقي للبيانات، يتم حساب مصفوفة الأوزان بناءً على طوله الدقيق لضمان التطابق التام في الأبعاد والحفاظ على سلامة المقام الرياضي المستخدم في القسمة.

11.3 المزالق التفسيرية والتمثيلية في الرسوم البيانية الإحصائية

بعيداً عن الأخطاء البرمجية، توجد مزالق تفسيرية قد تؤدي إلى تضليل القارئ حتى وإن كان الكود البرمجي صحيحاً من الناحية التقنية. من أبرز هذه المزالق إخفاء حجم العينة الإجمالي ($N$)؛ فرسم مدرج نسبي لعينة مكونة من 15 شخصاً قد يُظهر أن 40% منهم يعانون من سمة معينة، وهو ما يبدو رقماً كبيراً بينما هو في الواقع ناتج عن استجابة 6 أفراد فقط، مما يعكس تذبذباً عشوائياً محتملاً. تفرض المعايير الأكاديمية الصارمة دائماً تضمين حجم العينة الكلي بوضوح في العنوان أو الحاشية السفلية للمخطط البياني.

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

12. تطبيقات ودراسات حالة عملية في القياس النفسي وتحليل البيانات

12.1 دراسة حالة 1: تحليل استجابات مقياس القلق المعياري (GAD-7)

لتجسيد كافة المفاهيم المشروحة في سياق تطبيقي واقعي، نتناول دراسة حالة تهدف إلى تحليل درجات مقياس اضطراب القلق العام المكون من 7 بنود (GAD-7)، والذي تتراوح درجاته الكلية بين 0 و 21 نقطة. تم جمع البيانات من عينتين مستقلتين: عينة من طلاب الجامعات خلال فترة الامتحانات ($N_1 = 450$)، وعينة ضابطة من أفراد المجتمع في ظروف اعتيادية ($N_2 = 800$).

يتضمن الإجراء العملي إعداد البيانات في مصفوفتين، وتحديد فئات سريرية ثابتة تعكس التصنيفات التشخيصية المعتمدة للمقياس (0-4: قلق بسيط، 5-9: قلق خفيف، 10-14: قلق متوسط، 15-21: قلق شديد). يتم حساب مصفوفة أوزان مستقلة لكلتا المجموعتين بناءً على حجم كل عينة، ورسم مدرج تكراري نسبي متجاور مع ضبط منسق النسب المئوية على المحور الرأسي، ووضع خط مرجعي رأسي متقطع عند الدرجة 10 (العتبة السريرية للقلق الموجه للتدخل). يتيح هذا التمثيل البصري للأطباء النفسيين مقارنة انتشار الحالات الحرجة سريرياً بين المجموعتين بوضوح فائق وبمعزل تام عن التفاوت في حجم العينتين.

12.2 دراسة حالة 2: توزيع أزمنة الاستجابة في مهام الإدراك المعرفي

تتميز بيانات زمن الاستجابة (Reaction Times – RT) في تجارب علم النفس المعرفي والإدراك الحسي بكونها بيانات متصلة غير متماثلة تتبع في الغالب توزيعاً ملتparamياً إيجابياً ذو ذيل طويل نحو اليمين (Ex-Gaussian Distribution). في هذه الدراسة، تم تسجيل أزمنة الاستجابة بالمللي ثانية لـ 1,200 تجربة استجابة بصرية لاكتشاف الأهداف المحفزة على شاشة الحاسوب.

تم بناء مدرج تكراري نسبي باستخدام قاعدة فريدمان-دياكونيس لتحديد الفئات بدقة، مع تمرير الأوزان النسبية. تم تراكب منحنى تقدير كثافة النواة (KDE) المعدل بمقياس عرض الفئة لإبراز القمة التفاعلية السريعة (Modal RT) والذيل الممتد للاستجابات البطيئة الناتجة عن تشتت الانتباه اللحظي. تم تصدير الشكل النهائي بدقة طباعية فائقة بلغت 300 DPI بصيغة الفيكتور المتجهية (SVG و PDF) مع ضبط الخطوط والملصقات بالكامل لتلائم التقديم المباشر إلى إحدى المجلات الرائدة في أبحاث الإدراك والعلوم العصبية السلوكية.

12.3 أفضل الممارسات البرمجية لكتابة دوال قابلة لإعادة الاستخدام

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

تتضمن الدالة آليات داخلية للتحقق من سلامة البيانات وخلوها من القيم الفارغة، وحساب مصفوفة الأوزان أوتوماتيكياً، وضبط حدود المحاور ومنسق النسب المئوية PercentFormatter، وإرجاع كائني fig و ax ليتمكن المستخدم من مواصلة تخصيصهما إذا لزم الأمر. يؤدي دمج مثل هذه الدوال المعيارية في مسارات التحليل الاستكشافي للبيانات (Exploratory Data Analysis – EDA) إلى تسريع وتيرة العمل البحثي وضمان الالتزام الصارم بأعلى المعايير الإحصائية والجمالية عبر كافة مراحل المشروع.

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

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

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

References

  • American Psychological Association. (2020). Publication manual of the American Psychological Association (7th ed.). American Psychological Association. https://doi.org/10.1037/0000165-000
  • Casella, G., & Berger, R. L. (2002). Statistical inference (2nd ed.). Duxbury Press.
  • Freedman, D., & Diaconis, P. (1981). On the histogram as a density estimator: $L_2$ theory. Zeitschrift für Wahrscheinlichkeitstheorie und verwandte Gebiete, 57(4), 453–476. https://doi.org/10.1007/BF01025868
  • Harris, C. R., Millman, K. J., van der Walt, S. J., Gommers, R., Virtanen, P., Cournapeau, D., Wieser, E., Taylor, J., Berg, S., Smith, N. J., Kern, R., Picus, M., Hoyer, S., van Kerkwijk, M. H., Brett, M., Haldane, A., del Río, J. F., Wiebe, M., Peterson, P., … Oliphant, T. E. (2020). Array programming with NumPy. Nature, 585(7825), 357–362. https://doi.org/10.1038/s41586-020-2649-2
  • Hunter, J. D. (2007). Matplotlib: A 2D graphics environment. Computing in Science & Engineering, 9(3), 90–95. https://doi.org/10.1109/MCSE.2007.55
  • Scott, D. W. (1979). On optimal and data-based histograms. Biometrika, 66(3), 605–610. https://doi.org/10.1093/biomet/66.3.605
  • Silverman, B. W. (1986). Density estimation for statistics and data analysis. Chapman and Hall. https://doi.org/10.1007/978-1-4899-3324-9
  • Sturges, H. A. (1926). The choice of a class interval. Journal of the American Statistical Association, 21(153), 65–66. https://doi.org/10.1080/01621459.1926.10502161
  • Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T., Cournapeau, D., Burovski, E., Peterson, P., Weckesser, W., Bright, J., van der Walt, S. J., Brett, M., Wilson, J., Millman, K. J., Mayorov, N., Nelson, A. R. J., Jones, E., Kern, R., Larson, E., … SciPy 1.0 Contributors. (2020). SciPy 1.0: Fundamental algorithms for scientific computing in Python. Nature Methods, 17(3), 261–272. https://doi.org/10.1038/s41592-019-0686-2
  • Wickham, H. (2010). A layered grammar of graphics. Journal of Computational and Graphical Statistics, 19(1), 3–28. https://doi.org/10.1198/jcgs.2009.07098

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

looti, M. (2026, أغسطس 31). كيفية إنشاء مدرج تكراري نسبي في Matplotlib. عرب سايكلوجي. https://arabpsychology.com/statistics/how-to-create-relative-frequency-histogram-matplotlib/
looti, Mohammed. “كيفية إنشاء مدرج تكراري نسبي في Matplotlib.” عرب سايكلوجي, 31 أغسطس 2026, https://arabpsychology.com/statistics/how-to-create-relative-frequency-histogram-matplotlib/.
looti, Mohammed. “كيفية إنشاء مدرج تكراري نسبي في Matplotlib.” عرب سايكلوجي. أغسطس 31, 2026. https://arabpsychology.com/statistics/how-to-create-relative-frequency-histogram-matplotlib/.