refactor: nova métrica PAX/Dias_Operados para relevância de rotas

This commit is contained in:
2026-06-07 20:16:28 -03:00
parent ff8725dbed
commit f96dae3d9e
2 changed files with 114 additions and 90 deletions

View File

@@ -127,8 +127,13 @@ estatisticas_trechos = demanda_diaria_completa.groupby('Trecho').agg(
Dias_Operados=('PAX', lambda x: (x > 0).sum()) Dias_Operados=('PAX', lambda x: (x > 0).sum())
).reset_index() ).reset_index()
# Ordenar pelas rotas com maior número de dias operados # Nova métrica: PAX/Dias_Operados (evitando divisão por zero)
estatisticas_trechos = estatisticas_trechos.sort_values(by='Dias_Operados', ascending=False) estatisticas_trechos['Media_PAX_Dias_Operados'] = estatisticas_trechos.apply(
lambda row: row['Total_PAX'] / row['Dias_Operados'] if row['Dias_Operados'] > 0 else 0, axis=1
)
# Ordenar pelas rotas com maior Média PAX por dias operados
estatisticas_trechos = estatisticas_trechos.sort_values(by='Media_PAX_Dias_Operados', ascending=False)
# Definir número de trechos alvo # Definir número de trechos alvo
NUM_TRECHOS = 5 NUM_TRECHOS = 5
@@ -138,9 +143,9 @@ display(top_trechos)
# Gráfico # Gráfico
plt.figure(figsize=(10, 6)) plt.figure(figsize=(10, 6))
sns.barplot(data=top_trechos, x='Trecho', y='Dias_Operados', hue='Trecho', palette='viridis', legend=False) sns.barplot(data=top_trechos, x='Trecho', y='Media_PAX_Dias_Operados', hue='Trecho', palette='viridis', legend=False)
plt.title(f'Top {NUM_TRECHOS} Trechos Mais Relevantes (Por Dias Operados)') plt.title(f'Top {NUM_TRECHOS} Trechos Mais Relevantes (PAX / Dias Operados)')
plt.ylabel('Número de Dias Operados no Ano') plt.ylabel('Média de PAX por Dia Operado')
plt.xlabel('Trecho (Origem - Destino)') plt.xlabel('Trecho (Origem - Destino)')
plt.xticks(rotation=45) plt.xticks(rotation=45)
plt.tight_layout() plt.tight_layout()
@@ -186,7 +191,7 @@ for r in rotas_lista:
voos_requeridos = {} voos_requeridos = {}
for _, row in top_trechos.iterrows(): for _, row in top_trechos.iterrows():
# Arredondamento para cima da (demanda / capacidade) # Arredondamento para cima da (demanda / capacidade)
voos = math.ceil(row['Media_PAX_Diario'] / CAPACIDADE_C97) voos = math.ceil(row['Media_PAX_Dias_Operados'] / CAPACIDADE_C97)
# Pelo menos 1 voo para suprir a demanda da rota selecionada # Pelo menos 1 voo para suprir a demanda da rota selecionada
voos_requeridos[row['Trecho']] = max(1, voos) voos_requeridos[row['Trecho']] = max(1, voos)

File diff suppressed because one or more lines are too long