在数据爆炸的时代,决策是依赖于数据,无论分析师还是运营业务人员,如果自己能够获得数据,将会大大提升工作效率。那么你以为这个很容易,实则不然,往往埋伏了很多坑。
数据分析最基本的功底是保证获得数据是准确的,否则分析结论的置信度大大降低。那么这80%最苦最累的活,如何省力高效的做好,DO君给新人们分享一个取数秘方:“做菜法”。
情境:作为一家电商公司的刚入职的数据分析小白,有一天商务部的同事给你提了如下的需求:
* 月份商品订单的分布;
* 会员中男性和女性购买产品的偏好?
* 取出会员购买的quantity分布是什么样的?
01 做什么菜?
在出门买菜之前,大概想一下今天要做什么菜及需要什么食材和对应的量,列个清单。结合到工作中就是:根据需求的目标,画出excel表格,列出口径;
e.g. 会员中男性和女性购买产品偏好是什么?
02 准备菜
清理坏掉的菜叶与洗菜和切菜,完成做菜前的准备工作。这个过程是要有洁癖的。
首先我们要预览下明细数据,知道数据集中字段对应的是什么内容。
- 字段定义与口径
如果对需求中涉及的字段不了解,一定要寻找数据创建者或者数据所有者咨询。
字段的真实意思与字面意思并不一样。e.g. 这里的date日期指的是?下单日期还是送货日期?
字段下的数据是经过后期处理后的数据,需要确认处理逻辑,e.g. amount是如何计算得到;
数据值是固定值还是动态值?不同时间下的数据会不一样,e.g. amount 订单金额是支付订单的吗,是否包含退订的;
- 数据类型是否准确
quantity的字段不是数字型,不能进行汇总计算sum,计算的时候需要转换数据类型,可以使用函数 cast进行类型转换;
selectcast(quantityasINT)fromtmp_bu_vac.supermarkets
- 最大值与最小值,发现是否有异常值;
针对quantity的字段发现有999和-1的异常值,需要剔除对应的行记录;
selectcast(quantityasINT)quantity,count(distinctorderid)fromtmp_bu_vac.supermarketsgroupbycast(quantityasINT)orderbyquantityDESC
- 维度字段中值的分布怎么样?
识别是否有空值及对应的比例;如果字段空值率过高,利用这个字段分析的置信度就很低。发现在性别中有少量空值,分析时需要剔除。
selectgender,count(distinctorderid)fromtmp_bu_vac.supermarketsgroupbygender
- 重复值
识别出重复值的行记录,然后判断明细记录,是否需要剔除。因为是一个订单表,所以判断订单字段是否有重复;
selecta.*fromtmp_bu_vac.supermarkets ajoin(selectdistinctorderidfrom(selectorderid,count(orderid)fromtmp_bu_vac.supermarketsgroupbyorderidhavingcount(orderid)>1) )b ona.orderid = b.orderid
发现有2个记录是完全重复的,所以在分析的时候需要剔除掉;
selectdistinct*fromtmp_bu_vac.supermarkets03 做菜与菜做的好坏
数据的获取与数据出来后的交叉验证。
- 先看下菜谱,了解做这道菜步骤:需求的取数逻辑是什么?我一般喜欢在草稿本中先写出来,怎么处理;别先着急取数,欲速则不达,宁愿多花点时间理顺逻辑;
- 菜的好坏判断(通过和网上图片对比或者做过这个菜人来评判下):通过第三个数据源比对(比如自己数据仪表盘上的销量总数,做个对比,判断数据是否对);
如果有错,或者看不出来错的场景下,抽取小样本进行明细的比对,定位是自己处理过程有问题,还是本身数据源有问题;
04 高效做菜的tips
-踩坑知识点记录,笔记软件同步(安利有道云笔记),可以多端同步,非常方便。
-sublime编辑器,方便以后复用,不用每次都写一遍,同时分析的代码及时写注释方便后续快速复用。
-相似处理计算逻辑可以做成POWER BI模板,下次可以直接读取结果,适合为需要可视化判断的数据;(下次单独一篇来分享)。
网友评论