1
resposta

Minha solução para analisando distribuição dos dados

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()
1 resposta

Boa tarde, Paulo! Como está?

Incrível! Continue resolvendo os desafios e compartilhando com a comunidade Alura.

Notei que você aplicou um ajuste de largura usando a regra de Freedman–Diaconis para representar distribuições com mais precisão, utilizou de forma eficaz o boxplot com linha de média para destacar medidas centrais e compreendeu a importância do kde=True nos gráficos para visualizar a densidade das distribuições.

Um próximo passo interessante seria explorar o parâmetro multiple='stack' no histplot para comparar múltiplas distribuições empilhadas. Veja o exemplo:

sns.histplot(data=dados, x='delay', hue='schengen', multiple='stack', binwidth=10, palette='muted')
plt.title('Atraso por Tipo de Voo (Empilhado)')
plt.xlabel('Atraso (minutos)')
plt.ylabel('Número de Voos')
plt.tight_layout()
plt.show()

Isso permite comparar facilmente os grupos dentro de uma mesma variável contínua, o que pode ser muito útil para análises exploratórias.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!