def load_data_from_event()

in src/lambda.d/inference/func/inferenceApi.py [0:0]


def load_data_from_event(input_event, transactions_id_cols, transactions_cat_cols, dummied_col):
    """Load and transform event data into correct format for next step subgraph loading and model inference input. 
        input event keys should come from related dataset.]
    
    Example:
    >>> load_data_from_event(event = {"transaction_data":[{"TransactionID":"3163166", "V1":1, ...]}, 'card1,card2,,...', 'M2_T,M3_F,M3_T,...')
    """
    TRANSACTION_ID = 'TransactionID'

    transactions_id_cols = transactions_id_cols.split(',') 
    transactions_cat_cols = transactions_cat_cols.split(',') 
    transactions_no_value_cols = [TRANSACTION_ID, 'TransactionDT'] + transactions_id_cols + transactions_cat_cols
    dummied_col = dummied_col.split(',')

    if input_event['identity_data'] != []:
        identities_cols = list(input_event['identity_data'][0].keys())
        identities_cols.remove(TRANSACTION_ID)
    else:
        identities_cols = []

    neighbor_cols = [x for x in list(input_event['transaction_data'][0].keys()) if x not in transactions_no_value_cols]

    if input_event['identity_data'] != []:
        input_event = {**input_event['transaction_data'][0], **input_event['identity_data'][0]} 
    else:
        input_event = {**input_event['transaction_data'][0]}
    
    input_event[TRANSACTION_ID] = f't-{input_event[TRANSACTION_ID]}'
    input_event['TransactionAmt'] = np.log10(input_event['TransactionAmt'])
    
    inputDF = pd.DataFrame.from_dict(input_event, orient='index').transpose()

    union_id_cols = transactions_id_cols + identities_cols 

    target_id = inputDF[TRANSACTION_ID].iloc[0]

    for dummy in dummied_col:
        col_name = dummy[:2]
        if inputDF[col_name].iloc[0] == dummy[3:]:
            inputDF[dummy] = 1.0
        else:
            inputDF[dummy] = 0.0
            
    transaction_value_cols = neighbor_cols+dummied_col
    
    transformedDF = inputDF[transaction_value_cols].fillna(0.0).apply(lambda row: json.dumps(dict(row), default=str), axis=1).to_frame('json') 
    trans_dict = [{TRANSACTION_ID:target_id,
                    'props_values': transformedDF.iloc[0]['json']}]
    logger.debug(f'transformed trans dict is {trans_dict}')

    identity_dict = [inputDF[union_id_cols].iloc[0].fillna(0.0).to_dict()]
    return trans_dict, identity_dict, target_id, transaction_value_cols, union_id_cols