refactor: nova métrica PAX/Dias_Operados para relevância de rotas
This commit is contained in:
17
create_nb.py
17
create_nb.py
@@ -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)
|
||||||
|
|
||||||
|
|||||||
187
modelos.ipynb
187
modelos.ipynb
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user