import numpy as np import pandas as pd from blindbox_analysis import blindbox_config, print_tree, profit_statistic def generate_random_data(blindbox_name: str, num_records: int): """ 生成随机盲盒数据 """ np.random.seed(42) # 固定随机种子,确保结果可复现 dataset = [] for i in range(num_records): # 随机生成用户ID和用户名 uid = np.random.randint(1000, 2000) username = f'user_{uid}' blindbox_info = blindbox_config[blindbox_name] pity_info = blindbox_info.get('pity', None) # 抽选盲盒物品 rand_num = np.random.rand() sum_prob = 0 selected_item = None for item, item_info in blindbox_info['items'].items(): prob = item_info['probability'] / 100 if rand_num > sum_prob and rand_num <= sum_prob + prob: selected_item = (item, item_info) break sum_prob += prob if selected_item is None: raise ValueError("未能选中任何物品") # 构建随机数据记录 dataset.append({ 'uid': uid, 'username': username, 'blindbox_name': blindbox_name, 'blindbox_price': blindbox_info['price'], 'item_name': selected_item[0], 'item_price': selected_item[1]['price'], 'profit': selected_item[1]['price'] - blindbox_info['price'], 'time': pd.Timestamp.now() }) if pity_info: # 模拟保底机制 if (i + 1) % pity_info['threshold'] == 0: dataset.append({ 'uid': uid, 'username': username, 'blindbox_name': blindbox_name, 'blindbox_price': blindbox_info['price'], 'item_name': pity_info['item_name'], 'item_price': pity_info['price'], 'profit': pity_info['price'] - blindbox_info['price'], 'time': pd.Timestamp.now() }) return pd.DataFrame(dataset) if __name__ == "__main__": # 生成随机数据 stats = {} for box_name in blindbox_config.keys(): df = generate_random_data(box_name, 10000) stats[box_name] = profit_statistic(df) print_tree(stats)