Python绝技:运用Python成为顶级数据工程师
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 数据分析的流程

与解决其他问题一样,数据分析也存在一般的模式化流程,通常可以划分为六个阶段。即明确目标、确定方案、数据整理、实施建模、结果验证和总结展现。

图1.2展示了数据分析的各个阶段。以下将详细说明各个阶段的具体实施思路,以及由“结果验证”阶段回退到“确定方案”阶段的原因。

图1.2 数据处理流程图

1.明确目标

明确且细化分析的目标,是数据分析中极为重要的一点,直接关系到全部工作是否能有效展开、业务是否能有收益。

从“分析目标”的维度,对数据分析做抽象归纳,可以把它分为三种类型,如图1.3所示:①验证型分析;②描述型分析;③预测型分析。

图1.3 数据分析的三种类型

验证型分析,主要指对提出的问题进行数据验证。比如,某公司第二季度的销售额相比去年同期是否有所下滑;或者相比于选手B,选手A的水平是否更加稳定等。提出问题的同时,用数据对其进行合理的验证,就是验证型的数据分析,也是日常分析中最常用的数据分析手段。

描述型分析,主要是从数据的角度说明现状或者问题。比如网站的运营状况可以通过网站的PV、UV或者留存率、转化率等数据指标进行描述。具体选择哪些数据维度或者评价指标来描述数据?就笔者的经验而言,不同领域、不同事物的描述分析的维度虽然千头万绪,但都存在一定的、可以套用的模式。网站运营较为常用的指标有PV、UV、二跳率、转化率、留存率等;网站运维常用的指标有页面平均响应时长、故障率、缓存命中率等;营销常用的有STP理论、SWOT等。这些模式和领域密切相关,是业界同行经验的积累和总结,完全可以吸纳和应用,不必闭门造车。

预测型分析,主要指根据历史数据或者其他的数据信息,对可能发生或者即将发生的事情做出数据上的合理推测。比如,根据某地上年同期的降雨量预测今年同期的降雨量;或者通过ARMA[1]模型预测股票大盘的走向;数据挖掘中回归决策树[2a]对数据的分类,也是一种预测型数据分析。

2.确定方案

确定方案有三个步骤(参见图1.4):①确认能否获取相关数据;②选择可行的分析建模以及实施方法;③制定结果的校验准则。

图1.4 确定方案的三个步骤

能否获得数据决定了分析是否能够进行。在工程实践中,往往有很多可行的分析方法,然而能否获取相应的数据是一切工作的前提。一定要在已有数据的基础上,选择与拟定建模方法,以防止后续工作的徒劳无功。

建模的方法,由简单到复杂可以划分为三类(参见图1.5):①基础分析②数据挖掘③深度学习。这也是本书后续章节的叙述组织方式,虽不能大而全地呈现数据分析的细节,但是基本描绘了整体的知识框架。

图1.5 建模的方法

基础分析主要解答事物的统计特征,以及概率的相关问题。它首先研究是否可以通过均值、方差等简单的统计量来说明问题;其次,分析数据是否符合某种分布,如果能给出数据的有效分布,就可以合理地计算事物的概率。这些简单的分析在某些场景下具有事半功倍的效果。数据挖掘主要解决分类、聚类、关联的相关问题。如果在分析中遇到这几类问题,可以尝试从数据挖掘的角度来寻求方法。深度学习和数据挖掘类似,也是用来研究分类和识别的问题。它们之间的最大区别是:前者能自动提取数据的特征,并对非线性数据集具有良好的效果,有些文献把数据挖掘称为浅层学习。深度学习常用在图像识别以及声音识别的场景中。本书的第5章和第6章将分别对两者进行更为详细的讲述。

一般情况下,应由易到难地选择建模方式,解决实际问题。比如针对一组数据,我们首先要考虑基本的统计量以及概率分布是否能达到数据分析的目标;其次,思考能否运用数据挖掘的方法来对数据做进一步的分析;最后探讨深度学习的思路能否更好地解决问题。总之,兵无常势,水无常形,在具体问题的基础上,只有灵活运用多种建模手段,才能更好地达到分析的目标。

最后,制定结果的校验准则对数据分析尤为重要。在实践中,统计数据的对错往往很难被发现和评估;同时,错误的统计结果或者分析结论在某些时候可能会造成巨大的损失。因此,制定完善的数据校验策略来验证数据分析结果的可信度是极其重要的。本书会在数据校验部分对做校验的一些经验性方法进行简单的阐述。

3.数据整理

数据搜集与整理的难处有两点:①原始数据的渠道来源多样、格式繁杂;②数据的分析必然和业务紧密相关,要做好数据工作,必须以理解业务为前提。

以笔者参与的某项目为例,为了统计渠道商数,会涉及网站PV(PageView)、系统响应时间等指标,后端数据源涉及Nginx日志,MongoDB数据库用户数据,以及其他部门FTP提供的文件等。并且,还需要依据文档以及业务流程,分门别类地进行数据整合,并录入数据仓库,以供后续的数据分析使用。

原始数据的组织管理是否条理清晰会直接影响后续的分析建模。所以,一定要认真严肃地对待数据搜集与整理这一环节。

图1.6中展示了数据搜集的一般过程。其中ETL是Extract-Transform-Load的缩写,其功能是从源端抽取(Extract)原始数据并进行格式化等转换(Transform),最终加载(Load)到数据仓库。ETL是数据处理中最基础的概念,这也表明了它在数据处理流程中的重要性[3]。从业务的角度出发,解耦ETL功能模块,并合理地构建数据仓库直接决定了后续的数据建模与应用。

图1.6 数据整理的过程

4.实施建模

逐步实施已确定的建模方案只是水到渠成的事情。本章第3节介绍的多种数据建模工具是帮助数据工程师高效完成数据工作的利器。这些工具已经包含了主流的数据建模方法,在掌握一定知识的基础上,完全可以将其当成“黑盒子”来使用。需要特别指出的是,这些工具并不能完全胜任大数据的处理工作,本书将在大数据处理的章节详细讲述如何高效处理海量数据。

5.结果验证

结果验证是数据分析中最重要的一环。有些结果较容易验证,比如预测用户是否购买,可以通过预测结果和实际是否购买做对比;但是有些统计数据难以评估其是否正确。比如,通过历史日志统计分析得出当日的网站PV是10,000,那么这个数值的正确性是很难衡量的——日志传输过程中的丢失,或者统计的BUG都可能导致该值存在偏差,但又很难被发现。

以下介绍笔者常用的两种结果验证的方法:①多维对比法;②冗余验证法。

多维对比法是指对于某一项数据,从线和面的维度进行对比。从线的维度,对比该指标今天的数据和昨天的数据,或过去一周的数据是否有较大的波动或者异常;从面的维度,对比该指标的统计结果与本次统计的其他数据是否存在冲突。比如某网站今天搞营销活动,用户数量增加了两倍,但是请求数却没有多大变化,则此时可能存在异常。

冗余验证法是针对某些重要指标、或能直接影响公司战略决定的指标,请多位分析师做同一项数据统计,或者用不同的方式统计相同的指标,并对比结果的差异,找出统计中可能存在的问题。

6.总结展现

数据和数字都是高度抽象化的概念,仅仅以数字的方式呈现出数据分析的结果,难以直观地说明问题。相比之下,图形可以合理而直观地展现数据,能更好地展现和说明分析的成果。根据不同的场景和需求,可以用不同的图形来可视化数据。数据可视化是数据分析中不可或缺的一环。

最常用的几种图形分别为:①柱状图②折线图③饼图④散点图⑤漏斗模型图⑥雷达图;当然在某些特定场景中还有股价图、圆环图、气泡图等。下面我们以某网络商城的手表销售为例,说明各种图形的应用场景。

图1.7为商场从1月到12月期间,某款手表每月的销售量。由该图可以看出,由于口碑或者营销策略的影响,手表销售量逐月攀升。和其他图形相比,折线图能更好地展现数据的波动、趋势等场景。

图1.7 手表的月销售量

图1.8为商场1月到12月期间手表销售的柱状图。折线图反映趋势的变化,柱状图能更好地展现量的变化。

图1.8 商场12个月的手表销售量

图1.9为1月到12月期间,每月手表销售量占全年的比例。从中可以看出,饼状图更加适用于凸显比例的统计场景中。

图1.9 商场手表月销量的全年占比

某手表有A款、B款、C款、D款、E款、F款、G款等七种型号,现在统计顾客对每种型号打分的历史数据,并绘制散点图,如图1.10所示。从中可以看出各种型号手表的评分分布,从而了解顾客对每种型号手表的整体评价情况。因此散点图对于需要展现各种统计分布的场景较为有效。

图1.10 商场手表顾客打分散点图

我们再依据“浏览次数”“好评次数”“询问次数”“售卖个数”四个维度,分别对A、B两款手表绘制雷达图,如图1.11所示。该图简明地展现出B款的“浏览次数”与A款相近,“询问次数”大于A款;但是B款的“售卖个数”和“好评次数”小于A款。由此说明B款在外观上更有吸引力,很有可能是功能或者细节上的问题导致其售卖和好评率低于A款手表。在需要多维数据对比的场景中,雷达图更为适用。

图1.11 商场手表月售卖统计雷达图

数据在分析处理各个环节的流转过程,是一种十分抽象并极易出错的过程。数据可视化的目的就是为了更直观地展现数据的含义,从而让工程师更好地理解数据,提炼价值,降低出错的概率。根据不同的场景灵活运用各种图形呈现数据,能有事半功倍的效果。