En curso · 18 de junio de 2026
Abstención juvenil en Sinaloa, sección por sección
La abstención de los votantes de 18 a 29 años no se reparte pareja: se concentra. Este proyecto la mapea al nivel más fino que publica el INE.
Cuando se dice que “los jóvenes no votan”, se dice algo que es cierto en el promedio y falso en casi todos los casos concretos. El promedio esconde el dato que importa: dónde no votan.
La pregunta
¿La abstención de 18 a 29 años se distribuye al azar sobre el territorio, o sigue un patrón? Si sigue un patrón, ¿ese patrón coincide con algo que el derecho electoral pueda tocar —ubicación de casillas, cobertura de campañas, credencialización— o con algo que no?
El método, en corto
- Se toma la lista nominal por sección y rango de edad al corte de la jornada.
- Se toman los resultados por casilla y se agregan a sección.
- Se calcula participación como votos totales sobre lista nominal de la sección.
- Se estima el componente juvenil por peso poblacional de la sección.
El paso 4 es una estimación, no una medición. El INE no publica el voto por edad —el voto es secreto— así que lo que se obtiene es una aproximación ecológica, con todos los riesgos que eso implica. Lo digo de entrada porque es la crítica correcta al ejercicio.
Qué sigue
Publicar el cuaderno de análisis y los datos derivados, para que cualquiera pueda repetir el cálculo y encontrarme los errores.
El código
Implementación de los cuatro pasos de arriba. Los CSV de entrada son de ejemplo (misma convención de “muestra ilustrativa” que el gráfico) mientras consigo acceso a las bases reales del INE — la lógica es la que se va a correr sobre los datos reales, sin cambios.
import pandas as pd
# 1. Lista nominal por sección y rango de edad (INE, corte de la jornada)
nominal = pd.read_csv("lista_nominal_seccion_edad.csv")
# columnas: seccion, lista_nominal_18_29, lista_nominal_total
# 2. Resultados por casilla, agregados a sección
casillas = pd.read_csv("computos_distritales_casilla.csv")
# columnas: seccion, casilla, votos_totales
resultados = casillas.groupby("seccion")["votos_totales"].sum().reset_index()
# 3. Participación por sección: votos totales sobre lista nominal de la sección
datos = nominal.merge(resultados, on="seccion")
datos["participacion"] = datos["votos_totales"] / datos["lista_nominal_total"]
# 4. Estimación del componente juvenil por peso poblacional.
# Aproximación ecológica: el voto es secreto, no se mide el voto por edad.
# Se pondera la participación de la sección por qué tan joven es su padrón.
peso_juvenil = datos["lista_nominal_18_29"] / datos["lista_nominal_total"]
datos["participacion_juvenil_estimada"] = (
datos["participacion"] * peso_juvenil / peso_juvenil.mean()
)
datos.to_csv("abstencion_juvenil_por_seccion.csv", index=False)
Con abstencion_juvenil_por_seccion.csv ya se puede pintar el mapa de
participación por sección que ves arriba, o cruzarlo con ubicación de
casillas y cobertura de campaña para responder la pregunta de este proyecto.