Tarea 2 - Datos Espaciales y Espacio - Temporales
Input
Se ha obtenido un conjunto de datos acerca de hoteles de cuatro estrellas, museos y restaurantes de comida rápida en concreto de hamburguesas para España, Castilla y León, Zamora como provincia y como municipio, extrayendo las coordenadas de cada establecimiento para cada uno de los territorios. Para la recolección de estos datos, se ha usado como fuente OpenStreetMap, por los que hemos podido acceder a través de la librería osmdata en R.
Descripción
Cargamos las librerías necesarias:
Respecto a la representación gráfica de los conjuntos de datos que se obtuvieron inicialmente, se pudieron detectar dos problemas a destacar:
Gran cantidad de los puntos que se obtenían al graficar, se encontraban fuera del área que se seleccionó en un principio por lo que esto no resulta de interés para nuestro caso de estudio.
-
Se observa una agrupación excesiva de puntos que ocurre cuando varios puntos representan el mismo establecimiento o área cercana, lo que genera redundancia en la visualización.
Estos problemas pueden deberse a errores en los datos, filtros mal aplicados, diferencias en sistemas de coordenadas o valores nulos/genéricos. Además de datos duplicados, errores en la geocodificación o registros con coordenadas muy similares.
Tratamiento
Depuración de los datos geoespaciales
Para garantizar la precisión del análisis y evitar la inclusión de puntos fuera del área de interés, se implementaron las siguientes estrategias en R:
Filtrado de puntos fuera del territorio: Se definieron los límites geográficos de cada región con
mapSpain
yosmdata
. Para el municipio de Zamora, se utilizóesp_get_munic()
debido a su menor extensión.-
Obtención de datos desde OpenStreetMap: Se realizaron consultas filtrando por categorías específicas:
Hoteles: Se seleccionaron aquellos clasificados como “hotel” con 4 estrellas (
tourism = hotel
,stars = 4
).Museos: Se extrajeron los puntos con
tourism = museum
.Restaurantes de comida rápida: Se buscaron establecimientos con
cuisine = burger
yamenity = fast_food
.
Homogeneización del sistema de coordenadas: Se transformaron todas las geometrías al CRS 4326 mediante
st_transform()
para asegurar su compatibilidad con OpenStreetMap.Extracción de puntos geográficos: Para su posterior análisis y visualización, se seleccionó la capa
osm_points
de cada conjunto de datos.
Este proceso permitió estructurar y refinar la información para representaciones cartográficas más precisas.
Mejora en la representación geoespacial mediante agrupación de datos
Dado que los establecimientos analizados presentan una gran concentración de puntos en sus coordenadas, el modelo tiende a generar polígonos en lugar de identificar cada ubicación de manera individual. Para abordar esta problemática, se implementó el algoritmo DBSCAN, permitiendo detectar grupos de establecimientos y representar cada uno con un solo punto significativo.
Implementación de DBSCAN: Se aplicó el algoritmo con un radio de vecindad (
eps = 0.001
) y un mínimo de un punto por grupo (minPts = 1
), lo que permitió identificar áreas con alta densidad de establecimientos de forma eficiente.Cálculo de centroides: Se calculó el centroide de cada grupo para determinar una única coordenada representativa por agrupación, optimizando la visualización y evitando la redundancia en la información geoespacial.
Automatización del flujo de trabajo: Se diseñó una función que permite aplicar este procedimiento a cada conjunto de datos, garantizando uniformidad en el tratamiento de las distintas regiones analizadas.
Gracias a esta metodología, se mejora significativamente la representación de los establecimientos en mapas geoespaciales, reduciendo la sobrecarga visual y facilitando el análisis de la distribución espacial.
# Proceso para obtener únicamente los puntos representativos de nuestros dataframes
# Creamos una lista de dataframes con todos los objetos sf y dataframes que hemos obtenido anteriormente:
list_df <- list(hoteles_spain_points, museos_spain_points, restaurantes_spain_points,
hoteles_cyl_points, museos_cyl_points, restaurantes_cyl_points,
hoteles_zam_points, museos_zam_points, restaurantes_zam_points,
hoteles_zamora_points, museos_zamora_points, restaurantes_zamora_points)
# Esta es una función que permite aplicar DBSCAN y obtener los puntos representativos:
aplicar_dbscan_sf <- function(sf_points, eps = 0.001, minPts = 1) {
coords <- st_coordinates(sf_points) # Extraer coordenadas
clusters <- dbscan(coords, eps = eps, minPts = minPts)$cluster # Aplicar DBSCAN
sf_points$cluster <- clusters # Agregar clusters al dataframe sf
return(sf_points)
}
# Ahora, podemos aplicar la función a cada dataframe:
resultados <- lapply(list_df, aplicar_dbscan_sf)
# Con este código podemos asignar los resultados a las variables originales:
hoteles_spain_points <- resultados[[1]]
museos_spain_points <- resultados[[2]]
restaurantes_spain_points <- resultados[[3]]
hoteles_cyl_points <- resultados[[4]]
museos_cyl_points <- resultados[[5]]
restaurantes_cyl_points <- resultados[[6]]
hoteles_zam_points <- resultados[[7]]
museos_zam_points <- resultados[[8]]
restaurantes_zam_points <- resultados[[9]]
hoteles_zamora_points <- resultados[[10]]
museos_zamora_points <- resultados[[11]]
restaurantes_zamora_points <- resultados[[12]]
Output
Como resultado de esta mejora gracias a DBSCAN, se han obtenido archivos con extensión GeoPackage (.gpkg) con los datos mejorados y limpios para los distintos niveles de agregación de nuestro estudio.
Los ficheros generados con este procedimiento se pueden descargar a continuación:
- Categorias España
- Categorias Castilla y León
- Categorias Zamora (provincia)
- Categorias Zamora (municipio)
Proyectos de Innovación Educativa Emergente PIEE-2737007 y PIEE-3325394