Datos de ambulancias en Valencia
Input
Obtenemos el conjunto de datos sobre las estaciones de ambulancia en la provincia de Valencia a través de OpenStreetMap (OSM), proyecto colaborativo que proporciona un mapa libre y editable.
Es importante tener en cuenta que, debido a la naturaleza colaborativa de OSM, la precisión de los datos puede variar. Por ello, se recomienda contrastar la información obtenida de OSM con fuentes oficiales para garantizar su fiabilidad. En este caso, aunque ya lo veremos más adelante, los datos sobre ambulancias en la provincia de Valencia son escasos.
Descripción
valencia <- osmdata::getbb("Valencia") #dimensiones de Valencia
ambulancias <- valencia %>%
opq() %>%
add_osm_feature(key = "emergency", value = "ambulance_station") %>%
osmdata_sf()
print(ambulancias$osm_points) # Puntos
Simple feature collection with 17 features and 4 fields
Geometry type: POINT
Dimension: XY
Bounding box: xmin: -0.4108939 ymin: 39.35338 xmax: -0.3240723 ymax: 39.48115
Geodetic CRS: WGS 84
First 10 features:
osm_id name emergency entrance
4098321734 4098321734 <NA> ambulance_station <NA>
5302159276 5302159276 SAMUR ambulance_station <NA>
7551384864 7551384864 <NA> <NA> <NA>
7551384865 7551384865 <NA> <NA> <NA>
7551384867 7551384867 <NA> <NA> <NA>
7551384868 7551384868 <NA> <NA> <NA>
7551384869 7551384869 <NA> <NA> <NA>
7551384870 7551384870 <NA> <NA> <NA>
11766630406 11766630406 <NA> <NA> <NA>
11766630407 11766630407 <NA> <NA> <NA>
geometry
4098321734 POINT (-0.3240723 39.37971)
5302159276 POINT (-0.4108939 39.35338)
7551384864 POINT (-0.3805211 39.48102)
7551384865 POINT (-0.3806073 39.48101)
7551384867 POINT (-0.3803297 39.48104)
7551384868 POINT (-0.3803424 39.48115)
7551384869 POINT (-0.3806205 39.48114)
7551384870 POINT (-0.3806459 39.48113)
11766630406 POINT (-0.3806257 39.48112)
11766630407 POINT (-0.3806144 39.48109)
[1] "sf" "data.frame"
dim(ambulancias_sf)
[1] 17 5
#Mostrar el mapa con leaflet
ambulancias_sf <- sf::st_transform(ambulancias_sf, crs=4326)
ambulancias_sf %>%
leaflet::leaflet() %>%
leaflet::addTiles() %>%
leaflet::addCircles()
dim(ambulancias_sf)
[1] 17 5
A primera vista, el mapa muestra solo tres ubicaciones de estaciones de ambulancias en la provincia de Valencia. Sin embargo, al ampliar la vista en la ciudad de Valencia, se revela que estos tres puntos representan, en realidad, quince estaciones distintas agrupadas en la misma área geográfica.
Tratamiento
Para depurar y optimizar la representación de las ubicaciones de ambulancias en Valencia, se implementó el algoritmo DBSCAN, diseñado para identificar y consolidar puntos geográficos redundantes o excesivamente cercanos. Este proceso mejora la claridad y exactitud de la visualización de los datos. Inicialmente, se extraen las coordenadas precisas de cada ambulancia mediante la función ‘st_coordinates()’. Posteriormente, se aplica el algoritmo ‘dbscan()’, configurado con un radio de proximidad (eps=0.001), (aprox 110 metros), y un umbral mínimo de puntos por agrupación. Estos parámetros permitieron agrupar las ubicaciones de ambulancias que se encontraban dentro de esta distancia, considerándolas como un único punto.
A continuación, se asigna a cada ubicación de ambulancia su correspondiente cluster o grupo. Para simplificar la representación, se combinan las geometrías de las ubicaciones dentro de cada cluster y se calcula su centroide utilizando la función st_centroid(st_combine(geometry)).
if (!requireNamespace("dbscan", quietly = TRUE)) {
install.packages("dbscan")
}
library(dbscan)
Adjuntando el paquete: 'dbscan'
The following object is masked from 'package:stats':
as.dendrogram
coords <- sf::st_coordinates(ambulancias_sf)
r <- dbscan(coords, eps = 0.001, minPts = 1)
ambulancias_sf$cluster <- data.frame(r$cluster)
ambulancias_2 <- ambulancias_sf %>%
group_by(cluster) %>%
summarise(geometry = st_centroid(st_combine(geometry)))
Output
#Comprobamos
class(ambulancias_2)
[1] "sf" "tbl_df" "tbl" "data.frame"
dim(ambulancias_2)
[1] 3 2
#Comparamos con los datos anteriores
dim(ambulancias_sf)
[1] 17 6
Pasamos de 17 puntos en el mapa (supuestas 17 estaciones de ambulancias) a únicamente 3 puntos (los que a simple vista se observaban). Gracias a la depuración se garantiza más precisión y eficiencia al eliminar redundancias y errores, permitiendo un análisis y visualización fiables.
sf::st_write(ambulancias_2, "ambulancias.gpkg", delete_dsn = TRUE)
El fichero generado con este procedimiento se puede descargar de aquí.
Proyectos de Innovación Educativa Emergente PIEE-2737007 y PIEE-3325394