Datos del municipio de Coruña sobre los centros educativos
Input
El sitio web datos abiertos del gobierno de España, que organiza y gestiona el Catálogo de Información Pública del sector público, proporciona acceso gratuito a una amplia gama de conjuntos de datos del gobierno en diversos temas.
Este análisis se centra en los Centros educativos del municipio de Coruña. En la página web mencionada anteriormente contamos con los Centros educativos de cada provincia gallega, por lo que elegiremos la provincia de Coruña y ya después veremos como filtrar el municipio deseado. En el conjunto de datos encontramos todos los centros públicos, privados y concertados de la Consellería de Cultura, Educación, Formación Profesional y Universidades exportables en ficheros CSV o XML con datos de su código, información de contacto (dirección, teléfono…) y geolocalización.
En mi caso, hemos utilizado el formato CSV.
Descripción
Primero cargamos las librerías necesarias.
Leemos el conjunto de datos y lo pasamos a objeto sf.
centros_original <- readr::read_csv("data/centros_educativos.csv")
centros_sf <- st_as_sf(centros_original, coords = c("COORDENADA_X", "COORDENADA_Y"), crs = 4258)
centros_sf %>%
leaflet() %>%
addTiles() %>%
addCircleMarkers(radius = 2, color = "darkgreen" )
Al representarlo, detectamos que muchos puntos están en África. Al analizar los datos, nos damos cuenta que es porque tienen las coordenadas al revés, por lo que permutaremos esas columnas en los centros que están mal.
Tratamiento
Lo primero que tenemos que hacer es coger la cartografía del municipio de Coruña.
spain_municipios <- mapSpain::esp_get_munic()
coruna <- spain_municipios%>% filter(name == "Coruña, A")
Ahora, procedemos.
# cogemos los que están fuera del municipio
centros_fuera <- st_difference(centros_sf, coruna)
# añadimos columnas de la tabla centros_original que contienen las coordenadas por separado para posteriormente permutar
# (ahora en centros_fuera tenemos la geometría en puntos)
centros_fuera <- subset(centros_original, Código %in% centros_fuera$Código)
# permutamos las coordenadas
colnames(centros_fuera)[colnames(centros_fuera) %in% c("COORDENADA_X", "COORDENADA_Y")] <- c("COORDENADA_Y", "COORDENADA_X")
# pasamos a objeto sf
centros_fuera <- st_as_sf(centros_fuera, coords = c("COORDENADA_X", "COORDENADA_Y"), crs = 4258)
# como tenemos los centros de toda la provincia, elegimos solo los de municipio de interés
centros_fuera <- st_intersection(centros_fuera, coruna)
centros_sf <- st_intersection(centros_sf, coruna)
# juntamos los dos df
centros_total <- rbind(centros_fuera, centros_sf)
Output
Hemos pasado de tener 605 centros en toda la provincia a 104 en el municipio de Coruña.
class(centros_total)
[1] "sf" "tbl_df" "tbl" "data.frame"
dim(centros_total)
[1] 104 19
En la siguiente figura se puede observar que todos los puntos del nuevo dataset sí están dentro de los límites deL municipio de Coruña.
centros_total %>%
leaflet() %>%
addProviderTiles("Esri.WorldTopoMap") %>%
addCircleMarkers(data = centros_total, radius = 2, label = ~Nome, color = "darkgreen")
limites_coruna <- st_buffer(coruna, 1000) %>% st_bbox()
ggplot() +
geom_sf(data = spain_municipios, fill = "#CEC1AD") + # Polígonos de municipios
geom_sf(data = coruna, fill = "#C1FFC1") + # Polígono de A Coruña
geom_sf(data = centros_total, color = "#8B5742", alpha = 0.7) + # Puntos dentro de A Coruña
coord_sf(xlim = c(limites_coruna["xmin"], limites_coruna["xmax"]),
ylim = c(limites_coruna["ymin"], limites_coruna["ymax"])) +
theme_minimal() +
theme(axis.title = element_blank(),
panel.background = element_rect(fill = "lightblue"))
sf::st_write(centros_total, "centros_educativos_coruna.gpkg")
El fichero generado con el procedimiento descrito anteriormente se puede descargar, en formato GeoPackage (gpkg), aquí.
Proyecto de Innovación Educativa Emergente (PIEE-2737007)