Farmacias en la Comunidad Valenciana
Input
El siguiente análisis se centra en la distribución geográfica de las farmacias en la Comunidad Valenciana. Los datos son extraídos de OpenStreetMap, un proyecto donde se proporciona información disponible de forma gratuita para que todos la puedan ver o editar, facilitando la creación de mapas personalizados.
También se hace uso de datos oficiales proporcionados por la Conselleria de Sanidad de la Generalitat Valenciana en relación con las oficinas de farmacia en la Comunidad Valenciana.
Descripción
En primer lugar, se cargan las librerías necesarias:
Se define el área de estudio obteniendo los límites de la Comunidad Valenciana con el paquete:
spain <- mapSpain::esp_get_prov(epsg="4326")
cval <- spain %>% filter(cpro %in% c("03","12", "46" ))
bbox_cv <- sf::st_bbox(cval)
bbox_cv
xmin ymin xmax ymax
-1.528067 37.844130 0.689302 40.788267
Se realiza una consulta a OSM para obtener las farmacias dentro de los límites de la Comunidad Valenciana.
q <- opq(bbox = bbox_cv, timeout = 1000) %>%
add_osm_feature(key = "amenity", value = "pharmacy") %>%
osmdata_sf()
farmacias_cv <- q$osm_points
class(farmacias_cv)
[1] "sf" "data.frame"
dim(farmacias_cv)
[1] 1907 98
Se cuenta en el momento con un conjunto de datos que incluye 1894 observaciones y 98 variables. Cabe destacar que que esta información es susceptible, debido al enfoque colaborativo de OSM.
Se visualiza la distribución de farmacias en un mapa interactivo. Sin embargo, se observan diferentes farmacias fuera de los límites de la Comunidad Valenciana en España.
farmacias_cv %>%
leaflet::leaflet() %>%
leaflet::addTiles() %>%
leaflet::addCircles(color= "darkgreen") %>%
leaflet::addPolygons(data = cval, weight = 2)
Tratamiento
Para la resolución al problema anterior, se identifican los puntos que están dentro y fuera de la Comunidad Valenciana:
spain_ccaa <- mapSpain::esp_get_ccaa(epsg="4326")
ccaa <- spain_ccaa %>% filter(codauto %in% c("10"))
puntos_fuera <- st_difference(farmacias_cv, ccaa)
puntos_dentro <- st_intersection(farmacias_cv, ccaa)
Los puntos fuera de la Comunidad Valenciana, se encuentran específicamente en las regiones de Murcia, Aragón y Cataluña. Por tanto, estas se descartan.
puntos_fuera %>%
leaflet::leaflet() %>%
leaflet::addTiles() %>%
leaflet::addCircleMarkers(color = "red", radius = 8) %>%
leaflet::addCircles() %>%
leaflet::addPolylines(data = cval, weight = 2, color = "black")
dim(puntos_dentro)
[1] 1660 119
Además, también se identifican múltiples registros correspondientes a un mismo establecimiento. Para resolver esta duplicidad, se lleva a cabo un proceso de agrupación mediante clústeres. Así, los puntos que se encuentran cercanos entre sí se consolidan en un único punto representativo, el centroide.
coords <- sf::st_coordinates(puntos_dentro)
res <- dbscan(coords, eps = 0.001, minPts = 1)
puntos_dentro$cluster <- data.frame(res$cluster)
#Cálculo punto medio para cada cluster
farmacias <- puntos_dentro %>%
group_by(cluster) %>%
summarise(geometry = st_centroid(st_combine(geometry)))
Se visualiza el mapa final con las farmacias agrupadas.
leaflet() %>%
addTiles() %>%
addCircles(data = farmacias, color ="darkgreen")%>%
addPolylines(data = cval, weight = 2, color = 'black')
dim(farmacias)
[1] 1442 2
Ahora, el conjunto de datos que incluye 1439 observaciones. Sin embargo, esto no se corresponde con la realidad. Los datos de la fuente externa “Consellería de Salut” donde nos proporcionan un archivo .xlsx con las oficinas de farmacia en la Comunidad Valenciana aparece un total de 2348 filas, es decir, farmacias.
Con ello, procedemos a acceder a los datos proporcionados en el archivo Excel de la Conselleria de Salut, que contiene un listado detallado de las oficinas de farmacia en la Comunidad Valenciana.
Este archivo incluye información como el nombre del establecimiento, provincia, municipio, titular, dirección y zona sanitaria. La finalidad es geocodificar estos datos para obtener las coordenadas geográficas exactas de cada farmacia.
df <- read_excel(file.path("data/000122", "ListadoOficinasFarmacia.xlsx"))
# Renombrar las columnas
colnames(df) <- c("Establecimiento", "Provincia", "Municipio", "Titular", "Direccion", "Departamento_Salud", "Zona_Sanitaria", "Zona_Farmaceutica")
#Crear una columna con la dirección completa
df <- df %>%
mutate(Direccion_Completa = paste(Direccion, Municipio, Provincia, "España", sep=", ")) %>%
mutate(Direccion_Completa = gsub("/", " ", Direccion_Completa), # Quitar barras
Direccion_Completa = gsub("\\s+", " ", Direccion_Completa)) # Quitar espacios
El proceso de geocodificación se realiza mediante la función geocode(), que convierte las direcciones completas de las farmacias en coordenadas de latitud y longitud. Al hacerlo, obtenemos una representación espacial precisa de las farmacias en el mapa. Posteriormente, los datos geocodificados se convierten a un formato espacial utilizando el paquete sf, lo que permite trabajar con ellos en un contexto geoespacial adecuado.
Finalmente, los datos geocodificados se guardan en un archivo de formato GeoPackage (.gpkg), quedando disponibles aquí.
gva_farmacias <- st_read("farmacias_gva.gpkg")
gva_farmacias <- st_intersection(gva_farmacias, ccaa)
Output
De esta manera, gracias a estos datos georreferenciados, se facilita la siguiente visualización precisa de las farmacias en la Comunidad Valenciana en el mapa.
leaflet() %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addPolygons(data = cval, weight = 2)%>%
addCircles(data = gva_farmacias,
color = "darkgreen",
radius = 5,
opacity = 0.6,
group = "Farmacias GVA") %>%
addLegend(
position = "bottomright",
colors = "darkgreen",
labels = "Farmacias GVA",
title = "Distribución farmacias GVA")
Podemos observar también la siguiente distribución de farmacias en las diferentes provincias de la Comunidad Valenciana:
Proyectos de Innovación Educativa Emergente PIEE-2737007 y PIEE-3325394