python使用Faker库进行生成模拟mock数据(基本使用+五个小案例)

news2024/11/17 11:34:33

使用faker进行生成模拟(mock))数据

文章目录

  • 使用faker进行生成模拟(mock))数据
    • 一、Faker库安装
    • 二、Faker库基本介绍
    • 三、案例1:Faker库生成核酸数据
    • 四、案例2:生成不重复的人名和地名
    • 五、案例3:生成有时间期限的低保数据
    • 六、案例4:生成电力数据
    • 七、案例5:生成房产登记数据
    • 八、总结

当我们要进行一些数据可视化的制作时,数据是必备的,但当我们手头没有真实数据又没有时间和精力去kaggle或其他网站收集数据时,且数据真实性不是特别需要时,我们可以使用faker库来进行数据的mock操作。

这就不需要爬虫去爬取真实数据,也不需要使用别人制作的API接口了!

一、Faker库安装

使用命令:

pip install Faker

进行安装

二、Faker库基本介绍

在使用Faker库之前需要有两部操作来导入和实例化。

1、导入Faker库

from faker import Faker

2、实例化Faker对象

fake = Faker()

3、基本函数介绍

以下是Faker库的一些常用功能和语法:

  • 生成随机姓名:faker.name()
  • 生成随机地址:faker.address()
  • 生成随机电子邮件地址:faker.email()
  • 生成随机手机号码:faker.phone_number()
  • 生成随机日期:faker.date()
  • 生成随机时间:faker.time()
  • 生成随机文本块:faker.text()

Faker库还提供了很多其他的功能,比如生成随机公司名称、随机颜色、随机银行卡号等等。你可以参考Faker库的官方文档来进行更深入的学习和使用。

https://faker.readthedocs.io/en/master/

三、案例1:Faker库生成核酸数据

一般我们使用Faker生成数据,使用pandas、csv或openpyxl等操作excel或csv的库将生成的数据写入。
在这里插入图片描述

根据场景,我们可以使用random_element来结合实际去进行生成。

fake.random_element(elements=('文化社区', '中心社区', '枫桥社区', '花园社区','棉织社区','站前社区'))

这里我在网上找了本溪市的街道名和社区名进行随机生成。

from faker import Faker
from openpyxl import Workbook

# 创建实例
fake = Faker(locale='zh_CN')

# 定义表头
headers = ['序号', '市', '区', '街道', '社区', '采集地点', '采集管号', '身份证号', '姓名', '性别', '电话', '住址',
           '年龄', '类别', '备注', '采集时间', '采集人姓名', '采集人电话', '标本类型', '接收实验室', '检测时间', '人员关系', '箱号']

# 生成数据并写入Excel
wb = Workbook()
ws = wb.active
ws.append(headers)
for i in range(1, 3000):
    row_data = [
        i,
        '本溪市',
        fake.random_element(elements=('平山区', '溪湖区', '明山区', '南芬区')),
        fake.random_element(elements=('南地街道','工人街道','平山街道','东明街道','崔东街道','北台街道','河西街道','北地街道','石桥子街道','桥头街道','金山街道','高峪街道','东兴街道','新明街道','牛心台街道','卧龙街道','火连寨街道')),
        fake.random_element(elements=('文化社区', '中心社区', '枫桥社区', '花园社区','棉织社区','站前社区')),
        fake.building_number(),
        fake.random_int(min=100000000, max=999999999),
        fake.ssn(),
        fake.name(),
        fake.random_element(elements=('男', '女')),
        fake.phone_number(),
        fake.address(),
        fake.random_int(min=1, max=100),
        fake.random_element(elements=('类别1', '类别2', '类别3')),
        'NULL',
        fake.date_time_this_year(),
        fake.name(),
        fake.phone_number(),
        fake.random_element(elements=('鼻拭子', '咽拭子', '唾液样本')),
        '本溪市核酸检测基地实验室',
        fake.date_time_this_year(),
        '本人',
        fake.random_int(min=1, max=10)
    ]
    ws.append(row_data)

# 保存文件
wb.save('data.xlsx')

结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z2Ch7K58-1686476514245)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230611171609705.png)]

生成的数据,如有身份证号码的雷同或手机号的雷同,纯属巧合!

生成这些数据可以应用在医疗系统的建设时充当mock数据。

四、案例2:生成不重复的人名和地名

有一些需求要求我们生成的数据不包含重复值

我们可以配合pandas库来进行生成和去重。

from faker import Faker
import pandas as pd

fake = Faker(['zh_CN', 'en_US'])

# 生成第一列数据
country1_cities = {fake.city_name() + '市' for i in range(2000)}
column1 = list(country1_cities) + [fake.state()]*2000
print(len(column1))

# 生成第二列数据
names = {fake.name() for j in range(4000)}
column2 = list(names)
print(len(column2))

# 计算每列数据的长度
len1 = len(column1)
len2 = len(column2)

# 如果列的长度不一致,则新建一个DataFrame来保证列的长度一致
if len1 != len2:
    max_len = max(len1, len2)
    dummy_df = pd.DataFrame()
    if len1 < max_len:
        dummy_df['国家或地区'] = ['']*(max_len - len1)
        column1.extend(dummy_df['国家或地区'].tolist())
    elif len2 < max_len:
        dummy_df['人名'] = ['']*(max_len - len2)
        column2.extend(dummy_df['人名'].tolist())

# 将数据转化为DataFrame
df = pd.concat([pd.DataFrame(column1, columns=['国家或地区']), pd.DataFrame(column2, columns=['人名'])], axis=1)

# 保存到csv文件中
df.to_csv('地名与人名不重复.csv', index=False)

但要注意,人名不重复很简单,可以生成中文人名和英文名。但地名不重复是有一定难度的,所以地名的生成在数量上是有限制的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NB4OdDiE-1686476514246)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230611172425411.png)]

五、案例3:生成有时间期限的低保数据

我们还会遇到一些需要记录时间期限的场景,如健身卡会员期限等。

生成时间时我们可以设置开始时间和结束时间,如:

fake.date_between(start_date='-5y', end_date='today').strftime('%Y/%m/%d'),

这里我们设置开始时间是在前五年之内的,结束时间设置为今天。那么Faker就会随机生成在这五年之内的随机日期。

from faker import Faker
from openpyxl import Workbook

# 创建faker对象
fake = Faker('zh_CN')

# 创建工作表
wb = Workbook()
ws = wb.active

# 编写列头
headers = [ "序号", "年度", "单位隶属",'姓名','身份证号','保障开始时间','保障结束时间','救助情况','所属县区','所属乡镇街道','所属社区村','类型','备注'
]
ws.append(headers)

# 生成并写入200个数据条目
for i in range(3000):
    row = [
        fake.random_int(min=1, max=100),
        '2023',
        '本溪市',
        fake.name(),  # 姓名
        fake.ssn(),  # 身份证号
        fake.date_between(start_date='-5y', end_date='today').strftime('%Y/%m/%d'),
        fake.date_between(start_date='today', end_date='+5y').strftime('%Y/%m/%d'),
        fake.random_int(min=200, max=500),
        '本溪满族自治县',
        '沙尖子镇',
        fake.random_element(elements=('北沟村委会', '大华街道', '东明街道', '北台街道')),
        fake.random_element(elements=('农村低保', '城市低保', '残疾人两项补助')),
        fake.random_element(elements=('因病', '因残',)),
    ]
    ws.append(row)

# 保存工作簿
wb.save("低保数据.xlsx")

生成结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5r8AVxcz-1686476514247)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230611172903896.png)]

六、案例4:生成电力数据

关于数值类型的数据我们可以使用

fake.random_int(min=10000000000,max=99999999999)

来定义区间和类型,此外关于地址和公司名也可以随机生成

fake.address()
fake.company()

案例代码如下:

from faker import Faker
from openpyxl import Workbook

# 创建faker对象
fake = Faker('zh_CN')

# 创建工作表
wb = Workbook()
ws = wb.active

# 编写列头
headers = ['户号','户名','表号','地址','手机号','身份证号','用电量202001', '用电量202002', '用电量202003', '用电量202004', '用电量202005', '用电量202006', '用电量202007', '用电量202008', '用电量202009', '用电量202010', '用电量202011', '用电量202012', '用电量202101', '用电量202102', '用电量202103', '用电量202104', '用电量202105', '用电量202106', '用电量202107', '用电量202108', '用电量202109', '用电量202110', '用电量202111', '用电量202112', '余额','单位']
ws.append(headers)
# 生成并写入200个数据条目
for i in range(3000):
    row = [
        fake.random_int(min=10000000000,max=99999999999),
        fake.name(),
        fake.random_int(min=100000000000000000,max=999999999999999999),
        fake.address(),
        fake.phone_number(),
        fake.ssn(),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.random_int(min=1, max=400),
        fake.company(),  # 单位名称
    ]
    ws.append(row)

# 保存工作簿
wb.save("国网电力.xlsx")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wQM1EEGJ-1686476514247)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230611173315600.png)]

七、案例5:生成房产登记数据

我们可以在生成数据时,利用字符串拼接的方式进行生成

如下列代码,我们使用循环,并随机生成j

j = random.randint(20000, 50000)
....
'本房权证平山区字第'+ str(j)+ '号' ,  # 权证号

完整代码如下

import random

import faker
import openpyxl

# 创建一个 Faker 对象
fake = faker.Faker('zh_CN')

# 创建一个 Excel 文件和工作表
wb = openpyxl.Workbook()
ws = wb.active

# 创建表头
ws.append(['编号', '区划', '权证号', '姓名', '证件类型', '身份证号', '地址', '建筑面积', '办结时间'])

# 生成数据并写入 Excel 表格
for i in range(3000):
    j = random.randint(20000, 50000)
    ws.append([
        i + 1,  # 编号
        fake.random_element(elements=('平山区', '溪湖区', '明山区', '南芬区')),  # 区划
        '本房权证平山区字第'+ str(j)+ '号' ,  # 权证号
        fake.name(),  # 姓名
        '居民身份证',  # 证件类型
        fake.ssn(min_age=18, max_age=70),  # 身份证号
        fake.address(),  # 地址
        round(fake.pyfloat( positive=True, min_value=50, max_value=200), 2),  # 建筑面积
        fake.date_between(start_date='-5y', end_date='today').strftime('%Y/%m/%d')  # 办结时间
    ])

# 保存 Excel 文件
wb.save('房产登记数据.xlsx')

结果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Ny13zrV-1686476514248)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230611173415636.png)]

八、总结

Faker精简应用可以帮助程序员快速生成测试数据。通过导入Faker库,并选择需要生成的随机数据类型,程序员可以轻松地创建测试数据,从而减少手动创建测试数据的工作量。

以上内容就是我的全部分享啦!祝你有个美好的一天!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

01-Vue 项目环境搭建和创建准备工作

一. 学习目标 掌握 Vue 项目创建的依赖环境掌握 Vue 项目创建过程 二. 学习内容 掌握搭建 Vue 项目准备环境掌握 Vue 项目创建过程了解 Vue 项目各子目录 三. 学习过程 1. 准备工作 &#xff08;1&#xff09;安装Node.js 打开node.js官网&#xff1a;Node.js &#xff0…

【状态估计】无迹卡尔曼滤波(UKF)应用于FitzHugh-Nagumo神经元动力学研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

详解ASP.NET Core 在 IIS 下的两种部署模式

KestrelServer最大的优势体现在它的跨平台的能力&#xff0c;如果ASP.NET CORE应用只需要部署在Windows环境下&#xff0c;IIS也是不错的选择。ASP.NET CORE应用针对IIS具有两种部署模式&#xff0c;它们都依赖于一个IIS针对ASP.NET CORE Core的扩展模块。 一、ASP.NET CORE C…

UML类图入门

UML类图入门 UML是一个通用的可视化建模描述语言&#xff0c;通过图形符号和文字来对系统进行建模。适用于各种软件的开发方法、生命周期的各个阶段。 类的UML图示 类使用包含类型、属性和操作&#xff08;方法&#xff09;且带有分割线的长方形来表示&#xff0c;如&#x…

人际关系的学习改进

表达的目的&#xff1a;让别人对你感兴趣 不要有苦劳而无功劳 爱的五种语言&#xff1a;表达爱的语言 人类存在的中心&#xff0c;是渴望和人亲近&#xff0c;被人所爱。婚姻即是被设计满足这种亲密关系和爱的需求的&#xff1b;把注意力集中在情绪健康所需的那片爱土上&…

【C++ 程序设计】第 4 章:运算符重载

目录 一、运算符重载的概念 &#xff08;1&#xff09;重载运算符的概念 ① 重载运算符的概念 ② 可重载的运算符 ③ 不可重载的运算符 ④ 运算符的优先级 &#xff08;2&#xff09;重载运算符为类的成员函数 &#xff08;3&#xff09;重载运算符为友元函数 &#…

【Linux】Docker部署镜像环境 (持续更新ing)

防火墙 1、查看防火墙状态 sudo systemctl status ufw 2、开启防火墙 sudo systemctl start ufw 3、关闭防火墙 sudo systemctl stop ufw 4、开机禁止开启防火墙 sudo systemctl disabled ufw 5、开启自启防火墙 sudo systemctl enabled ufw Elasticsearch 1、安装指定版本 比…

使用Pillow库轻松实现图像尺寸调整——>使每个图像具有相同的大小,方便模型处理和训练

在计算机视觉领域,对图像进行尺寸调整是一项非常常见的操作。在训练深度神经网络时,因为计算资源和内存限制的原因,我们通常需要将图像缩放到相同的尺寸。 在本文中,我们将介绍如何使用Python中的Pillow库对图像进行尺寸调整,并提供一个示例程序resize_images。 1. Pytho…

VulnHub靶场-Chronos

目录 0x01 声明&#xff1a; 0x02 简介&#xff1a; 0x03 环境准备&#xff1a; 0x04 信息收集&#xff1a; 1、主机发现 2、NMAP扫描 3、访问业务 4、目录探测 5、查看网页代码 0x05 渗透测试过程&#xff1a; 1、Burp Suite抓包 2、构造payload 测试是否可以外联…

CSS基础学习--5 background背景

一、介绍&#xff1a; CSS 背景属性用于定义HTML元素的背景。 CSS 属性定义背景效果: background-color 背景颜色background-image 背景图片background-repeatbackground-attachmentbackground-position 二、属性 2.1、background-color 属性定义了元素的背景颜色 <s…

根据word模板生成pdf文件

1、首先建一个word&#xff0c;插入一个表格&#xff0c;需要填充的值用${parame}代替 &#xff08;注意&#xff1a;这里的参数要和java实体类里面的参数对应起来&#xff0c;代码放在下面&#xff09; 2、制作完成后另存为xml格式 3、然后用文本编辑工具打开这个xml文件&…

CSS基础学习--6 CSS Text(文本)

一、文本颜色 color:red; 颜色属性被用来设置文字的颜色。 颜色是通过CSS最经常的指定&#xff1a; 十六进制值 - 如: &#xff03;FF0000一个RGB值 - 如: RGB(255,0,0)颜色的名称 - 如: red body {color:red;} h1 {color:#00ff00;} h2 {color:rgb(255,0,0);} 二、文本的…

【备战秋招】每日一题:4月18日美团春招:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&a…

8 channel、反射、网络编程【Go语言教程】

8 channel、反射、网络编程【Go语言教程】 1 channel 1.1 概念及快速入门 channel:管道&#xff0c;主要用于不同goroutine之间的通讯 需求&#xff1a;现在要计算 1-200 的各个数的阶乘&#xff0c;并且把各个数的阶乘放入到 map 中。最后显示出来。要求使用 goroutine 完成…

[LeetCode周赛复盘] 第 349 场周赛20230611

[LeetCode周赛复盘] 第 349 场周赛20230611 一、本周周赛总结6470. 既不是最小值也不是最大值1. 题目描述2. 思路分析3. 代码实现 6465. 执行子串操作后的字典序最小字符串1. 题目描述2. 思路分析3. 代码实现 6449. 收集巧克力1. 题目描述2. 思路分析3. 代码实现 6473. 最大和…

测试老鸟总结,接口自动化测试用例设计编写,高级测试之路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 接口信息来源 与…

百度图像识别 API

首先预览下效果 feaa250077a543a39f037ae8e78a3e80~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp (640594) (byteimg.com) 从以上预览图中可看出&#xff0c;每张图片识别出5条数据&#xff0c;每条数据根据识别度从高往下排&#xff0c;每条数据包含物品名称、识别度…

VisualStdio中scanf报错问题

VisualStdio中scanf报错问题 目录 一&#xff0e; 概述二&#xff0e; 解决方法 一&#xff0e; 概述 报错代码及说明 报错代码为C4996 会在哪种编译器中报错&#xff1f; VisualStdio系列编译器 为什么会报错&#xff1f; 因为VisualStdio比较严谨&#xff0c;认为scanf不…

内网安全:横向传递攻击( RDP || Cobalt Strike )

内网安全&#xff1a;横向传递攻击&#xff08; RDP || Cobalt Strike &#xff09; 横向移动就是在拿下对方一台主机后&#xff0c;以拿下的那台主机作为跳板&#xff0c;对内网的其他主机再进行后面渗透&#xff0c;利用既有的资源尝试获取更多的凭据、更高的权限&#xff0…

【基础知识整理】时间复杂度 空间复杂度

概览 时间复杂度与空间复杂度的作用是在衡量一个算法的优劣性&#xff0c;以及在二者之间进行权衡&#xff0c;寻找二者的平衡点。 时间复杂度是指执行算法所需时间的增长率&#xff0c;而空间复杂度则是指执行算法所需存储空间的增长率。 高时间复杂度的算法可能需要在短时间…