Datos de Hoteles en Santa Cruz de Tenerife
Input
Obtenemos el conjunto de datos geoespaciales sobre hoteles en Santa Cruz de Tenerife mediante OpenStreetMap (OSM), un proyecto colaborativo que proporciona un mapa libre y editable del mundo. OSM permite a los usuarios visualizar, editar y utilizar datos geográficos de cualquier parte del globo. Toda la información puede consultarse en la wiki de OpenStreetMap.
Otras informaciones de interés:
Licencia de uso: Los datos obtenidos de OSM están sujetos a la Open Database License (ODbL), que permite su uso y distribución con ciertas condiciones, como el reconocimiento de la fuente y la compartición de modificaciones realizadas.
Formatos: Los conjuntos de datos de OpenStreetMap pueden exportarse en varios formatos según el método de extracción, incluyendo GeoJSON, Shapefile, KML y CSV.
Descripción
bbox_santacruz_tenerife <- c(-18.4, 27.5, -16.0, 29.5)
hoteles <- bbox_santacruz_tenerife %>% # Utiliza el bounding box de la provincia
opq() %>% # Crea una consulta a OpenStreetMap
add_osm_feature(key = "tourism", value = "hotel") %>% # Filtra tipo "hotel"
osmdata_sf() %>% # formato sf
.$osm_points # Extrae
hoteles_sf <- st_as_sf(hoteles)
Se trata de un objeto sf
con 6294 observaciones y 92 variables
Cambiamos el CRS para poder representarlo gráficamente con leaflet
:
hoteles_sf <- sf::st_transform(hoteles_sf, crs=4326)
hoteles_sf %>%
leaflet::leaflet() %>%
leaflet::addTiles() %>%
leaflet::addCircles()
Al ampliar el mapa, podemos notar que, debido a ciertos errores en los datos, algunos hoteles aparecen duplicados o incluso triplicados en determinadas zonas geográficas. Para corregir este problema, aplicamos el siguiente comando, agrupando las ubicaciones en un cluster para mejorar la visualización y precisión de la información.
Tratamiento
Adjuntando el paquete: 'dbscan'
The following object is masked from 'package:stats':
as.dendrogram
coords <- sf::st_coordinates(hoteles_sf)
res <- dbscan(coords, eps = 0.001, minPts = 1)
hoteles_sf$cluster <- data.frame(res$cluster)
hoteles_final <- hoteles_sf %>%
group_by(cluster) %>%
summarise(geometry = st_centroid(st_combine(geometry)))
Aplicamos el algoritmo DBSCAN para agrupar hoteles duplicados o muy cercanos y representar cada grupo mediante su centroide, mejorando así la visualización y precisión de los datos. Primero, hemos extraído las coordenadas de los hoteles con st_coordinates()
, y luego hemos utilizado dbscan()
con un radio de vecindad (eps = 0.001
) (equivale a una distancia de aproximadamente 110 metros) y un mínimo de puntos por cluster (minPts = 1
), lo que permite agrupar hoteles cercanos en un mismo grupo.
Posteriormente, asignamos a cada hotel su respectivo cluster y hemos combinado las geometrías dentro de cada grupo y calculado su centroide con st_centroid(st_combine(geometry))
, generando así un dataset limpio y sin duplicados.
Output
Verificamos el resultado con class()
y dim()
, asegurándonos de que el objeto final mantiene su estructura espacial y de que la cantidad de hoteles ha disminuido tras la agrupación (de 6294 a 325 observaciones). Esto nos permite eliminar redundancias, mejorar la precisión geográfica y optimizar la visualización en mapas.
Ahora, al hacer zoom en el mapa, observamos que el problema de duplicados ha sido corregido, ya que cada grupo de hoteles cercanos se ha representado mediante un único punto en su centroide. Esto nos permite una visualización más precisa y limpia de los datos, evitando errores y redundancias en la representación geográfica.
El/los fichero(s) generados con este procedimiento/técnica/metodología se puede(n) descargar de aquí.
sf::st_write(hoteles_final, "hoteles.gpkg", delete_dsn = TRUE)
Proyectos de Innovación Educativa Emergente PIEE-2737007 y PIEE-3325394