in genai-for-marketing/infra/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