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
| 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
| hora_utc |
0 |
1 |
0 secs |
86340 secs |
15:18:00 |
1440 |
Variable type: numeric
| 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
- 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)
- Variables que parecen OK
| 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()
| 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()
| definitivo |
77.8% |
22.2% |
| provisorio |
79.3% |
20.7% |
datos_limpios %>%
tabyl(calidad_dato, tipo_de_movimiento) %>%
adorn_percentages("row") %>%
adorn_pct_formatting()
| definitivo |
49.7% |
50.3% |
| provisorio |
49.7% |
50.3% |
datos_limpios %>%
tabyl(calidad_dato, aeropuerto) %>%
adorn_percentages("row") %>%
adorn_pct_formatting()
| 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")