基于真实数据集动态生成代表性伪造数据集的技术实现需求
动态生成代表性伪造数据集的实现方案
核心实现逻辑
完全基于数据类型自动处理,无需硬编码列名,满足以下要求:
- Object类型列:从原数据集对应列的现有值中随机重复选取
- 新增
ExtraObjectColumn列:从指定自定义列表中随机选取值 - 数值类型列:在原列最小值到中位数区间内生成随机数
- 支持批量处理多个数据集,生成行数默认≥10000,性能高效
代码实现
使用Python的pandas和numpy实现,依赖向量化操作保证性能:
import pandas as pd import numpy as np def generate_synthetic_data(original_df, target_rows=10000, extra_object_values=["A", "B", "C"]): # 自动分离数值列与Object列 numeric_cols = original_df.select_dtypes(include=['int64', 'float64']).columns object_cols = original_df.select_dtypes(include=['object']).columns synthetic_data = {} # 生成原Object列的伪造数据 for col in object_cols: unique_vals = original_df[col].unique() synthetic_data[col] = np.random.choice(unique_vals, size=target_rows, replace=True) # 生成数值列的伪造数据(min到中位数区间) for col in numeric_cols: col_min = original_df[col].min() col_median = original_df[col].median() if original_df[col].dtype == 'int64': # 整数列生成整数随机数 synthetic_data[col] = np.random.randint(low=col_min, high=col_median + 1, size=target_rows) else: # 浮点列生成浮点随机数 synthetic_data[col] = np.random.uniform(low=col_min, high=col_median, size=target_rows) # 添加自定义额外列 synthetic_data['ExtraObjectColumn'] = np.random.choice(extra_object_values, size=target_rows, replace=True) return pd.DataFrame(synthetic_data) # 测试示例 if __name__ == "__main__": # 模拟原数据集 test_df = pd.DataFrame({ 'ProductType': ['Electronics', 'Clothing', 'Home', 'Electronics'], 'Region': ['North', 'South', 'East', 'West'], 'Sales': [100, 200, 150, 300], 'Price': [99.99, 49.99, 29.99, 199.99] }) # 生成15000行伪造数据 fake_data = generate_synthetic_data(test_df, target_rows=15000, extra_object_values=["Tier1", "Tier2", "Tier3"]) print(fake_data.head()) print(f"生成数据集行数:{len(fake_data)}")
关键细节说明
- 自动列识别:通过
select_dtypes自动区分数值型(int/float)和Object型列,无需手动指定列名 - 性能优化:全程使用numpy向量化操作生成数据,避免循环,即使生成10万行以上数据也能快速完成
- 数据一致性:Object列保留原数据集的所有可选值(包括NaN),数值列严格控制在要求的区间内,保证伪造数据的代表性
- 灵活配置:仅需指定
extra_object_values自定义列表,其他参数可根据需求调整(如目标行数)
内容的提问来源于stack exchange,提问作者Ankhnesmerira
相关产品推荐
相关产品推荐

