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

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

python如何生成指定文件大小

《python如何生成指定文件大小》:本文主要介绍python如何生成指定文件大小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python生成指定文件大小方法一(速度最快)方法二(中等速度)方法三(生成可读文本文件–较慢)方法四(使用内存映射高效生成

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键