Introducción

El análisis de datos conlleva una manipulación de estos, por ello es común que se combinen tablas, bases de datos o matrices, pues es gracias a la comprobación de hipótesis que se puede dar respuesta a nuestras interrogantes. Existen distintos tipos de combinaciones, esto se debe a la localización de los datos a manipular, en nuestro análisis emplearemos left_join, la cual nos permite encontrar datos adicionales en otras tablas para completar nuestra tabla principal (Flights), estas otras tablas son, (airlines), (airport), (aircraft) y (weather). Durante el proceso haremos también uso de comandos como select(), rename() y ifelse() para conocer la relación de las variables, explicando a detalle su importancia en el análisis.

Desarrollo

1. Consulta los data frame Airlines, airports, y flights

# Cargar la librería
library(nycflights13)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ lubridate 1.9.2     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.0
## ✔ readr     2.1.4
## ── 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
# Visualizar las tablas en RStudio
View(airlines)
View(airports)
View(flights)

Usamos la función view para visualizar los data frames airlines, airports y flights.

2. Muestra por cada vuelo, el carrier, destino y tiempo de vuelo

vuelos <- flights %>%
  select(carrier, dest, air_time)
vuelos

Usamos la función select para mostrar de cada vuelo los campos carrier, destino y tiempo de vuelo.

3. Agrega el nombre del carrier a la consulta 2 y cambia el orden de los campos para que se vean Carrier, nombre del carrier, destino y tiempo de vuelo.

nombre_carrir <- vuelos %>%
  left_join(airlines, by  = "carrier" ) %>%
  select(carrier, name, dest, air_time)
nombre_carrir 

La función left_join, nos permite unir a la tabla con la que estamos trabajando en este caso (Flights), la columna de la variable (name), perteneciente a la tabla airlines, con la particularidad de mantener todos sus datos. Por último para poder organizar las columnas y tener una visualización más práctica, se seleccionaron las columnas, con el orden deseado.

4. Agrega el nombre del aeropuerto a cada destino en la consulta 3, observa que los campos en común para hacer la relación se llaman diferente. Observa como se agregan todos los campos del segundo data frame.

# Cambiar el nombre de la tabla 'airlines' a 'nombre_carrir'
nombre_carrir <- vuelos %>%
  left_join(airlines, by = "carrier") %>%
  select(carrier, name, dest, air_time)
nombre_carrir 
# Renombrar columna 'faa' a 'dest' en la tabla 'airports'
airports <- rename(airports, dest = faa)

# Realizar la operación de left_join entre 'nombre_carrir' y 'airports'
aeropuertos <- nombre_carrir %>%
  left_join(airports, by = "dest")
aeropuertos

Se encontró que el campo ‘faa’ dentro del data frame ‘airports’ tenía la misma información que el campo ‘dest’ dentro del data frame ‘airlines’, es por eso que utilizamos la función ‘rename’ ‘faa’ a ‘dest’. Y una vez hecho esto, utilizamos la función ‘left_join’ para juntar el data frame de ‘airlines’ con ‘airports’ con el campo ‘dest’ dentro de un nuevo data frame que se nombró ‘aeropuertos’

5. Observa como el nombre del Carrier se llama name.x, renombra por nombre_aerolinea y el nombre del aeropuerto destino se llama name.y, renombra por nombre_aeropuerto, esto sucede porque al relacionar los dos data frames hay dos campos con el mismo nombre, “name”.

aeropuertos <- rename(aeropuertos, nombre_aerolinea = name.x)
aeropuertos <- rename(aeropuertos, nombre_aeropuerto = name.y)
aeropuertos

En este paso, se encontró que había dos campos con el nombre ‘name’ pero que no contenían la misma información, por lo que se renombraron a ‘name.x’ y ‘name.y’. Con la función de ‘rename’ se logró renombrar el campo de ‘name.x’ a ‘nombre_aerolinea’ y ‘name.y’ a ‘nombre_aeropuertos’

6. Recordando que al relacionar 2 data frame con join_left, agrega todos los campos del segundo data frame al primero. Mostrar de la consulta anterior los campos Carrier, nombre_aerolinea, dest, nombre_aeropuerto, air_time, lat, lon y tzone.

# Seleccionar los campos especificados
campos_seleccionados <- aeropuertos %>%
  select(carrier, nombre_aerolinea, dest, nombre_aeropuerto, air_time, lat, lon, tzone)
campos_seleccionados

En este código, se realiza un left_join primero con la tabla “airports” usando “dest” como clave de unión y “faa” como columna correspondiente en “airports”. Luego, se seleccionan los campos necesarios en el orden deseado y se renombran las columnas para mayor claridad. Finalmente, se muestra el resultado con los campos especificados.

7. Encuentra los datos descriptivos del data frame anterior. Identifica el mínimo, la media y el máximo de los tiempos de vuelo.

# Calcular mínimo, media y máximo de los tiempos de vuelo
descriptivos_tiempo_vuelo <- campos_seleccionados %>%
  summarise(
    min_tiempo = min(air_time, na.rm = TRUE),
    mean_tiempo = mean(air_time, na.rm = TRUE),
    max_tiempo = max(air_time, na.rm = TRUE)
  )
descriptivos_tiempo_vuelo

Este código calcula y muestra en la consola los valores mínimo, medio y máximo de los tiempos de vuelo en el data frame, junto con sus respectivos etiquetas para claridad.

8. Utilizando el data frame generado en el paso 5, clasifica los vuelos por la distancia recorrida, agrega un nuevo campo con el nombre de clas_vuelo, coloca vuelo_largo, si la distancia recorrida está entre la media y el máximo de la distancia recorrida, y coloca vuelo_corto si la distancia recorrida está entre el mínimo y la media de la distancia recorrida.

# Calcular la media, mínimo y máximo de la distancia recorrida
media_distancia <- mean(campos_seleccionados$air_time, na.rm = TRUE)
min_distancia <- min(campos_seleccionados$air_time, na.rm = TRUE)
max_distancia <- max(campos_seleccionados$air_time, na.rm = TRUE)

# Crear una nueva columna 'clas_vuelo' basada en las condiciones
campos_seleccionados <- campos_seleccionados %>%
  mutate(clas_vuelo = ifelse(air_time >= media_distancia & air_time <= max_distancia, "vuelo_largo",
                             ifelse(air_time >= min_distancia & air_time < media_distancia, "vuelo_corto", NA)))
  
# Mostrar el data frame con la nueva columna
campos_seleccionados

En este código, se calcula la media, el mínimo y el máximo de la distancia recorrida (air_time) en el data frame. Luego, se utiliza la función mutate() para crear una nueva columna llamada clas_vuelo basada en las condiciones especificadas. Se utiliza la función ifelse() junto con las operaciones >=, <=, < y & para determinar si la distancia recorrida está dentro de los rangos definidos. La nueva columna tendrá valores “vuelo_largo” si está entre la media y el máximo de la distancia recorrida, y “vuelo_corto” si está entre el mínimo y la media de la distancia recorrida. Los vuelos que no cumplan ninguna de estas condiciones tendrán un valor NA en la columna. Finalmente, se muestra el data frame con la nueva columna agregada.

Conclusión

En este análisis, hemos explorado la combinación de distintas tablas de datos utilizando la librería nycflights13 en R. Mediante el uso de operaciones como left_join, select, rename y ifelse, hemos logrado enriquecer nuestro conjunto de datos principal (Flights) con información adicional de otras tablas como Airlines y Airports. Esto nos ha permitido obtener una visión más completa y detallada de los vuelos, sus compañías aéreas, destinos y características de los aeropuertos involucrados.

Al realizar la unión y manipulación de los datos, hemos destacado la importancia de entender las relaciones entre variables y cómo estas pueden influir en nuestros análisis. Además, hemos calculado estadísticas descriptivas sobre los tiempos de vuelo, como el mínimo, la media y el máximo, lo que nos brinda una idea general de la distribución de estos tiempos en nuestro conjunto de datos.

También hemos realizado una clasificación de los vuelos en “vuelo_largo” y “vuelo_corto” basándonos en los criterios de distancia recorrida. Esta categorización puede ayudarnos a identificar patrones de vuelos más largos o más cortos y a comprender mejor las relaciones entre los tiempos de vuelo y las distancias recorridas.