Datos sobre Infraestructura de Transporte

estaciones de tren
España
Autor/a
Afiliación

Claudia Teresa Alamá Alapont

Universitat de València

Fecha de publicación

29 de marzo de 2025

Input

libs <- c("tidyverse", "sf", "mapSpain", "osmdata", "ggspatial", "leaflet")
installed_libs <- libs %in% rownames(installed.packages())
if (any(installed_libs == F)) {install.packages(libs[!installed_libs])}
invisible(lapply(libs, library, character.only = T))
Warning: package 'purrr' was built under R version 4.4.3
rm(libs, installed_libs)

Una vez se han cargado los paquetes correspondientes, se procede a obtener un conjunto de datos. Sobre este se realizarán las correcciones necesarias para mejorarlos. En la práctica anterior ya se trabajó sobre un conjunto de datos obtenidos de la plataforma OpensStreetMap (OSM). Es por ello por lo que ya se tiene una parte facilitada del informe. La temática de elección va a ser “Infraestrctura de Transporte”, concretamente las “Estaciones de Tren”. Esto es debido a que el conjunto de datos que propociona OSM es muy completa y abundante y se puede trabajar muy bien con ella.

Es importante recordar, que la plataforma OSM, es una paltaforma altruista donde los usuarios introducen los datos de forma voluntaria sin ningún tipo de procedimiento para determinar que se introducen los datos correctamente, sin errores ni vacíos.

Introducimos el código que permite seleccionar España como el lugar geográfico de donde se van a obtener los datos.

Spain <- mapSpain::esp_get_country()
bbox_spain <- sf::st_bbox(Spain)
spain <- st_transform(Spain, crs = 4326)

Una vez se tiene selccionada la zona de interés, ya se pueden obtener los datos correspondientes a las Estaciones de Tren de España. Con OSM, se puede saber el tipo de geometría que presentan los datos, en este caso se parte de la geometría de polígonos. Sin embargo, también hay estaciones de tren descritas como puntos, pero más adelante se solucionará este problema. Finalmente, se realiza la intersección con el objeto “spain”, de ese modo ya se tienen los datos de las estaciones de tren de España.

q1 <- bbox_spain %>%
  osmdata::opq(timeout = 3600) %>%
  osmdata::add_osm_feature("building", "train_station")

est_tren <- osmdata_sf(q1)
est_tren_pol <- est_tren$osm_polygons
est_tren_spain_pol <- st_intersection(est_tren_pol, spain)

Output

En este gráfico se observan la representación gráfica de los datos obtenidos de la práctica anterior, ningún tipo de mejora.

sf1 <- est_tren_spain_pol %>%
  mutate(nombre = "Estaciones de Tren") %>%
  select(nombre)

leaflet() %>%
  addTiles() %>%
  addProviderTiles("CartoDB.Positron")%>%
  
  addPolygons(data=est_tren_spain_pol, 
              color = "#2b8cbe",
              opacity = 0.8,
              fillOpacity = 0.2) %>% 

  addLegend(
    position = "bottomright",
    colors = "#2b8cbe",
    labels = "Estaciones de Tren",
    opacity = 1
  ) 

Una vez ya se han obtenido los datos respecto a España, se procede a detectar ciertas irregularidades que puedan mejorar el conjunto de datos de interés.

Descripción y Tratamiento

Falta de datos y duplicados

Para la obtención de datos, se parte de la geometría de polígonos. Para usar tanto polígonos como puntos, se podría usar la función st_join, sin embargo, esta función trata de una unión espacial basada en geometrías. Es por ello por lo que si una estación de tren existe en ambas capas (puntos y polígonos), podría duplicarse o generar datos inconsistentes. Para solucionarlo se usa la función bind_rows.

#est_tren_total <- st_join(est_tren$osm_polygon, est_tren$osm_points)
est_tren <- osmdata_sf(q1)
est_tren_pnt <- est_tren$osm_points
est_tren_pp <- bind_rows(est_tren_pol, est_tren_pnt)
est_tren_spain_dup <- st_intersection(est_tren_pp, spain)

Output

El output de este código, es mejorar el conjunto de datos para no obtener duplicados y tener en cuenta todas las capas (puntos y polígonos). Dnado como resultado una base de datos más completa y menos incosistente.

NA’s

A partir de cada paso que se da en este informe para mejorar la base de datos, se irá trabajacndo sobre cada parte mejorada. Es por ello por lo que en este apartado se van a tratar los valores de NA’s en nombres de estaciones. El problema que se presenta es que al ser una plataforma cuyos datos son introducidos de forma voluntaria, muchas estaciones en OSM pueden no tener un nombre asignado name = NA. Para solucionar este problema, se propone rellenar esos valores vacíos como “Estación Desconocida”. Con esto se puede lograr un conjunto de datos “más completo”.

#est_tren_pp<- bind_rows(est_tren$osm_polygon, est_tren$osm_points)
est_tren_ed <- est_tren_spain_dup %>%
  mutate(name = ifelse(is.na(name), "Estación Desconocida", name))
est_tren_spain_na <- st_intersection(est_tren_ed, spain)

Oputput

Del mismo modo se opera con los NA’s (los datos ausentes), una vez se han detectado y se les ha asignado una etiqueta, aunque la información se desconozca, la base de datos no presenta vacíos.

Normalización de Atributos

Volviendo a tener en mente que OSM no es una abse de datos estructurada en un mismo formato. Algunas estaciones pueden tener introducidos el nombre de estaciones en diferentes formatos: mayúsculas, minúsculas, espacios de más, etc. Para ello se procede a limpiar los nombres de estaciones, proporcionando como siempre un conjunto de datos final más completo.

est_tren_atri <- est_tren_spain_na %>%
  mutate(name = str_trim(name), 
         name = str_to_title(name))
est_tren_spain_final <- st_intersection(est_tren_atri, spain)

Output

Con esta tercera mejora, se podría decir que la base de datos ahora es más completa, se han pulido una serie de imperfecciones que se han detectado. Por consiguiente, ahora se puede trabajar de forma más concreta y precisa. Obteniendo un resultado más completo, que ayude a interpretar mejor los datos geoespaciales.



Proyectos de Innovación Educativa Emergente PIEE-2737007 y PIEE-3325394