You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成具有一对多关系且满足日期约束的银行表合成数据?

生成符合约束的银行合成数据方案

一、生成信用卡销售信息表(表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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:55:17