La mejor forma de mostrar la dinámica de una población es con un gráfico de pirámide.
Se le llama así porque por años esa es la forma que ha tomado, cuando ponemos dos gráficos de barras contiguos. Cada barra es la suma de todas las personas en un rango de edades.
En este tutorial:
- Te daré el código para hacer tus pirámides de población en R y Python.
- Luego veremos un ejemplo real descargando datos del INEGI
- Y finamente personalizaremos el gráfico.
Comencemos.
¿Para qué se usan las pirámides de población?
Es la forma más sencilla de entender la dinámica de la población de un lugar.
Es un vistazo al presente y al futuro de la población. Los jóvenes de ahora son los adultos del mañana, que a su vez serán los adultos mayores después. Entender esto de un vistazo te ayuda a proyectar la fuerza laboral, el estado de las pensiones y el futuro de las finanzas públicas.
Entre muchas otras cosas.
Este es el código para hacer una pirámide de población
Esta vez comenzaremos con el código.
Los scripts que te daré te harán el gráfico que buscas en python y R. Sólo tienes que modificar las cifras y los rangos, si es necesario.
Copia este código y úsalo en un script de python. También puedes usarlo en Google Colab.
El único módulo que necesitamos es matplotlib.
# Importamos las librerías necesarias
import matplotlib.pyplot as plt
# Definimos los datos manualmente
rangos_edades = ['0 - 5', '6 - 10', '11 - 15', '16 - 20', '21 - 25', '26 - 30', '31 - 35', '36 - 40', '41 - 45', '46 - 50', '51 - 55', '56 - 60', '61 - 65', '66 - 70', '71 - 75', '76 - 80', '81+']
hombres = [-30320, -24326, -20658, -19694, -16580, -13560, -10634, -8900, -7386, -6094, -4984, -4084, -3284, -2504, -1824, -1284, -896]
mujeres = [29144, 22493, 19878, 21686, 16947, 14374, 12220, 10800, 9634, 8056, 6804, 5634, 4512, 3500, 2642, 1904, 1208]
# Creamos la figura y los ejes
plt.figure(figsize=(10, 8))
# Graficamos la población masculina (lado izquierdo) y femenina (lado derecho)
plt.barh(rangos_edades, hombres, label='Hombres', color="#154957")
plt.barh(rangos_edades, mujeres, label='Mujeres', color="#05cd86")
# Añadimos etiquetas y título en español
plt.xlabel('Población')
plt.ylabel('Rango de Edad')
plt.title('Pirámide Poblacional para el año 1900')
plt.legend(loc='upper right')
# Mostramos el gráfico
plt.show()
Para hacer lo mismo en R, usamos este código. Nota que, como le estamos dando las cifras directamente en el código, no es necesario cargar ninguna base de datos (eso lo haremos más adelante con los datos del INEGI).
# Instalamos (si es necesario) y cargamos la librería ggplot2
if (!require(ggplot2)) install.packages("ggplot2")
library(ggplot2)
# Definimos los datos manualmente
rangos_edades <- c("0 - 5", "6 - 10", "11 - 15", "16 - 20", "21 - 25",
"26 - 30", "31 - 35", "36 - 40", "41 - 45", "46 - 50",
"51 - 55", "56 - 60", "61 - 65", "66 - 70", "71 - 75",
"76 - 80", "81+")
hombres <- c(-30320, -24326, -20658, -19694, -16580, -13560, -10634, -8900, -7386,
-6094, -4984, -4084, -3284, -2504, -1824, -1284, -896)
mujeres <- c(29144, 22493, 19878, 21686, 16947, 14374, 12220, 10800, 9634,
8056, 6804, 5634, 4512, 3500, 2642, 1904, 1208)
# Creamos un data frame con los datos
datos <- data.frame(
RangoEdad = factor(rangos_edades, levels = rev(rangos_edades)), # Invertimos los niveles
Hombres = hombres,
Mujeres = mujeres
)
# Transformamos los datos a un formato largo para ggplot
datos_largo <- reshape2::melt(datos, id.vars = "RangoEdad", variable.name = "Genero", value.name = "Poblacion")
# Creamos la pirámide poblacional
ggplot(datos_largo, aes(x = Poblacion, y = RangoEdad, fill = Genero)) +
geom_bar(stat = "identity", width = 0.8) +
scale_x_continuous(labels = abs, name = "Población") + # Etiquetas del eje x como valores absolutos
labs(y = "Rango de Edad", title = "Pirámide Poblacional para el año 1900") +
scale_fill_manual(values = c("Hombres" = "#154957", "Mujeres" = "#05cd86")) + # Colores para cada género
theme_minimal() +
theme(legend.position = "top") +
guides(fill = guide_legend(title = "Género"))
Debes de obtener como resultado un gráfico como este:
El truco en ambos casos es proporcionar los datos de un género en positivo y los otros en negativo.
Si ya tienes los datos y ya organizaste las sumas, basta con que cambies los números en el código y ya tienes el gráfico listo para usar.
Pero ¿qué hacer con los datos como vienen en el censo?
Hagámoslo.
Tutorial para hacer una pirámide de población con los datos del INEGI en R y Python
Normalmente no nos vamos a encontrar los datos listos para hacer nuestra gráfica.
Generalmente es necesario ordenar los datos y limpiarlos antes de comenzar a hacer los gráficos. Afortunadamente, tanto R como Python tienen funciones que facilitan mucho el trabajo. El código que te voy a pasar funciona sin cambios para el censo 2020 de México en Inegi. Si deseas usarlo en otras bases de datos, lo puedes hacer con cambios ligeros.
No te preocupes, te guiaré en el camino.
Si ya estás listo, comienza por aquí.
Paso #1: Descarga la base de datos
Para este ejemplo usaremos el censo 2020 de Inegi.
Entra el la siguiente página y descarga los tabulados del cuestionario básico de población.
La hoja 03 contiene los datos que buscamos. Los únicos detalles son que hay que filtrar el estado que queremos que nos muestre y que nos arroja todas las edades. Para hacer una pirámide que sea fácil de leer, necesitamos dividir estos datos en rangos.
Así se ve la pantalla de los datos en Excel.
Paso #2: Carga la base de datos en Python/R
Ahora que tienes el archivo descargado, es momento de cargarlo en tu entorno de trabajo. Te mostraré cómo hacerlo tanto en Python como en R, y te explicaré cada paso para que entiendas lo que estamos haciendo y cómo puedes adaptar el código a tus necesidades.
Cargando los datos en Python
Primero, asegúrate de tener instaladas las librerías necesarias. En este caso, usaremos pandas
para manejar los datos y matplotlib
para las gráficas.
# Importamos las librerías necesarias
import pandas as pd
import matplotlib.pyplot as plt
Ahora, especifica la ruta al archivo que descargaste y el nombre de la hoja que contiene los datos que necesitamos (en este caso, la hoja "03").
# Especifica la ruta al archivo y el nombre de la hoja
file_path = 'ruta/a/tu/archivo.xlsx' # Reemplaza con la ruta real de tu archivo
sheet_name = '03' # Nombre de la hoja que contiene los datos
Leemos los datos del archivo Excel, omitiendo las primeras filas que contienen metadatos y no nos sirven para el análisis.
# Leemos la hoja de Excel, omitiendo las primeras 5 filas de metadatos
data = pd.read_excel(file_path, sheet_name=sheet_name, skiprows=5)
Renombramos las columnas para facilitar su manejo.
# Renombramos las columnas para mayor claridad
data.columns = ["Entidad", "Edad", "Poblacion_Total", "Hombres", "Mujeres", "Relacion_H_M"]
Cargando los datos en R
En R, utilizaremos el paquete readxl
para leer archivos Excel y ggplot2
para las gráficas. Asegúrate de tenerlos instalados.
# Instalamos y cargamos los paquetes necesarios
if (!require("readxl")) install.packages("readxl")
if (!require("ggplot2")) install.packages("ggplot2")
library(readxl)
library(ggplot2)
Especifica la ruta al archivo y el nombre de la hoja.
# Especifica la ruta al archivo y el nombre de la hoja
file_path <- "ruta/a/tu/archivo.xlsx" # Reemplaza con la ruta real de tu archivo
sheet_name <- "03" # Nombre de la hoja que contiene los datos
Leemos los datos, omitiendo las primeras filas innecesarias.
# Leemos la hoja de Excel, omitiendo las primeras 5 filas de metadatos
data <- read_excel(file_path, sheet = sheet_name, skip = 5)
Renombramos las columnas.
# Renombramos las columnas para mayor claridad
colnames(data) <- c("Entidad", "Edad", "Poblacion_Total", "Hombres", "Mujeres", "Relacion_H_M")
Paso #3: Filtra y limpia los datos
Los datos que hemos cargado incluyen información de todas las entidades federativas y edades individuales. Para nuestra pirámide poblacional, vamos a enfocarnos en el nivel nacional. Pero si deseas analizar un estado específico, como Durango, te mostraré cómo hacerlo.
Filtrando los datos en Python
Primero, filtramos los datos para quedarnos solo con la entidad que nos interesa. Para el nivel nacional, la entidad se llama "Estados Unidos Mexicanos".
Leer el artículo completo
Registrarse ahora para leer el artículo completo y acceder a todos los artículos por solo suscriptores pagos.
Suscribirse