Fragestellungen

Das Package nycflights13 enthält mehrere Datensätze:

Mit den Daten soll analysiert werden

Um die Daten analysieren zu können, müssen sie zunächst transformiert werden.

Vorbereiten der Daten

Laden der Libraries

library(tidyverse)
## Registered S3 methods overwritten by 'ggplot2':
##   method         from 
##   [.quosures     rlang
##   c.quosures     rlang
##   print.quosures rlang
## Registered S3 method overwritten by 'rvest':
##   method            from
##   read_xml.response xml2
## ── Attaching packages ──────────────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.1.1       ✔ purrr   0.3.2  
## ✔ tibble  2.1.1       ✔ dplyr   0.8.0.1
## ✔ tidyr   0.8.3       ✔ stringr 1.4.0  
## ✔ readr   1.3.1       ✔ forcats 0.4.0
## ── Conflicts ─────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(nycflights13)

Zusammenfügen der einzelnen Dataframes, hier Flights & Carrier

Anstatt das Ergebnis direkt anzuzeigen (also den Ausdruck in Klammern zu setzen), wird das Ergebnis erst einmal in einem Objekt gespeichert und dann die ersten 5 Zeilen ausgegeben (Befehl “head”). Hintergrund ist, dass ein nach HTML oder PDF exportiertes Notebook bei der Größe des Datensatzes einfach zu groß werden würde.

my_flights <- flights %>%
  left_join(airlines, by ="carrier") %>%
  rename(airline = name)
head(my_flights)

Flights & Airports

my_flights <- my_flights %>%
  left_join(airports, c("dest" = "faa")) %>%
  rename(airport = name)
head(my_flights)

Flights & Weather

my_flights <- my_flights %>%
  left_join(weather)
## Joining, by = c("year", "month", "day", "origin", "hour", "time_hour")
head(my_flights)

Flights & Planes

my_flights <- my_flights %>%
  left_join(planes, by = "tailnum")
head(my_flights)

Hier ist zu beachten, dass beide Datensätze die Variable “year” beinhalten. Beim Datensatz “flights” sagt uns “year” in welchem Jahr der Flug stattfindet, im Datensatz “planes” wann das Flugzeug gebaut wurde. R disambiguiert die beiden Variablen, indem sie einen Suffix erhalten (x und y)

Änderung der Temperatur von Fahrenheit auf Celsius

my_flights <- my_flights %>%
  mutate(temp_c = (temp-32)/1.8)
head(my_flights)

Warum sind Flüge zu spät?

Departure Delay vs Arrival Delay

my_flights %>%
  select(dep_delay,arr_delay) %>%
  filter(dep_delay > 10) %>%
  plot()

Offensichtlich schaffen es einige Flüge trotz geringem Departure Delay trotzdem ein viel höheres Arrival Delay aufzubauen. Die Korrelation ist hier klar erkennbar, sie wird aber dennoch noch einmal geprüft:

my_flights %>%
  select(dep_delay,arr_delay) %>%
  filter(dep_delay > 10) %>%
  filter(!is.na(dep_delay)) %>%
  filter(!is.na(arr_delay)) %>%
  cor()
##           dep_delay arr_delay
## dep_delay 1.0000000 0.9420843
## arr_delay 0.9420843 1.0000000

Abflugszeit

my_flights %>%
  select(dep_time,dep_delay) %>%
  plot()

my_flights %>%
  select(dep_time,dep_delay) %>%
  filter(!is.na(dep_time)) %>%
  filter(!is.na(dep_delay)) %>%
  cor()
##            dep_time dep_delay
## dep_time  1.0000000 0.2602312
## dep_delay 0.2602312 1.0000000

Interessant ist, dass die ersten Flüge morgens weniger Verspätung haben, und tatsächlich sehen wir hier eine schwache Korrelation.

Distanz

my_flights %>%
  select(distance,dep_delay) %>%
  plot()

Kein Zusammenhang erkennbar.

Flugzeit

my_flights %>%
  select(air_time,arr_delay) %>%
  plot()

Kein Zusammenhang erkennbar.

Humidity

my_flights %>%
  select(humid,dep_delay) %>%
  plot()