Modelo Entidad-Relación

Lo primero que haremos, será consultar y explorar el data frame planes y weather para recordar su contenido. Función: View()

view(planes)
view(weather)
view(airlines)
view(flights)
Después, para cada vuelo, visualizaremos la aerolínea, el aeropuerto de origen, el aeropuerto destino y el nombre de la aerolínea, el cuál importaremos de airlines. Esto, con ayuda de la función left_join().
r vuelos <- flights%>% select(flight,carrier,origin,dest)%>% left_join(airlines, by = "carrier") head(vuelos)
## # A tibble: 6 x 5 ## flight carrier origin dest name ## <int> <chr> <chr> <chr> <chr> ## 1 1545 UA EWR IAH United Air Lines Inc. ## 2 1714 UA LGA IAH United Air Lines Inc. ## 3 1141 AA JFK MIA American Airlines Inc. ## 4 725 B6 JFK BQN JetBlue Airways ## 5 461 DL LGA ATL Delta Air Lines Inc. ## 6 1696 UA EWR ORD United Air Lines Inc.

Después agruparemos la base de datos por aerolínea e identificaremos cuáles son los destinos más buscados para cada una de ellas. Para hacer más sencillo este análisis, importaremos los nombres de cada carrier de la tabla airlines.

Al ordenar los datos por orden descendente, podemos darnos cuenta que la aerolínea Delta y el destino Atlanta representaron el mayor número de vuelos. En el caso de American Airlines apreció 2 veces y los destinos más recurrentes fueron Dallas y Miami


popular_dest <- flights%>%
  group_by(dest, carrier)%>%
  count(dest, name= "cantidad_vuelos")%>%
left_join(airlines, by = "carrier")%>%
  arrange(desc(cantidad_vuelos))
head(popular_dest)
## # A tibble: 6 x 4
## # Groups:   dest, carrier [6]
##   dest  carrier cantidad_vuelos name                  
##   <chr> <chr>             <int> <chr>                 
## 1 ATL   DL                10571 Delta Air Lines Inc.  
## 2 CLT   US                 8632 US Airways Inc.       
## 3 DFW   AA                 7257 American Airlines Inc.
## 4 MIA   AA                 7234 American Airlines Inc.
## 5 ORD   UA                 6984 United Air Lines Inc. 
## 6 IAH   UA                 6924 United Air Lines Inc.

Después, viusualizaremos las aerolíneas y destinos que vuelan en distintos horarios, clasificándolos por: Mañana (de 6 a 12), Tarde (de 12 a 19) , Noche (19 a 24) y Madrugada de (24 a 6) con ayuda de la funcion mutate(), ifelse() y nuevamente left_join() para visualizar el nombre de cada aerolínea.


horarios <- flights %>%
  select(carrier, dest, sched_dep_time)%>%
  left_join(airlines, by = "carrier")%>%
  mutate (horario_takeoff= ifelse(sched_dep_time < 600, "Madrugada", ifelse(sched_dep_time < 1200, "Mañana", ifelse(sched_dep_time < 1900,"Tarde","Noche"))))
head(horarios)
## # A tibble: 6 x 5
##   carrier dest  sched_dep_time name                   horario_takeoff
##   <chr>   <chr>          <int> <chr>                  <chr>          
## 1 UA      IAH              515 United Air Lines Inc.  Madrugada      
## 2 UA      IAH              529 United Air Lines Inc.  Madrugada      
## 3 AA      MIA              540 American Airlines Inc. Madrugada      
## 4 B6      BQN              545 JetBlue Airways        Madrugada      
## 5 DL      ATL              600 Delta Air Lines Inc.   Mañana         
## 6 UA      ORD              558 United Air Lines Inc.  Madrugada

Posteriormente, se agruparan los datos por aerolínea y destino con la función group_by() y añadiremos otra columna, con la función count() para identificar la cantidad de vuelos que hay hay por la Mañana, Tarde, Noche y Madrugada. Por último, ordenaremos de forma descendente.

A partir de estos resultados, podemos darnos cuenta que la mayoría de vuelos se realizan en la tarde o en la mañana, independientemente de cuál sea la aerolínea


airline_horarios <- horarios%>%
  group_by(carrier, dest, horario_takeoff)%>%
  count(horario_takeoff, name= "num_vuelos")%>%
  arrange(desc(num_vuelos))
head(airline_horarios)
## # A tibble: 6 x 4
## # Groups:   carrier, dest, horario_takeoff [6]
##   carrier dest  horario_takeoff num_vuelos
##   <chr>   <chr> <chr>                <int>
## 1 DL      ATL   Tarde                 4967
## 2 DL      ATL   Mañana                4520
## 3 US      CLT   Mañana                4253
## 4 US      CLT   Tarde                 4028
## 5 AA      DFW   Tarde                 3850
## 6 UA      ORD   Tarde                 3394
Después, sobre el dataframe anterior, seleccionaremos las columnas que nos interesan y filtraremos para que nos arroje únicamnete la aerolínea American Airlines y los vuelos de madrugada con la función filter()
Lo que podemos identificar aquí es que para la aerolínea American Airlines, solamente hay un destino que tiene vuelos en la madrugada. Este es Miami, el cual mencionamos ya, es un destino frecuente y observando la tabla anterior, podemos darnos cuenta de que se realizaron bastantes vuelos. Específicimante: 3378
A pesar de que solo es 1 destino, es importante considerarlo porque son pocas las aerolíneas que realizan vuelos en la madrugada
___
r AA_madrugada <- airline_horarios%>% select(carrier,dest,horario_takeoff)%>% filter(carrier == "AA", horario_takeoff== "Madrugada") head(AA_madrugada)
## # A tibble: 1 x 3 ## # Groups: carrier, dest, horario_takeoff [1] ## carrier dest horario_takeoff ## <chr> <chr> <chr> ## 1 AA MIA Madrugada

Después generaremos un dataframe nuevo, uniendo los datos de flights y planes por medio de la columna tailnum para saber la aerolínea, tipo, motor, número de asientos y cuántos vuelos se han realizado con cada uno. con ayuda de las funciones left_join(), select(), filter(), group_by(), count()

A partir de esto, podemos notar que hay aviones a los que se les saca mucho provecho, como lo es el N328AA, que realiza incluso más de un vuelo al día, sin embargo, existen otros que durante el periodo de un año realizaron muy pocos vuelos, lo cuál probablemente le esté costando más a la empresa (tenerlos estacionados que volando), por lo tanto, vuelos como el N536 AA, que solo realizo 4 vuelos, deberían ser desocontinuados.


AA_aviones <- flights%>%
  left_join(planes, by= "tailnum") %>%
  select(carrier, tailnum, type, engine, seats)%>%
  filter(carrier == "AA") %>%
  group_by(tailnum, carrier, type, engine, seats)%>%
  count(name= "num_vuelos_por_avión")%>%
  na.omit()%>%
  arrange(desc(num_vuelos_por_avión))
head(AA_aviones)
## # A tibble: 6 x 6
## # Groups:   tailnum, carrier, type, engine, seats [6]
##   tailnum carrier type                    engine    seats num_vuelos_por_avión
##   <chr>   <chr>   <chr>                   <chr>     <int>                <int>
## 1 N328AA  AA      Fixed wing multi engine Turbo-fan   255                  393
## 2 N338AA  AA      Fixed wing multi engine Turbo-fan   255                  388
## 3 N327AA  AA      Fixed wing multi engine Turbo-fan   255                  387
## 4 N335AA  AA      Fixed wing multi engine Turbo-fan   255                  385
## 5 N323AA  AA      Fixed wing multi engine Turbo-fan   255                  357
## 6 N319AA  AA      Fixed wing multi engine Turbo-fan   255                  354

Después crearemos un nuevo dataframe donde se filtren los aviones que sumen menos de 52 vuelos.

Mi propuesta, para poder eliminar aviones es descartar todo aquel que no cumpla con un mínimo de un vuelo a la semana, ya que podrían causar problemas de rentabilidad


aviones_eliminar <- AA_aviones%>%
  filter(num_vuelos_por_avión<52)
aviones_eliminar
## # A tibble: 130 x 6
## # Groups:   tailnum, carrier, type, engine, seats [130]
##    tailnum carrier type                   engine       seats num_vuelos_por_avi…
##    <chr>   <chr>   <chr>                  <chr>        <int>               <int>
##  1 N473AA  AA      Fixed wing multi engi… Turbo-fan      172                  51
##  2 N520AA  AA      Fixed wing single eng… Reciprocati…     2                  51
##  3 N556AA  AA      Fixed wing multi engi… Turbo-fan      172                  51
##  4 N591AA  AA      Fixed wing multi engi… Turbo-fan      172                  51
##  5 N593AA  AA      Fixed wing multi engi… Turbo-fan      172                  51
##  6 N475AA  AA      Fixed wing multi engi… Turbo-fan      172                  50
##  7 N476AA  AA      Fixed wing multi engi… Turbo-fan      172                  50
##  8 N573AA  AA      Fixed wing multi engi… Turbo-fan      172                  50
##  9 N589AA  AA      Fixed wing multi engi… Turbo-fan      172                  50
## 10 N594AA  AA      Fixed wing multi engi… Turbo-fan      172                  50
## # … with 120 more rows
#filtrar menores a 52

Visualización de datos

Con la herramienta geom_point de ggplot, realizamos un Scatterplot de los tiempos de retraso. En el eje Y tenemos los datos de arr_delay y en el eje X los de dep_delay.

La gráfica nos permite observar que cuando ocurre un retraso en la salida, se genera un retraso directamente proporcional en la llegada y que el retraso más común se da en un rango 0 a 250 minutos.
___

AA_retrasos <- flights%>%
  filter(carrier == "AA")
ggplot(AA_retrasos, mapping = aes(x= dep_delay, y = arr_delay)) + geom_point(size=.4, color="#37AFFF", fill="#37AFFF")
## Warning: Removed 782 rows containing missing values (geom_point).

___

Para la siguiente gráfica, se tuvo que genarar un nuevo dataframe, donde solamente se contuvieran los datos de los primero días de enero y los promedios que registraron de temperatura.

Después de esto, se generó una visualización de ggplot con una gráfica de línea. Con esto, podemos observar que la temparetura duranteesos días fue en aumento. ___

clima_enero <- weather%>%
  select(origin, month, day, temp)%>%
  filter(origin== "EWR", month==1, day <= 15)%>%
  group_by(day)%>%
  mutate(avg= mean(temp))

gráfica_linea <- ggplot(clima_enero, mapping= aes(x=day, y= avg))+ geom_line (color="#185DF2")
gráfica_linea

____

Para la siguiente gráfica, retomaremos el dtaframe construido en el paso anterior y generaremos un histograma.

De acuerdo a la gráfica, podemos observar que la temperatura más frecuente en los primeros 15 días del mes de Enero, fue de 37 a 38.


histograma_clima <- ggplot(clima_enero, mapping = aes(x = temp)) + geom_histogram(color="#185DF2", fill="#67CBFF")
histograma_clima
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

___

Después, tomando los datos contenidos en weather, podemos utilizar facets para observar cómo varía la temperatura en cada mes en él histograma del punto anterior.

A través de esto, podmeos identificar que los meses con temperaturas más altas son Agosto y Julio, mientras que los que presentan temperaturas más bajas son Enero y Diciembre.


facets_clima <- ggplot(data = weather, mapping = aes(x = temp)) + geom_histogram(color="#185DF2", fill="#67CBFF") + facet_wrap("month")
facets_clima
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 1 rows containing non-finite values (stat_bin).

___

Para esta visualización, es necesario hacer un nuevo dataframe, en el que se agrupen los datos por carrier, se contabilice el número de vuelos, se ordene de manera descendiente y se excluyan a los 10 mejores. Una vez generado esto, podemos hacer una visualización por medio de una gráfica de barras.

Al observar la gráfica de barras, podemos dranos cuenta que la aerolínea con más vuelos fue United Airlines y que AA se encuentra dentro del top 10 y más específicamente dentro de los primeros 5 carriers.


top_aerolineas <- flights%>%
  group_by(carrier) %>%
  count(name= "num_vuelos") %>%
  arrange(desc(num_vuelos)) %>%
  head(10)
          
gráfica_barras <- ggplot(top_aerolineas, aes(x=carrier, num_vuelos, fill =carrier))+ geom_bar(stat = "identity") 
gráfica_barras

___

En la siguiente gráfica, podemos observar exactamente los mismos resultados, solamente que ahora en un formato de gráfica pie.


gráfica_pie <- ggplot(data = top_aerolineas, mapping = aes(x = "carrier", y = num_vuelos, fill = carrier)) + geom_bar(stat = "identity") + coord_polar( theta = "y")
gráfica_pie

___

Para unir airports con flights, se debe relacionar la columna faa (de airports) con la columna dest (de flights) con ayuda de la función left_join.


flights_air <- flights %>%
  left_join(airports, by = c("dest" = "faa"))
flights_air
## # A tibble: 336,776 x 26
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # … with 336,766 more rows, and 18 more variables: arr_delay <dbl>,
## #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>,
## #   name <chr>, lat <dbl>, lon <dbl>, alt <dbl>, tz <dbl>, dst <chr>,
## #   tzone <chr>

Por último, crearemos un nuevo dataframe con únicamente con los 5 carriers con más vuelos por destino. Esto lo haremos agrupando por carrier con la función gropu_by(), después añadiremos una colunma que contabilice el número de vuelos y que se llamará count y para terminar ordenaremos de manera descendente y solamente nos quedaremos con los primeros 5 renglones.

Lo que podemos observar de esta tabla, es que los 2 destinos más recurrentes de AA son Miami y Dallas Forth


air_f<- flights_air %>%
  group_by(carrier, dest) %>%
  count( name="count") %>%
  arrange(desc(count))
air_f
## # A tibble: 314 x 3
## # Groups:   carrier, dest [314]
##    carrier dest  count
##    <chr>   <chr> <int>
##  1 DL      ATL   10571
##  2 US      CLT    8632
##  3 AA      DFW    7257
##  4 AA      MIA    7234
##  5 UA      ORD    6984
##  6 UA      IAH    6924
##  7 UA      SFO    6819
##  8 B6      FLL    6563
##  9 B6      MCO    6472
## 10 AA      ORD    6059
## # … with 304 more rows
top_5 <- air_f%>%  
  head(5)
top_5
## # A tibble: 5 x 3
## # Groups:   carrier, dest [5]
##   carrier dest  count
##   <chr>   <chr> <int>
## 1 DL      ATL   10571
## 2 US      CLT    8632
## 3 AA      DFW    7257
## 4 AA      MIA    7234
## 5 UA      ORD    6984

Con los datos del top_5 podemos generar una visualización de barras con la función geom_col y ver los resultados gráficamente.

A partir de esto, podemos darnos cuenta de que el hecho de que Amnerican Airlines cuente con 2 destinos frecuentes, lo posiciona mejor que a sus competidores, que si bien tienen muchos vuelos, se limitan a 1 destino


gráfica <- ggplot(top_5, mapping = aes(x = carrier, y = count, fill = dest)) + geom_col()
gráfica

___ Con los datos del top_5 podemos generar una visualización de barras separadas con la función geom_col

Con esta gráfica, podemos confirmar lo anterior. Si separaramos por destino, el acumulado de vuelos de American Airlines estaría por debajo de los de Delta y US Airways. ___

ggplot(top_5, mapping = aes(x = carrier, y = count, fill = dest)) + geom_col(stat = "identity", position = "dodge")
## Warning: Ignoring unknown parameters: stat

___ Con los datos del top_5 podemos generar una visualización de facets con la función geom_col y facet_grid()

Con esta tabla, podemos identificar que ninguna aerolínea cuenta con el mismo destino frecuente, lo cual nos indica que todas han sabido definir su propio mercado y alejarse de la competencia.


ggplot(top_5, mapping = aes(x = carrier, y = count, fill = dest)) + geom_col() + facet_grid("dest")

___ ### Concluciones

Compromiso ético y ciudadano

• Describe el valor de la integridad.

La Integridad deriva del adjetivo integer, el cual significa intacto y no tocado o no alcanzado por un mal. Por lo tanto, algo integro, se refiere a lago bueno y realicado sin dobles intenciones. En una persona, la integridad se refiere a alguien educado y responsable en sus acciones. Alguien en que se puede confiar y cuyas acciones sabemos serán correctas. La integridad está fuertemente ligada a nuestra moral…el valor que tiene la integridad en nosotros y como nos perciben otros es inmenso.

Una persona debe aspirar a mantener su integridad y alinearse a su moral a lo largo de toda su vida y en todo lo que realice.

• Agrega una reflexión personal de cómo puedes actuar con respeto y honestidad en los negocios y en el uso de datos cuando realices análisis de datos y estés en contacto con los datos de una empresa.

Al estar en contacto con los datos de una empresa, los datos se deben analizar con apego a la realidad. Siempre debe ser primordial el no generar modificaciones a nuestra conveniencia y generar información falsa o érronea. Del mismo modo, es de vital importancia tratar con estricta confidencialidad cualquier cosa que se nos proporcione ya que representan un activo muy grande de las compañías y en manos de la competencia podrían ser utilizados con malicia.

Por lo tanto,siempre que se travbaje con datos reales se debe cuidar su tarto y apegarse a nuestros valores, perservando la integridad personal y profesional.

• Agrega al menos 3 bibliografías y cítalas en el punto anterior. Lynn, J. (2020). Gestión de datos de investigación: Privacidad de los datos y confidencialidad. Retrieved 14 March 2021, from https://biblioguias.cepal.org/c.php?g=495473&p=4398114

Raffino, M. (2020). Integridad - Concepto, clasificación, valores y ejemplos. Retrieved 14 March 2021, from https://concepto.de/integridad/

Significado de Integridad. (2016). Retrieved 14 March 2021, from https://www.significados.com/integridad/