找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2633

积分

0

好友

367

主题
发表于 14 小时前 | 查看: 0| 回复: 0

本文将以电商订单数据为例,完整演示如何使用 Python 的 Pandas 库,完成从数据准备、清洗、分析到可视化的全流程实战。这套方法适用于各类业务数据的处理与分析,希望能为你的工作或学习带来启发。

第一步:准备数据(创建模拟电商数据集)

我们首先模拟一份包含1000条记录的电商订单数据,包含订单号、用户ID、商品分类、购买金额、购买时间、支付方式以及是否退款等核心字段。你可以直接复制以下代码运行。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 设置中文显示(避免图表中文乱码)
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系统用这个
# plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']  # Mac系统用这个
plt.rcParams['axes.unicode_minus'] = False

# 模拟电商订单数据(共1000条)
np.random.seed(42)  # 固定随机数,让结果可重复
data = {
    '订单号': [f'ORDER{20240001+i}' for i in range(1000)],
    '用户ID': np.random.randint(1001, 1101, size=1000),  # 100个用户
    '商品分类': np.random.choice(['电子产品', '服装鞋帽', '家居用品', '食品零食', '美妆护肤'], size=1000),
    '购买金额': np.random.normal(300, 100, size=1000).round(2),  # 金额均值300元
    '购买时间': pd.date_range('2024-01-01', periods=1000, freq='H'),  # 按小时生成时间
    '支付方式': np.random.choice(['微信支付', '支付宝', '银行卡'], size=1000),
    '是否退款': np.random.choice([True, False], size=1000, p=[0.05, 0.95])  # 5%退款率
}

# 创建DataFrame(Pandas的核心数据结构)
df = pd.DataFrame(data)

# 查看数据前5行,快速了解数据结构
print("数据前5行:")
print(df.head())

# 查看数据基本信息(行数、列数、数据类型)
print("\n数据基本信息:")
print(df.info())

# 查看数据统计概况(金额的均值、最大值等)
print("\n数据统计概况:")
print(df['购买金额'].describe())

运行代码后,你会看到数据的概览,包含1000行、7列,以及购买金额等字段的统计描述。这一步是数据分析的起点,旨在快速了解数据全貌。

第二步:数据清洗(过滤无效与异常数据)

真实数据往往包含无效记录,如退款订单、异常值或缺失值。数据清洗是保证分析结果准确性的基石。

# 1. 过滤退款订单(只保留未退款的有效订单)
df_valid = df[df['是否退款'] == False].copy()
print(f"有效订单数:{len(df_valid)}(原始订单数:{len(df)})")

# 2. 处理金额异常值(比如负数、远超均值的异常值,这里过滤>1000元的订单)
df_valid = df_valid[df_valid['购买金额'] > 0]
df_valid = df_valid[df_valid['购买金额'] <= 1000]
print(f"清洗后有效订单数:{len(df_valid)}")

# 3. 提取日期字段(从“购买时间”中拆分出“日期”,方便按天分析)
df_valid['购买日期'] = df_valid['购买时间'].dt.date  # 拆分日期
df_valid['购买小时'] = df_valid['购买时间'].dt.hour  # 拆分小时(分析高峰时段)

# 查看清洗后的数据前3行
print("\n清洗后数据前3行:")
print(df_valid[['订单号', '商品分类', '购买金额', '购买日期', '购买小时']].head(3))

经过清洗,我们得到了一个干净、可用于分析的数据集。核心操作包括过滤、条件筛选以及利用Pandas的 dt 属性从时间戳中提取所需信息。

第三步:核心业务分析(回答三个关键问题)

清洗完数据后,我们可以针对电商场景常见的业务问题进行分析。

1. 哪个商品分类最畅销?(按销售额排序)

使用 groupbyagg 函数,可以轻松实现按类别汇总销售额和订单量。

# 按“商品分类”分组,计算总销售额和订单量
category_analysis = df_valid.groupby('商品分类').agg({
    '购买金额': 'sum',  # 总销售额
    '订单号': 'count' # 订单量
}).reset_index()

# 重命名列名,更直观
category_analysis.columns = ['商品分类', '总销售额', '订单量']

# 按总销售额降序排序(从高到低)
category_analysis_sorted = category_analysis.sort_values('总销售额', ascending=False)
print("各商品分类销售情况:")
print(category_analysis_sorted)

2. 一天中哪个时段是下单高峰?(小时分布分析)

分析用户的下单时间习惯,有助于运营活动安排。

# 按“购买小时”分组,计算每个时段的订单量
hour_analysis = df_valid.groupby('购买小时')['订单号'].count().reset_index()
hour_analysis.columns = ['购买小时', '订单量']
print("\n各时段下单量:")
print(hour_analysis.head(10))  # 显示前10个小时的数据

3. 哪种支付方式最受用户欢迎?(支付方式占比)

利用 value_counts 方法,快速统计各类别的占比。

# 计算每种支付方式的订单数和占比
pay_analysis = df_valid['支付方式'].value_counts().reset_index()
pay_analysis.columns = ['支付方式', '订单量']
pay_analysis['占比'] = (pay_analysis['订单量'] / pay_analysis['订单量'].sum()).round(3) * 100 # 计算百分比
print("\n支付方式统计:")
print(pay_analysis)

第四步:数据可视化(让结论一目了然)

图表比数字表格更能直观地揭示规律。我们使用 Matplotlib 将上述分析结果可视化。

1. 商品分类销售额柱状图

柱状图非常适合展示不同类别之间的数值对比。

# 创建画布(大小为10x6英寸)
plt.figure(figsize=(10, 6))

# 画柱状图:x轴是商品分类,y轴是总销售额
plt.bar(
    x=category_analysis_sorted['商品分类'],
    height=category_analysis_sorted['总销售额'],
    color=['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FECA57']  # 彩色柱子
)

# 添加标题和坐标轴标签
plt.title('各商品分类总销售额', fontsize=16, pad=20)
plt.xlabel('商品分类', fontsize=12)
plt.ylabel('总销售额(元)', fontsize=12)

# 给每个柱子添加数值标签(显示具体销售额)
for i, v in enumerate(category_analysis_sorted['总销售额']):
    plt.text(i, v + 500, f'{v:.0f}元', ha='center', fontsize=10)

# 旋转x轴标签(避免分类名重叠)
plt.xticks(rotation=45)

# 调整布局,避免标签被截断
plt.tight_layout()

# 保存图片(可直接在本地查看)
plt.savefig('商品分类销售额.png', dpi=300)
plt.show()

2. 下单高峰时段折线图

折线图能清晰展示数据随时间变化的趋势。

plt.figure(figsize=(12, 6))

# 画折线图:x轴是小时,y轴是订单量
plt.plot(
    hour_analysis['购买小时'],
    hour_analysis['订单量'],
    marker='o',  # 每个点用圆圈标记
    linewidth=2,
    color='#FF6B6B'
)

plt.title('一天中各时段下单量分布', fontsize=16, pad=20)
plt.xlabel('小时(0-23)', fontsize=12)
plt.ylabel('订单量', fontsize=12)

# x轴显示0-23小时
plt.xticks(range(0, 24))

# 添加网格线,方便看数值
plt.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('下单时段分布.png', dpi=300)
plt.show()

3. 支付方式占比饼图

饼图适用于展示整体中各部分的构成比例。

plt.figure(figsize=(8, 8))

# 画饼图:labels是支付方式,sizes是订单量,autopct显示百分比
plt.pie(
    x=pay_analysis['订单量'],
    labels=pay_analysis['支付方式'],
    autopct='%1.1f%%',  # 显示百分比(保留1位小数)
    colors=['#4ECDC4', '#45B7D1', '#FECA57'],
    startangle=90 # 饼图起始角度
)

# 设置饼图为正圆形
plt.axis('equal')

plt.title('支付方式占比', fontsize=16, pad=20)
plt.tight_layout()
plt.savefig('支付方式占比.png', dpi=300)
plt.show()

实战总结

通过以上完整流程,我们实践了数据分析的核心步骤。可以总结为以下三点:

  1. 流程标准化:数据分析通常遵循 数据准备 → 清洗 → 分析 → 可视化 的流程,清晰的步骤是高效工作的前提。
  2. 掌握核心工具:Pandas 的 groupby(分组)、agg(聚合)、value_counts(计数)和 dt(时间属性)是处理结构化数据的利器,足以应对大多数分析场景。
  3. 注重结果表达:清洗数据保证分析基石牢固,而可视化则是将分析结论有效传达给他人的关键桥梁。记得为图表添加清晰的标题和标签。

希望这个基于真实业务场景的 Pandas 实战案例能帮助你理解数据分析的全貌。掌握这些基础技能后,你可以尝试处理更复杂的时序分析或用户行为分析。如果你对数据科学和人工智能的其他实战案例感兴趣,欢迎到 云栈社区 探索更多深度内容。




上一篇:Gitea集成Jenkins:配置Webhook实现代码提交自动构建与常见问题解决
下一篇:开源Memcode:面向程序员与科研人员的间隔重复学习工具搭建指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-26 18:43 , Processed in 0.462740 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表