【数据分析实战经验】1216近期思考

近期思考这个系列,是把我在工作时、上下班的地铁上,所思所想所惑之处,自问自答的写出来。
虽然不知道未来的路在哪里,还是要给自己信心吧,相信自己比随波逐流更难得可贵吧。

①当地时间,本地时间
在业务上涉及到国际业务,有时候为了统一口径,我们会划拨两类时间,一个是北京时间,一个是对应的各国时间。
Q:但在最近分析的过程中,发现营销数据突然下降的很异常,觉得不太现实,就看看数据来源有没有出错。
A:发现原来是因为统一口径的问题,换算成北京时间看,数据是下降的,但业务时间上数据是正常的,这就是为什么处理数据前要先核实一下取数时间,取数范围。
②pd.cut
Q:之前发了两篇实战,介绍打标签的for循环,但现实中数据量过大,导致千万以上的循环耗时很久,用之前那种方式效率太差。
A:发现了个更简单的方式:

pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')

x:被切分的类数组(array-like)数据,必须是1维的(不能用DataFrame);
bins:bins是被切割后的区间(或者叫“桶”、“箱”、“面元”)
right:bool型参数,默认为True,表示是否包含区间右部。比如如果bins=[1,2,3],right=True,则区间为(1,2],(2,3];right=False,则区间为(1,2),(2,3)。
labels:给分割后的bins打标签。labels的长度必须和划分后的区间长度相等,比如bins=[1,2,3],划分后有2个区间(1,2],(2,3],则labels的长度必须为2。
precision:保留区间小数点的位数,默认为3。

##实战例子
a=pd.cut(m['MaxIntimacy'],bins=[0,100,150,300,50000],labels=['宫女','秀女','美人','答应'],right=True)

③透视表组合
Q:实际中当我们做出一个透视表,往往还会涉及到排序和组合,特别是看分布的时候我们会设立一定的区间,比如0-100,101-200,等等
【数据分析实战经验】1216近期思考
A:我们可以右击,选择组合,设定起止,步长,
【数据分析实战经验】1216近期思考
【数据分析实战经验】1216近期思考
④幸存者偏差

幸存者偏差又叫“幸存者谬误”,反驳的是一种常见逻辑谬误,即只看到经过某种筛选之后的结果,忽略关键信息。只看到了一部分幸存者,却没意识到这些幸存者只是极个别的数据。

举个例子:
幸存者偏差”来源于二战中一个著名的故事:
1941年,第二次世界大战中,空军是最重要的兵种之一,盟军的战机在多次空战中损失严重,无数次被纳粹炮火击落,盟军总部秘密邀请了一些物理学家、数学家以及统计学家组成了一个小组,专门研究“如何减少空军被击落概率”的问题。

当时军方的高层统计了所有返回的飞机的中弹情况——发现飞机的机翼部分中弹较为密集,而机身和机尾部分则中弹较为稀疏,于是当时的盟军高层的建议是:加强机翼部分的防护。
但这一建议被小组中的一位来自哥伦比亚大学的统计学教授——沃德(Abraham Wald)驳回了,沃德教授提出了完全相反的观点——加强机身和机尾部分的防护。
那么这位统计学家是如何得出这一看似不够符合常识的结论的呢?
沃德教授的基本出发点基于三个事实是:(1)统计的样本只是平安返回的战机;(2)被多次击中机翼的飞机,似乎还是能够安全返航;(3)而在机身机尾的位置,很少发现弹孔的原因并非真的不会中弹,而是一旦中弹,其安全返航的机率极小,即返回的飞机是幸存者,仅仅依靠幸存者做出判断是不科学的,那些被忽视了的非幸存者才是关键,他们根本没有回来!
Q:如何在数据分析的过程中,避免只看选择后的结果
A:第一、必须确保从总体中抽取的样本是完全随机的,样本和剩余样本不存在显著差异。
第二、如果一组数据中缺少了一些必要情况下的数据,那么对这组数据进行分析从而得出的结论往往是不可靠的,因为这些数据是通过某种预选过程筛选后“存活”下来的结果。
第三、在收集数据时要着眼全局,从多个维度展开分析。
⑤平均数、分布、分位数
举个例子:当我们发现V8以上的玩家第一大额付费平均是在注册XX天的时候,但有可能这个平均值是被某个玩家拉高或拉低,

【数据分析实战经验】1216近期思考
现实中样本常常是不均匀的,不符合正态分布的,很多时候平均值只能用作整体的一个参考,细节都需要看具体分布才可以得到
Q:当我们拿到一个比较图,看看不同等级的人群会在注册后几天付费,数据分布很不均匀,从图上也很难得到很具体的数值。
【数据分析实战经验】1216近期思考
即使很多时候我们看了分布,但想要拿取一个比较准确的数值,就会需要用到分位数的概念

分位数(Quantile),亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等

A:这时候我们可以拉分位数看看,
【数据分析实战经验】1216近期思考
注:如果25%,50%,75%分位数看不到自己想要的结果,就看10-90分位。
⑥关于什么时候用什么类型的图合适
Q:现实中我们会思考如何用最合适的图展示我们得到的数据,让业务部门能够一眼看出关键点。
A:在知乎上看到这个网友的回答:
海洋图:适合非常长的时间段,观察数据的变化,比如一年来的DAU变化。
有多个标题的共同图表:适合季度数据的对比,
树状图:适合多个类目比较,比如最喜爱的商品前10,比如员工的籍贯都是哪里
饼图:只有类目小于4类的时候展示比较有用,其余还不如用条形图或柱状图代替
折线图:时间,或者等级顺序,有次序的类别比较适合。
⑦postgresql如何保留小数位
Q:常常在数据库会涉及到占比之类的计算,此时没有小数位会很头疼
A:使用round(x,y),x代表数据,y代表位数
但因为常常我们是用整列进行运算,需要再用cast进行一次转换才可

## round(cast(A as numeric )/cast(B as numeric ),2)
select round(cast(字段名称 as numeric )/cast(字段名称 as numeric ),4) as 占比 from 数据表名称
4表示保留4位小数

⑧什么时候是除以参与人数,什么时候除以真正有玩(购买)人数
Q:实际中,比如以有消耗特殊道具参与游戏,我们想看整个游戏中人均消耗特殊道具数量,我们是除以总参与人数,还是除以真正那些少数有消耗过道具的人数呢?
A:其实因为这个“人均”表示的意义不一样,我们的数值模拟和估算预期,常常是看整体参与人数,此时的人均就是被那些使用数量为0的人分摊了,表示所有的参与人中,大概一个人会用几个。如果此时几种特殊道具人均都是0.1,0.2这种,就需要看那些真正买了的人,他们的购买深度是怎样的。
总之,正常分析都是先看整体均值(含大量被0分摊的数据),如果得不到结论就看那些有买过的人,他们的购买深度
⑨如何写好一份埋点案
Q:埋点,就是埋下一个个传感器的感觉,将你所需要记录人的行为关键点,记录下来。
中间表和点位信息,就是埋点案中比较关键的东西。
A:关于中间表,
我的建议是
首先,先想好自己要分析什么方面,一定要和产品、运营多沟通,看关键点就好。
其次,想好最终报表格式,分为维度+指标,从哪几个维度,比如区域、日期、等级、购买金额、注册时长、普通场/高级场等等,指标看主要道具消耗,参与人数、活跃人数等等。
最后通过方面+维度+指标,整合你的中间表,比如玩家维度表,活动维度表,确定好唯一值,是一个玩家一个数据,还是一个玩家一个产品id一个数据,还是一个VIP段一个数据。
关于点位:
其实就是你怎么通过计算得到你中间表上所有字段的信息,点位会更细分。点位就涉及到群体的行为,从关键行为出发,比如点击弹窗的,需要返回的数据有:点击时间,role_id,来源途径(上一步是从哪个窗口进入的,道具id,玩家血量等等你想在这一时刻记录的数据,最终可通过对日志的计算得到中间表数据,用来给业务方和技术部门做沟通。

上一篇:opencv-直方图


下一篇:Fisher最优分割法(附python实现)