Datos de las farmacias de Pamplona

SALUD
PAMPLONA
FARMACIAS
XLSX
Autor/a
Afiliación

Lucía Mora Torrent

Universitat de València

Fecha de publicación

10 de mayo de 2024

Input

En la Administración Electrónica de Navarra , se pueden encontrar los datos de las farmacias de Pamplona y de toda la provincia de Navarra, disponible en este enlace. Estos datos se encuentran en la sección de salud, dentro del apartado de ciudadanía. Además de la información sobre las farmacias, en esta sección también se puede acceder a detalles sobre hospitales y farmacias de guardia.

Este documento se enfoca en las farmacias existentes en toda la provincia de Navarra, específicamente identificadas como “Farmacias abiertas al público”. La base de datos incluye variables como Zona Básica, localidad, dirección, titular y código.

Es importante destacar que aunque los datos no están disponibles para descarga directa, se pueden copiar y pegar fácilmente en hojas de cálculo como Excel desde la fuente mencionada.

Descripción

Instalamos paquetes y cargamos librerías:

libs <- c("tidyverse", "sf", "mapSpain", "osmdata", "ggspatial", "leaflet", "prettymapr", "prettydoc", "spatstat", "sp", "splancs" ,"tidygeocoder", "readxl")
installed_libs <- libs %in% rownames(installed.packages())
if (any(installed_libs == F)) {install.packages(libs[!installed_libs])}
invisible(lapply(libs, library, character.only = T))
rm(libs, installed_libs)

Leemos el conjunto de datos y filtramos por Pamplona:

farmacias_navarra <- read_excel("data/farmacias_navarra.xlsx")
farmacias_pamplona <- farmacias_navarra %>% filter(farmacias_navarra$Localidad == "Pamplona")
head(farmacias_pamplona)
# A tibble: 6 × 5
  `Zona básica` Localidad Dirección                      Titular          Código
  <chr>         <chr>     <chr>                          <chr>            <chr> 
1 Azpilagaña    Pamplona  Calle San Juan Bosco 11        Aguirre Redondo… F00212
2 Azpilagaña    Pamplona  Calle Miguel Astráin 15        Aranaz Flamariq… F00412
3 Azpilagaña    Pamplona  Calle Alfonso el Batallador 9  Beñaran/Lashera… F00682
4 Azpilagaña    Pamplona  Calle Buenaventura Iñiguez 16  Bengoechea Marc… F00163
5 Azpilagaña    Pamplona  Calle Abejeras 47              Funes Barbarin,… F00612
6 Azpilagaña    Pamplona  Calle Iturrama 13              Garcia Diaz, Ana F00196

Como podemos ver en la base de datos, no contamos con las coordenadas geográficas de las farmacias. Para abordar esta limitación, utilizamos el geocoding, una técnica que nos proporcionará tanto la longitud como la latitud de cada una de las ubicaciones de las farmacias.

crds <- geo(street = paste(farmacias_pamplona$Dirección),
             city = farmacias_pamplona$Localidad,
             country = rep("Spain",nrow(farmacias_pamplona)))
Passing 211 addresses to the Nominatim single address geocoder
Query completed in: 214.9 seconds

En el dataset crds, se observa una cantidad significativa de datos faltantes, los cuales corresponden a casos en los que el proceso de geocodificación no pudo ubicar correctamente las direcciones proporcionadas.

gh <- !is.na(crds$long) & !is.na(crds$lat)

 sum(!gh)
[1] 21

En concreto, tenemos un total de 21 valores faltantes

Tratamiento

Se ha detectado que en la base de datos con la que vamos a trabajar, crds, hay 21 valores faltantes. Aunque parecen ser pocos, para un estudio espacial pueden ser muy necesarios. A continuación vemos todos las farmacias de las cuales no disponemos de coordenas.

crds[is.na(crds$lat) | is.na(crds$long), ]
# A tibble: 21 × 5
   street                             city     country   lat  long
   <chr>                              <chr>    <chr>   <dbl> <dbl>
 1 Calle Rinaldi 25                   Pamplona Spain      NA    NA
 2 Plaza Conde Oliveto 1              Pamplona Spain      NA    NA
 3 Calle Jose Alonso 2 bajo local 2   Pamplona Spain      NA    NA
 4 Plaza Ezcaba 13                    Pamplona Spain      NA    NA
 5 Calle Paseo Donantes de Sangre 25  Pamplona Spain      NA    NA
 6 Calle Grupo Urdánoz 2              Pamplona Spain      NA    NA
 7 Calle Malón de Echaide 9           Pamplona Spain      NA    NA
 8 Calle Puente Miluce 2              Pamplona Spain      NA    NA
 9 Calle Pintor Paret 5               Pamplona Spain      NA    NA
10 Avenida Carlos III 63              Pamplona Spain      NA    NA
# ℹ 11 more rows

Una opción sería eliminarlos, pero debido a la posible importancia uq epeudan tener vamos a ponerlos manualmente con los datos sacados de google maps.

# Definir las coordenadas manuales para las filas específicas

coordenadas_manuales <- list(
  fila_12 = c(42.80674379553961, -1.6480299896529003),
  fila_23 = c(42.81291463734093, -1.6435954359198524),
  fila_24 = c(42.81530944387845, -1.648806047323351),
  fila_40 = c(42.82870642838886, -1.6266716782437158),
  filas_44=c(42.835371695786634, -1.628685389651506),
    filas_60=c(42.799686029886495, -1.6753156166405574),
  filas_73=c(42.80904181533022, -1.667347176159103),
  filas_75=c(42.805846654552376, -1.6746564626656264),
  filas_76=c(42.80812989756959, -1.6613897338300516),
  filas_84=c(42.81112933774674, -1.6365967338299148),
  filas_90=c(  42.81532066197641, -1.641577647564586),
  filas_95=c(42.81262659865285, -1.6382941338298247),
  filas_103=c(42.806323439176865, -1.6575222301338834),
  filas_125=c(42.81633295117738, -1.6169081473233082),
  filas_148=c(42.80123252536089, -1.6394610184886271),
  filas_171=c(42.80905763429486, -1.6549702724628779),
  filas_173=c(42.82658737022206, -1.650490816639263),
  filas_176=c(42.82028666472282, -1.6688895800945691),
  filas_184=c(42.83392570075721, -1.679330330132578),
    filas_203=c(  42.81381679953136, -1.6589519319816806),
  filas_208=c(42.814107487679095, -1.6623370761588538)

)
# Asignar las coordenadas manualmente a las filas correspondientes en crds
crds[c(12, 23, 24, 40, 44, 60, 73, 75, 76, 84, 90, 95, 103, 125, 148, 171, 173, 176, 184, 203, 208), c("lat", "long")] <- do.call(rbind, coordenadas_manuales)

Output

El dataset resultante es esencialmente el mismo que el anterior, pero ahora no contiene valores NA. Podemos verificar que ya no hay valores faltantes:

# Verificar si hay valores NA en las coordenadas en crds
if (any(is.na(crds$lat)) || any(is.na(crds$long))) {
  print("Hay valores NA en las coordenadas en crds.")
} else {
  print("No hay valores NA en las coordenadas en crds.")
}
[1] "No hay valores NA en las coordenadas en crds."

A pesar de los cambios realizados, el dataset sigue siendo de la clase data.frame, ya que estos ajustes se realizaron antes del cambio del sistema de referencia de coordenadas (CRS) y de la conversión a sf.

class(crds)
[1] "tbl_df"     "tbl"        "data.frame"
dim(crds)
[1] 211   5

Ahora, ya podemos representar todos los puntos de las farmacias en el mapa:

mapa <- leaflet(data =crds) %>%
  addTiles() %>%
  addCircleMarkers(~crds$long, ~crds$lat, 
                   radius = 5, 
                   color = "#CD6090", 
                   fillOpacity = 0.5, popup = ~street
  )

mapa
#Guardamos los datos anteriores en un archivo xlsx:

ruta <- "crds.xlsx"

write.xlsx(crds, file = ruta)

El fichero generado con el procedimiento descrito anteriormente se puede descargar, en formato xlsx de aquí.



Proyecto de Innovación Educativa Emergente (PIEE-2737007)