`

如何生成像样的假数据

 
阅读更多

问题 在做项目的时候经常会遇到这样的问题: 根据数据模型建立了数据库,但是数据库中却没有数据,在给客户做Demo的时候必须要一条一条的添加假数据,而且这些假数据还得像模像样的,不能乱输入,尽是看不出任何意义的“aaaaa”、“ttttttttttttt”、“123123”、“是打发斯蒂芬”这样的数据。 已经做好了一个系统,并且上线给部分客户使用了,现在要将该系统推广到所有的客户,所以需要做一个虚拟客户的系统,系统中需要有许多像样的数据,但是由于保密方面的原因,原有客户的数据必须经过处理,不能出现真实的信息。 系统开发完成了,需要制造大量的假数据,以进行压力测试,看在有几百万上千万数据量的情况下的系统性能。 方案 其中要生成大量的没意义的测试数据,以便进行压力测试,这个数据是最好生成的,只需要写几条SQL语句,多运行几次即可。如果不想写SQL语句,也可以使用数据生成工具:VisualStudio、PowerDesigner、DataFactory等都可以使用。我推荐使用DataFactory,有较强的定制性。 下面主要说一下另外一种假数据,那就是前面2种情况,具有一定业务规则和可读性的假数据。要生成比较像样的假数据主要是基于已有的系统,在真实数据的基础上进行随机的混淆和交叉,从而产生大量看起来比较真实但是实际上却全是假的数据。对于第一种情况,可以将其他系统中的对应实体表的数据导入到Demo环境中,然后再进行混淆交叉。 我们可以将系统中的数据分为:数字、日期和字符串3种类型分别进行混淆。 数字类型的数据混淆最简单,使用随机函数RAND()即可,如果是整数则可以再乘以一个系数后取整,也可以用原来的数据加上生成的随机数,从而使得数据的范围保持在原真实数据相同的分布。比如有Revenue字段,是从客户处的收入,大客户和小客户参数的收入数不能完全随机,可以在原有Revenue的基础上随机增加10000以内的数即可:Revenue+RAND()*10000 日期类型的数据混淆可以在原日期或者当前日期的基础上加减一个随机的天数形成,使用DATEADD()函数和RAND()函数即可。比如生成随机的最近100天内的日期:DATEADD("day",0-RAND()*100,GETDATE()) 字符串类型的数据混淆最为复杂,因为字符串具有很明确的意义,比如名字字段、公司名字段等,如果随机的生成字符将没有任何意义。这时可以考虑将字符串拆分成两部分然后进行交叉组合,用随机的交叉组合来代替真是的数据。比如原来的姓名是:李宇春、曾轶可、刘著,经过交叉组合就会形成:李著、曾宇春、刘轶可之类的组合。 姓名的拆分是分为姓和名,而公司的拆分可以拆分成前2个字和后面的字。如果是英文姓名或者英文公司名则可以按照第一个空格将英文字符串拆分成第一个单词和后面的单词。然后将产生的两个字段存入临时表,用两个临时表进行交叉联接,得到两个字段的所有组合,然后再随机选出一定条数的数据,用选出的随机数据将原有数据替换即可。 示例 以一个HR系统为例。假设其中有一个Employee表,该表记录了员工的工号、姓名等信息,现在要对姓名进行处理,具体操作如下: 1.区分出中文名和英文名,分别进行拆分。中文姓名以第一个字为A列,剩下的字尾B列,英文名以第一个单词为A列,剩下的单词为B列,将拆分的数据存入临时表,具体SQL语句如下: select SUBSTRING(Name,1,1) A,SUBSTRING(Name,2,10) B into #CName from Employee where UNICODE( Name)>255 --中文 select Name,SUBSTRING(Name,1,CHARINDEX(' ',Name,1)) A,SUBSTRING(Name,CHARINDEX(' ',Name,1),50) B into #EName from Employee where UNICODE( Name)255 --中文 4.更新Employee表中的姓名字段为随机生成的姓名: update Employee set Name=n.Name from Employee e inner join #newEmployeeID i on e.EmployeeId=i.EmployeeID inner join #newCName n on i.ID=n.ID where UNICODE(e.Name)>255 --只更新中文姓名 5.用同样的方法,可以对英文姓名进行混淆交叉替换。 优化 这里需要注意的是第2步,使用了CROSS JOIN操作,也就是求两个表的笛卡尔积,如果一个表中有10W条数据,那么将会产生100亿行结果,然后再进行排序,那将是近乎不可能完成的任务,所以必须减少进行笛卡尔积的表的数据量,比如每个表只取500条不重复的数据,那么修改后的SQL语句是: select top 5000 n1.A+n2.B from (select distinct top 500 A from #CName )n1 --取不重复的500个姓 cross join (select distinct top 500 B from #CName ) n2--取不重复的500个名 order by NEWID() --随机选取行 这样最多只是500*500条记录,进行排序选取随机行将会很快完成。

分享到:
评论

相关推荐

    GAN 生成对抗网络数据集:动漫头像数据集

    生成器尝试创建逼真的新样本,而判别器则试图区分真实数据与生成器产生的假样本。通过反复博弈,两者共同进步,生成器可以逐渐学会生成与训练数据集相似的高质量图像。 描述中提到,“包含51223张网络爬取的二次元...

    hadoop学习假数据

    本主题将深入探讨“hadoop学习假数据”,重点关注movies.dat、ratings.dat和users.dat这三份文件,它们通常用于模拟电影推荐系统中的数据集。 首先,`movies.dat`文件包含了电影的相关信息,如电影ID、电影标题以及...

    mockdata移动端开发假接口假数据快速搭建

    这个工具可以帮助开发者快速搭建一个本地服务器,生成模拟的假数据接口,以便前端或客户端可以进行功能验证和界面布局的调试。 1. **本地服务器**: - **作用**:本地服务器是开发者在开发阶段用于模拟线上服务...

    gan.rar_GAN 生成_GAN网络_gan生成样本_数据生成_生成数据

    这暗示了该代码实现了一个GAN模型,其中生成器网络接收随机噪声作为输入,并尝试生成看起来像MNIST数据集中的手写数字的图像。判别器网络则试图区分真实的数据样本和生成器产生的假样本。通过对抗性学习,两者之间的...

    基于pythonGAN的动漫头像生成源码+数据集+预训练模型.zip

    生成器负责创造新的图像,而判别器则试图区分真实图像和生成器制造的假图像。通过反复的博弈过程,生成器逐渐提升生成图像的质量,直至达到与真实图像难以分辨的程度。 本项目使用了Python作为主要编程语言,结合...

    波形波表数据生成工具

    "点击Refresh数据直接写到剪贴板"这一特性极大地提高了工作效率,用户无需手动复制和粘贴,可以直接在像Quartus或ISE这样的 FPGA 设计软件中使用生成的数据。Quartus是Altera公司(现Intel)的FPGA开发软件,而ISE则...

    使用 GAN 生成 MNIST 虚假数据集.pdf

    在GAN中,生成器和鉴别器就像是两个互相竞争的对手,生成器努力生成越来越真实的假数据,而鉴别器则努力提高识别真假数据的能力。 GAN的数学原理基于优化理论,鉴别器D和生成器G分别有着各自的优化目标。鉴别器D的...

    生成对抗网络(GAN)实例 代码+数据集

    生成器G试图从随机噪声向量中生成看起来像是来自MNIST数据集的图像,而判别器D的任务则是区分生成的图像和真实的数据样本。训练过程中,G和D交替优化,目标是G生成的图像能骗过D,而D则力求能准确分辨真实和虚假图像...

    真实和 AI 生成的人脸图像数据集(每个约 5k)JPG

    该数据集包含大约 9.6k 张人脸图像,这些图像既是真实图像,也是由 AI 生成的图像。 zip 文件包含两个文件夹:真实图像:5000 张真实人脸图像,AI 生成的图像:4630 张 AI 生成的人脸图像。

    IBM序列数据生成器

    在使用IBM序列数据生成器时,需要注意的是,它并不像传统的应用程序那样通过双击执行`.exe`文件来启动。而是需要借助命令行环境,即在Windows系统中打开`cmd`命令提示符,或者在Linux或Mac OS中使用终端。通过命令行...

    动漫头像数据集

    生成器的任务是学习从随机噪声向量生成逼真的新样本,而判别器则试图区分生成器产生的假样本和真实数据。通过两者的博弈过程,生成器逐渐提升生成效果,直至难以被判别器区分,从而达到生成新样本的目的。 在本数据...

    gan,wgan对抗生成网络二次元头像训练数据集

    龙龙老师教程gan,wgan 280M训练数据集,二次元头像,一共280M,原来的baidupan里的失效了。

    GAN网络生成人脸Pytorch代码 使用CelebA数据集

    CelebA数据集包含大量名人脸部的多分辨率图像,每个图像都有40个属性注释,这对于研究人脸识别、属性预测以及像GAN这样的图像生成任务非常有用。数据集的多样性和丰富性使得模型能够学习到更广泛的人脸特征,从而...

    【tensorflow-WGAN】生成二次元人物头像

    生成器的任务是创建看似真实的样本,而判别器则负责区分真实数据和生成器产生的假样本。在训练过程中,两者相互竞争,逐渐提升生成器生成逼真图像的能力。 Wasserstein GAN(WGAN)是Izmailov和Goodfellow在2017年...

    SQLSERVER脚本生成工具,表数据生成SQL脚本

    例如,如果你有一个名为"Employees"的表,该工具会生成一系列像"INSERT INTO Employees (字段1, 字段2, ...) VALUES (值1, 值2, ...)"这样的语句,确保数据完整无误地导入到目标环境中。 标签"脚本生成"、"SQL脚本...

    基于GAN的动漫头像生成系统

    首先,生成器接收随机噪声作为输入,并尝试将其转换为看起来像动漫头像的图像。判别器则接受真实动漫头像和生成器的输出,判断哪些是真实的,哪些是伪造的。训练过程中,生成器的目标是欺骗判别器,使其无法区分真实...

    基于GAN的Spam数据集缺失数据填补的代码实现

    在填充缺失数据的过程中,生成器被训练生成缺失特征的值,使得整个数据样本看起来像是完整的。这种生成的值可以更好地保留原始数据的结构和分布,从而提高模型预测的准确性。 在Python中,我们可以使用PyTorch框架...

    stylegan3-动漫头像生成

    StyleGAN3不仅能够生成高质量的图像,而且在模型训练过程中减少了对数据翻转和旋转的依赖,提升了生成结果的自然度。 二、工作原理 1. 风格化生成:StyleGAN3的核心在于其风格化生成机制,将图像的生成过程分解为...

Global site tag (gtag.js) - Google Analytics