测试造假数据的库 Faker 随机生成名字的能力如何

2023-10-21 01:10

本文主要是介绍测试造假数据的库 Faker 随机生成名字的能力如何,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

看到某公众号有一篇文章:Python中神奇的第三方库:Faker
Faker 项目地址
文章大致介绍了一下 Faker 这个库的功能和用法。我对其中随机生成名字的功能比较感兴趣,想看看随着生成的数据逐渐变多,随机生成的名字会不会出现重复,以及重复的概率有多大。

测试过程如下:
  1. 每次随机生成的数目 m 的范围和步长分别是 [100, 10000]、100;
  2. 每次数据生成后求每条名字的重复的次数 n;
  3. 概率取 n/m;
  4. 重复步骤 1、2、3、4 十次;
  5. 取十次概率的均值并画出变化趋势
代码如下:
from faker import Faker
import math
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter#epoch:运行次数,int 类型
#ite:一次生成的名字数量,int 类型
#sta:是否每次显示统计信息, bool 类型,默认为 False
#函数返回 这一批名字的重复概率(所有可用名字的数量除以 ite),int 类型
def gen_names(epoch, ite, sta=False):fake = Faker(locale='zh_CN')total = 0names = {}								#存放名字及其数量的字典for r in range(epoch):for i in range(ite):if (i + r * ite + 1)%(int(epoch * ite / 10)) == 0:	#每10%输出一次进度if sta:print(str(round((i + r * ite + 1)/(epoch * ite) * 100)) + '%')name = fake.name()if name in names:names[name] = names[name] + 1 					#累加名字重复的次数else:names[name] = 0 			#如果是新名字则保存,初始数量为 0repeats = 0for key in names:repeats = repeats + names[key] 		#累加所有名字的重复次数if sta:print('{} iterations {} names each time'.format(epoch,ite))print('%d names' % len(names))print('%d repeats' % repeats)print('duplicate rate: %.5f' % (epoch * ite)))return round(repeats/(epoch * ite), 4)array = np.zeros((10,100)) 				#用来绘图的数组,10 次实验每次 100 个数据for i in range(10):print('{}/10'.format(i+1)) 			#展示进度 需要数几分钟list_ = [] 							#暂存每次统计的数据for j in range(100,10100,100):list_.append(gen_names(1, j))array[i] = list_data = np.mean(array, axis = 0)			#求十次的均值def changex(temp, position):			#x轴原来是 1-100,扩大 100 倍来符合实际意义return int(temp * 100)
plt.gca().xaxis.set_major_formatter(FuncFormatter(changex)) #扩展x轴
plt.plot(data.tolist(),color='g')							#绘制趋势,横坐标为一次生成的名字数量,纵坐标为所有名字重复的概率
plt.savefig('./test.png', format='png')						#保存图片

在这里插入图片描述

举个例子:(10000, 0.4)这个点代表的意思是,用 Faker 库一次随机生成 10000 个名字,有 40% 的名字是重复的

综上:
  • 这个库随机生成名字的数量比较大的时候,重复的概率还是很高的
  • 地址生成的真实度也比较低,但是用来测试应该够用了

这篇关于测试造假数据的库 Faker 随机生成名字的能力如何的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/250909

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1