测试造假数据的库 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

相关文章

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I