In [1]:
import pandas as pd
from collections.abc import Iterator, Iterable, Generator, Hashable
from collections import defaultdict, namedtuple
import re
import os
import datetime

from sqlalchemy.types import Integer, Text, DateTime, Float, VARCHAR
from sqlalchemy import Table, MetaData, Column
import itertools as it
import pickle
from tools import deco_logging
import numpy as np
# add tools funcs
from tools.func_abc import *

MHS_SHEET_NAME = 'PAR'
SHEET_DF = {}
DEFAULT_DATA_PATH = ('data\\')
EXCEL_DIR = 'data//EPlus_2025OTT Analysis.xlsx'
SHEEF_FOOT_SKIP_NUM = 0

log_ipy = deco_logging(user='jupyter')

1. DATA


In [4]:
arc_col = ['Origin', 'Destination', 'TypeIn', 'TypeOut', 'FltIn', 'FltOut', 
           'ULDIn', 'ULDOut', 'ALDT', 'AIBT', 'AUST', 'ASPT', 'AMDT', 'AMIT', 
           'AUOT', 'APUT', 'APLT', 'AUCT', 'AMOT', 'AMPT', 'ASDT', 'ALFT', 'AOBT', 'ATOT']
arc_col_select = ['ID', 'Origin', 'Destination', 'TypeIn', 'TypeOut', 'FltIn', 'FltOut',
                  'ULDIn', 'ULDOut', 'AMIT']

In [2]:
# df_to_pickle(df=arc_data_df, path_file=DEFAULT_DATA_PATH, file_name='arc.pkl')
# arc_pkl_data_df = pd.read_pickle('data\\arc.pkl')

In [11]:
# pd.to_pickle(obj=arc_pkl_data_df,path='data\\arc.xz', compression='xz')

In [2]:
arc_df = pd.read_pickle(path='data\\arc.xz', compression='xz')

In [5]:
selec_arc_df = arc_df.loc[:, arc_col_select]
selec_arc_df.sample(7)


Out[5]:
ID Origin Destination TypeIn TypeOut FltIn FltOut ULDIn ULDOut AMIT
260716 260716 SZX iBKK A A CSS100 INF15 ULD40657496 ULD40902393 2025-02-08 01:19:02
7619 7619 LAX TAO A A CSS56 CSS202 ULD39855559 ULD39897706 2025-02-07 21:14:18
166070 166070 SZX iHKG A A CSS97 INFVirtual HK2 ULD40527034 ULD40591668 2025-02-08 01:00:24
165121 165121 CAN S27 A L CSS3 CSSS278117 ULD40434416 ULD40638746 2025-02-08 00:54:36
94099 94099 S711 N20W L L CSSIPAir01 CSSN20W8050 CSSIPAir01 ULD40263095 2025-02-08 00:30:00
30447 30447 S711 N25W L L CSSIPE02 CSSN25W8026 CSSIPE02 ULD39888961 2025-02-07 22:40:00
137488 137488 SZX BKK A A CSS1041 CSS134 ULD40314564 ULD40645026 2025-02-08 00:44:32

In [6]:
selec_arc_df = arc_df.loc[:, arc_col_select]
flyid_uld_df = selec_arc_df.groupby(by=['TypeIn', 'FltIn']).ULDIn.apply(set).apply(len).to_frame()
flyid_uld_df = flyid_uld_df.reset_index()
flyid_uld_df = flyid_uld_df.rename_axis({'ULDIn': 'ULD_NUM'}, axis=1)
flyid_uld_df.sample(2)
# df_to_excel(df=flyid_uld_df, file_name='flyid_uld_con',sheet='flyid_uld_con')


Out[6]:
TypeIn FltIn ULD_NUM
78 A CSS89 12
110 L CSSIPAir08 1

In [11]:
selec_arc_df = arc_df.loc[:, arc_col_select]
uld_amit_par_df = selec_arc_df.groupby(by=['TypeIn', 'FltIn', 'ULDIn', 'AMIT']).ID.apply(set).apply(len).to_frame()
uld_amit_par_df = uld_amit_par_df.reset_index()
uld_amit_par_df = uld_amit_par_df.rename_axis({'ID': 'PAR_NUM'}, axis=1)
uld_amit_par_df = pd.merge(left=uld_amit_par_df, right=flyid_uld_df, on=['TypeIn', 'FltIn'], how='left')
uld_amit_par_sum_df = uld_amit_par_df.groupby(by=['TypeIn', 'FltIn']).PAR_NUM.sum().to_frame()
uld_amit_par_sum_df = uld_amit_par_sum_df.rename_axis({'PAR_NUM': 'PAR_SUM'}, axis=1)
uld_amit_par_sum_df = uld_amit_par_sum_df.reset_index()
uld_amit_par_df = pd.merge(left=uld_amit_par_df, right=uld_amit_par_sum_df, on=['TypeIn', 'FltIn'], how='left')
uld_amit_par_df.query("FltIn=='INF802'").head(15)
# pd.pivot_table(data=uld_df.head(14), index=['FltIn'], columns=['ID'], aggfunc=np.sum)
# df_to_excel(df=uld_amit_par_df, file_name='arc_uld_amit_par_con',sheet='arc_uld_amit_par_con')


Out[11]:
TypeIn FltIn ULDIn AMIT PAR_NUM ULD_NUM PAR_SUM
2208 A INF802 ULD39872614 2025-02-07 21:23:28 165 42 6783
2209 A INF802 ULD39872615 2025-02-07 21:23:16 164 42 6783
2210 A INF802 ULD39872616 2025-02-07 21:23:14 165 42 6783
2211 A INF802 ULD39872617 2025-02-07 21:23:02 163 42 6783
2212 A INF802 ULD39872618 2025-02-07 21:21:46 164 42 6783
2213 A INF802 ULD39872619 2025-02-07 21:21:32 167 42 6783
2214 A INF802 ULD39872620 2025-02-07 21:21:16 165 42 6783
2215 A INF802 ULD39872621 2025-02-07 21:21:02 165 42 6783
2216 A INF802 ULD39872622 2025-02-07 21:18:56 166 42 6783
2217 A INF802 ULD39872623 2025-02-07 21:18:42 167 42 6783
2218 A INF802 ULD39872624 2025-02-07 21:18:26 166 42 6783
2219 A INF802 ULD39872625 2025-02-07 21:18:12 163 42 6783
2220 A INF802 ULD39872626 2025-02-07 21:15:24 164 42 6783
2221 A INF802 ULD39872627 2025-02-07 21:15:10 162 42 6783
2222 A INF802 ULD39872628 2025-02-07 21:15:10 164 42 6783