互联网数据分析入门(系列之一)
前言 随着互联网行业的不断发展,数据作为最基础的生产资料发挥了极其重要的作用。随着大数据平台的普及,针对各种数据的分析是一项非常重要的基础技能。通过数据分析,我们可以从用户数据中发现新的用户喜好,从业务数据中发现业务的优化方向,从性能数据中发现潜在的性能瓶颈,从线上日志中发现异常指标等等。熟练掌握数据分析的一些常用方法,还会让程序员的水平更上一个台阶。可以不夸张地说,数据分析是程序员除了编程以外最为重要的技能。 但很多时候,大家对数据分析产生一些误解,容易神秘化或者低估数据分析的能力。常见的误解列举如下: Q: 数据分析就是操作Excel,小学生才玩这个。 A: 实际上Excel的确是数据分析最为方便的工具,但数据分析不止于此,python,R,Matlab,Tableau甚至shell都是数据分析常用的开发语言。当然Excel如果用的好,也会产生让人叹为观止的效果。 Q: 数据分析只有做机器学习模型的程序员才需要学。 A: 严格意义上开发训练机器学习模型也是数据分析方法中的一种。数据分析不仅限于给机器学习模型使用,也可以应用到更为广泛的问题分析中,包括性能分析,线上问题排查定位等,基本涵盖了程序员的日常工作。 Q: 数据分析就是用awk,wc,sort等工具写几个脚本统计下数 A: 数据分析范围肯定不只是用工具做个统计,还有建模,实验,可视化等等都是数据分析的范围,近年来更流行的名词叫“数据科学”,很多公司也成立了数据科学团队专门做更广泛意义的数据分析。 既然数据分析这么有用,那我们怎么从哪里开始做数据分析呢?本文作为系列第一篇文章,先从数据分析的整体层次,基础方法和工具介绍开始,更深入的内容等系列后续文章。 整体来说,数据分析可以分为三个层次,分别是观察型分析,干涉型分析,以及反事实分析。篇幅所限,不再详述这三个层次是怎么回事。感兴趣的同学可以阅读参考书目1。 通常意义上所说的数据分析方法主要还是属于观察型分析,重点在于发现数据的规律,从噪声中找到有价值的信号,找到不同现象和数据之间的关联关系。这些分析方法,基本上可以满足大部分常见的数据分析需求。而更高级的“干涉型分析”和“反事实分析”,则需要更深入的工具和方法才能解决。 本文介绍5种基础的数据分析方法,包括指标,汇总,相关,检验,可视化,最后列举了常见的分析工具。 指标 为什么把“指标”作为数据分析方法的第一个方法呢?这是因为很多人在数据分析的过程中,逐渐迷失了自己分析的目标,陷入了为了分析而分析的怪圈。因此,在数据分析之前,我们必须要定义清楚我们这次分析的对象是什么。互联网产品将数据汇总后的结果定义为指标,因此一次分析本质上就是在研究这个指标的相关特性。如果指标没有定义清楚,那么分析就难以找到正确的方向。在数据分析中,需要分析的核心指标也叫“北极星”指标,因为这些指标就像北极星一样,永远固定在天球的极北点。 按照统计方法来分,互联网产品中常见的指标可以分为 计数型 统计型(加和,最大最小等函数) 比率类 聚合二级指标。 将计数型和其他统计型计算区分开的原因是,计数有一类是去重计数,它要求计数的时候做去重操作,这样就不是一个简单地统计函数可以计算的,因此需要将计数函数和其他计算函数区分开。除了一级和二级聚合计算以外,所有的指标都需要窗口范围。例如天级,周级,月级等,这里不再逻辑。指标的以及和二级计算方式分类如下表所示: 一级聚合 二级聚合 SQL样例 指标样例 计数,去重计数 SELECT COUNT(pv); SELECT COUNT(DISTINCT uid) PV(Page View) DAU(Daily Active Users) 统计类(加和,最大,最小,中位数,80分位等) SELECT SUM(dur); SELECT SUM(show); SELECT MEDIAN(time); SELECT PERCENTILE(time, 0.8) 总时长,总下发量,总展现量, 耗时中位数,80分位耗时 比率类 SELECT SUM(clicks)/SUM(shows); SELECT SUM(duration)/COUNT(pv); PV点击率,点展比,页均停留时长 计数,去重计数 平均 SELECT AVG(show) FROM (SELECT COUNT(DISTINCT sid) AS show GROUP BY uid) 人均展现次数,人均邀请人数 统计类(加和,最大,最小,中位数,80分位等) 平均 SELECT AVG(dur) FROM (SELECT SUM(dur) AS dur GROUP BY uid) ; SELECT AVG(dur) FROM (SELECT MEDIAN(dur) AS dur GROUP BY uid) ; 人均时长,人均最大停留时长,人均耗时中位数 比率类 平均 SELECT AVG(pvctr) FROM (SELECT SUM(clicks)/SUM(shows) AS pvctr GROUP BY uid) ; SELECT AVG(dur) FROM (SELECT SUM(dur)/COUNT(pages) AS dur GROUP BY uid) 人均PV点击率,人均页均停留时长 我们做任何数据分析之前,先定义清楚我们的分析目标是哪些指标。例如我们想分析展现量和哪些因素有关,那么我们可以需要先对齐展现量指标的定义公式,是人均展现量,还是总展现量,还是去重展现量。如果指标定义不清楚,那么分析很可能南辕北辙,并不是我们想要分析的方向。定义清楚问题之后,我们再开始后面的分析。...