Trabajo con la base de datos de aterrizajes y despegues año 2025 “Aterrizajes y despegues procesados por la Administración Nacional de Aviación Civil (ANAC) en el año 2025”, disponible en el portal de [datos.gob.ar] (https://datos.gob.ar/dataset/transporte-aterrizajes-despegues-procesados-por-administracion-nacional-aviacion-civil-anac/archivo/transporte_0706775f-bed9-46e7-aac5-726d7e72e429)

datos <- read_delim("C:/DANIELA 2020/CURSOS/Calidad de datos SADIO/tarea 1/202505-informe-ministerio_actualiz.csv",  delim = ";", escape_double = FALSE, trim_ws = TRUE)
## Rows: 242687 Columns: 12
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr  (9): Fecha UTC, Clase de Vuelo (todos los vuelos), Clasificación Vuelo,...
## dbl  (2): Pasajeros, PAX
## time (1): Hora UTC
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
 datos_limpios <- clean_names(datos, case = "snake")
    names(datos)
##  [1] "Fecha UTC"                         "Hora UTC"                         
##  [3] "Clase de Vuelo (todos los vuelos)" "Clasificación Vuelo"              
##  [5] "Tipo de Movimiento"                "Aeropuerto"                       
##  [7] "Origen / Destino"                  "Aerolinea Nombre"                 
##  [9] "Aeronave"                          "Pasajeros"                        
## [11] "PAX"                               "Calidad dato"

Vemos las estructura y la distribución básica de los datos

skim(datos_limpios)
Data summary
Name datos_limpios
Number of rows 242687
Number of columns 12
_______________________
Column type frequency:
character 9
difftime 1
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
fecha_utc 0 1 8 9 0 151 0
clase_de_vuelo_todos_los_vuelos 0 1 7 38 0 9 0
clasificacion_vuelo 0 1 9 13 0 2 0
tipo_de_movimiento 0 1 8 10 0 2 0
aeropuerto 0 1 3 3 0 47 0
origen_destino 0 1 3 4 0 896 0
aerolinea_nombre 0 1 1 79 0 686 0
aeronave 0 1 1 24 0 571 0
calidad_dato 0 1 10 10 0 2 0

Variable type: difftime

skim_variable n_missing complete_rate min max median n_unique
hora_utc 0 1 0 secs 86340 secs 15:18:00 1440

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
pasajeros 0 1 85.76 78.73 0 0 88 153 370 ▇▆▅▁▁
pax 0 1 56.82 64.35 0 0 45 83 370 ▇▃▁▁▁

A revisar:

  • Poner los nombres de las variable mejor: sin espacio, si caracters especiales, todo en minúscula y la fecha con tipo Date

    datos_limpios <- datos_limpios %>%
      mutate(fecha_utc = dmy(fecha_utc)) %>% 
       mutate(across(c( clase_de_vuelo_todos_los_vuelos, 
                        clasificacion_vuelo,
                         tipo_de_movimiento, 
                         aeropuerto,
                         origen_destino,
                         aerolinea_nombre,
                         aeronave, calidad_dato), ~ clean_values(as.character(.))))
  • Analizo los valores de las variables categóricas de las variables categóricas

  1. La variable tipo de aeronvae, tiene 571 valore distintos y la qjuinta parte son 0. Elimino esta variable que no nos da información
datos_limpios = datos_limpios %>% select (-aeronave)
  1. Variables que parecen OK
clase_de_vuelo_todos_los_vuelos n percent
no_regular 18642 7.7%
regular 148981 61.4%
trabajo_aereo 984 0.4%
vuelo_de_adiestramiento 1235 0.5%
vuelo_escuela 32194 13.3%
vuelo_oficial_extranjero 177 0.1%
vuelo_oficial_nacional 9207 3.8%
vuelo_privado_con_matricula_extranjera 2122 0.9%
vuelo_privado_con_matricula_nacional 29145 12.0%
datos_limpios %>%
  tabyl(clase_de_vuelo_todos_los_vuelos) %>%
  adorn_pct_formatting() %>%
  kable(col.names = c("Clase", "Frecuencia", "Porcentaje")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Clase Frecuencia Porcentaje
no_regular 18642 7.7%
regular 148981 61.4%
trabajo_aereo 984 0.4%
vuelo_de_adiestramiento 1235 0.5%
vuelo_escuela 32194 13.3%
vuelo_oficial_extranjero 177 0.1%
vuelo_oficial_nacional 9207 3.8%
vuelo_privado_con_matricula_extranjera 2122 0.9%
vuelo_privado_con_matricula_nacional 29145 12.0%
# Lista de variables categóricas a tabular
vars_categoricas <- c("clase_de_vuelo_todos_los_vuelos",
                      "clasificacion_vuelo",
                      "tipo_de_movimiento",
                      "calidad_dato",
                      "aeropuerto")

Frecuencia de: clase_de_vuelo_todos_los_vuelos

clase_de_vuelo_todos_los_vuelos n percent
no_regular 18642 7.7%
regular 148981 61.4%
trabajo_aereo 984 0.4%
vuelo_de_adiestramiento 1235 0.5%
vuelo_escuela 32194 13.3%
vuelo_oficial_extranjero 177 0.1%
vuelo_oficial_nacional 9207 3.8%
vuelo_privado_con_matricula_extranjera 2122 0.9%
vuelo_privado_con_matricula_nacional 29145 12.0%

Frecuencia de: clasificacion_vuelo

clasificacion_vuelo n percent
domestico 190181 78.4%
internacional 52506 21.6%

Frecuencia de: tipo_de_movimiento

tipo_de_movimiento n percent
aterrizaje 120601 49.7%
despegue 122086 50.3%

Frecuencia de: calidad_dato

calidad_dato n percent
definitivo 146548 60.4%
provisorio 96139 39.6%

Frecuencia de: aeropuerto

aeropuerto n percent
aer 58515 24.1%
bar 7819 3.2%
bca 1711 0.7%
cat 1078 0.4%
cba 11423 4.7%
chp 2225 0.9%
crr 1944 0.8%
crv 2991 1.2%
dil 110 0.0%
doz 10546 4.3%
dry 1544 0.6%
eca 3940 1.6%
esq 1221 0.5%
eze 31108 12.8%
fdo 16477 6.8%
fsa 540 0.2%
gal 2303 0.9%
goy 34 0.0%
gpi 771 0.3%
gra 1294 0.5%
igu 5472 2.3%
jua 1116 0.5%
juj 2020 0.8%
lar 588 0.2%
mdp 3279 1.4%
mlg 255 0.1%
mor 23287 9.6%
neu 6782 2.8%
osa 1034 0.4%
pal 1255 0.5%
par 1627 0.7%
pos 2777 1.1%
ros 4817 2.0%
rta 1111 0.5%
ryd 322 0.1%
sal 8952 3.7%
sde 1721 0.7%
sis 1238 0.5%
sra 4429 1.8%
svo 1752 0.7%
trc 495 0.2%
tre 1639 0.7%
trh 220 0.1%
tuc 3626 1.5%
uis 845 0.3%
usu 3943 1.6%
vie 491 0.2%
  • La variable aeropuerto tiene 47 valores distintos. Quizás luego habría que agregar otro variables que la agrupe por país, o si nos quedamos con los vuelos domésticos, por ciudad.

  • Si bien dice que no hay valores faltantes, hay varios que tienen 0 y otros que dicen “provisorio”. Ver si se pueden retirar o imputar, sin sesgar. Analizamos los datos:

a=datos_limpios %>%
  group_by(calidad_dato) %>%
  summarise(
    across(where(is.numeric), list(media = mean, sd = sd), na.rm = TRUE),
 #   across(where(is.character), ~paste(unique(.), collapse = ", "))
  )
## Warning: There was 1 warning in `summarise()`.
## ℹ In argument: `across(where(is.numeric), list(media = mean, sd = sd), na.rm =
##   TRUE)`.
## ℹ In group 1: `calidad_dato = "definitivo"`.
## Caused by warning:
## ! The `...` argument of `across()` is deprecated as of dplyr 1.1.0.
## Supply arguments directly to `.fns` through an anonymous function instead.
## 
##   # Previously
##   across(a:b, mean, na.rm = TRUE)
## 
##   # Now
##   across(a:b, \(x) mean(x, na.rm = TRUE))
ggplot(datos_limpios %>% filter(pax<200), aes(x = calidad_dato, y = pax)) +
  geom_boxplot() +
  theme_minimal()

ggplot(datos_limpios , aes(x = calidad_dato, y = pasajeros)) +
  geom_boxplot() +
  theme_minimal()

datos_limpios %>%
  tabyl(calidad_dato, clase_de_vuelo_todos_los_vuelos) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting()
calidad_dato no_regular regular trabajo_aereo vuelo_de_adiestramiento vuelo_escuela vuelo_oficial_extranjero vuelo_oficial_nacional vuelo_privado_con_matricula_extranjera vuelo_privado_con_matricula_nacional
definitivo 7.5% 63.9% 0.6% 0.5% 12.3% 0.1% 3.3% 0.8% 10.9%
provisorio 7.9% 57.6% 0.1% 0.5% 14.7% 0.1% 4.5% 0.9% 13.7%
datos_limpios %>%
  tabyl(calidad_dato, clasificacion_vuelo) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting()
calidad_dato domestico internacional
definitivo 77.8% 22.2%
provisorio 79.3% 20.7%
datos_limpios %>%
  tabyl(calidad_dato, tipo_de_movimiento) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting()
calidad_dato aterrizaje despegue
definitivo 49.7% 50.3%
provisorio 49.7% 50.3%
datos_limpios %>%
  tabyl(calidad_dato, aeropuerto) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting()
calidad_dato aer bar bca cat cba chp crr crv dil doz dry eca esq eze fdo fsa gal goy gpi gra igu jua juj lar mdp mlg mor neu osa pal par pos ros rta ryd sal sde sis sra svo trc tre trh tuc uis usu vie
definitivo 24.0% 3.9% 0.7% 0.4% 4.8% 1.2% 0.7% 1.2% 0.0% 4.2% 0.6% 1.9% 0.7% 14.0% 5.3% 0.2% 0.9% 0.0% 0.3% 0.5% 2.4% 0.4% 0.9% 0.2% 1.5% 0.1% 9.2% 2.7% 0.4% 0.5% 0.6% 1.1% 2.0% 0.3% 0.2% 3.5% 0.7% 0.5% 1.8% 0.6% 0.2% 0.7% 0.1% 1.5% 0.4% 2.0% 0.2%
provisorio 24.3% 2.2% 0.8% 0.5% 4.6% 0.5% 1.0% 1.3% 0.0% 4.5% 0.6% 1.2% 0.2% 11.0% 9.0% 0.2% 1.1% 0.0% 0.3% 0.5% 2.1% 0.5% 0.8% 0.3% 1.2% 0.1% 10.1% 3.0% 0.5% 0.6% 0.8% 1.2% 2.0% 0.6% 0.1% 4.0% 0.8% 0.6% 1.9% 0.8% 0.2% 0.6% 0.1% 1.5% 0.3% 1.0% 0.2%

Las distribuciones son similares: entonces retiramos los datos “provisorios”

datos_limpios = datos_limpios %>% filter(calidad_dato=="definitivo")