library(sf)
library(ggplot2)
library(dplyr)
if (!requireNamespace("rnaturalearth", quietly = TRUE))
install.packages("rnaturalearth")
if (!requireNamespace("rnaturalearthdata", quietly = TRUE))
install.packages("rnaturalearthdata")
library(rnaturalearth)
library(rnaturalearthdata)
library(leaflet)
Datos de aeropuertos en Europa
Input
La base de datos seleccionada se enfoca en los aeropuertos europeos durante el año 2013. Estos datos, extraídos de Eurostat, están disponibles para su descarga en formatos GDP y SHP dentro de un archivo comprimido ZIP. La base de datos cuenta con 25 variables distintas y abarca 2,847 observaciones en total. Entre las variables más relevantes se encuentran el código ICAO del aeropuerto (AIPR_ICAO), el nombre del aeropuerto (AIRP_NAME), el código del país (CNTR_CODE), y detalles operacionales como la existencia de facilidades para vuelos IFR (IFR) y VFR (VFR), además de las coordenadas geográficas de cada ubicación.
A continuación se muestra un resumen de la base de datos:
Tema: Transporte
Cobertura geográfica: Europa
Fecha de lanzamiento: 2014
Frequencia de actualización: irregular
Fuente de los datos: Recopilados por Eurostat mediante encuestas y colaboraciones con administraciones nacionales de transporte.
Acceso a los datos: Acceso libre bajo licencia especificada en la plataforma de descarga.
Formato: SHP
Descripción
Preparación de los datos
Para comenzar el análisis de la base de datos de aeropuertos europeos, es esencial preparar el entorno en R instalando y cargando las librerías necesarias. Utilizamos sf
para la manipulación de datos geográficos, ggplot2
para la visualización, dplyr
para la manipulación de datos, y leaflet
para mapas interactivos. Además, instalamos rnaturalearth
y rnaturalearthdata
para acceder a mapas de alta calidad que incluyen los límites geográficos.
El archivo Airports-2013-SHP.zip
, que contiene los datos en formato Shapefile, es descomprimido y cargado utilizando la función st_read
para su análisis.
Reading layer `AIRP_PT_2013' from data source
`C:\Users\Virgilio\OneDrive - Universitat de València\01 PROFESOR\06 Innovación Educativa\2023 2024\03 Web\datasets\data\SHAPE\AIRP_PT_2013.shp'
using driver `ESRI Shapefile'
Simple feature collection with 2847 features and 24 fields
Geometry type: POINT
Dimension: XY
Bounding box: xmin: -69.38873 ymin: -21.31941 xmax: 102.4905 ymax: 78.92753
Geodetic CRS: ETRS89
Descripción de la base de datos
summary(aeropuertos_shp)
OBJECTID AIRP_ICAO_ AIRP_HIER AIRP_NAME_
Min. : 84 Length:2847 Min. :1.000 Length:2847
1st Qu.: 9748 Class :character 1st Qu.:1.000 Class :character
Median :10464 Mode :character Median :1.000 Mode :character
Mean :10448 Mean :1.021
3rd Qu.:11178 3rd Qu.:1.000
Max. :11891 Max. :2.000
CNTR_CODE AIRP_ICRG_ IATA_CODE AIRP_PASS
Length:2847 Length:2847 Length:2847 Min. :0.0000
Class :character Class :character Class :character 1st Qu.:0.0000
Mode :character Mode :character Mode :character Median :0.0000
Mean :0.7345
3rd Qu.:0.0000
Max. :9.0000
PUBL_FLAG IFR VFR AIRP_OWNR
Length:2847 Length:2847 Length:2847 Length:2847
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
AIRP_LAND AIRP_TRAF AIRP_INTR AIRP_CITY
Length:2847 Length:2847 Length:2847 Length:2847
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
ALT LAT_EUR LON_EUR AIRP_USE
Min. : 1.0 Min. :-21.32 Min. :-69.389 Min. :2.000
1st Qu.: 42.0 1st Qu.: 45.68 1st Qu.: 2.534 1st Qu.:6.000
Median : 123.0 Median : 49.71 Median : 9.848 Median :6.000
Mean : 513.1 Mean : 50.02 Mean : 10.042 Mean :5.999
3rd Qu.: 324.0 3rd Qu.: 53.50 3rd Qu.: 17.030 3rd Qu.:6.000
Max. :11891.0 Max. : 78.93 Max. :102.491 Max. :6.000
AIRP_GROUP AIRP_GETIS AIRP_ID AIRP_LCOV_
Length:2847 Length:2847 Min. : 84 Min. : 0.0
Class :character Class :character 1st Qu.: 9748 1st Qu.: 0.0
Mode :character Mode :character Median :10465 Median : 0.0
Mean :10448 Mean : 399.8
3rd Qu.:11178 3rd Qu.: 822.5
Max. :11891 Max. :1652.0
geometry
POINT :2847
epsg:4258 : 0
+proj=long...: 0
La base de datos contiene 2,847 observaciones y 25 variables, lo cual sugiere un volumen considerable de datos que puede requerir una limpieza detallada. Este número supera los 223 aeropuertos reportados actualmente por Hosteltur en Europa, lo que indica posibles duplicados o datos no relevantes.
Para entender mejor la distribución geográfica de los aeropuertos, se visualizan los límites de los países europeos junto con la ubicación de los aeropuertos.
world <- ne_countries(scale = "medium", returnclass = "sf")
europe <- world[world$continent == "Europe", ]
ggplot() +
geom_sf(data = europe, fill = "white", color = "gray") +
geom_sf(data = aeropuertos_shp, color = "blue", size = 0.3) + # Reducción del tamaño de los puntos
ggtitle("Número de aeropuertos en Europa") +
coord_sf(xlim = c(-25, 60), ylim = c(25, 70), expand = FALSE)
Este mapa inicial nos permite identificar visualmente la concentración de aeropuertos y será útil para detectar anomalías y decidir sobre los criterios de limpieza de datos.
Observaciones clave del mapa:
Densidad de Aeropuertos: Se observa una mayor densidad de aeropuertos en Europa occidental, particularmente en países como Alemania, Francia y el Reino Unido. Esta alta concentración puede estar asociada a mayores poblaciones y una más desarrollada infraestructura de transporte.
Distribución Geográfica: Los aeropuertos están notablemente menos densos en Europa del Este y en regiones más al norte, como Escandinavia. Esto podría reflejar diferencias en densidad poblacional y desarrollo económico.
Anomalías: Notablemente, hay puntos visualizados fuera de los límites geográficos de Europa, en regiones como Medio Oriente y partes de Asia y África del Norte. Esto puede ser resultado de errores en los datos o inclusiones de aeropuertos no europeos, y representa una anomalía importante que requiere corrección.
Discrepancia en los Datos: La comparación de los 2,847 registros presentes en la base de datos con los 223 aeropuertos que operan actualmente en Europa, destaca significativas inconsistencias. Esta disparidad sugiere que la base de datos puede contener entradas duplicadas, valores ausentes (NA) y errores de localización, lo que subraya la urgente necesidad de realizar una limpieza exhaustiva de los datos.
Tratamiento
Para garantizar la calidad y relevancia de los datos utilizados en el análisis, se realizaron varios pasos esenciales de limpieza de la base de datos.
-
Detección y eliminación de duplicados
Primero, se eliminaron todas las entradas duplicadas para asegurar la unicidad de cada registro. Este proceso se llevó a cabo utilizando la función
distinct()
de la libreríadplyr
, sin encontrar duplicados en la base de datos. Se obtuvieron 0 duplicaciones por lo que no fue necesario eliminar ninguna observación. -
Detección y eliminación de NA
Posteriormente, se identificaron y eliminaron los registros con valores NA, reduciendo el número inicial de 2,847 observaciones a 804.
-
Selección de las columnas importantes
Se seleccionaron las columnas más relevantes para el análisis, enfocándonos en identificadores de aeropuerto, códigos de país, coordenadas y ciudades; pasando de 25 variables a 6.
-
Eliminación de los aeropuertos fuera de Europa
Para centrar el análisis en Europa, se eliminaron las observaciones de aeropuertos que no se encontraban dentro del continente. Se ajustó el sistema de referencia de coordenadas (CRS) de los aeropuertos para alinearlo con el de los datos europeos y se realizó una intersección para identificar y eliminar los aeropuertos fuera de Europa.
crs_europa <- st_crs(europe) aeropuertos_shp <- st_transform(aeropuertos_shp, crs_europa) indices_in_europe <- st_intersects(aeropuertos_shp, europe, sparse = FALSE) %>% apply(1, any) aeropuertos_fuera_europa <- aeropuertos_shp[!indices_in_europe, ] conteo_aeropuertos_por_pais_fuera_europa <- aeropuertos_fuera_europa %>% group_by(CNTR_CODE) %>% summarize(conteo = n(), .groups = 'drop') print(conteo_aeropuertos_por_pais_fuera_europa)
Simple feature collection with 21 features and 2 fields Geometry type: GEOMETRY Dimension: XY Bounding box: xmin: -68.70316 ymin: 17.9043 xmax: 72.79333 ymax: 78.24609 Geodetic CRS: WGS 84 # A tibble: 21 × 3 CNTR_CODE conteo geometry <chr> <int> <GEOMETRY [°]> 1 BL 1 POINT (-62.84441 17.9043) 2 CY 3 MULTIPOINT ((33.62558 34.87712), (32.48689 34.71735), (32.9… 3 DE 7 MULTIPOINT ((8.90167 54.15333), (8.532991 54.68306), (7.914… 4 DK 2 MULTIPOINT ((14.75943 55.06342), (9.793151 54.96282)) 5 EL 8 MULTIPOINT ((19.91179 39.60588), (20.7729 38.92987), (20.50… 6 ES 4 MULTIPOINT ((-15.38527 27.93393), (-17.88643 27.81453), (-5… 7 FI 1 POINT (24.58397 65.7808) 8 FR 5 MULTIPOINT ((7.214367 43.6589), (0.08925595 49.53317), (-1.… 9 GG 2 MULTIPOINT ((-2.215412 49.7067), (-2.60197 49.43496)) 10 GI 1 POINT (-5.347131 36.15101) # ℹ 11 more rows
Se indentificaron 122 observaciones fuera del continente europeo. Entre estos, destacaron 14 aeropuertos en territorios ultramarinos de Francia, 4 en España, 11 en Alemania y 15 en Grecia, entre otros.
aeropuertos_en_europa <- aeropuertos_shp[indices_in_europe, ] aeropuertos_shp <- aeropuertos_en_europa
Finalmente, se filtraron y retuvieron únicamente las observaciones dentro de los límites geográficos de Europa, reduciendo el total de 804 a 682 observaciones válidas.
Output
Después de un exhaustivo proceso de limpieza y validación de la base de datos de aeropuertos, hemos logrado una notable mejora en la calidad y precisión de la información. Al comparar los gráficos antes y después de la limpieza, se observa una reducción significativa en el número de aeropuertos, pasando de 2,847 observaciones iniciales a 682 observaciones finales.
Análisis Comparativo de los Gráficos:
-
Antes de la Limpieza: El gráfico inicial mostraba una densidad excesivamente alta de puntos en Francia y en otras partes de Europa, lo que no correspondía a la cantidad real de aeropuertos operativos. Esto sugirió la presencia de datos duplicados, erróneos o irrelevantes.
leaflet() %>% addProviderTiles(providers$CartoDB.Positron) %>% addPolygons(data = europe, color = "#444444", weight = 1, fillOpacity = 0.5) %>% addCircleMarkers(data = aeropuertos_shp, radius = 0.3, color = "blue", fillOpacity = 1) %>% setView(lng = 15, lat = 50, zoom = 4)
Después de la Limpieza: El gráfico actualizado muestra una distribución más realista y homogénea de los aeropuertos en Europa. Se eliminaron las observaciones erróneas, y ahora el mapa refleja una visión más precisa del panorama aeroportuario europeo.
Consideraciones y Reflexiones Finales:
Aunque el número de aeropuertos en la base de datos limpiada, 682, sigue siendo superior a los 223 aeropuertos registrados oficialmente, este valor es considerablemente más cercano al esperado. La diferencia puede atribuirse a la inclusión en la base de datos de pistas de aterrizaje de avionetas o helicópteros, y aeródromos, que técnicamente también cuentan como instalaciones aeroportuarias aunque no operen vuelos comerciales regulares.
Para refinar aún más la base de datos, sería necesario revisar cada una de las observaciones restantes, verificando el código ICAO para determinar si corresponden a aeropuertos principales, aeródromos o helipuertos. Este paso adicional permitiría alinear aún más la base de datos con el número oficial de aeropuertos y garantizaría que solo se incluyan instalaciones pertinentes a estudios de tráfico aéreo y planificación infraestructural.
Generación del fichero
Para concluir, los datos obtenidos se han guardado en formato gpkg para facilitar su acceso y uso, quedando disponibles aquí.
sf::st_write(aeropuertos_en_europa, "AerEuropa.gpkg")
Proyecto de Innovación Educativa Emergente (PIEE-2737007)