作者简介
HeoiJin:立志透过数据看清世界的产品策划,专注爬虫、数据分析、产品策划领域。
万物皆营销 | 资本永不眠 | 数据恒真理
CSDN:https://me.csdn.net/weixin_40679090
文章目录
一、前言
失踪人口终于想起了他的博客账号密码(狗头)。在上一篇商业分析实战《只会环比下降3%的数据分析师还有救吗?》,我们用母婴产品的数据集,详解了多维度单指标如何进行分析。那么本篇将与大家探讨进阶版——多维度多指标的数据该如何进行分析。
二、项目准备
- 语言:Python 3.7
- IDE:Pycharm
- 相关库:pandas 0.25.3、matplotlib 3.2.1、pyecharts 1.6.2、seaborn 0.10.0
- 其他:chromedriver 83.0.4103.39、Edge 83.0.478.37
- 分析框架:5w2h,销售额=UV*转化率*客单价
PS.
- 老规矩代码仅展示核心知识点部分,源码和数据集在文末或阅读原文
三、了解数据,梳理指标
3.1 数据字段梳理
数据集来自“和鲸”的天猫订单综合分析,只有一个文件report.csv,包含7个字段,共28010条数据,具体字段为:
- 订单编号
- 总金额:订单总金额,假设每一单只购买一件商品,该字段视作为商品的标价
- 买家实际支付金额:最终成交金额,分为已付款和未付款两种情况
- 已付款情况下:买家实际支付金额 = 总金额 - 退款金额
- 未付款情况下:买家实际支付金额 = 0
- 收货地址:买家的收货地址,记录维度为省市,共记录了31个省市
- 订单创建时间:2020年2月1日 至 2020年2月29日
- 订单付款时间:2020年2月1日 至 2020年3月1日
- 退款金额:付款后申请退款的金额,如果没有退款,退款金额为0
3.2 指标维度梳理
在天猫母婴商品的分析当中,仅销售量作为结果指标,所有的分析围绕这个结果指标即可。但通过上面的字段梳理可知,除了成交金额作为结果指标外,还有一系列的过程指标,那么就需要对指标间的关系做逻辑梳理。
这里我们引入电商的分析中最经典的公式:销售额 = UV * 转化率 * 客单价
- 指标梳理:
- UV:在本数据集中,没有客户id作为UV数据,但我们可以把订单创建数量作为UV的数据
- 转化率:转化流程为订单创建 -> 订单付款 -> 订单成交 -> 订单全额成交
- 客单价:平均每单的售价,在本数据集当中,亦可以理解为各个产品的销量情况
- 维度梳理:
- 时间维度:(周/日)订单创建/付款时间
- 地域:各省市
- 产品:假设每一种金额对应唯一的产品时,总金额便可以作为产品品类的标识
3.3 数据清洗理
进行处理之前,先通过info函数对数据情况进行初步了解
观察可知,除订单付款时间之外,均没有缺失值。付款时间缺失的原因是用户在订单创建后跳失,缺失也是存在业务意义,暂不处理空值。
另外,订单创建时间和订单付款时间的格式是object,需转化为时间格式,方便后续操作。Demo:
df['订单创建时间']=pd.to_datetime(df['订单创建时间'])
四、先看结果指标,确定现状
对于任何商业组织及其行为,最终目的都是获利,而在不考虑成本的情况下,收入便是最重要的结果指标。在本数据集中,第一步自然是要知道销售额的情况。
实现方法:
- 以订单付款时间为分组条件,对买家实际支付金额求和
- 用matplotlib绘制折线图
从上图可得知几个重点信息:
- 整体的销售额为190万
- 4号出现局部峰值,5-8号持续型下降,每日成交额低于万级水平
- 10-16日共一周时间的销售额几乎低于千级,需要特别留意数据的真实性
- 17日后出现持续型增长,25日出现本月峰值
但仅凭上面的信息并不足以支撑决策,因此我们对案例增加些背景假设:
- 本月的销售额目标是220万
- 除10-16日之外,所有数据的采集均没有错误
- 10-16日的实际日均销售额为2万
在增加假设后,我们可以得知本月的真实销售额为200万,距离目标还差20万。接下来将从公式中的三个指标来拆解是什么环节出现问题,应该如何提升销售额。
五、拆解结果指标,进一步锁定问题
5.1 用户行为路径整体转化率
从字段梳理中可以得知用户行为路径为:订单创建 -> 订单付款 -> 订单成交 -> 订单全额成交。而转化率的计算方法有两种:
- 绝对转化率:每一个环节的订单数除以初始环节的订单数
- 相对转化率:每一个环节的订单数除以上一个环节的订单数
两种计算方式有各自的适用场景,个人理解在了解整体情况时绝对转化率更适合,而加入维度进行对比时,相对转化率则更适合。因此本环节中,使用绝对转化率进行计算。
实现方式:
正常的groupby函数并不能帮助我们对特定列进行复杂的筛选,因此需要手动计算各环节的订单数。
- 求出各环节的订单数
- 订单创建/付款:计次
- 订单实际成交:筛选出买家实际支付金额大于0的所有行
- 订单全额成交:筛选出买家实际支付金额等于总金额的所有行
- 求转化率:用本环节的订单数除以订单创建数
- 用pyecharts绘制漏斗图
rates = pd.Series({
'创建':df['订单创建时间'].count(),
'付款':df['订单付款时间'].count(),
'实际成交':df[df['买家实际支付金额']>0].shape[0],
'全额成交':df[df['买家实际支付金额']==df['总金额']].shape[0],
},name='订单量').to_frame()
# 绝对转化率=各环节订单数/订单创建数
rates['整体转化率']=rates['订单量'].apply(lambda x: round(x*100/rates.iloc[0,0],3