def create_and_populate_transactions()

in genai-for-marketing/installation_scripts/aux_data/data_gen.py [0:0]


def create_and_populate_transactions(num_customers: int = 50000) -> Dict:
    from aux_data.transactions_aux_data import product_name, transaction_type

    transactions_per_customer = list(map(int, np.absolute(np.floor(rng.normal(1, 1, size=(num_customers)) * 100))))
    num_transactions = sum(transactions_per_customer)

    product_name_choice = rng.choice(product_name, size=(num_transactions))
    transaction_type_choice = rng.choice(transaction_type, size=(num_transactions))

    transaction_qtn = rng.integers(1, 30, size=(num_transactions))
    transaction_value = rng.integers(1, 5000, size=(num_transactions))
    app_purchase_quantity = rng.integers(1, 10, size=(num_transactions))

    transaction_is_online = rng.choice([False, True], size=(num_transactions))

    baseline_datetime = datetime(2023, 4, 1)
    transactions_date_delta = rng.integers(20, 200, size=(num_transactions))
    
    transaction_data = []

    transaction_id = 0
    for i in range(num_customers):
        for _ in range(transactions_per_customer[i]):
            transaction = {}
            transaction['transaction_id'] = transaction_id
            transaction['customer_id'] = i
            transaction['transaction_quantity'] = int(transaction_qtn[transaction_id])
            transaction['transaction_value'] = int(transaction_value[transaction_id])
            transaction['transaction_type'] = transaction_type_choice[transaction_id]['transaction_type']
            transaction['app_purchase_quantity'] = int(app_purchase_quantity[transaction_id])
            transaction['is_online'] = bool(transaction_is_online[transaction_id])

            transaction['transaction_date'] = baseline_datetime - timedelta(days=int(transactions_date_delta[transaction_id]))
            transaction['transaction_date'] = transaction['transaction_date'].strftime('%Y-%m-%d')
            
            transaction['product_name'] = product_name_choice[transaction_id]['product_name']
            transaction['product_id'] = product_name_choice[transaction_id]['product_id']

            transaction_id += 1
            transaction_data.append(transaction)
    
    return transaction_data