学习数据分析的“里程碑”是什么?
作者:Still
数据分析是一项综合技术。它既包含hardcore的编程技术,也包含诸多分析逻辑的软知识。
记得 靳伟 曾写过一个爆款回答(靳伟:怎样才算精通 Excel?),里面大致罗列了Excel从入门到精通的“五层心法”,包括快捷键、函数公式、图表、数据透视表和VBA等。我更喜欢把它叫做“里程碑”,因为一方面,这些里程碑是每一个攀爬Excel技能天梯的朋友早晚要面对的;另一方面,跨过这道里程碑,Excel技术可以说就获得了极大的提升。
对于数据科学家而言,Excel只是自己技能图表里很小的一部分。虽然数据科学家流派众多,成长路径也各异,很难用短短一篇文章概括成长过程中碰到的所有“里程碑”。但是,依旧有一些东西是共通的。这篇文章就尝试归纳一些我心目中的数据科学“里程碑”。
什么是里程碑?
①“里程碑”是一套知识体系中的重要环节,无论用哪个教程、如何展开学习,它总会是你必须面对的一关。有可能它并不难,但是如果想要在能力上更进一步,这个里程碑是绕不开的。
②跨越“里程碑”,技术就能获得质的飞跃,比如学会vlookup这项不算太难的技能,Excel工作效率就能大幅提升。而如果掌握VBA,就能用Excel做很多原先不可能的事情。
里程碑1:理解是什么造就了大数据时代
想必每一位系统学习过数据科学的同学,都会对“大数据”这个词嗤之以鼻。
不只是因为这个词被用滥了,更是因为它言之无物。大数据究竟是什么?至今仍然没有一个明确的定义。
但是,大数据时代却是真实存在的。与数据相关的科技创新和产业如今已经开展的如火如荼,虽然它们形式各不相同,但放在“大数据时代”的框架下,并没有什么毛病。
这就牵扯到一个很宏观的问题——大数据时代的核心是什么?为什么数据相关的产业能够突然爆发,蓬勃发展?对于这个问题的回答可能会直接影响到数据科学家的职业规划和世界观。
我个人的理解是:大数据时代,是海量数据+算法+运算能力的共同爆发。
海量数据——如今信息技术的发展,让原始数据的记录能力大幅提升。从宏观的经济金融数据,到微观的产业内部数据;从传统的结构化数据,到图像、声音和文本数据。原始数据的大幅增长,为人们理解世界、探索世界打开了更大的窗口。
算法——每一个数据分析用到的算法,都可以说是人类智慧的结晶。他们大多历史悠久,譬如当下最热的深度学习,DNN的算法最早可以追溯到1956年罗森布拉特发明的感知机,而DNN中最核心的BP算法在1975年也已经予以发表。在合适的算法产生之前,计算机的优良运算性能并不能用于解决特定的数据分析问题。但到了现在,为特定业务需求而设计的不同算法已经极为丰富,在性能和效果上都有了极大的提升。
运算能力——运算能力是大数据时代爆发的最后一环,可以说是压死骆驼的最后一根稻草。硬件方面,超级计算机、CPU与GPU的发展、存储与数据性能的提升贡献良多;软件方面,分布式运算的部署思路、mapreduce的计算框架将速度进一步提升,从R到Python再到Golang等等高级语言的诞生,以及层出不穷的软件包,把数据分析的“控制台”做的越来越人性化。
三者缺一不可,但运算能力无疑是最前沿的开拓者。世界上先有少量数据和算法,于是我们可以进行初步的统计分析,但还远远没有达到创造新时代的程度。唯有数据量大幅爆发,加上运算能力突破瓶颈,才能让整个产业的规模开始指数增长。
私以为,只有理解了大数据时代的起源,才能摆明自己在时代浪潮中的位置。
里程碑2:R/Python
两年前,大家在讨论“应该用什么软件来做统计分析”。当时的选项有很多,SPSS,SAS,R,Python,Excel,Eviews,Stata,C++,Java……数都数不过来。
一年前,大家在讨论“究竟应该学R还是Python”。那时候已经是两者二分天下的时代,上面列出来的软件也偶有声援者,但是已经翻不起太大的浪花了。
现在,大家讨论的只剩下“该怎么入门Python”。
两年过去,大量的老牌软件逐渐淡出数据科学家的视野。这些工具软件的死亡姿势,我可以简单概括为下面几种。
1.软件的功能天花板太低。典型代表是Eviews、SPSS之类的界面软件。曾经,他们成名于操作方便快捷的界面,最终却因为界面能够提供的功能有限,软件天花板太低,被新时代抛弃。
2.非开源。典型代表就是SAS,最早SAS曾是大数据分析的最终解决方案,也是唯一解决方案。它采用硬盘读写模式,是当时唯一能克服海量数据运算时内存空间不足的软件;同时由于SAS内置了大量的统计软件库,只需要少量代码就能完成复杂的分析,输出一份专业完善的报表。但是SAS败在了它老旧的语法系统和非开源两点上。SAS语法非常令人头疼,既不是面向对象也不是函数式编程,新手需要花很长时间适应它的语法结构;更重要的是,SAS公司的产品不开源,没有外部package可供调用,根本跟不上算法的快速发展。如今SAS渐渐已经被数据科学家遗忘,只在生物医药和银行系统里还保持着绝对优势(然而这仅仅是因为政策壁垒或是行业惯性)。
3.太难。这里指的就是C++和Java,他们的代码过于底层。好处是运算速度很快,坏处是开发起来很费时间。为了完成一个数据分析,运算速度其实可以适当牺牲,让位给开发时间。或者,完成初期的分析和算法开发以后,把算法交给后端来用C++或Java实现。在业务中,客户和数据分析师都没有太多精力去等轮子慢慢造出来,大家想要的是一个方便好学的高级语言——显然,只剩下R和Python了。
4.死于来自深度学习的不明AOE。很长时间内,R本来还和Python并驾齐驱难分高下。但自从AlphaGo刷屏,深度学习变得炙手可热以来,R开始面临危机,因为目前深度学习的Tensorflow框架、keras包等等基本全部搭建在Python上面。这就很尴尬了,R直接错过了深度学习的浪潮。直到近期,有大神把深度学习的框架转移到了R上面,但是似乎已经晚了,Python已经在数据分析最佳工具排行榜上一骑绝尘。当然R还不至于消亡,由于学术界对R的使用频率极高,几乎所有学界研究出的新算法都在R平台进行模拟测试,所以R的算法包储备是Python无法替代的。
所以我们其实可以发现,当一门数据分析工具诞生之初,它的命运几乎就已经注定了。R和Python由于命令行+开源+高级语言的多重特点,几乎是笑到了最后。而对于数据科学家来讲,这两门语言注定会是他们最好的朋友,每个数据科学家都应该至少将其中一个作为自己的主语言。
这便是数据科学家的一大里程碑。不管之前你的基础如何,当你第一次开始着手学习R或Python,你才算是真正用起了最适合大数据时代的数据分析工具,跨入了新的世界。
值得一提的是,未来这一列表上可能还会加上Golang,毕竟这一门由谷歌开发并倡导的数据科学新工具自从诞生以来,发展一直十分迅猛。但能否加入豪华套餐,既要考虑到Golang自身的奋斗,也要考虑到历史的行程。
里程碑3:Spark
这两年,大数据工程师们有一项共识:自己所有技能列表里,Spark是对于薪资提升最有效的帮手。
Spark具有鲜明的特色。一方面,它是目前最快的数据分析平台,完全实现了对于Hadoop和Mapreduce框架的继承与超越。另一方面,它的抽象程度比较高,需要大量使用lambda函数进行函数式编程,所以非常麻烦;而且Spark的社区完善度远远不及R和Python,虽然Spark基于Scala构建,能够调用Scala和java的软件包,但是它依旧很麻烦;更不用提搭建Spark的分布式计算平台甚至都不是一件简单的事情。
上面那段话里可能出现了很多大家看不懂的词汇。不过没关系,总结起来,关于Spark其实只需要知道两点:
1. Spark特别快!Spark特别快!Spark特别快!
2. Spark特别难!Spark特别难!Spark特别难!
毫无疑问,Spark就属于那种非常不好跨越的里程碑。不过收益与付出并存,至少在我看来,Spark也没有那么难。当适应了用lambda函数写map和reduce之后,甚至会爱上这种感觉。同时,如果有一定java基础的话,Spark也会变得容易很多。
里程碑4:从需求出发思考模型,而非将模型生搬硬套。
当前,数据科学家往往分为三派。
统计派:统计背景的数据科学家,往往喜欢用数学方法解决问题,格外关注数据分析中每一步的逻辑性,非常喜欢做假设检验。由于进行了大量的参数统计训练,对于他们来讲,每一个模型参数都是不可信的,甚至于每一个模型本身都很不可信——直到做出合理的数学证明,并对每个参数进行检验。统计派最初接触机器学习时,往往会非常不适应于其“黑箱”的模式,然而最后往往也只能叹服于模型优越的预测能力。
计算机派:CS出身的数据科学家带有浓重的工科生气质,习惯的思维方式是模块化、按部就班的工程思维。他们更加关心机器学习的步骤与结果,而非每一步的逻辑。好处在于,他们在学习数据分析时不用克服自己的某种惯性,只需要用工程思维做出一个好的模型。坏处就是,有时会太注重模型本身,忽略其适用条件。
业务派:这一派的数据科学家背景可以说是三教九流,但无论怎样,总归是和数据沾点边。他们的思维特点是从业务逻辑出发,特别重视模型构建的前期过程,尤其特征工程。并且,他们始终期待模型输出与他们猜测相符的结果,否则可能就要大发雷霆。
三派人都将成为优秀的数据科学家,但在他们发育完全之前,往往会碰到一些麻烦。这些麻烦我可以归纳为——不看需求,只管模型。
统计派的模型可能是多元线性回归、时间序列分析和非参数统计,计算机派则可能是最流行的DNN、SVM,业务派的模型就是他们的业务逻辑。三者都免不了把自己最习惯的思维方式代入多变的现实问题中去。比如分析房价数据,统计派往往一定要给数据做个回归或是时间序列分析,计算机派喜欢给数据设定Classification标准然后套用分类算法,业务派则一定得先把房价数据的逻辑分析一通,提出一大堆假设,却找不到好的模型来套用自己的假设。
这都不是最好的处理方法。好的数据分析应该是三者观念的结合,即——首先,像业务派一样分析原始数据,做好探索性分析和特征工程;随后像统计派一样谨慎分析模型适用性,选用合理的模型假设;最后像计算机派一样大胆建模,积极调参,向着过拟合的方向不断前进。
总结下来,最重要的,还是要抛弃自己脑海里固有的几套思维模式,从数据本身的分析需求出发,选择最合适的分析方法、数据清洗思路、特征工程和模型。
可惜,这个里程碑是一个玄学里程碑。大部分人可能知道这个里程碑的存在,却不知道自己是不是真的跨过去了。但毫无疑问,能够明白自己要从需求出发,就已经非常难得了。
里程碑5:学会开始改善自己的代码
统计派和业务派最大的里程碑,可能就是理解代码也有代码的美学。
金融从业者可能非常熟悉怎样做出一套漂亮的ppt,统计学家可能非常熟悉怎样写出简练明晰的证明过程。但是,到了代码这里,大部分人还是愿意把自己的IDE当成“草稿本”,觉得把想要的东西做出来就可以了。更不用说对代码本身的改进,就像许多R新人会在代码里写大量的for循环,而且是循环套循环,导致运行时间成倍增长。
事实上也不能全怪他们。数据分析的代码一般不太好写,需要反复尝试,期间代码非常容易写的过于随性,乱七八糟。最后如果偷懒不做整合,也就这么乱下去了。
但是在实际工作中,数据分析的代码依旧需要保证可读性,否则后端改写如何读你的算法?做文档和ppt的公关人员怎么解读你的代码?甚至,你自己能不能在一个月后认出你的代码?
当有这种现实需要的时候,数据科学家才会开始寻找代码的美感。
让代码变得整齐漂亮,还只是第一方面。需要做的是调整好缩进、认真写注释、做好代码的分块、限制每一行的字符数等等。但在这之后,还需要学会怎样提高代码的运行速度(就比如R语言的第一大tip:用apply系函数替代for循环),如何将代码写的更加具有可读性(比如将常用功能定义为函数),不一而足。代码的美学是无穷无尽的,值得每一位数据科学家去探索。
没头没脑写了这么一堆,也不知道看官们是否受用。
里程碑是非常重要的,我们用里程碑来标注过去的成就,新人则用前人的里程碑来作为自己努力的方向。每个人在自己领域里,都能列出诸多的“里程碑”,把它们写出来给新人看看,会是一件挺不错的事情。
来源:36大数据
End.