如何生成具有一对多关系且满足日期约束的银行表合成数据?
生成符合约束的银行合成数据方案
一、生成信用卡销售信息表(表1)
表1包含Sales_id、Product_ID、Sales_Date三个字段,生成逻辑如下:
Sales_id:用自增整数作为唯一标识,比如从10000起始,确保每条记录唯一Product_ID:模拟银行信用卡产品线,预设几个固定产品编码(如CRD001、CRD002、CRD003),随机分配给每条销售记录Sales_Date:指定日期范围(如2022-01-01至2024-06-30),随机生成销售日期
Python代码示例(Faker+Pandas)
import pandas as pd from faker import Faker import random from datetime import timedelta fake = Faker('zh_CN') # 生成1000条销售记录 sales_count = 1000 sales_data = [] for i in range(sales_count): sales_id = 10000 + i product_id = random.choice(["CRD001", "CRD002", "CRD003"]) sales_date = fake.date_between(start_date='2022-01-01', end_date='2024-06-30') sales_data.append([sales_id, product_id, sales_date]) df_sales = pd.DataFrame(sales_data, columns=['Sales_id', 'Product_ID', 'Sales_Date']) # 保存为CSV文件 df_sales.to_csv('信用卡销售信息表.csv', index=False, encoding='utf-8-sig')
二、生成客户还款交易表(表2)
表2与表1为一对多关系,核心约束是Quota_Date必须晚于对应Sales_id的Sales_Date,生成逻辑:
Quota_ID:自增整数唯一标识,从20000起始Sales_ID:关联表1的Sales_id,每个销售记录对应2-5条还款记录(模拟分期或多次还款场景)Quota_Value:生成100-5000元的随机整数,匹配真实还款金额范围Quota_Date:基于对应Sales_Date,随机生成之后1-180天内的日期,确保时间逻辑合规
Python代码示例
quota_data = [] quota_id_start = 20000 for idx, row in df_sales.iterrows(): sales_id = row['Sales_id'] sales_date = row['Sales_Date'] # 每个销售记录生成2-5条还款记录 quota_num = random.randint(2, 5) for _ in range(quota_num): quota_id = quota_id_start quota_id_start += 1 quota_value = random.randint(100, 5000) # 生成销售日期之后1-180天的还款日期 quota_date = sales_date + timedelta(days=random.randint(1, 180)) quota_data.append([quota_id, sales_id, quota_value, quota_date]) df_quota = pd.DataFrame(quota_data, columns=['Quota_ID', 'Sales_ID', 'Quota_Value', 'Quota_Date']) # 保存为CSV文件 df_quota.to_csv('客户还款交易表.csv', index=False, encoding='utf-8-sig')
三、验证约束合规性
生成后可通过简单查询确认所有记录符合日期约束:
# 关联两张表验证日期逻辑 merged_df = pd.merge(df_quota, df_sales, left_on='Sales_ID', right_on='Sales_id') invalid_records = merged_df[merged_df['Quota_Date'] <= merged_df['Sales_Date']] if len(invalid_records) == 0: print("所有还款记录日期均符合约束要求") else: print(f"发现{len(invalid_records)}条不符合约束的记录")
内容的提问来源于stack exchange,提问作者Themono99
相关产品推荐
相关产品推荐

