Python 实战:用 Pandas 生成模拟电商用户购买数据(附完整代码)

Pandas生成电商模拟数据
部署运行你感兴趣的模型镜像

在数据分析、机器学习建模或编程学习中,我们常常需要高质量的模拟数据来测试算法、验证逻辑或演示功能。今天就来分享一个实用案例——用 Python 的 Pandas、NumPy 库生成真实感十足的电商用户购买数据集,全程代码简洁易懂,适合编程学习者和数据初学者上手。

 

一、核心工具介绍

 

本次实战用到的核心库:

 

- Pandas:Python 数据分析利器,用于数据存储、清洗和结构化展示(核心是 DataFrame 数据结构)。

- NumPy:用于生成高效的随机数据(如正态分布的购买金额)。

- datetime:处理日期时间,生成近90天的购买日期。

- random:辅助生成随机天数、随机选择类别数据。

 

无需复杂环境配置,安装基础库即可开始:

 

bash

pip install pandas numpy

 

 

二、完整代码实现(带详细注释)

 

python

import pandas as pd

import numpy as np

from datetime import datetime, timedelta

import random

 

# 1. 设置随机种子(保证每次运行生成相同数据,便于复现和调试)

np.random.seed(42)

random.seed(42)

 

# 2. 定义数据维度(可按需修改参数,生成不同规模/类别的数据)

user_ids = [f"U{str(i).zfill(4)}" for i in range(1001, 1051)] # 50个用户ID(U1001-U1050)

genders = ["男", "女", "未知"]

age_groups = ["18-25", "26-35", "36-45", "46-55", "55+"] # 常见年龄分段

cities = ["北京", "上海", "广州", "深圳", "杭州", "成都", "武汉", "西安"] # 一线+新一线城市

categories = ["电子产品", "服装鞋帽", "家居用品", "美妆护肤", "食品饮料", "图书文具"] # 电商核心品类

payment_methods = ["支付宝", "微信支付", "银行卡", "货到付款"] # 主流支付方式

 

# 3. 生成核心数据(用随机选择+分布控制,让数据更真实)

data = {

    "用户ID": user_ids,

    "性别": np.random.choice(genders, size=50, p=[0.45, 0.45, 0.1]), # 男女各45%,未知10%

    "年龄组": np.random.choice(age_groups, size=50), # 均匀分布选择年龄组

    "所在城市": np.random.choice(cities, size=50), # 均匀分布选择城市

    "购买日期": [datetime.now() - timedelta(days=random.randint(1, 90)) for _ in range(50)], # 近90天内随机购买

    "商品类别": np.random.choice(categories, size=50), # 均匀分布选择商品类别

    "购买金额(元)": np.round(np.random.normal(loc=300, scale=150, size=50), 2), # 正态分布(均值300,标准差150)

    "支付方式": np.random.choice(payment_methods, size=50, p=[0.5, 0.4, 0.08, 0.02]), # 支付宝50%、微信40%

    "是否退货": np.random.choice([True, False], size=50, p=[0.08, 0.92]) # 8%退货率(符合电商常见水平)

}

 

# 4. 创建DataFrame并清理异常值(数据质量保障)

df = pd.DataFrame(data)

df["购买金额(元)"] = df["购买金额(元)"].apply(lambda x: max(x, 10)) # 过滤负金额,设置最低消费10元

df["购买日期"] = pd.to_datetime(df["购买日期"]).dt.date # 格式化日期为"年-月-日"纯日期格式

 

# 5. 数据基本信息查看(验证数据是否符合预期)

print("数据形状(行数×列数):", df.shape)

print("\n前5行数据:")

print(df.head())

print("\n数据类型:")

print(df.dtypes)

print("\n购买金额描述性统计:")

print(df["购买金额(元)"].describe())

 

 

三、代码关键逻辑解析

 

1. 随机数据生成的技巧

 

- 固定随机种子: np.random.seed(42)  和  random.seed(42)  保证每次运行代码生成完全相同的数据,方便调试和复用。

- 带权重的随机选择:用  np.random.choice()  的  p  参数控制分布(如性别、支付方式),让数据更贴近真实业务场景(比如支付宝、微信支付占比更高)。

- 正态分布金额: np.random.normal(loc=300, scale=150)  生成均值300元、标准差150元的购买金额,符合电商“大部分用户消费中等,少数人高消费/低消费”的规律。

 

2. 数据清洗的必要性

 

生成随机数据后,必须处理异常值:

 

- 购买金额可能因正态分布出现负值,用  lambda x: max(x, 10)  过滤,同时设置最低消费10元(避免0元订单的不合理情况)。

- 日期格式统一为纯日期(去掉时分秒),让数据更整洁,便于后续按日期统计分析。

 

3. 数据验证方法

 

通过  df.shape 、 df.head() 、 df.describe()  快速验证数据:

 

- 确认数据行数/列数是否符合预期(本例50行×9列)。

- 查看前5行数据,检查字段值是否合理(如用户ID格式、日期范围)。

- 对数值型字段(购买金额)做描述性统计,确认均值、最小值、最大值是否在合理区间。

 

四、运行结果展示

 

1. 数据基本信息

 

plaintext

数据形状(行数×列数): (50, 9)

 

前5行数据:

    用户ID 性别 年龄组 所在城市 购买日期 商品类别 购买金额(元) 支付方式 是否退货

0 U1001 男 36-45 杭州 2024-09-15 家居用品 447.99 支付宝 False

1 U1002 女 26-35 北京 2024-08-23 食品饮料 295.68 微信支付 False

2 U1003 女 18-25 深圳 2024-07-10 美妆护肤 317.57 支付宝 False

3 U1004 男 55+ 成都 2024-09-02 电子产品 134.89 微信支付 False

4 U1005 未知 46-55 武汉 2024-08-15 图书文具 386.62 支付宝 False

 

购买金额描述性统计:

count 50.000000

mean 312.671400

std 142.307208

min 10.000000

25% 207.415000

50% 303.935000

75% 406.227500

max 638.760000

 

 

2. 结果解读

 

- 数据维度:50个用户的9个核心字段,覆盖“用户属性(性别、年龄、城市)+ 交易属性(日期、品类、金额、支付方式、退货状态)”,满足电商数据分析的基础需求。

- 购买金额:均值312.67元,最小值10元,最大值638.76元,分布合理,无异常值。

- 字段格式:日期、数值、布尔值等类型正确,可直接用于后续分析(如按年龄组统计消费金额、按商品类别统计销量)。

 

五、灵活扩展方向

 

这个基础代码可以根据需求快速调整,比如:

 

1. 增加数据量:修改  user_ids  的范围(如  range(1001, 2001)  生成1000个用户)。

2. 新增字段:比如“购买数量”“会员等级”“优惠券使用情况”等(参考现有字段的生成逻辑)。

3. 调整分布:比如提高“36-45岁”年龄组的占比,或增加“电子产品”的购买概率。

4. 导出数据:用  df.to_csv("电商购买数据.csv", index=False)  导出为CSV文件,用于Excel分析或其他工具调用。

 

六、学习总结

 

通过这个案例,我们不仅掌握了 Pandas、NumPy 的基础用法,还理解了“模拟数据生成→数据清洗→数据验证”的完整流程。这类模拟数据在编程学习中非常实用——比如后续可以用它练习数据筛选、分组统计、可视化图表制作等技能,也可以用于机器学习模型的入门训练(如预测用户是否会退货)。

 

如果需要进一步优化代码(比如生成更复杂的用户行为序列)或基于这份数据做深度分析(如绘制消费金额分布图),可以随时交流~

 

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值