Contexto
El paquete nycflights13 contiene información sobre
todos los vuelos que partieron desde New York (EWR, JFK y LGA) a
destinos en los Estados Unidos en 2013. Fueron 336,776 vuelos en total.
Para ayudar a comprender las causas de los retrasos, también incluye
otros conjuntos de datos útiles.
Fuente:
Origen
de los datos
Este paquete incluye las siguientes tablas:
- flights = todos los vuelos que salieron de NY en 2013.
- weather = datos meteorológicos por hora de cada aeropuerto.
- planes = información de contrucción de cada avión.
- airports = nombres y ubicaciones de aeropuertos.
- airlines = relación entre nombres y códigos de las aerolineas.
Instalar paquetes y llamar
librerÃas
# install.packages("nycflights13")
library(nycflights13)
# install.packages("tidyverse")
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.0 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# library(dplyr)
library(dplyr)
Funciones básicas de manejo de
datos
Select
La función select sirve para seleccionar las columnas de una
tabla (data frame).
df1 <- flights %>% select(carrier, flight) # Selección de columnas especÃficas
df2 <- flights %>% select(carrier:distance) # Selección de rango
df3 <- flights %>% select(-carrier, -flight) # Eliminar columnas especÃficas
df4 <- flights %>% select(-carrier:-distance) # Eliminar rango de columnas
df5 <- flights %>% select(aerolinea = carrier) # Selecciona una columna y le cambia el nombre
df6 <- flights %>% rename(aerolinea = carrier) # Cambia el nombre de una columna de toda la base de datos
Filter
La función Filter sirve para seleccionar renglones de una
tabla (Data frame).
df7 <- flights %>% filter(dep_delay >=500) # Extrae renglonas que cumplan condición
# Igual ==, Desigual =!=, Mayor que >, Mayor o igual que >=, Menor que <, Menor o igual que <=
# Operadores lógicos: AND &, OR |, NOT !
df8 <- flights %>% filter(dep_delay >=500, dep_delay <600) # Estrae renglones que cumplan con dos condiciones
df9 <- flights %>% slice(1000:1099) # Extrae los números de los renglones indicados, sin importar sus valores
Distinct
La función Distinct sirve para eliminar renglones
duplicados.
df10 <- distinct(flights) # Dejar sólo los renglones diferentes, borra todos los repetidos.
Merge
La función Merge sirve para juntar bases de datos.
bdgrande <- merge (flights, airlines, by="carrier")
bdgrande2 <- merge (bdgrande, planes, by="tailnum")
Mutate
df11 <- mutate(bdgrande2, dist_km = distance*1.609) # Agrega variables nuevas calculadas a partir de variables existentes en la base de datos.
# 1.609 es conversión de millas a km
Ejercicios
- Encuentra todos los vuelos que tuvieron un atraso en llegada de 2
horas o más.
ejercicio1 <- bdgrande2 %>% filter(arr_delay >= 120)
- Encuentra todos los vuelos que llegaron a Houston (IAH / HOU)
ejercicio2 <- bdgrande2 %>% filter(dest == "IAH" | dest == "HOU")
- Encuentra todos los vuelos operados por United, American o
Delta.
ejercicio3 <- bdgrande2 %>% filter(carrier %in% c("UA", "AA", "DL"))
- Encuentra todos los vuelos que despegaron en Julio, Agosto o
Septiembre.
ejercicio4 <- bdgrande2 %>% filter(month %in% c("7", "8", "9"))
- Encuentra todos los vuelos que arrivaron más de 2 horas tarde, pero
no despegaron tarde.
ejercicio5 <- bdgrande2 %>% filter(arr_delay >= 120, dep_delay <= 0)
- Encuentra todos los vuelos que se retrasaron al menos 1 hora, pero
que llegaron antes 30 minutos o más.
ejercicio6 <- bdgrande2 %>% filter(dep_delay >= 60, arr_delay <= -30)
- Encuentra todos los vuelos que salieron entre la medianoche y las 6
a.m.
ejercicio7 <- bdgrande2 %>% filter(dep_time == 2400 | dep_time <= 600)
Arrange
Similar a filter() pero en lugar de seleccionar renglones, los ordena
de menor a mayor.
df11 <- arrange(bdgrande2, year.x, month, day)
Para acomodar de mayor a menor:
df12 <- arrange(bdgrande2, year.x, desc(month), day)
Summarize
Colapsa una tabla a un sólo renglón.
# Obtén el retraso promedio de despegue de todos los vuelos.
summarize(bdgrande2, mean(dep_delay, na.rm=TRUE))
## mean(dep_delay, na.rm = TRUE)
## 1 13.17979
Group by
Agrupa tabla basado en algunas columnas.
por_dia <- group_by(bdgrande2, year.x, month, day)
summarize(por_dia, mean(dep_delay, na.rm=TRUE))
## `summarise()` has grouped output by 'year.x', 'month'. You can override using
## the `.groups` argument.
## # A tibble: 365 × 4
## # Groups: year.x, month [12]
## year.x month day `mean(dep_delay, na.rm = TRUE)`
## <int> <int> <int> <dbl>
## 1 2013 1 1 10.7
## 2 2013 1 2 14.4
## 3 2013 1 3 11.1
## 4 2013 1 4 10.0
## 5 2013 1 5 5.70
## 6 2013 1 6 7.98
## 7 2013 1 7 6.49
## 8 2013 1 8 3.10
## 9 2013 1 9 3.17
## 10 2013 1 10 1.89
## # ℹ 355 more rows
Retraso de aviones
Por qué los aviones llegan tarde y como se puede evitar esto
df13 <- flights %>% select(dep_delay, arr_delay)
ggplot() +
geom_point(mapping = aes(x = dep_delay, y = arr_delay), data = df13) +
geom_point(
mapping = aes(x = dep_delay, y = arr_delay), data = df13,
colour = 'pink', size = 1
)
## Warning: Removed 9430 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9430 rows containing missing values or values outside the scale range
## (`geom_point()`).

LS0tCnRpdGxlOiAiRGF0YSBXcmFuZ2xpbmcgKFBhcnRlIDEpIgphdXRob3I6ICJBbmEgUGF1bGEgQWx2ZWFyIC0gQTAxMDI3NzE0IgpkYXRlOiAiMjAyNC0wMi0xOSIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIHRoZW1lOiB5ZXRpCi0tLQoKIVtdKC9Vc2Vycy9hbmFwYXVhbHZlYXIvRGVza3RvcC9TNjBNLmdpZikKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBmdWNoc2lhOyI+Q29udGV4dG88L3NwYW4+CkVsIHBhcXVldGUgKipueWNmbGlnaHRzMTMqKiBjb250aWVuZSBpbmZvcm1hY2nDs24gc29icmUgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgcGFydGllcm9uIGRlc2RlIE5ldyBZb3JrIChFV1IsIEpGSyB5IExHQSkgYSBkZXN0aW5vcyBlbiBsb3MgRXN0YWRvcyBVbmlkb3MgZW4gMjAxMy4gRnVlcm9uIDMzNiw3NzYgdnVlbG9zIGVuIHRvdGFsLiBQYXJhIGF5dWRhciBhIGNvbXByZW5kZXIgbGFzIGNhdXNhcyBkZSBsb3MgcmV0cmFzb3MsIHRhbWJpw6luIGluY2x1eWUgb3Ryb3MgY29uanVudG9zIGRlIGRhdG9zIMO6dGlsZXMuIAoKRnVlbnRlOiAgCltPcmlnZW4gZGUgbG9zIGRhdG9zXShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvbnljZmxpZ2h0czEzL255Y2ZsaWdodHMxMy5wZGYpCgpFc3RlIHBhcXVldGUgaW5jbHV5ZSBsYXMgc2lndWllbnRlcyB0YWJsYXM6IAoKKyBmbGlnaHRzID0gdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgc2FsaWVyb24gZGUgTlkgZW4gMjAxMy4gICAKKyB3ZWF0aGVyID0gZGF0b3MgbWV0ZW9yb2zDs2dpY29zIHBvciBob3JhIGRlIGNhZGEgYWVyb3B1ZXJ0by4gICAKKyBwbGFuZXMgPSBpbmZvcm1hY2nDs24gZGUgY29udHJ1Y2Npw7NuIGRlIGNhZGEgYXZpw7NuLiAgCisgYWlycG9ydHMgPSBub21icmVzIHkgdWJpY2FjaW9uZXMgZGUgYWVyb3B1ZXJ0b3MuICAgCisgYWlybGluZXMgPSByZWxhY2nDs24gZW50cmUgbm9tYnJlcyB5IGPDs2RpZ29zIGRlIGxhcyBhZXJvbGluZWFzLiAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBmdWNoc2lhOyI+SW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hczwvc3Bhbj4KYGBge3J9CiMgaW5zdGFsbC5wYWNrYWdlcygibnljZmxpZ2h0czEzIikKbGlicmFyeShueWNmbGlnaHRzMTMpCiMgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikKbGlicmFyeSh0aWR5dmVyc2UpCiMgbGlicmFyeShkcGx5cikKbGlicmFyeShkcGx5cikKYGBgCgoKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBmdWNoc2lhOyI+R3VhcmRhciBiYXNlIGRlIGRhdG9zPC9zcGFuPgpgYGB7cn0KZmxpZ2h0cyA8LSBmbGlnaHRzCndlYXRoZXIgPC0gd2VhdGhlcgpwbGFuZXMgPC0gcGxhbmVzCmFpcnBvcnRzIDwtIGFpcnBvcnRzCmFpcmxpbmVzIDwtIGFpcmxpbmVzCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IGZ1Y2hzaWE7Ij5SZWxhY2nDs24gZW50cmUgbGFzIGJhc2VzIGRlIGRhdG9zPC9zcGFuPgoKIVtdKC9Vc2Vycy9hbmFwYXVhbHZlYXIvRGVza3RvcC9yZWxhdGlvbmFsLW55Y2ZsaWdodHMucG5nKQoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IGZ1Y2hzaWE7Ij5GdW5jaW9uZXMgYsOhc2ljYXMgZGUgbWFuZWpvIGRlIGRhdG9zPC9zcGFuPgoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBwaW5rOyI+U2VsZWN0PC9zcGFuPgpMYSBmdW5jacOzbiAqc2VsZWN0KiBzaXJ2ZSBwYXJhIHNlbGVjY2lvbmFyIGxhcyBjb2x1bW5hcyBkZSB1bmEgdGFibGEgKCpkYXRhIGZyYW1lKikuICAKYGBge3J9CmRmMSA8LSBmbGlnaHRzICU+JSBzZWxlY3QoY2FycmllciwgZmxpZ2h0KSAjIFNlbGVjY2nDs24gZGUgY29sdW1uYXMgZXNwZWPDrWZpY2FzCmRmMiA8LSBmbGlnaHRzICU+JSBzZWxlY3QoY2FycmllcjpkaXN0YW5jZSkgIyBTZWxlY2Npw7NuIGRlIHJhbmdvCmRmMyA8LSBmbGlnaHRzICU+JSBzZWxlY3QoLWNhcnJpZXIsIC1mbGlnaHQpICMgRWxpbWluYXIgY29sdW1uYXMgZXNwZWPDrWZpY2FzCmRmNCA8LSBmbGlnaHRzICU+JSBzZWxlY3QoLWNhcnJpZXI6LWRpc3RhbmNlKSAjIEVsaW1pbmFyIHJhbmdvIGRlIGNvbHVtbmFzCmRmNSA8LSBmbGlnaHRzICU+JSBzZWxlY3QoYWVyb2xpbmVhID0gY2FycmllcikgIyBTZWxlY2Npb25hIHVuYSBjb2x1bW5hIHkgbGUgY2FtYmlhIGVsIG5vbWJyZQpkZjYgPC0gZmxpZ2h0cyAlPiUgcmVuYW1lKGFlcm9saW5lYSA9IGNhcnJpZXIpICMgQ2FtYmlhIGVsIG5vbWJyZSBkZSB1bmEgY29sdW1uYSBkZSB0b2RhIGxhIGJhc2UgZGUgZGF0b3MKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHBpbms7Ij5GaWx0ZXI8L3NwYW4+CkxhIGZ1bmNpw7NuICpGaWx0ZXIqIHNpcnZlIHBhcmEgc2VsZWNjaW9uYXIgcmVuZ2xvbmVzIGRlIHVuYSB0YWJsYSAoKkRhdGEgZnJhbWUqKS4gIApgYGB7cn0KZGY3IDwtIGZsaWdodHMgJT4lIGZpbHRlcihkZXBfZGVsYXkgPj01MDApICMgRXh0cmFlIHJlbmdsb25hcyBxdWUgY3VtcGxhbiBjb25kaWNpw7NuCiMgSWd1YWwgPT0sIERlc2lndWFsID0hPSwgTWF5b3IgcXVlID4sIE1heW9yIG8gaWd1YWwgcXVlID49LCBNZW5vciBxdWUgPCwgTWVub3IgbyBpZ3VhbCBxdWUgPD0KIyBPcGVyYWRvcmVzIGzDs2dpY29zOiBBTkQgJiwgT1IgfCwgTk9UICEKZGY4IDwtIGZsaWdodHMgJT4lIGZpbHRlcihkZXBfZGVsYXkgPj01MDAsIGRlcF9kZWxheSA8NjAwKSAjIEVzdHJhZSByZW5nbG9uZXMgcXVlIGN1bXBsYW4gY29uIGRvcyBjb25kaWNpb25lcyAKZGY5IDwtIGZsaWdodHMgJT4lIHNsaWNlKDEwMDA6MTA5OSkgIyBFeHRyYWUgbG9zIG7Dum1lcm9zIGRlIGxvcyByZW5nbG9uZXMgaW5kaWNhZG9zLCBzaW4gaW1wb3J0YXIgc3VzIHZhbG9yZXMKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHBpbms7Ij5EaXN0aW5jdDwvc3Bhbj4KTGEgZnVuY2nDs24gKkRpc3RpbmN0KiBzaXJ2ZSBwYXJhIGVsaW1pbmFyIHJlbmdsb25lcyBkdXBsaWNhZG9zLiAgCmBgYHtyfQpkZjEwIDwtIGRpc3RpbmN0KGZsaWdodHMpICMgRGVqYXIgc8OzbG8gbG9zIHJlbmdsb25lcyBkaWZlcmVudGVzLCBib3JyYSB0b2RvcyBsb3MgcmVwZXRpZG9zLgpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcGluazsiPk1lcmdlPC9zcGFuPgpMYSBmdW5jacOzbiAqTWVyZ2UqIHNpcnZlIHBhcmEganVudGFyIGJhc2VzIGRlIGRhdG9zLiAgCmBgYHtyfQpiZGdyYW5kZSA8LSBtZXJnZSAoZmxpZ2h0cywgYWlybGluZXMsIGJ5PSJjYXJyaWVyIikKYmRncmFuZGUyIDwtIG1lcmdlIChiZGdyYW5kZSwgcGxhbmVzLCBieT0idGFpbG51bSIpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBwaW5rOyI+TXV0YXRlPC9zcGFuPgpgYGB7cn0KZGYxMSA8LSBtdXRhdGUoYmRncmFuZGUyLCBkaXN0X2ttID0gZGlzdGFuY2UqMS42MDkpICMgQWdyZWdhIHZhcmlhYmxlcyBudWV2YXMgY2FsY3VsYWRhcyBhIHBhcnRpciBkZSB2YXJpYWJsZXMgZXhpc3RlbnRlcyBlbiBsYSBiYXNlIGRlIGRhdG9zLgojIDEuNjA5IGVzIGNvbnZlcnNpw7NuIGRlIG1pbGxhcyBhIGttCmBgYAoKIyMgIDxzcGFuIHN0eWxlPSJjb2xvcjogcGluazsiPkVqZXJjaWNpb3M8L3NwYW4+CjEuIEVuY3VlbnRyYSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSB0dXZpZXJvbiB1biBhdHJhc28gZW4gbGxlZ2FkYSBkZSAyIGhvcmFzIG8gbcOhcy4KYGBge3J9CmVqZXJjaWNpbzEgPC0gYmRncmFuZGUyICU+JSBmaWx0ZXIoYXJyX2RlbGF5ID49IDEyMCkKYGBgCgoyLiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgbGxlZ2Fyb24gYSBIb3VzdG9uIChJQUggLyBIT1UpCmBgYHtyfQplamVyY2ljaW8yIDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyKGRlc3QgPT0gIklBSCIgfCBkZXN0ID09ICJIT1UiKQpgYGAKCjMuIEVuY3VlbnRyYSB0b2RvcyBsb3MgdnVlbG9zIG9wZXJhZG9zIHBvciBVbml0ZWQsIEFtZXJpY2FuIG8gRGVsdGEuIApgYGB7cn0KZWplcmNpY2lvMyA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihjYXJyaWVyICVpbiUgYygiVUEiLCAiQUEiLCAiREwiKSkKYGBgCgo0LiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgZGVzcGVnYXJvbiBlbiBKdWxpbywgQWdvc3RvIG8gU2VwdGllbWJyZS4gIApgYGB7cn0KZWplcmNpY2lvNCA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihtb250aCAlaW4lIGMoIjciLCAiOCIsICI5IikpCmBgYAo1LiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgYXJyaXZhcm9uIG3DoXMgZGUgMiBob3JhcyB0YXJkZSwgcGVybyBubyBkZXNwZWdhcm9uIHRhcmRlLiAgCmBgYHtyfQplamVyY2ljaW81IDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyKGFycl9kZWxheSA+PSAxMjAsIGRlcF9kZWxheSA8PSAwKQpgYGAKNi4gRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3MgcXVlIHNlIHJldHJhc2Fyb24gYWwgbWVub3MgMSBob3JhLCBwZXJvIHF1ZSBsbGVnYXJvbiBhbnRlcyAzMCBtaW51dG9zIG8gbcOhcy4gIApgYGB7cn0KZWplcmNpY2lvNiA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihkZXBfZGVsYXkgPj0gNjAsIGFycl9kZWxheSA8PSAtMzApCmBgYAoKNy4gRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3MgcXVlIHNhbGllcm9uIGVudHJlIGxhIG1lZGlhbm9jaGUgeSBsYXMgNiBhLm0uIApgYGB7cn0KZWplcmNpY2lvNyA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihkZXBfdGltZSA9PSAyNDAwIHwgZGVwX3RpbWUgPD0gNjAwKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcGluazsiPkFycmFuZ2U8L3NwYW4+ClNpbWlsYXIgYSBmaWx0ZXIoKSBwZXJvIGVuIGx1Z2FyIGRlIHNlbGVjY2lvbmFyIHJlbmdsb25lcywgbG9zIG9yZGVuYSBkZSBtZW5vciBhIG1heW9yLiAgCmBgYHtyfQpkZjExIDwtIGFycmFuZ2UoYmRncmFuZGUyLCB5ZWFyLngsIG1vbnRoLCBkYXkpCmBgYAoKUGFyYSBhY29tb2RhciBkZSBtYXlvciBhIG1lbm9yOiAgCmBgYHtyfQpkZjEyIDwtIGFycmFuZ2UoYmRncmFuZGUyLCB5ZWFyLngsIGRlc2MobW9udGgpLCBkYXkpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBwaW5rOyI+U3VtbWFyaXplPC9zcGFuPgpDb2xhcHNhIHVuYSB0YWJsYSBhIHVuIHPDs2xvIHJlbmdsw7NuLiAgCmBgYHtyfQojIE9idMOpbiBlbCByZXRyYXNvIHByb21lZGlvIGRlIGRlc3BlZ3VlIGRlIHRvZG9zIGxvcyB2dWVsb3MuCnN1bW1hcml6ZShiZGdyYW5kZTIsIG1lYW4oZGVwX2RlbGF5LCBuYS5ybT1UUlVFKSkKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHBpbms7Ij5Hcm91cCBieTwvc3Bhbj4KQWdydXBhIHRhYmxhIGJhc2FkbyBlbiBhbGd1bmFzIGNvbHVtbmFzLiAgCmBgYHtyfQpwb3JfZGlhIDwtIGdyb3VwX2J5KGJkZ3JhbmRlMiwgeWVhci54LCBtb250aCwgZGF5KQpzdW1tYXJpemUocG9yX2RpYSwgbWVhbihkZXBfZGVsYXksIG5hLnJtPVRSVUUpKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogZGVlcHBpbms7Ij5SZXRyYXNvIGRlIGF2aW9uZXM8L3NwYW4+ClBvciBxdcOpIGxvcyBhdmlvbmVzIGxsZWdhbiB0YXJkZSB5IGNvbW8gc2UgcHVlZGUgZXZpdGFyIGVzdG8KCmBgYHtyfQpkZjEzIDwtIGZsaWdodHMgJT4lIHNlbGVjdChkZXBfZGVsYXksIGFycl9kZWxheSkKZ2dwbG90KCkgKwogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGVwX2RlbGF5LCB5ID0gYXJyX2RlbGF5KSwgZGF0YSA9IGRmMTMpICsKICBnZW9tX3BvaW50KAogICAgbWFwcGluZyA9IGFlcyh4ID0gZGVwX2RlbGF5LCB5ID0gYXJyX2RlbGF5KSwgZGF0YSA9IGRmMTMsCiAgICBjb2xvdXIgPSAncGluaycsIHNpemUgPSAxCiAgKQpgYGAKCgo=