educación > zonificación Bilbao

Zonificación escolar en Bilbao

El objetivo de este proyecto es representar gráficamente el mapa de la zonificación escolar en Bilbao.

Contacta con @bilbaodatalab, @AitanaOltra o @numeroteca en Twitter para saber más sobre este análisis.

Mapa de centros educativos de primaria y secundaria de titularidad pública y privada en Bilbao centro:

Por increíble que parezca no existe un mapa de cómo se dibujan los contornos que sirven para asignar puntos para acceder a cada centro escolar. Hay una descripción en pdf de qué secciones censales y distritos corresponten a cada centro, hay una aplicación para calcular los puntos en base a una dirección, pero no existe el mapa.

Queremos analizar el sistema de zonas que tiene asignado cada centro para asignar lo puntos por cercanía a la hora de adjudicar las plazas escolares. El proyecto consite en dibujar las zonas de cada centro: una que asigna 5 puntos y otra que asigna 2 puntos.

Estamos usando este repositorio para documentar y guardar el códgo en R y los datos transformados.

Partiendo del PDF que lista los centros escolares y la zonas a las que pertenecen para asignar los puntos vamos a generar dos archivos de datos (ver carpeta /data):

  • Un archivo de contornos con el dibujo de las zonas. Descarga geojson (archivo en proyección EPSG3042).
  • Una tabla con tres columnas: zona, centro escolar y puntos asignados. Descarga csv.

Luego con un script de R (ver script) se importan los contornos de las zonas, el listado que relaciona las zonas con los centros escolares y se dibuja un mapa por cada centro escolar (ver /images).

1. Crear contornos de zonas

Para poder representar las zoans primero necesitamos dibujarlas. Cada zona está definida en el PDF por los distritos, secciones censales o calles que la componen. La cosa se complica porque a veces se definen por negación. por ejemplo, la zona 430601-ABANDO está compuesta por el distrito 6 de Bilbao (Bilbao-D06) pero no por la sección censal 15 de ese distrito “(Salbu/Excepto)Bilbao-D06-S015”.

Hemos realizado este proceso con Qgis uniendo y restando distritos, secciones censales. Para añadir y restar las calles que se indican en algunas zonas, se han creado polígonos aproximados que recogen las calles indicadas. En la defición de los polígonos asociados a calles se podría afinar más de lo que lo hemos hecho, lo dejamos como tarea pendiente.

2. Crear relación de centros y zonas escolares

Creamos una tabla basada en los datos de la zonifiación del PDF. Cada línea corresponde con un arelación entre las zonas creadas del paso anterior con un centro escolar.

zona centro escolar puntos (o baremo)
430101-SAN INAZIO - IBARREKOLANDA 014509 - CEIP Intxixu Ikastola HLHI max
430101-SAN INAZIO - IBARREKOLANDA 014924 - CEIP San Inazio-San Ignacio HLHI max
430102-SAN PEDRO - DEUSTUIBARRA 014509 - CEIP Intxixu Ikastola HLHI min
430102-SAN PEDRO - DEUSTUIBARRA 014924 - CEIP San Inazio-San Ignacio HLHI min

3. Script de R para dibujar zonas

En el script se puede ver al completo cómo se producen los PNG con un mapa de la zonificación para cada. Mostramos aquí a modo de resumen cómo se dibuja un mapa:

# Instala y carga librerías
library(tidyverse)
library(ggmap)
library(rgdal)
library(gsubfn)

# Carga contornos de zonas escolares
zonas <- readOGR("data/zonificacion-escolar-bilbao.geojson")
# Carga relación de centros escolares y zonas
centros_zonas <- read.delim("data/centros-zonas.csv",sep = ",")

# Se selecciona un centro escolar
centro_select <- "015360 - CEIP Miribilla HLHI"
# Se elimina el código numérico del nombre
centro_select_name <- toupper((strapplyc( centro_select, "[0-9]* - (.*)", simplify = TRUE)))

# Se dibuja el mapa
ggplot() +
  # rellena regiones con valor max
  geom_polygon(data = zonas[zonas@data$SEC_PROV_D %in% centros_zonas[centros_zonas$centro == centro_select & centros_zonas$puntos == "max","zona"], ], aes(x=long, y=lat,group=group), fill="orange",alpha=0.8,size = 0.1) +
  # rellena regiones con valor min
  geom_polygon(data = zonas[zonas@data$SEC_PROV_D %in% centros_zonas[centros_zonas$centro == centro_select & centros_zonas$puntos == "min","zona"], ], aes(x=long, y=lat,group=group), fill="orange", alpha=0.3,size = 0.1) +
  # dibuja contornos de todas las zonas
  geom_path(data=zonas,aes(x=long, y=lat,group=group), colour="black",size = 0.1)

El resultado, añadiendo los contornos de los distritos, la ría y los puntos para cada centro, quedaría así:

El script utiliza un “loop” con un “for” para generar automazidamente todos los mapas.

Existe la opción de añadir de fondo una base cartográfica, que se hace con la librería OpenStreetMap de R usando map ← openmap(c(lat = 43.26596 + 0.027, lon = -2.93141 - 0.09), c(lat = 43.26596 - 0.065, lon = -2.93141 + 0.055), type = “osm”) donde osm indica la base cartográfica elegida.

Una vez generadas todas las imágenes podemos hacer un “small multiple” con todos los mapas.

Usaremos el comanto ''montage'' de imagemagick para hacer el mosaico: montage 0* -geometry 450×450+0+0 montage_geom.png (imágenes reducidas a 450px con separación de 0 píxeles.

Otra forma es verlo en un gif animado:

Cartografía