,

Open Data en educación: de dos GeoJSON a un mapa que ayuda a decidir

Publicado el

· Actualizado el

· Por

El Open Data en educación puede convertir un inventario de centros y una capa territorial en una herramienta de análisis. Pero antes de dibujar el primer punto sobre el mapa hay una pregunta más incómoda: ¿qué pueden afirmar realmente esos datos?

Mayo tiene su propio protocolo en muchas familias de la Comunitat Valenciana. Se abre el calendario de admisión, aparecen las zonas de influencia y empezamos a calcular puntos como si estuviéramos depurando una regla de negocio que nadie termina de explicar del todo.

Miramos listados. Abrimos mapas. Comparamos centros. Preguntamos si habrá plaza cerca de casa.

Los datos existen, pero cada respuesta vive en un sitio distinto. Un portal publica la localización de los centros. Otro ofrece indicadores por barrio. La convocatoria regula el proceso. Las plazas disponibles siguen otro calendario. La distancia real depende de la red peatonal, no de una línea recta.

El problema no es la ausencia de información. Es que todavía no tenemos un modelo que la conecte sin deformarla.

Índice de contenidos

  1. Qué significa Open Data en educación cuando toca construirlo
  2. La pregunta correcta va antes que GeoPandas
  3. Auditar los datasets: la parte que evita un mapa convincente y falso
  4. Qué puede decir el mapa y qué debe callarse
  5. Arquitectura de Open Data en educación: separar para poder cambiar
  6. Cómo descargar los GeoJSON de València
  7. Prueba de concepto con GeoPandas: unir centros y barrios
  8. Controles de calidad que deberían romper el pipeline
  9. De la PoC a un producto geoespacial mantenible
  10. Un plan de dos semanas para validar la idea
  11. Preguntas frecuentes sobre Open Data en educación

TL;DR: este tutorial parte de dos datasets oficiales de València —centros educativos y vulnerabilidad por barrios— para diseñar una prueba de concepto con Python, GeoPandas y Folium. El objetivo no es automatizar decisiones de matriculación, sino construir una capa de contexto. Auditaremos licencia, fecha, esquema, geometría y significado; evitaremos usar como causa lo que solo es una correlación; y dejaremos preparada una arquitectura que pueda evolucionar a PostGIS, API y MapLibre.

Open Data en educación representado como un mapa de València conectado con fuentes públicas, controles de calidad y un cuadro de decisión educativa
Un mapa educativo útil no une puntos y polígonos: une una pregunta con datos que pueden sostenerla.

Qué significa Open Data en educación cuando toca construirlo

En una definición rápida, el Open Data en educación consiste en reutilizar conjuntos de datos públicos para analizar, planificar o mejorar servicios educativos. En un proyecto real, la definición necesita más piezas.

Un dataset no es útil solo porque pueda descargarse. Necesita una licencia comprensible, un formato procesable, metadatos suficientes, una cobertura conocida y un nivel de calidad compatible con la decisión que queremos apoyar.

Datos internos

Qué ocurre en el servicio

Matrículas, actividad, evaluaciones, soporte, asistencia o uso de una plataforma describen el funcionamiento de la organización.

Datos externos

En qué contexto ocurre

Territorio, movilidad, demografía, equipamientos o conectividad ayudan a interpretar diferencias que el sistema interno no explica.

Reglas de dominio

Qué significa cada variable

Una plaza, un centro, una zona o un indicador tienen definiciones administrativas que el código no puede inventar.

Decisión humana

Qué hacemos con la evidencia

El mapa orienta una revisión, una hipótesis o una prioridad. No sustituye la interpretación técnica, educativa y social.

La capa geoespacial es especialmente valiosa porque añade el dónde. Pero también es peligrosa: un color intenso sobre un barrio parece una conclusión, aunque solo represente un indicador antiguo, incompleto o mal interpretado.

El mapa no elimina la incertidumbre. La hace visible. Y, si está bien diseñado, también muestra de dónde viene.

Flujo desde una pregunta educativa hasta una decisión, pasando por fuentes públicas, validación, cruce geoespacial e interpretación humana
La visualización es una etapa del proceso. La pregunta, la validación y la interpretación pesan más que la librería utilizada.

La pregunta correcta va antes que GeoPandas

“Crear un mapa educativo” no es una pregunta de negocio. Es una solución anticipada.

Una pregunta útil debe señalar una población, un territorio, una unidad de análisis y una decisión. Por ejemplo:

  • ¿Cómo se distribuye el inventario de centros entre barrios con distinto contexto demográfico?
  • ¿Qué zonas requieren revisar si los recursos educativos existentes son suficientes?
  • ¿Dónde tiene sentido contrastar datos cuantitativos con equipos municipales, centros y familias?

En cambio, “¿qué colegio tiene plaza cerca de mi casa?” exige datos que nuestros dos GeoJSON no contienen: vacantes por nivel, calendario, preferencias, baremo, zonas de influencia vigentes y, probablemente, una red de desplazamiento.

Primera frontera del modelo: un listado de centros no es un dataset de plazas. Si la interfaz promete disponibilidad, proximidad o probabilidad de admisión sin disponer de esas variables, el problema no está en el mapa. Está en el contrato de producto.

Auditar los datasets: la parte que evita un mapa convincente y falso

El portal de Open Data del Ajuntament de València publica los centros educativos en GeoJSON, SHP y CSV bajo licencia CC BY 4.0. El recurso incluye coordenadas y atributos como código, denominación, tipo de centro, régimen y dirección.

El mismo portal mantiene el conjunto Vulnerabilidad por barrios 2021, con geometrías de barrio e índices de equipamientos, demografía, socioeconomía y vulnerabilidad global.

CriterioCentros educativosVulnerabilidad por barriosDecisión técnica
UnidadUn punto por centroUn polígono por barrioEl cruce adecuado es punto dentro de polígono.
FormatosGeoJSON, SHP y CSVGeoJSON, SHP y CSVGeoJSON es suficiente para la PoC; conservar el original descargado.
LicenciaCC BY 4.0CC BY 4.0Registrar atribución y procedencia en el producto.
TiempoInventario publicado en el portalIndicadores de 2021No presentar ambas capas como si describieran el mismo momento.
SemánticaLocalización y tipología; no vacantesÍndices relativos entre barriosEvitar lenguaje de disponibilidad, causalidad o evaluación del centro.
RiesgoMezcla etapas y tipos de enseñanzaEl índice de equipamientos ya considera centros educativosFiltrar la población y evitar circularidad en el indicador elegido.
Auditoría mínima de las dos fuentes oficiales consultadas el 11 de agosto de 2026.

La trampa más fácil de pasar por alto: el índice de vulnerabilidad en equipamientos ya incorpora la presencia de centros educativos. Si contamos centros por barrio y lo cruzamos con el índice global, parte de la variable explicativa está también dentro del indicador que intentamos explicar. Para explorar la distribución de centros conviene separar dimensiones y trabajar, con prudencia, con las capas demográfica o socioeconómica.

Nota sobre los tipos de datos: antes de continuar, inspecciona las columnas reales de cada dataset. En particular, el campo que usaremos para colorear los barrios (Vul_Dem en este ejemplo) puede ser una cadena categórica («alta», «media», «baja») o un valor numérico. El código de visualización debe adaptarse a ese tipo. Más adelante verás cómo manejarlo.

Matriz de auditoría de los datasets de centros educativos y vulnerabilidad por barrios de València según licencia, fecha, unidad, semántica y riesgo
La calidad no se limita a comprobar que el archivo abre: incluye fecha, significado, granularidad, licencia y relación con la pregunta.

Qué puede decir el mapa y qué debe callarse

Antes de escribir código, conviene dejar claro qué lecturas son sostenibles y cuáles no. Esta tabla debe acompañar al producto final y guiar los textos de la interfaz.

Lectura razonableLectura no sustentadaDato adicional necesario
Distribución territorial del inventario de centros filtrados.Barrios con plazas suficientes o insuficientes.Capacidad autorizada, vacantes, nivel y curso.
Centros ubicados en barrios clasificados por un indicador de 2021.El barrio determina los resultados del centro.Análisis longitudinal, variables de control y evidencia cualitativa.
Zonas donde conviene investigar la cobertura.Zonas donde hay que cerrar, abrir o penalizar centros.Demanda, movilidad, capacidad, planificación y participación pública.
Distancia geométrica entre puntos.Tiempo andando o ruta segura.Red peatonal, accesibilidad, barreras y motor de rutas.
Contexto agregado de un barrio.Características de una familia o estudiante.No debe inferirse desde el dato territorial agregado.

Esta tabla debería formar parte de la documentación del producto. También debería influir en los textos de la interfaz, los filtros disponibles y las decisiones que el sistema permite iniciar.

Privacidad: que una fuente sea abierta no autoriza a combinarla sin límites con datos internos. La AEPD recuerda que las series agregadas y anonimizadas no deben permitir la reidentificación. Si el proyecto incorpora domicilios, expedientes, necesidades de apoyo o trayectorias individuales, deja de ser una simple reutilización de Open Data y requiere una evaluación específica de finalidad, minimización, acceso, retención y riesgo.

Arquitectura de Open Data en educación: separar para poder cambiar

Una PoC puede vivir en un notebook. Un servicio institucional no debería depender de que una URL siga devolviendo exactamente las mismas columnas.

La arquitectura necesita separar la adquisición, la normalización, el modelo analítico y la presentación. Es una división poco espectacular. También es la diferencia entre un prototipo y un sistema que sigue funcionando tres meses después.

1 · Ingesta

Conservar la fuente

Descarga inmutable, fecha, URL, licencia, hash y respuesta HTTP. El original no se corrige: se archiva.

2 · Validación

Detectar cambios

Esquema, CRS, geometrías, duplicados, valores nulos, cobertura y reglas de dominio.

3 · Modelo curado

Normalizar sin perder linaje

Nombres estables, tipos coherentes, campos necesarios y vínculo con la versión de origen.

4 · Servicio

Entregar según el caso

GeoJSON para una PoC, PostGIS para consulta, teselas vectoriales para volumen o API para integración.

5 · Presentación

Diseñar la lectura

Folium para explorar; MapLibre, Leaflet o BI cuando hacen falta interacción, rendimiento y producto.

6 · Gobierno

Explicar cada resultado

Propietario, fecha, calidad, limitaciones, atribución, privacidad y criterio de publicación.

Arquitectura modular de Open Data en educación con fuentes públicas, zona raw, validación, modelo geoespacial curado, API y visualización
Separar fuente, procesamiento y consumo permite cambiar un portal, una regla o una visualización sin rehacer todo el sistema.

Cómo descargar los GeoJSON de València

Los dos conjuntos de datos se obtienen manualmente desde el portal de Open Data del Ajuntament de València. No usamos descarga programática en esta PoC para que el proceso sea transparente y quede registro de la versión exacta que estamos procesando.

Pasos para descargar los archivos:

  1. Accede al dataset de Centros Educativos en València.
  2. Busca la sección de Recursos o Descargas.
  3. Localiza el archivo en formato GeoJSON. Si hay varias versiones, elige la más reciente o la que incluya geometrías de puntos para los centros.
  4. Descárgalo y guárdalo en la carpeta data/raw/ con el nombre exacto: centros-educativos-en-valencia.geojson.
  5. Repite el proceso para el dataset de Vulnerabilidad por barrios 2021.
  6. Guarda el GeoJSON de barrios como vulnerabilidad-por-barrios.geojson en la misma carpeta.

La estructura de carpetas quedará así:

Markdown
proyecto/
├── data/
│   └── raw/
│       ├── centros-educativos-en-valencia.geojson
│       └── vulnerabilidad-por-barrios.geojson
├── output/
└── script_mapa.py

Si los nombres de archivo descargados son distintos, renómbralos o ajusta las rutas en el script. Los portales de datos abiertos a veces cambian la estructura o el nombre exacto de los recursos; lo importante es conservar la procedencia y el formato.

Prueba de concepto con GeoPandas: unir centros y barrios

Un entorno mínimo puede instalarse con:

Bash
python -m venv .venv
source .venv/bin/activate
pip install geopandas folium branca pyogrio shapely

En Windows, activa el entorno con .venv\Scripts\activate. Para versiones reproducibles, crea un requirements.txt con las salidas de pip freeze.

El primer script no dibuja todavía. Comprueba que las capas tienen geometría, normaliza el sistema de coordenadas y realiza el cruce espacial. Para evitar la circularidad descrita antes, conserva las dimensiones demográfica y socioeconómica, no el índice global.

Python
from pathlib import Path
import geopandas as gpd

RAW = Path("data/raw")
OUT = Path("data/curated")
OUT.mkdir(parents=True, exist_ok=True)

centros = gpd.read_file(RAW / "centros-educativos-en-valencia.geojson")
barrios = gpd.read_file(RAW / "vulnerabilidad-por-barrios.geojson")

if centros.crs is None or barrios.crs is None:
    raise ValueError("Las dos capas deben declarar su CRS")

centros = centros.to_crs(epsg=4326)
barrios = barrios.to_crs(epsg=4326)

columnas_barrio = [
    "Nombre",
    "Distrito",
    "Vul_Dem",
    "Vul_Econom",
    "geometry",
]

centros_con_contexto = centros.sjoin(
    barrios[columnas_barrio],
    how="left",
    predicate="within",
)

centros_con_contexto.to_file(
    OUT / "centros-con-contexto.geojson",
    driver="GeoJSON",
)

Sobre los nombres de campo: los portales públicos pueden cambiar mayúsculas, etiquetas o estructura. Inspecciona centros.columns y barrios.columns en tu descarga. En producción, el esquema esperado debe estar versionado y un cambio tiene que detener el pipeline con un error visible.

Filtrar antes de contar

El dataset municipal reúne muchas enseñanzas: infantil, primaria, secundaria, formación profesional, adultos, música, danza e idiomas. Contarlas juntas produciría una cifra correcta y una lectura casi inútil.

Python
etapas_objetivo = (
    centros_con_contexto["dgenerica"]
    .fillna("")
    .str.contains("INFANTIL|PRIMÀRIA|PRIMARIA", case=False, regex=True)
)

centros_infantil_primaria = centros_con_contexto[etapas_objetivo].copy()

# Normalizamos régimen para evitar problemas de mayúsculas/acentos
centros_infantil_primaria["regimen_norm"] = (
    centros_infantil_primaria["regimen"]
    .astype(str)
    .str.strip()
    .str.lower()
)

resumen = (
    centros_infantil_primaria
    .groupby(["Distrito", "Nombre"], dropna=False)
    .agg(
        centros=("codcen", "nunique"),
        publicos=("regimen_norm", lambda s: s.eq("público").sum()),
    )
    .reset_index()
)

Este resumen describe presencia. No mide capacidad, plazas, demanda ni calidad. Ponerle el nombre correcto al indicador forma parte de la implementación.

Crear el mapa interactivo sin ocultar sus límites

Folium encaja bien en esta fase porque genera un HTML autocontenido y permite iterar rápido con usuarios de dominio. La capa territorial puede mostrar una dimensión contextual y los puntos pueden filtrar la etapa educativa.

Antes de pintar, inspecciona el tipo de dato de Vul_Dem:

Python
print(barrios["Vul_Dem"].dtype)
print(barrios["Vul_Dem"].unique()[:20])

Dependiendo del resultado, usaremos una paleta categórica o continua. Aquí mostramos ambos enfoques. Adapta el que corresponda.

Opción A: si Vul_Dem es categórica

Python
import folium
from folium import Element

mapa = folium.Map(
    location=[39.4699, -0.3763],
    zoom_start=12,
    tiles="CartoDB positron",
)

def color_vulnerabilidad(feature):
    valor = str(feature["properties"].get("Vul_Dem", "")).strip().lower()
    if "alta" in valor:
        return "#f97316"
    if "media" in valor:
        return "#facc15"
    if "baja" in valor:
        return "#22c55e"
    return "#cbd5e1"

folium.GeoJson(
    barrios[["Nombre", "Vul_Dem", "geometry"]],
    name="Contexto demográfico 2021",
    style_function=lambda feature: {
        "fillColor": color_vulnerabilidad(feature),
        "color": "#0f2742",
        "weight": 1,
        "fillOpacity": 0.35,
    },
    tooltip=folium.GeoJsonTooltip(fields=["Nombre", "Vul_Dem"]),
).add_to(mapa)

# Añadir atribución y leyenda
html_attribution = """
<div style="position: fixed; left: 10px; bottom: 10px; z-index: 9999;
 background: rgba(255,255,255,0.9); padding: 6px 10px; font-size: 12px;
 border-radius: 4px; box-shadow: 0 1px 4px rgba(0,0,0,0.2);">
Fuente: Ajuntament de València · Open Data | CC BY 4.0<br>
Centros: consulta 11/08/2026 · Vulnerabilidad: 2021
</div>
"""

leyenda_html = """
<div style="position: fixed; right: 10px; bottom: 50px; z-index: 9999;
 background: rgba(255,255,255,0.92); padding: 10px; border-radius: 6px;
 font-size: 12px; line-height: 1.5;">
<strong>Vulnerabilidad demográfica</strong><br>
<span style="color:#22c55e;">■</span> Baja<br>
<span style="color:#facc15;">■</span> Media<br>
<span style="color:#f97316;">■</span> Alta<br>
<span style="color:#cbd5e1;">■</span> Sin dato
</div>
"""

mapa.get_root().html.add_child(Element(html_attribution))
mapa.get_root().html.add_child(Element(leyenda_html))

for _, centro in centros_infantil_primaria.iterrows():
    folium.CircleMarker(
        location=[centro.geometry.y, centro.geometry.x],
        radius=4,
        color="#0e7490",
        fill=True,
        fill_opacity=0.85,
        tooltip=centro.get("dlibre", "Centro educativo"),
    ).add_to(mapa)

folium.LayerControl(collapsed=False).add_to(mapa)

from pathlib import Path
OUTPUT_DIR = Path("output")
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
mapa.save(OUTPUT_DIR / "mapa-educativo-valencia.html")

Opción B: si Vul_Dem es numérica

Si el campo es un índice o porcentaje, usa una escala continua con branca. Añade la leyenda automáticamente con el rango de valores.

Python
import folium
import branca.colormap as cm

# Crear mapa base
mapa = folium.Map(location=[39.4699, -0.3763], zoom_start=12, tiles="CartoDB positron")

vmin = barrios["Vul_Dem"].min()
vmax = barrios["Vul_Dem"].max()
colormap = cm.LinearColormap(
    colors=["#22c55e", "#facc15", "#f97316"],
    vmin=vmin,
    vmax=vmax,
)
colormap.caption = "Vulnerabilidad demográfica (índice)"
colormap.add_to(mapa)

folium.GeoJson(
    barrios[["Nombre", "Vul_Dem", "geometry"]],
    name="Contexto demográfico 2021",
    style_function=lambda feature: {
        "fillColor": colormap(feature["properties"]["Vul_Dem"]),
        "color": "#0f2742",
        "weight": 1,
        "fillOpacity": 0.35,
    },
    tooltip=folium.GeoJsonTooltip(fields=["Nombre", "Vul_Dem"]),
).add_to(mapa)

# Atribución y leyenda continua
from folium import Element
html_attribution = "<div style='position:fixed;left:10px;bottom:10px;z-index:9999;background:rgba(255,255,255,.9);padding:6px 10px;font-size:12px;border-radius:4px;box-shadow:0 1px 4px rgba(0,0,0,.2)'>Fuente: Ajuntament de València · Open Data | CC BY 4.0<br>Centros: consulta 11/08/2026 · Vulnerabilidad: 2021</div>"
mapa.get_root().html.add_child(Element(html_attribution))

# Puntos
for _, centro in centros_infantil_primaria.iterrows():
    folium.CircleMarker(
        location=[centro.geometry.y, centro.geometry.x],
        radius=4,
        color="#0e7490",
        fill=True,
        fill_opacity=0.85,
        tooltip=centro.get("dlibre", "Centro educativo"),
    ).add_to(mapa)

folium.LayerControl(collapsed=False).add_to(mapa)
from pathlib import Path
OUTPUT_DIR = Path("output")
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
mapa.save(OUTPUT_DIR / "mapa-educativo-valencia.html")

Hay un detalle deliberado: la leyenda nombra “Contexto demográfico 2021”. No dice “necesidad actual”, “calidad educativa” ni “riesgo del centro”. Una buena etiqueta protege mejor que una nota al pie que nadie leerá.

Mockup conceptual de un mapa educativo de València con barrios, centros filtrados, leyenda, fecha de datos y panel de limitaciones
El prototipo debe enseñar también la fecha, la fuente y lo que el mapa no permite concluir. La imagen es una vista conceptual, no una representación de resultados reales.

Controles de calidad que deberían romper el pipeline

Los fallos más peligrosos no siempre generan una excepción. A veces el proceso termina, publica el mapa y coloca varios centros en el mar porque se intercambiaron latitud y longitud. O acepta un fichero vacío con un HTTP 200. O convierte una categoría nueva en “sin datos”.

Por eso la calidad debe expresarse como reglas ejecutables:

Python
assert len(centros) > 0, "La fuente de centros está vacía"
assert centros["codcen"].is_unique, "Hay códigos de centro duplicados"
assert centros.geometry.notna().all(), "Hay centros sin geometría"
assert centros.geometry.is_valid.all(), "Hay geometrías de centro no válidas"
assert barrios.geometry.is_valid.all(), "Hay polígonos de barrio no válidos"

minx, miny, maxx, maxy = centros.total_bounds
assert -0.55 < minx < -0.20 and -0.55 < maxx < -0.20
assert 39.30 < miny < 39.60 and 39.30 < maxy < 39.60

sin_barrio = centros_con_contexto["Nombre"].isna().mean()
assert sin_barrio < 0.03, "Demasiados centros no intersectan ningún barrio"

Los umbrales son un contrato del proyecto, no valores universales. Hay que justificarlos con el dominio y revisarlos cuando cambie la cobertura.

Para trazabilidad, genera un hash de los archivos originales:

Python
import hashlib

def sha256(path):
    return hashlib.sha256(path.read_bytes()).hexdigest()

for f in [RAW / "centros-educativos-en-valencia.geojson", RAW / "vulnerabilidad-por-barrios.geojson"]:
    print(f.name, sha256(f))

Checklist de calidad geoespacial

  • Guardar el fichero original, la URL, la fecha, la licencia y un hash.
  • Validar las columnas obligatorias y sus tipos antes de transformar.
  • Comprobar el CRS declarado y reproyectar explícitamente.
  • Detectar geometrías vacías, inválidas, duplicadas o fuera de cobertura.
  • Medir cuántos puntos quedan sin barrio tras el cruce espacial.
  • Revisar una muestra visual y otra muestra de registros con el equipo de dominio.
  • Publicar la fecha de cada fuente y las limitaciones de interpretación.
  • Alertar si cambia el esquema, el volumen o la distribución de categorías.
Controles de calidad para un pipeline geoespacial: descarga, esquema, CRS, geometría, cobertura, semántica, revisión y publicación
Un pipeline fiable convierte supuestos invisibles en comprobaciones que fallan de forma explícita.

De la PoC a un producto geoespacial mantenible

El notebook cumple su función cuando demuestra que la pregunta tiene valor y que las fuentes pueden conectarse. A partir de ahí, industrializar no consiste en mover el mismo script a un cron.

FaseObjetivoPila razonableCriterio de salida
PoCValidar pregunta, fuentes y lectura.Python, GeoPandas, Folium, ficheros locales.Un usuario de dominio obtiene una conclusión útil y prudente.
PilotoRepetir el proceso y controlar cambios.Job programado, almacenamiento raw, tests, GeoParquet o PostGIS.Actualizaciones reproducibles, alertas y responsables definidos.
ProductoServir varios casos y usuarios.PostGIS, API, caché, MapLibre o Leaflet, observabilidad.Rendimiento, accesibilidad, seguridad, soporte y gobierno acordados.
CapacidadReutilizar el patrón con nuevas fuentes.Catálogo, contratos de datos, linaje, CI/CD y métricas de calidad.El equipo incorpora datasets sin rehacer la arquitectura.

Para visualizaciones web con más volumen, MapLibre puede consumir GeoJSON y evolucionar a teselas vectoriales. PostGIS facilita filtros, cruces y consultas espaciales en el servidor. GeoParquet funciona bien para intercambio analítico. Ninguna pieza es obligatoria desde el día uno.

Mi criterio sería sencillo: cambiar de tecnología cuando aparezca un límite medido —tiempo de carga, volumen, concurrencia, actualización o complejidad de consulta—, no para que la arquitectura parezca más seria en un diagrama.

Hoja de ruta para evolucionar un mapa de Open Data en educación desde prueba de concepto hasta producto y capacidad institucional
Cada fase añade controles y capacidad cuando el uso los justifica; la PoC no necesita simular una plataforma definitiva.

Un plan de dos semanas para validar la idea

Días 1 y 2 · Pregunta, usuarios y límites

Redactar una pregunta que pueda responderse con datos agregados. Identificar quién usará el mapa, qué decisión quiere preparar y qué afirmaciones quedarán expresamente fuera.

Días 3 y 4 · Auditoría y contrato de datos

Descargar las fuentes, registrar licencia y fecha, inspeccionar campos, cobertura, CRS, categorías, valores nulos y posibles dependencias semánticas entre indicadores.

Días 5 a 7 · Pipeline y controles

Construir la carga, normalización, filtrado y cruce espacial. Añadir tests de esquema, geometría, cobertura, duplicados y porcentaje de registros sin correspondencia.

Días 8 y 9 · Visualización y lectura guiada

Crear una única vista con capas limitadas, etiquetas prudentes, fecha visible, fuente, leyenda comprensible y panel de limitaciones.

Día 10 · Revisión con el dominio

Observar cómo interpreta el mapa una persona de planificación educativa, una de datos y una potencial usuaria. Registrar conclusiones erróneas, preguntas nuevas y datos ausentes.

Al final de las dos semanas, la decisión no tiene por qué ser “construir el producto”. También puede ser buscar otra fuente, reducir la ambición, reformular la pregunta o detener el proyecto. Una PoC que evita una inversión equivocada también ha funcionado.

Conclusión: el valor no está en pintar el mapa

Con dos GeoJSON y unas pocas líneas de Python podemos obtener una visualización en una tarde. Esa es la parte fácil.

Lo difícil es decidir qué significa cada capa, detectar que un indicador contiene parte de la variable que queremos analizar, explicar que los datos pertenecen a momentos distintos y evitar que un usuario confunda inventario con disponibilidad.

Ahí empieza el trabajo de arquitectura.

El Open Data en educación merece la pena cuando amplía el contexto sin fingir certeza. Cuando deja trazabilidad. Cuando ayuda a formular una pregunta mejor. Y cuando el mapa señala dónde mirar, pero no decide por las personas que viven al otro lado de los datos.

Siguiente paso

Convierte una fuente pública en una decisión comprobable

Elige una pregunta territorial de tu organización y prepara una ficha de una página: usuario, decisión, datasets, fecha, licencia, unidad de análisis, límites y criterio de éxito. Si esa ficha no se sostiene, todavía no necesitas un mapa. Si se sostiene, ya tienes el contrato de tu PoC.

Si necesitas diseñar la arquitectura, auditar las fuentes o convertir el prototipo en un servicio mantenible, puedes contactar conmigo.

Preguntas frecuentes sobre Open Data en educación

¿Qué es el Open Data en educación?

Es la reutilización de datos públicos, documentados y licenciados para añadir contexto al análisis, la planificación o el diseño de servicios educativos. Puede incluir centros, territorio, demografía, movilidad, equipamientos o conectividad.

¿Puedo saber dónde hay plazas escolares con el dataset de centros?

No. El conjunto de centros describe localización y tipología, pero no publica por sí solo vacantes por curso, capacidad disponible, demanda ni resultado del proceso de admisión.

¿Por qué no conviene cruzar directamente centros con el índice global de vulnerabilidad?

Porque la dimensión de equipamientos utilizada en ese índice ya considera la presencia de centros educativos. El análisis podría contar dos veces parte del mismo fenómeno. Es preferible separar dimensiones y documentar el propósito del cruce.

¿Qué diferencia hay entre EPSG:4326 y EPSG:25830?

EPSG:4326 expresa coordenadas geográficas en longitud y latitud y encaja bien con mapas web e intercambio GeoJSON. EPSG:25830 es una proyección métrica adecuada para buena parte de la península y resulta más apropiada para calcular distancias o áreas en València.

¿Folium sirve para producción?

Puede servir para informes, prototipos o mapas con alcance controlado. Cuando aumentan el volumen, la concurrencia, los filtros o la necesidad de integración, suele convenir una arquitectura con PostGIS, API, caché y una librería web como MapLibre o Leaflet.

¿Los datos agregados eliminan cualquier riesgo de privacidad?

No siempre. Una granularidad muy fina o el cruce con datos internos puede permitir inferencias o reidentificación. Hay que revisar finalidad, minimización, tamaño de los grupos, controles de acceso y riesgo antes de vincular información territorial con personas.

¿Cómo detecto que un portal ha cambiado el dataset?

Versiona el esquema esperado y monitoriza hash, número de registros, columnas, tipos, categorías, nulos, cobertura espacial y fecha de actualización. Un cambio relevante debe detener la publicación y generar una alerta, no degradar el resultado en silencio.





Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Sobre mí

Soy Andrés Martínez Soto, CTO y consultor EdTech especializado en Moodle, LTI, IA educativa, arquitectura de plataformas e integración de sistemas educativos.

Ver perfil profesional

¿Necesitas ordenar tu ecosistema EdTech?

Te ayudo a revisar plataformas, LMS, integraciones, automatizaciones, datos e IA educativa con una visión técnica y pedagógica.

Buscar