التصور البيانيبرمجة بايثونعلم البيانات

كيفية إنشاء هرم سكاني في بايثون

دليل أكاديمي وتطبيقي شامل يشرح خطوات إنشاء وتخصيص وتحليل الهرم السكاني باستخدام لغة بايثون ومكتبات Matplotlib وPandas وPlotly لدراسة البيانات الديموغرافية.

تاريخ النشر

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

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

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

1. مقدمة شاملة عن الهرم السكاني وأهميته في التحليل الديموغرافي

1.1 مفهوم الهرم السكاني وبنيته التركيبية

يُعرَّف الهرم السكاني بأنه تمثيل بياني ثنائي الاتجاه يوضح التوزيع النسبي أو المطلق لسكان مجتمع معين مقسمين حسب الفئات العمرية والجنس. يستند هذا الهيكل إلى محورين متعامدين؛ حيث يمثل المحور الرأسي (Y-axis) تدرج الفئات العمرية التي تبدأ غالباً من القاعدة بفئة الرضع والأطفال (0-4 سنوات) وتتصاعد تدريجياً في فترات زمنية متساوية (عادة فئات خمسية أو عشرية) حتى تصل إلى قمة الهرم التي تضم الفئات العمرية المتقدمة أو الفئات المفتوحة (مثل 85 سنة فما فوق). أما المحور الأفقي (X-axis)، فيمثل الحجم السكاني مقاساً بالأرقام المطلقة أو بالنسب المئوية من إجمالي التعداد العام للسكان.

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

1.2 الأهمية الإحصائية والاجتماعية للهرم السكاني

تتجاوز وظيفة الهرم السكاني مجرد العرض المرئي الساكن للبيانات لتشكل أداة استقرائية بالغة العمق؛ فشكل الهرم يعكس التاريخ الديموغرافي للمجتمع على مدار قرن مضى، ويقدم سجلاً بصرياً حياً للأحداث التاريخية الكبرى مثل الحروب، والمجاعات، والأوبئة، وطفرات المواليد (Baby Booms)، وموجات الهجرة الوافدة أو النازحة. ومن خلال دراسة التدرجات والانكماشات في أشرطة الهرم، يستطيع الديموغرافيون حساب نسبة الإعالة العمرية (Age Dependency Ratio)، وهي العلاقة الحسابية بين الفئات غير المنتجة (صغار السن وكبار السن) والفئات السكانية الواقعة في سن العمل والإنتاج (15-64 سنة)، وهو مؤشر جوهري لتحديد مدى الضغط الواقع على الاقتصاد القومي.

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

1.3 الأنماط الديموغرافية الرئيسية للأهرامات السكانية

تصنف الأهرامات السكانية في علم الديموغرافيا إلى ثلاثة أنماط رئيسية تعكس مراحل التحول الديموغرافي للمجتمعات:

  • النمط التوسعي (Expansive Population Pyramid): يتميز بقاعدة عريضة للغاية تتناقص تدريجياً بحدة نحو قمة ضيقة ومدببة. يعكس هذا النمط مجتمعاً فتياً يتسم بارتفاع كبير في معدلات المواليد والخصوبة، مقترناً بمعدلات وفيات مرتفعة نسبياً تؤدي إلى انخفاض أعداد كبار السن، وهو النمط الشائع في الدول النامية ومجتمعات ما قبل التحول الصناعي.
  • النمط التضيقي (Constrictive Population Pyramid): يظهر على شكل أسطوانة تنكمش عند قاعدتها وتتسع في منتصفها وقمّتها. يشير هذا الشكل إلى تراجع حاد في معدلات الخصوبة والمواليد مع ارتفاع ملحوظ في متوسط العمر المتوقع، مما يدل على شيخوخة المجتمع وتقلص حجم الفئات الشابة، وهو النموذج السائد في العديد من دول أوروبا الغربية واليابان.
  • النمط المستقر (Stationary Population Pyramid): يتسم بشكل شبه مستطيل متناسق الأضلاع، حيث تتساوى نسبياً جميع الفئات العمرية باستثناء الفئات المتقدمة في السن. يعبر هذا النمط عن حالة من التوازن والاستقرار الديموغرافي طويل الأمد نتيجة توازي معدلات المواليد المنخفضة مع معدلات الوفيات المنخفضة أيضاً، مما يضمن استقرار حجم السكان عبر الأجيال المتعاقبة.

2. إعداد بيئة العمل وتثبيت المكتبات البرمجية اللازمة في بايثون

2.1 تهيئة بيئة بايثون وتثبيت الحزم الأساسية

تبدأ رحلة التحليل البياني بإعداد بيئة عمل برمجية مستقرة ومتكاملة. يفضل العمل ضمن بيئات الحوسبة التفاعلية مثل Jupyter Notebook أو بيئة Google Colab السحابية، أو بيئات التطوير المتكاملة الشاملة مثل Visual Studio Code وPyCharm. تتيح هذه البيئات تشغيل الأكواد بصورة مجزأة ومراجعة المخرجات البصرية بصورة فورية، مما يسهل عملية التعديل وضبط العناصر الدقيقة في الرسوم البيانية الديموغرافية.

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

2.2 نظرة عامة على المكتبات المستخدمة ووظائفها

تعتمد المنهجية المتقدمة لإنشاء الهرم السكاني على منظومة من البرمجيات مفتوحة المصدر، لكل منها دور وظيفي محدد ومتكامل مع باقي المنظومة:

  • مكتبة Pandas: تشكل العمود الفقري لمعالجة البيانات؛ حيث تُستخدم لاستيراد الجداول الإحصائية، وإعادة هيكلة البيانات إلى إطارات بيانات منظمة، وحساب المجاميع الفرعية، وتطبيق عمليات التجميع والتحويل الترتيبي للفئات العمرية.
  • مكتبة NumPy: توفر البنية الرياضية لإجراء العمليات الحسابية المتجهية السريعة، ومعالجة المصفوفات الرقمية، وتوليد الفواصل الزمنية، وتعديل إشارات القيم الرقمية لخلق التناظر البصري المطلوب في الرسم ثنائي المحاور.
  • مكتبة Matplotlib: الركيزة الأساسية للرسم البياني ثنائي الأبعاد في بايثون؛ تمنح المبرمج تحكماً دقيقاً في هندسة المحاور، والمقاييس، وتنسيق الأشرطة الأفقية، وإدارة النصوص، وضبط حدود ومساحات المخطط.
  • مكتبة Seaborn ومكتبة Plotly: تقدم الأولى واجهة جمالية عالية المستوى مبنية فوق Matplotlib مع قوالب ألوان أكاديمية محسنة، بينما تتيح الثانية بناء أهرامات سكانية تفاعلية وديناميكية يمكن تضمينها في لوحات البيانات وتطبيقات الويب الإحصائية الموجهة للجمهور العام.

3. هيكلة وتجهيز البيانات الديموغرافية باستخدام Pandas

3.1 إنشاء إطار البيانات اليدوي (Dataframe Construction)

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

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

3.2 تنظيف البيانات والتأكد من التناسق الهيكلي

يتطلب التحليل الديموغرافي الدقيق خلو البيانات من أي شوائب أو قيم غير متسقة قد تشوه المنظور البصري للهرم. تشمل مرحلة التنظيف فحص أنواع البيانات (Data Types)، والتأكد من أن أعمدة التعداد السكاني معرفة كأرقام صحيحة أو عشرية وليست نصوصاً، مع التأكد من أن عمود الفئات العمرية مرتب ترتيباً فئوياً (Categorical Ordering) سليم يمنع الترتيب الأبجدي العشوائي (الذي قد يضع الفئة 10-14 قبل الفئة 5-9).

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

3.3 التحويلات الإحصائية: التحويل إلى نسب مئوية

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

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

4. الأساس الرياضي والمنطقي لرسم الهرم السكاني في بايثون

4.1 منطق الأشرطة الأفقية المتقابلة (Bi-directional Bar Charts)

يعتمد المخطط الهرمي في جوهره الرياضي على فكرة المخطط الشريطي الأفقي المزدوج (Bi-directional Horizontal Bar Chart). في أنظمة الإحداثيات الديكارتية الافتراضية، ترسم الأشرطة الأفقية باتجاه اليمين انطلاقاً من نقطة الصفر على المحور السيني. ولإنشاء المظهر المتقابل المميز للهرم، يتم تطبيق حيلة رياضية أساسية تتمثل في تحويل كافة قيم الشطر المخصص للذكور إلى قيم سالبة عبر ضرب مصفوفة بيانات الذكور في المعامل (-1).

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

4.2 معالجة القيم السالبة في مقياس الرسم البصري

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

علاوة على ذلك، يقتضي الضبط الرياضي السليم توحيد حدود المحور السيني الأقصى والأدنى (X-axis limits) بصورة متناظرة تماماً حول الصفر (على سبيل المثال من -10% إلى +10%). يضمن هذا التناظر عدم انزياح الهرم نحو أحد الجانبين، ويمنع الخداع البصري الذي قد يوحي بتفوق عددي لجنس على الآخر نتيجة اختلاف مقاييس الرسم على جانبي خط المنتصف.

5. إنشاء الهرم السكاني الأساسي خطوة بخطوة عبر Matplotlib

5.1 تحديد المتغيرات ومحاور الرسم البياني

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

باستخدام الدالة التأسيسية plt.subplots، يتم إنشاء مساحة العمل الشاملة (Figure) وحاوية المحاور الرسومية (Axes) بأبعاد متناسقة ومحسوبة هندسياً تسمح باستيعاب كافة الأشرطة الأفقية والنصوص الملحقة دون تداخل. تشكل هذه الخطوة اللبنة التأسيسية التي تُبنى عليها كافة التخصيصات والطبقات الرسومية اللاحقة في معمارية المخطط.

Population pyramid in Python
Population pyramid in Python

5.2 تنفيذ كود الرسم للأشرطة المزدوجة

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

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

5.3 عرض المخطط الأولي ومراجعته الهيكلية

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

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

6. تخصيص المحاور والعلامات والشبكة البيانية المتقدمة

6.1 تخصيص المحور الرأسي (Y-axis Customization)

يمثل وضوح المحور الرأسي عنصراً حاسماً في سهولة قراءة الهرم السكاني. تتضمن عملية التخصيص استبدال المؤشرات الرقمية التلقائية بمسميات الفئات العمرية الحقيقية (مثل: “0-4″، “5-9″، “10-14”) عبر استخدام الدالة المخصصة ax.set_yticks والدالة المرافقة ax.set_yticklabels. يتم اختيار خطوط واضحة وبأحجام متناسبة تضمن قراءة النصوص دون إجهاد بصري.

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

6.2 إعادة تشكيل المحور الأفقي (X-axis Formatting)

للتخلص النهائي من الإشارات السالبة المربكة على المحور الأفقي، يتم استخدام آلية التنسيق المتقدمة matplotlib.ticker.FuncFormatter. تتيح هذه الأداة تمرير دالة برمجية مخصصة تطبق معامل القيمة المطلقة abs() على كل علامة تدريج رقمية على المحور قبل عرضها، مما يحول الأرقام السالبة (مثل -4%) إلى أرقام موجبة صريحة (4%) تعبر عن الحجم السكاني الطبيعي.

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

6.3 تحسين خطوط الشبكة وتنسيق الإطار البصري (Spines & Grid)

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

في المقابل، يتم إضافة خطوط شبكة رأسية خفيفة للغاية (Vertical Gridlines) ذات نمط متقطع ولون رمادي باهت، ووضعها في الطبقة الخلفية للرسم (خلف الأشرطة السكانية) عبر تفعيل خاصية zorder. كما يتم رسم خط رأسي بارز عند نقطة الصفر (ax.axvline(0)) بلون داكن نسبي لترسيخ الفصل الهيكلي بين نصفي المجتمع وتسهيل مقارنة أطوال الأشرطة المتقابلة بدقة متناهية.

7. إضافة النصوص التوضيحية وتنسيق الألوان والتسميات

7.1 اختيار لوحات الألوان الأكاديمية والوصولية (Accessibility)

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

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

Population pyramid in python with different color scheme
Population pyramid in python with different color scheme

7.2 إدراج العناوين الرئيسية والفرعية ومفتاح الرسم (Legend)

يتطلب العرض الاحترافي للهرم السكاني بنية نصية توجيهية متكاملة. يجب أن يتضمن المخطط عنواناً رئيسياً واضحاً وجامعاً يحدد المجتمع قيد الدراسة وسنة القياس بدقة (مثل: “التركيب العمري والنوعي لسكان المملكة العربية السعودية – تعداد 2022”). يُلحق بهذا العنوان عنوان فرعي أصغر حجماً يوضح وحدة القياس المستخدمة (سواء كانت النسبة المئوية من إجمالي السكان أو التعداد بالألف أو المليون نسمة).

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

7.3 إضافة التسميات المباشرة على الأشرطة (Direct Data Annotations)

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

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

8. بناء الهرم السكاني التفاعلي باستخدام مكتبة Plotly

8.1 مزايا التحليل التفاعلي في الدراسات السكانية

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

علاوة على ذلك، توفر البيئة التفاعلية أدوات للتقريب البصري (Zoom in/out)، وعزل فئات عمرية معينة، وإخفاء أحد الجنسين مؤقتاً لمقارنة توزيع الآخر بمفرده. تعد هذه القدرات التفاعلية مثالية لدمج الأهرامات السكانية في لوحات التحكم الرقمية الحديثة (Dashboards)، ومنصات الصحافة الاستقصائية القائمة على البيانات، والبوابات الإحصائية الوطنية التفاعلية التي تخدم ملايين المستفيدين عبر الويب.

Population pyramid in Python
Population pyramid in Python

8.2 كتابة كود الرسم التفاعلي عبر Plotly Graph Objects

يتم بناء الهرم السكاني التفاعلي عبر وحدة الكائنات الرسومية plotly.graph_objects؛ حيث يتم إنشاء كائن رسم مستقل لكل جنس باستخدام دالة الأشرطة go.Bar مع تحديد الاتجاه الأفقي عبر المعلمة orientation='h'. يتم تمرير القيم السالبة لبيانات الذكور والقيم الموجبة لبيانات الإناث تماماً كما في المنطق الرياضي الأساسي، مع ربط كل شريط بالفئات العمرية المقابلة على المحور الرأسي.

الخطوة المحورية في Plotly تكمن في تهيئة التخطيط العام fig.update_layout بتعيين نمط الأشرطة كـ barmode='relative' أو barmode='overlay' لمحاذاة الأشرطة في الاتجاهين المتعاكسين انطلاقاً من خط الصفر. بعد ذلك، يتم تخصيص قوالب بطاقات التمرير (hovertemplate) بصيغة نصوص HTML مخصصة تعرض القيم الرياضية المطلقة وتنسق الأرقام بصورة بصرية مريحة تتضمن فواصل الآلاف وعلامات النسب المئوية الدقيقة.

8.3 تخصيص عناصر التحكم التفاعلية وحفظ النتائج

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

في ختام المعالجة التفاعلية، توفر Plotly خيارات تصدير مرنة ومتعددة؛ إذ يمكن حفظ الهرم السكاني كملف HTML مستقل ومتكامل يحوي كافة الشيفرات البرمجية ومحركات التفاعل داخله، مما يسهل مشاركته عبر البريد الإلكتروني أو دمجه في مواقع الويب وتطبيقات إطارات العمل التفاعلية مثل Streamlit وDash، مع إمكانية تنزيل لقطات ثابتة عالية الدقة بصيغ متعددة مثل SVG وPNG للمطبوعات الرسمية.

9. إنشاء الهرم السكاني بالاعتماد على مكتبة Seaborn والرسوم المتقدمة

9.1 إعادة تشكيل البيانات إلى النمط الطويل (Tidy / Long Format)

تعتمد مكتبة Seaborn المتقدمة فلسفة برمجية قائمة على مفهوم “البيانات المرتبة” (Tidy Data) أو النمط الطويل (Long Format)؛ حيث يمثل كل صف في الجدول ملاحظة إحصائية واحدة، ويمثل كل عمود متغيراً محدداً. للعمل مع Seaborn بكفاءة، يجب أولاً تحويل إطار البيانات من النمط العريض (الذي يحتوي على عمودين منفصلين للذكور والإناث) إلى النمط الطويل عبر دالة pandas.melt.

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

9.2 استخدام seaborn.barplot في تمثيل الهرم المزدوج

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

لضمان سلامة الهيكل الهرمي، يجب تمرير الترتيب الصريح للفئات العمرية عبر معلمة order لضمان تصاعد الفئات من الأصغر للأكبر دون ارتباك. كما يمكن الاستفادة الفورية من قوالب التنسيق المدمجة في Seaborn (مثل sns.set_theme(style='whitegrid')) لإضفاء لمسة جمالية عصرية على المخطط تتضمن شبكات خلفية متوازنة وتناسقاً شاملاً في أحجام النصوص والخطوط.

9.3 مقارنة المنهجيات البرمجية: Matplotlib مقابل Seaborn مقابل Plotly

تقدم منظومة بايثون خيارات متعددة لرسم الهرم السكاني، وتعتمد المفاضلة بينها على طبيعة المشروع والجمهور المستهدف وسياق النشر المطلوب:

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

10. التعامل مع مجموعات البيانات الواقعية والمسوح الديموغرافية الكبرى

10.1 استيراد ومعالجة بيانات التعداد السكاني من الملفات الخارجية

في التطبيقات الواقعية، نادراً ما يتم إدخال البيانات يدوياً؛ بل يتم استيرادها من قواعد البيانات الرسمية مثل قاعدة بيانات البنك الدولي المفتوحة (World Bank Open Data) أو شعبة السكان بالأمم المتحدة أو الهيئات الإحصائية الوطنية عبر ملفات CSV أو Excel أو واجهات برمجة التطبيقات (APIs). تتطلب هذه البيانات الخام معالجة أولية مكثفة تشمل تصفية السجلات حسب الدولة، وسنة التعداد، ونوع المؤشر الديموغرافي.

غالباً ما تحتوي البيانات الخام على تعدادات سنوية فردية (Single-year ages)، مما يقتضي تجميعها في فئات خمسية قياسية لتسهيل قراءة الهرم وتوحيد معاييره. يتم ذلك في Pandas باستخدام دالتي pd.cut لتقسيم الأعمار إلى فترات منتظمة، ودالة groupby لحساب مجاميع كل فئة لكل جنس، مع ضرورة إيلاء اهتمام خاص للفئات العمرية المفتوحة في قمة الهرم (مثل: +85 أو +100 عام) ومعالجتها برمجياً كفئة نصية موحدة ومستقلة لتفادي تشوه المقياس الرأسي.

10.2 إدارة الشوائب ومعالجة القيم المتطرفة والشاذة

تواجه المسوح الديموغرافية الميدانية في العديد من دول العالم ظاهرة إحصائية شائعة تُعرف باسم تراكم الأعمار (Age Heaping) أو تفضيل الأرقام (Digit Preference)، حيث يميل بعض السكان غير المدققين في تواريخ ميلادهم إلى تقريب أعمارهم إلى أقرب رقم ينتهي بصفر أو خمسة (مثل: 30، 35، 40). يظهر هذا الخلل في الهرم السكاني الخام على شكل أشرطة متضخمة بشكل شاذ ومسنن يشوه الانسيابية الطبيعية للتوزيع السكاني.

يتعامل علماء البيانات مع هذه الشوائب بتطبيق مؤشرات الفحص الديموغرافي مثل مؤشر ويبل (Whipple’s Index) ومؤشر مايرز (Myers’ Blended Index) لقياس درجة التراكم، يعقبها تطبيق خوارزميات التنعيم الإحصائي (Smoothing Techniques) مثل المتوسطات المتحركة (Moving Averages) أو نماذج الاستيفاء الرياضي (Spline Interpolation) لتوزيع الفروقات التراكمية على الفئات المجاورة، مما يعيد للهرم دقته العلمية وتوازنه المنطقي قبل إجراء أي استنتاجات تحليلية.

11. التحليل الإحصائي والديموغرافي وتفسير أنماط الهرم السكاني

11.1 استخراج المؤشرات الديموغرافية الكمية من الهرم السكاني

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

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

11.2 قراءة الصدمات التاريخية والظواهر السكانية عبر الشكل البصري

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

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

11.3 صياغة التقرير التحليلي المصاحب للرسم البياني

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

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

12. أفضل الممارسات البرمجية وتصدير الرسوم بجودة النشر الأكاديمي

12.1 هندسة الكود وإعادة الاستخدام (Modular Code & Functions)

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

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

12.2 تصدير الرسوم البيانية بدقة عالية للنشر الأكاديمي

يخضع تصدير الرسوم البيانية الموجهة للأبحاث والمجلات العلمية والتقارير المطبوعة لمعايير صارمة تتعلق بالدقة البصرية والوضوح الطباعي. يتم في بايثون استخدام الدالة القياسية plt.savefig مع ضبط دقة النقاط في البوصة (DPI – Dots Per Inch) بقيمة لا تقل عن 300 DPI لضمان أعلى مستويات النقاء البصري والحدة التامة للخطوط والنصوص عند الطباعة الورقية.

كما يُنصح بشدة بتصدير المخططات بصيغ المتجهات الرسومية (Vector Graphics) مثل PDF وEPS وSVG، والتي تحتفظ بدقتها اللانهائية دون أي بكسلة مهما تم تكبيرها، مما يجعلها الخيار المفضل لدور النشر الأكاديمية العالمية. ويجب دائماً تفعيل المعلمة bbox_inches='tight' أثناء التصدير لقص المساحات البيضاء الزائدة تلقائياً وضمان عدم اقتطاع أي نصوص أو علامات تدريج تقع على الحواف الخارجية للمخطط.

12.3 المعايير الأخلاقية والأمانة العلمية في تمثيل البيانات السكانية

تفرض أخلاقيات تمثيل البيانات وتصورها (Data Visualization Ethics) التزاماً صارماً بالأمانة العلمية والشفافية الإحصائية. يحظر التلاعب بمقاييس الرسم أو استخدام حدود محاور غير متناظرة للإيحاء بوجود فروقات مبالغ فيها بين الجنسين أو إخفاء اتجاهات ديموغرافية حقيقية لخدمة سرديات موجهة؛ فالأمانة الإحصائية تقتضي تمثيل الأرقام بنسبها الرياضية الحقيقية والمجردة.

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

خاتمة

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

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

المراجع (References)

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

looti, M. (2026, أغسطس 26). كيفية إنشاء هرم سكاني في بايثون. عرب سايكلوجي. https://arabpsychology.com/statistics/how-to-create-a-population-pyramid-in-python/
looti, Mohammed. “كيفية إنشاء هرم سكاني في بايثون.” عرب سايكلوجي, 26 أغسطس 2026, https://arabpsychology.com/statistics/how-to-create-a-population-pyramid-in-python/.
looti, Mohammed. “كيفية إنشاء هرم سكاني في بايثون.” عرب سايكلوجي. أغسطس 26, 2026. https://arabpsychology.com/statistics/how-to-create-a-population-pyramid-in-python/.