Python自动化:基于faker批量生成模拟数据(以电商行业销售数据为例)

引言:个人认为,“造数据”是一个数据分析师的一项基本技能,当然啦,“造数据”不是说胡编乱造,而是根据自己的需求去构造一些模拟数据集,用于测试等用途,而且使用虚拟数据不用担心数据隐私和安全问题,嘿嘿。

文章思路:random标准库 → faker第三方库 → 构造销售数据集示例

效果展示:


一、random标准库常用方法

random.seed(a=None) 可以设置随机数生成器的种子,使得每次运行时的随机数序列相同。

(一)生成整数

生成指定区间范围内的随机整数:

# 生成一个在 1 到 100 之间的随机整数
random.randint(1, 100)

(二)生成浮点数

生成指定范围内的随机浮点数,使用round控制小数精度:

# 生成一个在 10 到 100 之间的随机浮动数
random.uniform(10, 100)   # 例如输出:54.7938611692445
# 保留2位小数
round(random.uniform(10, 100), 2)

(三)随机抽取、打乱序列

1、从序列中随机抽取一个元素:

# 从列表中随机选择一个元素
random.choice([1, 2, 3, 4, 5])

2、从随机序列中随机抽取k个元素,支持设置权重(每个元素被选中的概率):

# random.choices(seq, weights=None, k=1)
# 从列表中随机选择两个元素,且weights为每个元素被选中的概率
random.choices([1, 2, 3, 4, 5], weights=[0.1, 0.1, 0.3, 0.2, 0.3], k=2)  # 例如输出:[3, 5]

 3、与上条类似,从给定的序列中随机选择 k元素,返回一个新列表,原序列不受影响:

# 从列表中随机选择 3 个不重复的元素
random_sample = random.sample([1, 2, 3, 4, 5], k=3)   # 例如输出:[1, 4, 3]

4、随机打乱序列:

# 将列表随机排列
lst = [1, 2, 3, 4, 5]
random.shuffle(lst)   # 例如输出:[2, 5, 4, 1, 3]

(四)生成随机布尔值

1、随机生成1个随机布尔值:

# 生成一个随机浮动数,并转换为布尔值
random_bool = random.random() < 0.5

2、生成一个随机布尔序列:

list(random.random() < 0.5 for _ in range(10))

二、faker第三方库(需要下载)

faker 库是 Python 中常用的生成假数据的库,提供了大量的功能来生成各种类型的虚拟数据,如姓名、地址、日期等。以下是 faker 库的一些常用方法,按类别整理:

注:使用前一般要初始化,如下

from faker import Faker
fake = Faker()

(一)个人信息类

1、生成一个随机姓名(也可以只生成姓或名)

# 生成一个随机姓名
name = fake.name()  # 例如:'John Doe'# 生成一个随机名
first_name = fake.first_name()# 生成一个随机姓氏
last_name = fake.last_name()

2、生成一个随机地址

# 手续代码我就不做赋值了,只列方法
fake.address()

3、生成一个随机城市、州/省份、国家

# 城市
fake.city()  # 例如:'New York'# 州/省份
fake.state()  # 例如:'California'# 国家
fake.country()  # 例如:'United States'

4、电子邮件email

fake.email()  # 例如:'john.doe@example.com'

5、电话号码

fake.phone_number()  # 例如:'(555) 555-5555'

6、身份证

fake.ssn()   # 生成一个18位的身份证号

(二)日期

生成指定时间范围内的随机日期,还要结合 datetime 库:

from faker import Faker
from datetime import datefake = Faker()# 使用 datetime.date() 来创建日期对象
start_date = date(2023, 1, 1)
end_date = date(2023, 12, 31)# 生成指定范围内的随机日期
random_date = fake.date_between(start_date=start_date, end_date=end_date)
print(random_date)  # 例如:'2023-06-15'

(三)文本和公司信息

# 生成一个随机的句子
fake.sentence()  # 例如:'The quick brown fox jumps over the lazy dog.'# 生成一个随机段落
fake.paragraph()  # 例如:'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'# 生成一个随机的公司名称
fake.company() # 生成一个随机的职位名称
fake.job()  # 例如:'Software Engineer'

(四)用户 ID

# 生成一个随机的 UUID
fake.uuid4()  # 例如:'f9a86cc4-f7f7-4686-b49b-76d1b74f9f39'

三、虚拟电商行业销售数据生成案例

生成一个有1000条记录的销售数据集,包含以下字段:用户ID、用户名、email、产品名称、购买数量、单价、消费总金额、(下单)购买日期。

from faker import Faker
from datetime import date
import pandas as pd
import randomfake = Faker()   # 初始化Faker实例# 定义电商数据生成函数
def func(data_size):datas = []for i in range(data_size):# 生成用户idid = str(fake.uuid4())  # 生成用户名字name = fake.name()  # 生成用户邮箱email = fake.email()   # 生成商品名称product_name = fake.word()    # 生成购买数量quantity = random.randint(1,10)    # 生成单价。使用uniform生成a~b之间的随机浮动数,并使用round保留两位小数unit_price = round(random.uniform(50,200), 2)# 生成同消费金额total_price = round(quantity*unit_price, 2)# 随机生成2024上半年这个时间段的购买日期sale_date = fake.date_between(start_date=date(2024,1,1), end_date=date(2024,6,30))datas.append({'id': id,'name': name,'email': email,'product_name': product_name,'quantity': quantity,'unit_price': unit_price,'total_price': total_price,'sale_date': sale_date})return pd.DataFrame(datas)  # 将数据转化为DataFrame形式,作为返回值# 测试入口
data_size = 1000   # 确定要造的数据数量
df = func(data_size)
print(df.head(5))

输出前5条数据,如下:

但是,这样的数据集是存在问题的,为什么呢?

因为数据集是销售数据,存储的是用户下单的历史记录,用户可能不止一次下单购买,换句话来说,在数据集中,用户id 是可能重复的,出现重复id表示该id的用户下单多次,但是按照上面的方法生成的数据集,id 是没有重复的。

怎么解决?往下看代码,增加了一个_generate_ids函数用于生成1000条包含id可以重复的数据:

from faker import Faker
from datetime import date
import pandas as pd
import randomfake = Faker()   # 初始化Faker实例# 定义生成可重复ID的函数,其中参数ration为重复的ID占比,比如0.3
def _generate_ids(data_sizes, ration):# 计算重复的id数num_dupl = int(data_sizes*ration)# 先生成一部分不重复的idids = [str(fake.uuid4()) for _ in range(data_sizes - num_dupl)]# 随机抽取一部分id来重复ids.extend(random.sample(ids, num_dupl))# 打乱顺序random.shuffle(ids)return ids# 定义生成数据的函数
def func(data_sizes, ration):datas = []ids = _generate_ids(data_sizes, ration)for id in ids:# 生成用户名字name = fake.name()  # 生成用户邮箱email = fake.email()   # 生成商品名称product_name = fake.word()    # 生成购买数量quantity = random.randint(1,10)    # 生成单价。使用uniform生成50~200之间的随机浮动数,并使用round保留两位小数unit_price = round(random.uniform(50,200), 2)# 生成同消费金额total_price = round(quantity*unit_price, 2)# 随机生成2024上半年这个时间段的购买日期sale_date = fake.date_between(start_date=date(2024,1,1), end_date=date(2024,6,30))datas.append({'id': id,'name': name,'email': email,'product_name': product_name,'quantity': quantity,'unit_price': unit_price,'total_price': total_price,'sale_date': sale_date})return pd.DataFrame(datas)  # 将数据转化为DataFrame形式,作为返回值data_size = 1000   # 确定要造的数据数量
ration = 0.3   # 确定重复比例
df = func(data_size, ration)# 查找 'id' 列中重复的行
df[df.duplicated(subset='id')]

找出并输出 id 重复的行(即记录),可以发现刚好有300条数据重复,符合代码里设置的含0.3重复数据的比例。

当然了,其他字段(列名)如果也要求可以有重复 ,可以按照类似方法更改代码。

以增加一个可以重复的 “商品类别” 字段为例,:

# 先确定类别有几类,假如有5个类别
producct_categories = ['A', 'B', 'C', 'D', 'E']   # 方法一:手动定义
# 最后随机挑取一个类别作为该条数据的类别即可
category = random.choice(producct_categories)# ——————————————————————————————————————————# 先确定类别有几类,假如有5个类别
producct_categories = [fake.word() for _ in range(5)]   #方法二:fake.word()函数,生成一个单词作为类别名称
# 最后随机挑取一个类别作为该条数据的类别即可
category = random.choice(producct_categories)

到这里,虚拟销售数据的生成就到此结束啦,还有一个点,就是可以生成中文数据,只需要更改下面一行代码的参数:

# 初始化Faker实例的时候,加入参数"zh_CN"就可以了,不写参数则默认生成英文数据
fake = Faker("zh_CN")   

更改语言后的效果如下 :

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

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

相关文章

WPS数据分析000004

目录 一、表格阅读技巧 冻结窗格 拆分窗口 新建窗口 阅读模式 护眼模式 二、表格打印技巧 打印预览 打印缩放 打印区域 打印标题 分页打印 打印位置 页眉页脚 逐份打印 三、表格保护技巧 锁定单元格 隐藏公式 文档权限 文件加密 一、表格阅读技巧 冻结窗…

【前端】CSS学习笔记

目录 CSS的简介CSS的概念语法 CSS的引入方式内联样式&#xff08;行内样式&#xff09;内部样式外部样式&#xff08;推荐&#xff09; 选择器全局选择器元素选择器类选择器ID选择器合并选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器伪类选择器:link:visited:hover:ac…

STL--set(集合)

目录 前言 set: multiset: 一、set 对象创建 1、默认构造 2、初始化列表 3、迭代器 4、拷贝构造 二、set 赋值操作 1、set对象 2、初始化列表 三、set 大小操作 1、判空 2、大小 四、set 数据插入 1、单值插入 2、多值插入 五、set 数据查找 六、set 数据删除…

SQL在线格式化 - 加菲工具

SQL在线格式化 - 加菲工具 打开网站 加菲工具 https://www.orcc.online 选择“SQL 在线格式化” 或者直接访问网址 https://www.orcc.online/tools/sql 输入sql&#xff0c;点击上方的格式化按钮即可 输入框得到格式化后的sql结果

50-《仙人掌》

仙人掌 仙人掌&#xff08;学名&#xff1a;Opuntia stricta (Haw.) Haw. var. dillenii (Ker-Gawl.) Benson &#xff09;是仙人掌科缩刺仙人掌的一种变种。是丛生肉质灌木&#xff0c;高1.5~3m。上部分枝宽呈倒卵形、倒卵状椭圆形或者是近圆形&#xff0c;绿色至蓝绿色&#…

【C++课程学习】:C++中的IO流(istream,iostream,fstream,sstream)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 C学习笔记&#xff1a; https://blog.csdn.net/djdjiejsn/category_12682189.html 前言&#xff1a; 在C语…

【桌面程序】PyWebview跨平台桌面应用程序

什么是PyWebview PyWebView 是一个轻量级的 Python 库&#xff0c;用于将网页&#xff08;HTML、CSS、JavaScript&#xff09;嵌入到本地应用程序的窗口中。它允许你创建带有图形用户界面&#xff08;GUI&#xff09;的桌面应用程序&#xff0c;并且能够使用 Web 技术&#xf…

DDD - 整洁架构_解决技术设计困局

文章目录 Pre如何落地 DDD底层技术的更迭 整洁架构的设计主动适配器/北向适配器被动适配器/南向适配器 整洁架构的落地总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对象的两种设计思路…

Sentinel配置流控规则详解

前言 在微服务架构中&#xff0c;流量控制&#xff08;Flow Control&#xff09;是保障服务稳定性的重要手段之一。Sentinel作为一款开源的流量控制、熔断降级Java库&#xff0c;以其丰富的应用场景和完善的监控能力&#xff0c;在微服务保护中扮演了重要角色。本文将详细介绍…

C语言之文本加密程序设计

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 文本加密程序设计 摘要&#xff1a;本文设计了一种文本加密程序&#xff0c;旨在提高信息安…

大数据系列之:上传图片到cos、cos

大数据系列之&#xff1a;上传图片到cos、cos 安装python cos sdk上传图片到cos高级上传接口分页列举桶内对象cos桶之间复制cos桶之间复制图片数据 安装python cos sdk pip install -U cos-python-sdk-v5上传图片到cos # -*- codingutf-8 from qcloud_cos import CosConfig fr…

基于javaweb的SpringBoot景区旅游管理系统设计和实现(源码+文档+部署讲解)

个人名片 &#x1f525; 源码获取 | 毕设定制| 商务合作&#xff1a;《个人名片》 ⛺️心若有所向往,何惧道阻且长 文章目录 个人名片运行环境技术栈适用功能说明使用说明 运行环境 Java≥8、MySQL≥5.7 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台…

PHP CRM售后系统小程序

&#x1f4bc; CRM售后系统 &#x1f4fa;这是一款基于PHP和uniapp深度定制的CRM售后管理系统&#xff0c;它犹如企业的智慧核心&#xff0c;精准赋能销售与售后管理的每一个环节&#xff0c;引领企业步入精细化、数字化的全新管理时代。系统集成了客户管理、合同管理、工单调…

【LFS/从0构建Linux系统】软件包与补丁安装及环境配置

笔者从虚拟机换回了开发板&#xff0c;系统仍然是Ubuntu。 文章目录 1. 安装包与补丁的安装1.1 wget指令1.2 aria2指令1.3 使用阿里云的整合包 2. 最后的准备阶段(环境配置)3 .总结 在上篇文章&#xff0c;我们完成lfs的硬件准备和磁盘分区。 最终达成这个效果&#xff1a; 那么…

微服务网关,如何选择?

什么是API网关 API网关&#xff08;API Gateway&#xff09;是微服务架构中的一个关键组件&#xff0c;它充当了客户端与后端服务之间的中间层。其主要功能包括请求路由、协议转换、负载均衡、安全认证、限流熔断等。通过API网关&#xff0c;客户端无需直接与多个微服务交互&a…

技术面试中的软素质技巧性答复集锦

1、请你自我介绍一下你自己&#xff1f; 回答提示&#xff1a;一般人回答这个问题过于平常&#xff0c;只说姓名、年龄、爱好、工作经验&#xff0c;这些在简历上都有。其实&#xff0c;企业最希望知道的是求职者能否胜任工作&#xff0c;包括&#xff1a;最强的技能、最深入研…

海康MV-EB435i立体相机SDK安装(ROS 2)

文章目录 一、简介二、驱动配置小结 一、简介 MV-EB435i相机是一款低成本、小体积、配置全面的立体相机&#xff0c;凭借硬件级的深度图像处理方案&#xff0c;相机可在高性能输出的同时维持低功耗的水平。相机采用海康MV3D SDK&#xff0c;并提供跨平台支持&#xff0c;广泛应…

中国数字安全产业年度报告(2024)

数字安全是指&#xff0c;在全球数字化背景下&#xff0c;合理控制个人、组织、国家在各种活动中面临的数字风险&#xff0c;保障数字社会可持续发展的政策法规、管理措施、技术方法等安全手段的总和。 数字安全领域可从三个方面对应新质生产力的三大内涵:一是基于大型语言模型…

C++/QT环境下图像在窗口下等比例渲染绘制

本文中通过QT获取到opengl上下文环境,通过opengl3.0API将图像等比例渲染到QOpenGLWidget组件上面,相比cpu,渲染能力更强。 有以下四步骤。opengl基本知识点可参照之前文章OPENGL初学习 定义opengl渲染表面属性通过initializeGL接口初始化opengl上下文环境,然后加载并链接着…

一次统计信息收集导致的Oracle数据库查询慢分析

客户反馈在18.30-19.00之间&#xff0c;数据库运行特别慢&#xff0c;19点后就恢复正常。根据客户提出的信息&#xff0c;查看对应时段的awr报告&#xff0c;发现在此时段内&#xff0c;对表XXX_XXXX_SCAN存在着大量的查询操作。同时&#xff0c;查看该表的统计信息时间&#x…