Введение
Половозрастная пирамида (ПВП) представляет собой двустороннюю столбчатую диаграмму, где по вертикальной оси откладываются возрастные группы, а по горизонтальной — численность (или доля) мужского и женского населения. Мужчины обычно отображаются слева от нуля, женщины — справа, что создаёт характерный «зеркальный эффект. [1].
Такие пирамиды широко используются в: [1].
— демографическом анализе (оценка структуры населения, прогнозы);
— эпидемиологии (распределение заболеваемости по полу и возрасту);
— образовании (наглядный материал для уроков биологии и обществознания);
— социологии и маркетинге (сегментация аудитории).
Подготовка данных
Для построения пирамиды необходимы три ряда показателей: [1].
- Возрастные группы (например, 0–4, 5–9, … или однолетние группы 0, 1, 2, …);
- Численность мужчин в каждой группе;
- Численность женщин в каждой группе.
Данные могут храниться в CSV-файле, Excel-таблице или непосредственно в DataFrame pandas. Пример структуры данных представлен в таблице 1.
Таблица 1
Структуры данных
|
Age |
Male |
Female |
|
0–4 |
1200 |
1150 |
|
5–9 |
1100 |
1080 |
|
10–14 |
1050 |
1020 |
Алгоритм построения в Python
Шаг 1. Импорт библиотек
import pandas as pd
import matplotlib.pyplot as plt
Шаг 2. Загрузка и подготовка данных
# Загрузка из CSV
df = pd.read_csv('population.csv')
# Если данные в абсолютных значениях, можно перевести в проценты
total = df['Male'].sum() + df['Female'].sum()
df['Male_pct'] = df['Male'] / total * 100
df['Female_pct'] = df['Female'] / total * 100
Шаг 3. Построение пирамиды
Ключевая идея: отобразить два горизонтальных столбчатых графика (barh), один из которых «перевёрнут» (значения для мужчин берутся с отрицательным знаком). [2].
fig, ax = plt.subplots(figsize=(10, 8))
# Возрастные группы (ось Y)
y = range(len(df))
age_labels = df['Age']
# Данные для мужчин (отрицательные значения) и женщин
male_values = [-x for x in df['Male']]
female_values = df['Female']
# Построение столбцов
ax.barh(y, male_values, color='royalblue', label='Мужчины')
ax.barh(y, female_values, color='lightcoral', label='Женщины')
# Настройка осей
ax.set_yticks(y)
ax.set_yticklabels(age_labels)
ax.invert_xaxis()
ax.set_xlabel('Численность населения')
ax.set_title('Половозрастная пирамида населения')
# Добавление сетки и легенды
ax.grid(axis='x', alpha=0.3)
ax.legend()
plt.tight_layout()
plt.show()
Шаг 4. Дополнительные улучшения
— Подписи значений на столбцах: можно добавить цикл для вывода чисел рядом с каждым столбцом;
— Цветовое кодирование: использовать разные оттенки для разных возрастных когорт;
— Экспорт в файл: plt.savefig('pyramid.png', dpi=300) для публикации или учебных материалов.
Пример с реальными данными (Plotly для интерактивности)
Для интерактивных веб-визуализаций удобно использовать библиотеку plotly: [5].
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Bar(
y=df['Age'],
x=[-x for x in df['Male']],
name='Мужчины',
orientation='h',
marker_color='royalblue'
))
fig.add_trace(go.Bar(
y=df['Age'],
x=df['Female'],
name='Женщины',
orientation='h',
marker_color='lightcoral'
))
fig.update_layout(
title='Половозрастная пирамида',
barmode='overlay',
xaxis=dict(title='Численность'),
yaxis=dict(title='Возрастная группа')
)
fig.show()
Пример результата построения половозрастной пирамиды
На рис. 1 ниже представлен пример половозрастной пирамиды, построенной с использованием описанного выше кода. Данные являются условными и имитируют возрастную структуру населения.
Рис. 1. Пример половозрастной пирамиды населения, построенной в Python с использованием matplotlib
Методические рекомендации для учителей
- На уроках биологии используйте пирамиду для обсуждения возрастной структуры популяций, демографического перехода, старения населения;
- На информатике предложите ученикам самостоятельно загрузить данные Росстата и построить пирамиду для своего региона;
- Для проектов можно сравнить пирамиды разных лет (например, 1990, 2010, 2025) и обсудить изменения.
Заключение
Построение половозрастной пирамиды в Python — доступная задача, требующая минимальных знаний программирования и дающая мощный инструмент для анализа и визуализации демографических данных. Предложенный код можно адаптировать под любые данные и использовать как в научных исследованиях, так и в образовательной практике.
Литература:
- Московский государственный университет имени М. В. Ломоносова. Построение и анализ возрастно-половой пирамиды [Электронный ресурс]. — URL: https://books.econ.msu.ru/Demography/chap04/4.2/4.2.1/ (дата обращения: 15.09.2026).
- Statology. How to Create a Population Pyramid in Python [Электронный ресурс]. — URL: https://www.statology.org/population-pyramid-python/ (дата обращения: 15.09.2026).
- Epi R Handbook. Демографические пирамиды и шкалы Лайкерта [Электронный ресурс]. — URL: https://www.epirhandbook.com/ru/new_pages/age_pyramid.ru.html (дата обращения: 15.09.2026).
- GitHub. Matplotlib Population Pyramid [Электронный ресурс]. — URL: https://github.com/carogaltier/matplotlib-population-pyramid (дата обращения: 15.09.2026).
- GeeksforGeeks. How to Create a Population Pyramid Using Plotly in Python? [Электронный ресурс]. — URL: https://www.geeksforgeeks.org/python/how-to-create-a-population-pyramid-using-plotly-in-python/ (дата обращения: 15.09.2026).

