Análise Exploratória de Atrasos e Cancelamentos de Voos Comerciais

1 Introdução

1.1 Declaração do Problema

O transporte aéreo desempenha papel fundamental na mobilidade de pessoas e mercadorias. Entretanto, atrasos e cancelamentos de voos representam desafios operacionais que afetam passageiros, companhias aéreas e aeroportos.

O problema central investigado neste projeto é:

Quais fatores estão mais associados aos atrasos e cancelamentos de voos comerciais?

Compreender esses padrões pode auxiliar companhias aéreas e gestores aeroportuários na identificação de gargalos operacionais e na melhoria da eficiência operacional.

1.2 Abordagem Adotada

Para responder a essa questão será utilizado o conjunto de dados Flight Delays Dataset, disponível publicamente na plataforma Kaggle.

O projeto utiliza três conjuntos de dados:

  • flights.csv
  • airlines.csv
  • airports.csv

A metodologia empregada será composta por:

  1. Preparação dos dados;
  2. Integração das tabelas;
  3. Análise exploratória;
  4. Extração de insights.

1.3 Técnica Proposta

A análise será conduzida inteiramente em R utilizando o ecossistema tidyverse.

Serão empregadas as seguintes técnicas:

  • Análise univariada;
  • Análise bivariada;
  • Criação de variáveis derivadas;
  • Integração de múltiplas tabelas;
  • Visualizações gráficas e interativas.

1.4 Utilidade para os Clientes

Os resultados desta análise poderão auxiliar:

  • Companhias aéreas;
  • Administradores aeroportuários;
  • Passageiros;
  • Pesquisadores da área de transporte.

2 Pacotes Requeridos

library(tidyverse)
library(readr)
library(dplyr)
library(ggplot2)
library(lubridate)
library(plotly)
library(DT)
library(janitor)
library(skimr)
library(knitr)
library(kableExtra)
library(naniar)

3 Preparação dos Dados

3.1 Fonte dos Dados

O conjunto de dados utilizado neste projeto é o Flight Delays Dataset, disponível publicamente na plataforma Kaggle:

https://www.kaggle.com/datasets/usdot/flight-delays

O conjunto é composto por três arquivos:

  • flights.csv
  • airlines.csv
  • airports.csv

3.2 Descrição dos Dados Originais

O conjunto de dados possui informações reais sobre voos comerciais realizados nos Estados Unidos.

As tabelas utilizadas possuem as seguintes finalidades:

flights.csv

Contém informações sobre os voos realizados, incluindo horários, atrasos, cancelamentos, aeroportos de origem e destino e companhia aérea.

airlines.csv

Contém os códigos e nomes das companhias aéreas.

airports.csv

Contém informações dos aeroportos utilizados nos voos.

Algumas peculiaridades importantes identificadas:

  • Os dados estão distribuídos em múltiplas tabelas.
  • Existem códigos IATA que precisam ser traduzidos.
  • Existem valores ausentes relacionados a atrasos e cancelamentos.
  • Datas e horários estão separados em múltiplas colunas.
  • Será necessária a criação de variáveis derivadas para facilitar as análises.

3.3 Importação dos Dados

airlines <- read_csv("airlines.csv")
## Rows: 14 Columns: 2
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): IATA_CODE, AIRLINE
## 
## ℹ 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.
airports <- read_csv("airports.csv")
## Rows: 322 Columns: 7
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): IATA_CODE, AIRPORT, CITY, STATE, COUNTRY
## dbl (2): LATITUDE, LONGITUDE
## 
## ℹ 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.
flights <- read_csv("flights.csv")
## Rows: 5819079 Columns: 31
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (11): AIRLINE, TAIL_NUMBER, ORIGIN_AIRPORT, DESTINATION_AIRPORT, SCHEDUL...
## dbl (20): YEAR, MONTH, DAY, DAY_OF_WEEK, FLIGHT_NUMBER, DEPARTURE_DELAY, TAX...
## 
## ℹ 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.

Os três conjuntos de dados foram importados com sucesso para o ambiente R. A tabela flights.csv representa a base principal do projeto, enquanto airlines.csv e airports.csv serão utilizadas para complementar as análises por meio da integração dos dados.

dim(airlines)
## [1] 14  2
dim(airports)
## [1] 322   7
dim(flights)
## [1] 5819079      31

3.4 Estrutura dos Dados

glimpse(airlines)
## Rows: 14
## Columns: 2
## $ IATA_CODE <chr> "UA", "AA", "US", "F9", "B6", "OO", "AS", "NK", "WN", "DL", …
## $ AIRLINE   <chr> "United Air Lines Inc.", "American Airlines Inc.", "US Airwa…
glimpse(airports)
## Rows: 322
## Columns: 7
## $ IATA_CODE <chr> "ABE", "ABI", "ABQ", "ABR", "ABY", "ACK", "ACT", "ACV", "ACY…
## $ AIRPORT   <chr> "Lehigh Valley International Airport", "Abilene Regional Air…
## $ CITY      <chr> "Allentown", "Abilene", "Albuquerque", "Aberdeen", "Albany",…
## $ STATE     <chr> "PA", "TX", "NM", "SD", "GA", "MA", "TX", "CA", "NJ", "AK", …
## $ COUNTRY   <chr> "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA…
## $ LATITUDE  <dbl> 40.65236, 32.41132, 35.04022, 45.44906, 31.53552, 41.25305, …
## $ LONGITUDE <dbl> -75.44040, -99.68190, -106.60919, -98.42183, -84.19447, -70.…
glimpse(flights)
## Rows: 5,819,079
## Columns: 31
## $ YEAR                <dbl> 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 20…
## $ MONTH               <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ DAY                 <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ DAY_OF_WEEK         <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,…
## $ AIRLINE             <chr> "AS", "AA", "US", "AA", "AS", "DL", "NK", "US", "A…
## $ FLIGHT_NUMBER       <dbl> 98, 2336, 840, 258, 135, 806, 612, 2013, 1112, 117…
## $ TAIL_NUMBER         <chr> "N407AS", "N3KUAA", "N171US", "N3HYAA", "N527AS", …
## $ ORIGIN_AIRPORT      <chr> "ANC", "LAX", "SFO", "LAX", "SEA", "SFO", "LAS", "…
## $ DESTINATION_AIRPORT <chr> "SEA", "PBI", "CLT", "MIA", "ANC", "MSP", "MSP", "…
## $ SCHEDULED_DEPARTURE <chr> "0005", "0010", "0020", "0020", "0025", "0025", "0…
## $ DEPARTURE_TIME      <chr> "2354", "0002", "0018", "0015", "0024", "0020", "0…
## $ DEPARTURE_DELAY     <dbl> -11, -8, -2, -5, -1, -5, -6, 14, -11, 3, -6, -8, 0…
## $ TAXI_OUT            <dbl> 21, 12, 16, 15, 11, 18, 11, 13, 17, 12, 12, 21, 18…
## $ WHEELS_OFF          <chr> "0015", "0014", "0034", "0030", "0035", "0038", "0…
## $ SCHEDULED_TIME      <dbl> 205, 280, 286, 285, 235, 217, 181, 273, 195, 221, …
## $ ELAPSED_TIME        <dbl> 194, 279, 293, 281, 215, 230, 170, 249, 193, 203, …
## $ AIR_TIME            <dbl> 169, 263, 266, 258, 199, 206, 154, 228, 173, 186, …
## $ DISTANCE            <dbl> 1448, 2330, 2296, 2342, 1448, 1589, 1299, 2125, 14…
## $ WHEELS_ON           <chr> "0404", "0737", "0800", "0748", "0254", "0604", "0…
## $ TAXI_IN             <dbl> 4, 4, 11, 8, 5, 6, 5, 8, 3, 5, 4, 7, 4, 5, 4, 4, 4…
## $ SCHEDULED_ARRIVAL   <chr> "0430", "0750", "0806", "0805", "0320", "0602", "0…
## $ ARRIVAL_TIME        <chr> "0408", "0741", "0811", "0756", "0259", "0610", "0…
## $ ARRIVAL_DELAY       <dbl> -22, -9, 5, -9, -21, 8, -17, -10, -13, -15, -30, -…
## $ DIVERTED            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ CANCELLED           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ CANCELLATION_REASON <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ AIR_SYSTEM_DELAY    <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ SECURITY_DELAY      <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ AIRLINE_DELAY       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ LATE_AIRCRAFT_DELAY <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ WEATHER_DELAY       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…

3.5 Principais Desafios dos Dados

Durante a análise preliminar foram identificados alguns desafios importantes:

  • Integração entre três tabelas distintas;
  • Presença de códigos IATA que exigem tradução para nomes de aeroportos e companhias aéreas;
  • Existência de valores ausentes em variáveis relacionadas aos atrasos;
  • Necessidade de conversão de horários armazenados como texto;
  • Criação de variáveis derivadas para análises temporais;
  • Volume elevado de dados, superior a cinco milhões de registros.