Datos de hospitales en València
Input
Se ha obtenido un conjunto de datos abierto y oficial del Ajuntament de València, concretamente un fichero CSV con información sobre hospitales y otros centros sanitarios del municipio de València. A partir de este conjunto de datos se ha seleccionado el subconjunto correspondiente únicamente a los hospitales.
hospitales <- read_delim(
"../data/2526020036/hospitales.csv",
delim = ";",
locale = locale(encoding = "UTF-8"),
show_col_types = FALSE
)dim(hospitales)[1] 62 14
glimpse(hospitales)Rows: 62
Columns: 14
$ geo_point_2d <chr> "39.45307565703261, -0.39488128525927624", "39.4698684105…
$ `Geo Shape` <chr> "{\"coordinates\": [[-0.394881285259276, 39.4530756570326…
$ Nombre <chr> "Hospital pare Jofre", "Consultorio Local Valencia L'Alge…
$ Financiaci <chr> "Publico", "Publico", "Publico", "Publico", "Privado", "P…
$ Tipo <chr> "Hospital", "Consultorio", "Centro de Salud", "Centro de …
$ Camas <dbl> 125, 0, 0, 0, 79, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ Direccion <chr> "San Llátzer s/n", "Carrer de l'Alguer, 28", "Carrer de S…
$ Fecha <date> 2021-06-30, 2021-06-30, 2021-06-30, 2021-06-30, 2021-06-…
$ Barrio <chr> "FAVARA", "BETERO", "RUSSAFA", "LA CREU DEL GRAU", "EXPOS…
$ codbarrio <dbl> 5, 4, 1, 3, 1, 3, 1, 1, 1, 5, 4, 3, 1, 2, 2, 3, 7, 3, 6, …
$ coddistbar <chr> "085", "114", "021", "123", "061", "103", "031", "161", "…
$ coddistrit <dbl> 8, 11, 2, 12, 6, 10, 3, 16, 18, 5, 5, 10, 16, 11, 9, 3, 1…
$ X <dbl> 724151.1, 728851.5, 726071.4, 728403.8, 726688.9, 725872.…
$ Y <dbl> 4370296, 4372299, 4371572, 4371329, 4373145, 4369286, 437…
names(hospitales) [1] "geo_point_2d" "Geo Shape" "Nombre" "Financiaci" "Tipo"
[6] "Camas" "Direccion" "Fecha" "Barrio" "codbarrio"
[11] "coddistbar" "coddistrit" "X" "Y"
Descripción
El conjunto de datos utilizado procede del portal oficial de datos abiertos del Ajuntament de València, que ofrece información pública reutilizable sobre diferentes ámbitos municipales.
El dataset seleccionado contiene información sobre hospitales y otros centros sanitarios del municipio de València, incluyendo variables como el nombre del centro, tipo de establecimiento, dirección postal, número de camas, barrio, fecha de actualización y coordenadas aproximadas.
Aunque el recurso ya está delimitado espacialmente al municipio de València, no está preparado directamente para su uso en análisis geoespacial. Por una parte, incluye distintos tipos de centros sanitarios, por lo que requiere un filtrado temático. Por otra, aunque incorpora información espacial, esta no se encuentra organizada en un formato estándar listo para su utilización en herramientas SIG.
Por este motivo, se realiza un proceso de mejora del dataset que incluye el filtrado de hospitales, la construcción de direcciones completas, la validación y obtención de coordenadas mediante geocodificación, la generación de un objeto espacial sf y la exportación del resultado en formatos reutilizables.
Tratamiento
El tratamiento realizado consta de los siguientes pasos:
- Filtrado temático para conservar únicamente los hospitales del municipio de València.
- Construcción de una dirección completa a partir del nombre y la dirección postal de cada centro.
- Obtención de coordenadas mediante forward geocoding utilizando la librería
tidygeocodery el servicio basado en OpenStreetMap (Nominatim). - Conversión del resultado a objeto espacial mediante la librería
sf, generando geometrías de tipo punto en el sistema de referencia EPSG:4326. - Exportación del dataset mejorado a formatos reutilizables, concretamente CSV para datos tabulares y GeoPackage (
gpkg) para datos espaciales.
1. Ver nombres de columnas
Este paso permite identificar con precisión los nombres de las variables del dataset original y comprobar qué campos están disponibles para el análisis y el proceso de mejora.
names(hospitales) [1] "geo_point_2d" "Geo Shape" "Nombre" "Financiaci" "Tipo"
[6] "Camas" "Direccion" "Fecha" "Barrio" "codbarrio"
[11] "coddistbar" "coddistrit" "X" "Y"
2. Filtrar hospitales
En este paso se pasa del conjunto general de centros sanitarios al subconjunto específico de hospitales, que es el objeto de interés del trabajo.
# A tibble: 14 × 4
Nombre Tipo Direccion Barrio
<chr> <chr> <chr> <chr>
1 Hospital pare Jofre Hospit… San Llát… FAVARA
2 Clinica Quiron de Valencia, S.A. Hospit… Av. Blas… EXPOS…
3 Hospital Universitario y Politecnico La Fe Hospit… Avinguda… MALIL…
4 Clinica Fontana Hospit… Calle Al… RUSSA…
5 Hospital 9 de Octubre Hospit… Av. Vall… SANT …
6 Hospital Arnau de Vilanova Hospit… Calle Sa… SANT …
7 Consorcio Hospital General Universitario De Valencia Hospit… Av. Tres… LA FO…
8 Hospital de Valencia al Mar Hospit… Río Tajo… LA MA…
9 Hospital la Malva-Rosa Hospit… Calle Is… LA MA…
10 Hospital Universitario Dr. Peset Hospit… Av. Gasp… FAVARA
11 ClInica Casa de la Salud Hospit… Dr. Manu… ALBORS
12 Fundacion Instituto Valenciano de Oncologia Hospit… Profesor… CAMPA…
13 Hospital Clinico Universitario de Valencia Hospit… Av. Blas… CIUTA…
14 Clinica Virgen del Consuelo Hospit… Calle Ca… LA RA…
3. Construir dirección completa
Se construye una variable de dirección completa que servirá como entrada para el proceso de geocodificación.
# A tibble: 14 × 3
Nombre Direccion direccion_completa
<chr> <chr> <chr>
1 Hospital pare Jofre San Llát… Hospital pare Jof…
2 Clinica Quiron de Valencia, S.A. Av. Blas… Clinica Quiron de…
3 Hospital Universitario y Politecnico La Fe Avinguda… Hospital Universi…
4 Clinica Fontana Calle Al… Clinica Fontana, …
5 Hospital 9 de Octubre Av. Vall… Hospital 9 de Oct…
6 Hospital Arnau de Vilanova Calle Sa… Hospital Arnau de…
7 Consorcio Hospital General Universitario De Val… Av. Tres… Consorcio Hospita…
8 Hospital de Valencia al Mar Río Tajo… Hospital de Valen…
9 Hospital la Malva-Rosa Calle Is… Hospital la Malva…
10 Hospital Universitario Dr. Peset Av. Gasp… Hospital Universi…
11 ClInica Casa de la Salud Dr. Manu… ClInica Casa de l…
12 Fundacion Instituto Valenciano de Oncologia Profesor… Fundacion Institu…
13 Hospital Clinico Universitario de Valencia Av. Blas… Hospital Clinico …
14 Clinica Virgen del Consuelo Calle Ca… Clinica Virgen de…
hospitales_valencia$direccion_completa <- enc2utf8(hospitales_valencia$direccion_completa)4. Geocodificación
Se aplica forward geocoding con tidygeocoder. Tras realizar pruebas comparativas con distintos motores de búsqueda, se ha optado por utilizar ArcGIS en lugar de OpenStreetMap (OSM). Esta decisión técnica se fundamenta en la mayor robustez del algoritmo de ArcGIS para interpretar direcciones en entornos urbanos españoles, lo que permite obtener las coordenadas de la totalidad de los hospitales (0% de valores NA) y garantiza una mayor precisión geoespacial en el conjunto de datos final.
# Geocodificamos las direcciones completas.
# El resultado añade columnas de latitud y longitud.
hospitales_geo <- hospitales_valencia %>%
tidygeocoder::geocode(
address = direccion_completa,
method = "arcgis"
)
#Verificación de resultados: Mostramos los primeros registros geocodificados
hospitales_geo %>%
select(Nombre, direccion_completa, lat, long)# A tibble: 14 × 4
Nombre direccion_completa lat long
<chr> <chr> <dbl> <dbl>
1 Hospital pare Jofre Hospital pare Jof… 39.5 -0.395
2 Clinica Quiron de Valencia, S.A. Clinica Quiron de… 39.5 -0.364
3 Hospital Universitario y Politecnico La Fe Hospital Universi… 39.4 -0.376
4 Clinica Fontana Clinica Fontana, … 39.5 -0.378
5 Hospital 9 de Octubre Hospital 9 de Oct… 39.5 -0.402
6 Hospital Arnau de Vilanova Hospital Arnau de… 39.5 -0.404
7 Consorcio Hospital General Universitario De … Consorcio Hospita… 39.5 -0.409
8 Hospital de Valencia al Mar Hospital de Valen… 39.5 -0.331
9 Hospital la Malva-Rosa Hospital la Malva… 39.5 -0.325
10 Hospital Universitario Dr. Peset Hospital Universi… 39.5 -0.394
11 ClInica Casa de la Salud ClInica Casa de l… 39.5 -0.350
12 Fundacion Instituto Valenciano de Oncologia Fundacion Institu… 39.5 -0.391
13 Hospital Clinico Universitario de Valencia Hospital Clinico … 39.5 -0.361
14 Clinica Virgen del Consuelo Clinica Virgen de… 39.5 -0.387
Número de hospitales no localizados: 0
5. Conversión a objeto espacial
Una vez obtenidas las coordenadas, se realiza un proceso de “rescate” o limpieza: si el geocodificador ha fallado en algún punto, se recupera la coordenada original del Ayuntamiento (columna geo_point_2d).
hospitales_sf <- hospitales_geo %>%
# Separamos la columna de coordenadas originales en latitud y longitud
separate(geo_point_2d, into = c("lat_orig", "long_orig"),
sep = ",[ ]*", convert = TRUE) %>%
# Separamos la columna de coordenadas originales en latitud y longitud
mutate(
lat = if_else(is.na(lat), lat_orig, lat),
long = if_else(is.na(long), long_orig, long)
) %>%
st_as_sf(coords = c("long", "lat"), crs = 4326, na.fail = FALSE)
# Verificamos que ya es un objeto espacial sf
hospitales_sfSimple feature collection with 14 features and 16 fields
Geometry type: POINT
Dimension: XY
Bounding box: xmin: -0.408528 ymin: 39.4435 xmax: -0.3253479 ymax: 39.4906
Geodetic CRS: WGS 84
# A tibble: 14 × 17
lat_orig long_orig `Geo Shape` Nombre Financiaci Tipo Camas Direccion
* <dbl> <dbl> <chr> <chr> <chr> <chr> <dbl> <chr>
1 39.5 -0.395 "{\"coordinates\"… Hospi… Publico Hosp… 125 San Llát…
2 39.5 -0.364 "{\"coordinates\"… Clini… Privado Hosp… 79 Av. Blas…
3 39.4 -0.375 "{\"coordinates\"… Hospi… Publico Hosp… 1000 Avinguda…
4 39.5 -0.378 "{\"coordinates\"… Clini… Privado Hosp… 7 Calle Al…
5 39.5 -0.402 "{\"coordinates\"… Hospi… Privado Hosp… 300 Av. Vall…
6 39.5 -0.404 "{\"coordinates\"… Hospi… Publico Hosp… 302 Calle Sa…
7 39.5 -0.409 "{\"coordinates\"… Conso… Publico Hosp… 592 Av. Tres…
8 39.5 -0.331 "{\"coordinates\"… Hospi… Publico Hosp… 70 Río Tajo…
9 39.5 -0.325 "{\"coordinates\"… Hospi… Publico Hosp… 47 Calle Is…
10 39.5 -0.394 "{\"coordinates\"… Hospi… Publico Hosp… 539 Av. Gasp…
11 39.5 -0.351 "{\"coordinates\"… ClIni… Privado Hosp… 192 Dr. Manu…
12 39.5 -0.391 "{\"coordinates\"… Funda… Concertado Hosp… 160 Profesor…
13 39.5 -0.362 "{\"coordinates\"… Hospi… Publico Hosp… 587 Av. Blas…
14 39.5 -0.387 "{\"coordinates\"… Clini… Privado Hosp… 156 Calle Ca…
# ℹ 9 more variables: Fecha <date>, Barrio <chr>, codbarrio <dbl>,
# coddistbar <chr>, coddistrit <dbl>, X <dbl>, Y <dbl>,
# direccion_completa <chr>, geometry <POINT [°]>
Se utiliza el sistema de referencia EPSG:4326, compatible con la mayoría de herramientas SIG y con la librería leaflet, lo que permite representar los datos correctamente en mapas interactivos.
# Comprobamos el sistema de referencia del objeto espacial
st_crs(hospitales_sf)Coordinate Reference System:
User input: EPSG:4326
wkt:
GEOGCRS["WGS 84",
ENSEMBLE["World Geodetic System 1984 ensemble",
MEMBER["World Geodetic System 1984 (Transit)"],
MEMBER["World Geodetic System 1984 (G730)"],
MEMBER["World Geodetic System 1984 (G873)"],
MEMBER["World Geodetic System 1984 (G1150)"],
MEMBER["World Geodetic System 1984 (G1674)"],
MEMBER["World Geodetic System 1984 (G1762)"],
MEMBER["World Geodetic System 1984 (G2139)"],
MEMBER["World Geodetic System 1984 (G2296)"],
ELLIPSOID["WGS 84",6378137,298.257223563,
LENGTHUNIT["metre",1]],
ENSEMBLEACCURACY[2.0]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]],
USAGE[
SCOPE["Horizontal component of 3D system."],
AREA["World."],
BBOX[-90,-180,90,180]],
ID["EPSG",4326]]
6. Guardar el resultado
Se guarda el conjunto de datos mejorado tanto en formato CSV como en formato GeoPackage.
# Guardamos el resultado espacial en formato GeoPackage.
sf::st_write(
hospitales_sf2,
"guardar/hospitales_valencia.gpkg",
delete_dsn = TRUE,
quiet = TRUE
)
# Guardamos también una versión tabular sin geometría en CSV
readr::write_csv(
st_drop_geometry(hospitales_sf2),
"guardar/hospitales_valencia.csv"
)7. Comprobación de calidad: ¿Cuántos hospitales se han quedado sin coordenadas?
En este paso se verifica que el objeto espacial final no contiene hospitales sin coordenadas.
sum(is.na(st_coordinates(hospitales_sf)))[1] 0
8. Mostrar un mapa
Se genera un mapa interactivo utilizando la librería leaflet para comprobar visualmente la correcta localización de los hospitales dentro del municipio de València.
Además, los hospitales se representan con distintos colores según su tipo de financiación, utilizando rojo para hospitales públicos, azul para hospitales privados y naranja para hospitales concertados, lo que permite una mejor interpretación del conjunto de datos.
leaflet(hospitales_sf2) %>%
addProviderTiles("CartoDB.Positron") %>%
addCircleMarkers(
color = ~case_when(
toupper(Financiaci) == "PUBLICO" ~ "red",
toupper(Financiaci) == "PRIVADO" ~ "blue",
TRUE ~ "orange"
),
radius = 7,
stroke = TRUE,
fillOpacity = 0.8,
popup = ~paste0(
"<b>", Nombre, "</b><br>",
"Financiación: ", Financiaci, "<br>",
"Dirección: ", Direccion
)
)Output
Se ha obtenido un conjunto de datos centrado exclusivamente en los hospitales del municipio de València, a partir de una fuente oficial del Ajuntament de València. El resultado final contiene un total de 14 hospitales correctamente georreferenciados, y queda disponible en formato tabular (csv) y en formato geográfico (gpkg) para su reutilización en análisis espaciales y cartografía.
El conjunto de datos generado se encuentra en la carpeta guardar/, donde se han exportado los ficheros resultantes en formato CSV y GeoPackage, listos para su uso en herramientas de análisis geoespacial y sistemas de información geográfica (SIG).
El fichero generado con este procedimiento se puede descargar de aquí.

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