英国在线零售商数据分析

前言:

数据分析的一般流程,首先确定问题,再带着问题进行下面的分析步骤

分析流程.png

0、分析问题

一份数据可以分析很多维度,为了分析的效率,首先需要明确此次分析的目的(问题)及深度,避免陷入盲目无尽的分析

  1. 订单维度:笔单价和连带率是多少?订单金额与订单内商品件数的关系如何?

  2. 客户维度:客单价是多少?客户消费金额与消费件数的关系如何?

1.理解数据

理解业务指标

我们的问题中有许多业务指标,首先需要理解这些指标的含义

  1. 订单维度:

    • 笔单价

      指每笔交易记录(一张水单)对应的平均交易金额,一般以消费金额除以消费笔数来计量

      商品总额/总笔数

    • 连带率

      指顾客每次购物购买了几件商品

      商品总数量/总笔数

    • 订单金额

      订单单价*订单内商品件数

    • 订单内商品数

      同一笔订单的所有商品件数

  2. 客户维度:

    • 客单价

      销售额/客户数

    • 客户消费金额

      按客户分组的总金额

    • 消费件数

      按客户分组统计的总件数

再理解原始数据,数据共541,909条记录,8个字段

原始数据.png

这些字段的含义分别是发票编号、产品货号、描述、件数、发票时间、单价、订单来源国家

数据探索

查看数据集的情况,可以看到 Description约有1.5k个值缺失,CustomerID字段有13.7w个值缺失

数据集情况
# 增加一个总金额字段
data['sumPrice'] = data['Quantity'].astype(float) * data['UnitPrice'].astype(float)

看一下数值数据的概况


数值数据

可以看到商品数量和单价居然有负值,查看一下这些异常值

异常数据

可以看到发票号是C开头的,得知这是cancel取消的意思,也就是说这些订单被取消了

最大被取消的一单有8万件商品,共有10624条这样的数量为负的记录,后续需要将这些数据做数据清洗

2.数据清洗

  • 空值

  • 异常值

前面数据探索发现Description字段和CustomerID字段有部分数据缺失,无法填充值,所以做删除处理

#删除用户ID字段有缺失的记录
data = data[-data['CustomerID'].isnull()]

异常数据包括数量字段为负值以及单价为负的情况,由于缺失的数据相对于总的记录来说较小,所以这里直接丢弃这部分记录。

# 清洗掉数量为负或者单价<=0的记录
df_success = data[data['sumPrice']>0]</pre>

清洗完的数据有397,884条记录。

3. 数据建模

订单维度

  • 笔单价

    笔单价=商品总额/总笔数,每条记录为一笔交易

# 商品总额/总笔数
    price_per_order = sum(df_success['sumPrice'])/df_success.shape[0]</pre>
得到**笔单价22.40元每单**
  • 连带率

    指顾客每次购物购买了几件商品,所以连带率=销售件数/交易次数

APR = df_success.shape[0]/(df_success['InvoiceNo'].nunique())

连带率约为21.47,连带率非常好!顾客平均每次购买21样商品,这应该是个超市批发数据

  • 订单金额

    每一个InvoiceNo对应一个订单,平均每张订单金额为:

price_per_order = sum(df_success['sumPrice'])/(df_success['InvoiceNo'].nunique())

平均每张订单金额为480.87

  • 订单内商品数

    同一笔订单的所有商品件数

n = sum(df_success['Quantity'])/(df_success['InvoiceNo'].nunique())</pre>

平均每个订单278.86件商品。

客户维度:

  • 客单价

    销售额/客户数

price_per_cust = sum(df_success['sumPrice'])/(df_success['CustomerID'].nunique())</pre>

平均每位顾客消费2054.27

  • 客户消费金额

    按客户分组的总金额

  • 消费件数

    按客户分组统计的总件数

    对于客户消费金额和消费件数,使用数据透视表计算每位顾客的消费金额和件数

# 使用数据透视表计算每位顾客金额和件数
    cust_pivot=pd.pivot_table(df_success,index = 'CustomerID', values = ['sumPrice', 'Quantity'],aggfunc=np.sum)</pre>
按客户分组透视

可以看到排名第一的大客户14646订购数量高达19万件

商品维度

  • 按商品货号分组,计算每种商品的售出数量和销售金额

4.数据可视化

  • 绘制客户的总购买数量及总购买金额(按总购买金额排序,这里仅展示前20名)


    顾客.png

可以看到花钱最多的14646顾客,购买数量及购买金额都是最多的,而购买金额排2、3、位的顾客,购买金额和购买数量比值较大,购买的是一些高价值商品

  • 绘制商品的总售出量和总售出金额

    商品.png

可以看出货号为23843的商品卖的钱最多,而23166的销量与23843几乎持平,销售总金额仅有一半,说明它的单价较低,但客户需求量较高,要保证库存

5. 进一步分析

  • 客户贡献度

  • 商品贡献度

  • 商品关联销售

  • 商品销售趋势

......

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 订单是电商体系的核心,有了订单才有业绩和盈利。 订单中包含商品、优惠、用户、收货信息、支付信息等一系列实时数据。通...
    红豆知南国阅读 10,976评论 2 117
  • 前言:本文数据量来源于网上,是一份CD的消费数据,数据链接会放在文章最后,请需要者自取。本文分析的主要工具为:Py...
    黑哥666阅读 4,210评论 2 7
  • 前言:本文数据量来源于网上,是一份CD的消费数据,数据链接会放在文章最后,请需要者自取。本文分析的主要工具为:Py...
    雅_2f4f阅读 1,816评论 0 7
  • CREATE TABLE IF NOT EXISTS ecs_order_info (order_id mediu...
    cookie口阅读 15,740评论 0 16
  • CD消费分析自己已模仿练习了很多遍,也总结过2篇文章,但任然存在很多问题,主要原因是自己对业务不了解、对panda...
    夜希辰阅读 19,923评论 23 62