import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
sns.set(style="whitegrid", palette="pastel")
# Função para calcular o melhor bin com a regra de Freedman–Diaconis
def calcular_largura_bin(df, coluna):
Q75, Q25 = np.percentile(df[coluna], [75 ,25])
IQR = Q75 - Q25
largura_bin = 2 * IQR * np.power(len(df[coluna]), -1/3)
return largura_bin
# Histograma da hora de chegada
plt.figure(figsize=(9, 4))
largura_bin_at = calcular_largura_bin(dados, 'arrival_time')
sns.histplot(data=dados, x='arrival_time', kde=True, binwidth=largura_bin_at, color='skyblue')
plt.title('Distribuição da Hora de Chegada')
plt.xlabel('Hora de Chegada')
plt.ylabel('Número de Voos')
plt.tight_layout()
plt.show()
# Histograma da hora de saída
plt.figure(figsize=(9, 4))
largura_bin_dt = calcular_largura_bin(dados, 'departure_time')
sns.histplot(data=dados, x='departure_time', kde=True, binwidth=largura_bin_dt, color='salmon')
plt.title('Distribuição da Hora de Saída')
plt.xlabel('Hora de Saída')
plt.ylabel('Número de Voos')
plt.tight_layout()
plt.show()
# Boxplot e Histograma de Atrasos
mean_delay = dados['delay'].mean()
median_delay = dados['delay'].median()
fig, axes = plt.subplots(1, 2, figsize=(11, 5))
# Boxplot
sns.boxplot(data=dados, y='delay', ax=axes[0], color='lightgreen')
axes[0].set_title('Boxplot de Atraso')
axes[0].set_ylabel('Atraso (minutos)')
axes[0].axhline(y=mean_delay, color='r', linestyle='--', label=f'Média: {mean_delay:.1f} min')
axes[0].legend()
# Histograma de atraso
largura_bin_delay = calcular_largura_bin(dados, 'delay')
sns.histplot(data=dados, x='delay', ax=axes[1], kde=True, binwidth=largura_bin_delay, color='violet')
axes[1].set_title('Histograma de Atraso')
axes[1].set_xlabel('Atraso (minutos)')
axes[1].set_ylabel('Número de Voos')
axes[1].axvline(x=mean_delay, color='r', linestyle='--', label=f'Média: {mean_delay:.1f} min')
axes[1].axvline(x=median_delay, color='y', linestyle='--', label=f'Mediana: {median_delay:.1f} min')
axes[1].legend()
plt.tight_layout()
plt.show()