一、数据加载:先把数据读进来

1.1 导入必备库

import pandas as pd    # 数据处理神器
import numpy as np     # 数值计算库

1.2 读取数据

# 读取CSV文件,encoding='gbk'是因为数据文件是中文编码
data = pd.read_csv(r'C:\Users\EDY\Desktop\dataset.csv', encoding='gbk')
data.head()  # 看前5行,了解数据结构

1.3 数据概览

data.shape       # 看数据有多少行多少列
data.columns     # 看所有列名

字段

说明

订单ID

订单的唯一标识

订单日期 / 发货日期

时间相关

发货模式

Standard Class / Second Class / Same Day / First Class

客户ID / 客户姓名

客户信息

客户类别

Consumer(消费者)/ Corporate(企业)/ Home Office(家庭办公)

商店所属区域

APAC / EU / US / Africa / LATAM / Canada / EMEA

产品类别

Office Supplies / Furniture / Technology

售价 / 销售数量 / 折扣 / 利润

销售相关

发货成本

发货费用

订单优先级

Low / Medium / High / Critical


二、数据清洗:脏数据得收拾干净

2.1 查看数据基本信息

data.info()  # 查看每列有多少空值、是什么数据类型

2.2 日期处理

# 把字符串格式的日期转成真正的日期格式
data['订单日期'] = pd.to_datetime(data['订单日期'])
data['发货日期'] = pd.to_datetime(data['发货日期'])

# 计算发货用了多少秒(发货日期 - 订单日期)
data['发货秒数'] = (data['发货日期'] - data['订单日期']).dt.total_seconds()

# 检查有没有异常(发货秒数<0就是发货日期早于订单日期)
(data['发货秒数'] < 0).sum()  # 查出来有4条异常

2.3 删除异常数据

# 删除发货日期早于订单日期的异常记录
data.drop(index=data[data['发货秒数'] < 0].index, inplace=True)

2.4 检查数值字段异常

# 检查售价、销售数量、发货成本有没有负数(异常)
data[data['售价'] < 0]          # 没发现异常
data[data['销售数量'] < 0]       # 没发现异常
data[data['发货成本'] < 0]       # 没发现异常

2.5 处理折扣异常值

# 折扣>1是异常(正常折扣应该在0~1之间),查出13条
data[data['折扣'] > 1]

# 用mask把异常值标记为空
data['折扣'] = data['折扣'].mask(data['折扣'] > 1, None)

# 用平均值填充空值
data['折扣'] = data['折扣'].fillna(value=round(data['折扣'].mean(), 2))

2.6 处理发货模式的空值

# 发货模式有空值,看最常见的值是什么
data['发货模式'].mode()  # 结果:Standard Class

# 用众数(出现最多的值)填充空值
data['发货模式'] = data['发货模式'].fillna(value=data['发货模式'].mode()[0])

2.7 删除无用列和处理重复值

# 邮编这列没什么用,删掉
data.drop(columns=['邮编'], inplace=True)

# 删除行编号的重复值
data.drop_duplicates('行编号', inplace=True)

2.8 从日期中提取年月日

# 从订单日期里提取年、月、季度
data['下订单年'] = data['订单日期'].dt.year
data['下订单月'] = data['订单日期'].dt.month
data['下订单季度'] = data['订单日期'].dt.to_period('Q')

data.head()

三、销售额分析:算算每年卖了多少

3.1 计算销售额

# 销售额 = 销售数量 × 售价
data['销售额'] = data['销售数量'] * data['售价']

3.2 按年汇总销售额

sales_year = data.groupby(by='下订单年')['销售额'].sum()
sales_year

年份

年销售额

2021

11,104,350

2022

12,883,920

2023

16,626,810

2024

20,886,140

3.3 计算年增长率

# 计算每年的增长率
sale_rate_22 = (sales_year[2022] / sales_year[2021] - 1)
sale_rate_23 = (sales_year[2023] / sales_year[2022] - 1)
sale_rate_24 = (sales_year[2024] / sales_year[2023] - 1)

# 整理成表格
sales_rate = pd.DataFrame({
    "年销售额": sales_year.values.tolist(),
    "年订单增长率": [0, sale_rate_22, sale_rate_23, sale_rate_24]
}, index=sales_year.index.tolist())

sales_rate

年份

年销售额

年订单增长率

2021

11,104,350

0%

2022

12,883,920

16.03%

2023

16,626,810

29.05%

2024

20,886,140

25.62%

3.4 柱状图+折线图可视化

from pyecharts.charts import *
import pyecharts.options as opts

x = [str(value) for value in sales_rate.index.tolist()]
y1 = [round(value, 2) for value in sales_rate['年销售额'].tolist()]
y2 = [round(value * 100, 2) for value in sales_rate['年订单增长率'].tolist()]

# 柱状图
bar = (
    Bar()
    .add_xaxis(x)
    .add_yaxis("年销售额", y1)
    .extend_axis(
        yaxis=opts.AxisOpts(
            name='增长率',
            axislabel_opts=opts.LabelOpts(formatter="{value}%")
        )
    )
)

# 折线图
line = (
    Line()
    .add_xaxis(x)
    .add_yaxis(
        "年增长率", y2,
        yaxis_index=1,  # 使用右侧轴
        linestyle_opts=opts.LineStyleOpts(width=3),
        label_opts=opts.LabelOpts(formatter="{c}%"),
        is_smooth=True  # 平滑曲线
    )
)

# 层叠在一起
bar.overlap(line).render_notebook()

结论: 2021-2023年增长率持续上升,2023-2024年略有下降,但整体销售额呈上升趋势!


四、地区分析:哪个地区卖得好

4.1 各地区总销售额

import plotly.express as px

sales_area = data.groupby('商店所属区域')['销售额'].sum().reset_index()
sales_area

地区

销售额

APAC

18,227,620

EU

14,698,560

US

11,460,020

LATAM

10,436,680

EMEA

3,314,867

Africa

3,126,195

Canada

237,269

4.2 圆环图可视化

fig = px.pie(
    sales_area,
    values='销售额',
    names='商店所属区域',
    title='各分店总销售额情况',
    hole=0.5,  # 中间挖个洞变成圆环图
    height=500
)
fig.show()

结论: APAC(亚太)销售额占比最大,其次是EU(欧洲)!

4.3 各地区历年销售额对比

# 透视表:按地区分组,按年份统计
sales_area2 = pd.pivot_table(
    data,
    index='商店所属区域',
    columns='下订单年',
    values='销售额',
    aggfunc='sum'
)

# 把宽格式转成长格式(方便绑定不同颜色)
sales_area2 = sales_area2.reset_index().melt(
    id_vars='商店所属区域',
    var_name='年份',
    value_name='销售额'
)

# 分组柱状图
fig = px.bar(
    sales_area2,
    x='商店所属区域',
    y='销售额',
    color='年份',
    title='2021年-2024年不同地区的销售额情况',
    barmode='group',
    height=500
)
fig.show()

五、季节性分析:什么时候卖得好

5.1 按月汇总销售额

# 透视表:按月份分组,按年份统计
sales_year_month = pd.pivot_table(
    data,
    index='下订单月',
    columns='下订单年',
    values='销售额',
    aggfunc='sum'
)

# 转成宽格式
sales_year_month = sales_year_month.reset_index().melt(
    id_vars='下订单月',
    var_name='年份',
    value_name='销售额'
)

5.2 折线图看趋势

fig = px.line(
    sales_year_month,
    x='下订单月',
    y='销售额',
    color='年份',
    title='2021年-2024年不同月份的销售额情况',
    height=500
)
fig.show()

结论: 存在明显季节性规律!

  • 旺季: 6月、9月、11月(销售额高)

  • 淡季: 2月、4月(销售额低)

  • 11月最高是因为双十一促销!


六、新增客户分析:每个月拉新多少

6.1 准备客户数据

data_customer = data.copy()

# 去重:同一个客户有多条记录,只保留第一条(最早购买记录)
data_customer = data_customer.drop_duplicates(subset=['客户ID'])

6.2 按月统计新增客户

customer_year_month = pd.pivot_table(
    data_customer,
    index='下订单月',
    columns='下订单年',
    values='客户ID',
    aggfunc='count',
    fill_value=0
)

月份

2021

2022

2023

2024

1月

197

25

5

3

2月

139

14

6

3

...

...

...

...

...


七、总结

7.1 分析流程回顾

加载数据 → 数据清洗 → 销售额分析 → 地区分析 → 季节性分析 → 客户分析

7.2 关键发现

分析维度

关键发现

年度趋势

销售额持续增长,4年增长88%

地区分布

亚太APAC占比最大,EU第二

季节性

6/9/11月是旺季,2/4月是淡季

客户

2021年新客户最多,之后逐渐减少

7.3 分析方法总结

技能

方法

数据清洗

异常值处理、空值填充、去重、日期提取

数据聚合

groupby() + aggfunc='sum/count'

数据透视

pd.pivot_table()

宽转长

.melt() 把多列转成一列,方便绑定颜色

可视化

pyecharts做交互式图表,Plotly做快速探索

一句话总结: 电商数据分析的核心就是——搞清楚"什么时候"、"在哪里"、"卖给谁"卖了多少钱!

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐