数据科学之路(下)


(kikidai) #1

我在几万人, 两百人, 五十人, 20人的公司都待过。有个感觉,创业团队,是不太需要数据科学家的。国内不少互联网创业公司还在相当粗放的阶段,先有个产品,野蛮生长之后,对于数据的态度是跑马圈地的,而不是食不厌精脍不厌细的,有的玩的是流量经济,有的项目纯粹是砸钱,拿补贴主导的,还有的离钱特别近比如金融和手游,他们不太需要数据分析,更不需要数据科学家了。除非是做算法服务的公司,越初创的互联网团队这种岗位越少见。

一家公司是否需要数据科学家,一般发展流程是这样的。 首先就发现技术、算法并不是唯一的! 你瞎兑付做一个都能做80分,为什么要做95?相比之下,活下去,找准行业,做好产品,找流量推广,然后进行迭代试错才是最重要的。 下一个阶段,可能发现: 诶, 成了! A轮B轮,刷存在感扩张团队,增长业务,上手数据,这个时候会需要架构师,日志数据不管有价值没价值,先存着!之前都在做产品,但是之前根本没有考虑过数据,存的格式,存的质量,完整度,根本不管,我随手就往mongodb里面一扔,里面啥都有,无所谓嘛。 然后很快我们就会发现,我们在这个阶段迷失在数据中太正常了。因为投资人也好,高管也好,越来越频繁的需要看数据:增长情况,流量情况,报表的正常情况和异常情况。然后瞬间产生大量一次性的需求,数据库工程师随时都要去在没有前因后果,没有邮件驱动的情况下做一下,搞好几个大的join,大的聚合,人的工作效率本来就不高,跑一个sql 3个小时,还能不能干别的了?去干别的之后又要切换回来去整理这个结果,发邮件,效率特别特别低。 然后大家终于意识到确实需要数据分析师、甚至是数据科学家了!然后从0开始建立团队,重新思考数据团队和原有团队的关系等等。有的没思考明白,做的一塌糊涂。有的思考明白了,但是团队太累,疲于奔命。

![](data:image/svg+xml;utf8,)

传统行业把这些称为Business Intelligence,BI的工作。只不过呢,传统行业是oracle,teradata的OLAP数据仓库,一个rack 500万人民币,在互联网的员工有几个玩过的?他们只认Hive,HBase的dataware house。然后聚合出来的小数据,用mysql支持展现。传统行业叫报表工程师的,互联网也能叫数据分析师了。 当初创公司真正意识到,要有hadoop团队的时候,下一步自然而然的,才会要有数据科学团队,真正去做一些复杂的数据挖掘研究和项目。

![](data:image/svg+xml;utf8,)

再说说这个岗位需求的变化。美国http://indeed.com的数据科学家岗位,可以看到一直在增长,到14年初的时候我就看过这个趋势,关注了一下觉得哦下降了,看来需求不大了。但是可以看到14年中,猛增。我个人的一个猜测是,NVidia在14年7月官方推出了CuDNN,真正的能让大家方便的在GPU上做deep learning,同样耗电量和价格的设备,模型训练差出几十倍,这让很多深度学习训练框架变的更加自由和简单,大家发现哦原来GTX 960比CPU单核训练快50倍,更别说泰坦了,泰坦才多少钱啊?一千多刀,一千多刀能买台2U大内存的E5志强吗?二手可能都买不到。数据科学家就感觉到了,之前深度学习都是拿CPU耍大刀,现在战术核显卡已经可以走进千家万户了,赶紧升级装备库。
caffe、theano、mxnet、tensorflow这些计算框架的产生,到16年大家玩儿的越来越high了,可能到了什么程度?一个图像工程师只要有人带,半个月就转型做自然语言处理了,从未如此简单,5成时间读文献综述,2成时间看开发文档,3成时间算法实现和比较,踩一些代码的坑,能力嗖嗖就上去了,可能Spark日趋完善也有一部分原因,14年8月我记得是Spark 1.0到1.2吧,也是越来越完善的。然后很多公司一看也着急了,是不是现在不做深度学习,不做Spark就落后了啊?赶紧疯狂的开这种岗位。好吧,以上是我不负责任的猜测,总之这个岗位的需求重新找到了上升势头。
(7月份Spark居然都2.0了,真是日新月异呀,身边迫不及待的小伙伴都玩上了)

![](data:image/svg+xml;utf8,)

介绍了这么多我就要给大家迎头泼一盆冷水数据科学家很酷, 但是???但是怎么样呢我大概从两个角度来讲。

![](data:image/svg+xml;utf8,)

还是刚才说的,很多团队一开始是没有数据科学家这个岗位的。这种互联网公司一般是这样:架构师汇报给CTO,CEO,满足产品底层的功能点,产品运营设计产品,最后跟后端来对接。产品关心的KPI他们自己不会写,就会找报表工程师来对接,比如他们关心用户留存,关心产品盈利,写清楚我要看什么,把设计文档交给报表工程师。这时候,只要报表工程师能看懂数据库架构底层是怎么回事儿,按部就班的按照设计文档做完就行了,大家都觉得,我完成任务了啊,满分。

![](data:image/svg+xml;utf8,)

然而数据量越来越大,越来越疲于奔命的时候,一个新的团队,或者新的职能类别产生了,但是这个新来的职能,位置十分尴尬,不容易跟别人搞好关系,也不容易证明自己。就像我刚才说的:
首先是跟决策者的关系。聚类或者预测。做出来了:,决策者首先就会问: 跟我们有什么关系?能多赚多少钱?对我们知识上有什么提升? 站不到这个高度,没人认可。 然后是跟产品运营的关系。这些人往往觉得,我只关心业务就行了,你负责造数据,我负责拿数据思考,或者他们觉得,这不又来了一个报表工程师吗。或者他会有另一份数据来自报表工程师,一旦口径不一样,就先入为主,怀疑数据分析工程师到底做的对不对。 数据架构/报表/BI工程师这些人是比较务实的,但是你要让他们理解为什么需要那么多奇怪的新东西也很难,你的出现,只会给他们带来工作压力,却没带来好处,从机制上他就不可能发自内心的支持你,如果你不保证产出他可能连底层资源都不会给你不会让你去试验,何谈实现?再一个,就算资源给你了,如何让他相信你中间数据是最终结果的100倍是合理的?他会觉得第一你做这个东西可有可无,第二资源本来是倾斜我的,现在倾斜你了,我不接受。所以这个也得慢慢来。 所以说,当一个企业中没有数据思维,没有数据文化,数据科学家做的事情要么决策者不支持,要么架构不支持, 落不了地。你十八般武艺样样精通万军之中取敌将首级,老板说,去吧,给我做个西红柿炒鸡蛋。这盆冷水足够把你浇的怀疑人生,但这里头就是人性的东西,跟技术无关。
以上说的其实是一种极端情况了,还有另外一个方向的极端情况,就是太过于追求什么都懂,最后一事无成。

![](data:image/svg+xml;utf8,)

比如这张图,大概13年出现的很火,IBM做的一张图,它的名字叫做,『不,你还不是数据科学家』。可以看到这个图非常乱,简直就是个大杂烩了。如果这张图你基本上一无所知或者知之甚少,没有什么项目经验,但是一腔热血就想做数据科学的话,我可以保证你会很酷的迷失在技术的海洋里。大家有兴趣的可以慢慢看,千万不要当真了,稍微看一下。 1. 数据库基础: 有点像信息管理科班的大学课程方案,都比较熟悉之后可以任职数据工程师。2. 统计科班的学生应该有的基础。3. 偏重于跟语言无关的数据结构、算法的理解,但是它很奇葩的加了一个R语言,R语言特别好上手吧,但是R实现很多数据结构其实并不顺手,大学打的基础更多是C,C++,Java的基础,现在也有很多用Python替代。4.5点就是机器学习算法了,第四点里面有很多所谓十大机器学习的东西,第五点跟自然语言处理NLP走的比较近6. 是传统BI的东西,用到的工具也是大杂烩,R,Javascript的方案,Tableau等等7.8.9. 就是在架构层面和算法层面做简单处理10 又是一堆具体程序语言的大杂烩 13年的时候我把这图当成桌面,可是后来才发现可以说这张图就像当年的我自己,对各种技能树的理解都差的一坨屎,我有技能但是没有形成体系。每个人的好的知识结构都是网状的,而不是这种单独一条线走到黑的。 而且,不管是Hadoop生态、还是开源科学计算工具、还是高性能计算和存储,我们最容易碰到的问题,根本就不是没有工具,而是迷失在工具里,一边花时间学一边被坑的几率很高。所以说培养一定程度的洁癖还是有必要的,要做减法,知道学习很容易,知道放弃哪些不容易,学生党还好,对于工作党、家里有娃的朋友尤其如此。所以不论如何,如果你在任何场合看到类似的图,都要知道这上面起码60%是不必专精的,这世界上每一个点都有太多比我们更专精的人。更具体的会在最后去介绍。
所以说接下来看这张图。

![](data:image/svg+xml;utf8,)

学东西还是注意质量,不要只注意数量。左边这张图就说明了,你会十五种程序语言,其实薪资不如会7种语言,因为15种更可能就是样样稀松,不会是样样精通。 对于绝大部分公司而言,20%的人构成的团队能够产生80%的业绩。一个优秀的员工应该有信心做这top20%的人,轻松顶5到20个新手。但是如果我们过于强调什么都会,最终的结果就是什么都没做好,人脑的构造天生就不是设计成多线程的,集中优势时间去工作去思考重要问题,把一部分边学边成长的机会留给别人也是必要的。应该年轻去选择一条适合自己的路,只和自己比,每隔三个月, 看看自己技术上有没有进步?做一些规划: 未来一段时间要掌握哪些大块的知识,掌握到什么程度? 最后呢,如果你真的想贪多求全,努力又聪明,是有可能最后每样都比别人强,这就是通往大神之路了,这时候其实你也是不需要和别人比,看别人只会拖慢你的进度。

所以说谁最适合,或者说最有可能成为数据科学家?

![](data:image/svg+xml;utf8,)

这是一个接地气、结果导向的工程师岗位,要着眼于把东西做出来,其次呢坚持,会在持续的学习中思考,发现万事万物的联系。这两点都是虚的,实的东西就是如果你恰好有应用数学+ 计算机科学的跨学科背景,恭喜你,赶紧上船吧!当然,物理、电子等方向的朋友也不要怀疑人生,你们的知识框架也是很适合的。总之就是理工类专业会对数学工具、数据比较敏感。比如统计时间序列学了半天,发现理论框架完全不如EE里面的控制理论,反馈系统,赶紧升级装备吧。比如研究了很久的小波分析的人,发现流体力学里面有更好的模态分解工具;比如本来是计算机系的朋友,搞着搞着搞优化理论了,这块对数值计算和数学功底要求一点都不低。很多经济学啊,社会科学,神经科学里面也有很多命题和方法论,就不在这展开讲了。空杯心态意思就是,尊重和吸纳他人的好东西。

![](data:image/svg+xml;utf8,)

说说数据科学的知识储备。

![](data:image/svg+xml;utf8,)

能看出来我高中大学受的是非常传统的工程数学和物理的教育,然后研究生之后开始系统的接受统计学训练,刚毕业一直到工作才开始补计算机的东西。我还是觉得从各种工程数学中寻求到了非常非常多解决实际问题的灵感。 前一阵有个事情闹得沸沸扬扬的,新东方老师李笑来办了一个班,就是说全栈工程师1年五万块钱,能培养出来。最近也看到一个Quora的回答,说10天100小时上路数据科学。现在的年代就是,只要你有程序基础,别连一些最基本的原理都不明白,有些开源工具要上手使用框架,调用API都很容易,网络也这么方便对吧,无非就是找资源学习就可以了。自己有心做东西,也有机会去思考,怎么把碎片拼接成一个可用的系统,时间,精力,公司给的资源够不够?等等。 但是什么东西是一年学不来的东西?仍然还是数学。 学数学的好处在于,一开始你就会对最适合的方案,大概的性能有所了解了,不会从0开始想象,开始瞎做,如果跟你的预期有很大有不同,那么你排查错误也好,排查系统性能瓶颈也好,是有章法可寻的。最简单的问题排序, 它的时间复杂度空间复杂度是多少,你大概心里有个谱之后,去做一些简单的代码试验,很轻易的就能选出满足这个性能的工具了,因为你知道不可能再有超越这个数量级的方案了,不需要一个一个的比较过去。 我就有几次测试性能的时候把矩阵乘法错误的写成了矩阵的entrywise的乘法,也就是对应项一个个乘过去。速度远远超出了我的预期,我预期这个速度更接近O(N^3)而不是O(N^2)平方对不对,那做出ON^2肯定是我做错了嘛。做数据的人最怕什么,最怕的是代码没bug跑通了,于是你结果彻底是错的。那对性能的理解可以在一个侧面上避免这种错误发生。 所以不管是在什么阶段我都在一直思考数学和工程的关系。再说说技术储备。

![](data:image/svg+xml;utf8,)

如果就只说程序语言这个东西,很明显前面一半更偏架构和工程实现,后面一般更偏算法研究,所以我在这也特意为大家用红色和蓝色圈出这两部分,自古红蓝出CP嘛。从工程角度看呢,国内C++的岗位远远不如我列举出的这几种语言的岗位多,这也是事实。从算法角度看,有一大批熟悉R Matlab SAS的分析师其实是有潜力变得更接地气的,就是你得工作得能接的上工程,那基本来说学Python是最划算的。 再一个大家也会发现蓝框红框是有重叠的,不是说两者全然的分工,你的活我不干我的活你不干,但肯定是各有所长的。如果你想往偏架构的方向发展的话,应该对左边这一部分和中间这一部分比较熟悉,你接触到的任何存储服务,任何数据库,任何API或者数据计算流,一定要连续问自己几个问题,IO性能怎样?索引怎么设计?就拿二维经纬度地理数据来说,每一家公司都有自己满意的方案,twitter做过geohash,各种数据库的rtree索引,各种公司宣称自己开发的地理围栏等等,只要你够敏锐你就能够快速get到一个专题去学习。 中间这一块其实我是觉得不管偏算法或者偏架构都值得去研究,去做一些数据服务、计算加速、这些也是必备的知识。 如果你想往偏算法发展的话,肯定不能觉得100个小时学习就算完事儿了,前面的路还是很长的,主要就是掌握几种主要的语言,在某一个或者某几个领域内不断做机器学习的研究,碰到比较大的数据集可以和偏架构的同事协作完成数据的处理,也可以在没有别人协助的情况下独立完成数据服务API的测试。最后最主要还是你做的这些算法直接跟业务对接,所以比如说你一点经济学基础都没有,然后去做风控,你算法做的飞上天,可能也不如在私募的风控总监用Excel做得好,所以业务专业性帮助也是很大。 限于版面原因我就不想把一大堆东西都写在上面了,大家要想把自己的路越走越宽,仅仅了解现状是不够的,比如我们现在的X86架构是比较稳定了,但是很多物联网行业的同事、很多电子电路工程师对于ARM架构、对于FPGA芯片、ASIC芯片都是很熟悉的,我们算法工程师之前是与他们隔绝开的职能,以后会越来越倾向于融合。所以就算我们不关注未来5年的发展趋势,最近1-3年的格局总该了解一下,对吧?Intel 167亿美金收购Altera,软银234亿英镑收购ARM,都是套路。Altera走PCI-E接口给Hadoop做的加速计算卡已经出来实体了,ARM做通用计算/深度学习现在NVidia的TK1/TX1也在稳步发展中,不了解最近1-3年的格局,连现在的东西都不清楚,那以后你可能会疲于奔命。

![](data:image/svg+xml;utf8,)

好如果你之前不是很熟悉这个岗位,但是已经跃跃欲试了的话, 那么现在就上路吧。

1

![](data:image/svg+xml;utf8,)

如果你想走一条偏算法的路,首先向你们推荐的就是学习Python语言,下载Anaconda集成发行版来学习,一遍学程序语言一边学算法、机器学习这些东西。这套工具是Scipy的作者开发的,后来他单干了,做了http://continuum.io,拿到了DARPA的融资,搞出的产品群越来越大。有云服务,也有集成hadoop的企业级解决方案,但是本身Python发行版这块是免费的。专门为了数据科学家开发。支持硬件加速、数据分析、可视化、流式处理,这个发行版为数据的全生命流程打造了一个非常好的生态系统,可以说其他语言下的其他工具几乎没有办法达到这种灵活性和全面性。 拿什么写Python呢,要么IDE选择Pycharm,要么编辑器选择Vim/Sublime Text3,之前的朋友同事选择这几种工具的概率还是很高的。

当然我们不能只有工具,还得干活。
数据的操纵部分,有很好的基础数据整合、清洗工具 ,有各种数据库的Connector去读写数据,还有如果你得数据是从Hadoop里面来的,或者你想对一个算法做简单的并行,一个好方法就是使用PySpark 数据分析部分也很多,比如给了几个方向,学统计的,搞机器学习的,搞其他一些工程算法的,搞深度学习的等等都有相应的工具。这里头我没用过的就不给大家介绍了,用过的都是很不错的。尤其是红笔标出来的,上次就有朋友问说我真的不想看paper,我就想上手实际操作!然后我的劝告是什么呢,不看paper,那些参数给你,你也不会用,只能瞎搞。但是如果你觉得先搞起来比较有成就感,那么我就希望你能像读书一样直接去读文档,就这三个红色的。一点不漏掉的读,才能对自己的武器库很了解,这个帮助相当大。 好了,如果说我们的机器学习出了很好的效果,我们迫不及待的把结果展示给别人怎么办?熟悉Ipython notebook是很好的,熟悉bokeh也是很好的,它们都能建立起自己的server给别人访问,别人就能看到我们的成果,而且虽然丑了点,但是不用从头开始搭web框架。这就不像传统的BI,java开发10个人月,现在拿这个做2个人月吧。 最后,如果结果也论证完了,或者有一些模型要有小规模验证了,这时候我们就得提供数据访问接口,学习一下django,flask,tornado三个中的一个是不错的选择。 这说的就是偏算法的路。
2

如果说想走架构的思路,比如数据库特别熟悉,Java开发特别熟悉,直接从Cloudera公司的大数据平台开始学就可以了,学习成本特别低。比如先下载一个虚拟机看看里面的功能,Hive的UDF开发,HBase应用开发,还有Spark的使用,这三个是比较基础的,还有其他的工具在具体项目中可以积累大量的经验。这样你最少也能够知道,数据从这里那里过来,原来数据挖掘在Spark里面是这样那样实现了一个算法或者功能点,就此从纯Java开发走上了数据科学之路。跟其他只会搞数据挖掘的人谈笑风生。

![](data:image/svg+xml;utf8,)

如果有资源的话可以大家可以用CDH Manager自己部署集群进行测试。这个是Hadoop部分的。
还有大量底层架构的东西,如果你还停留在感兴趣而没有动手去做的话,我认为掌握docker是第一步,然后去多多学习。比如你想要某种数据库的功能,快速试验一下性能怎么样,API好用不好用,那安装docker,然后拖镜像文件就好了。最近使用或者实验的镜像,包括Pyspark,PostgreSQL,ELK三件套,甚至是CUDA计算环境都有镜像,马上下载了就能用。 为了照顾到docker的可扩展性和可用性,docker swarm这个集群管理工具也是有很多团队在采用,建议有兴趣的 想走架构师这条路的人搞一搞,是不会让你失望的。

最后也要说一点,这些内容还是比较泛泛,活跃在各个领域的精英可能会觉得讲的不够透,不够爽,不过我也尽可能的把大局观和细节都照顾到了。感谢各位的收看。 本次内容是由北美华人技术社区BitTiger发起的,BitTiger社区有很多实用又好玩的技术分享等待着大家去学习和交流。 下面是我的微信公众号,定时分享经济、金融、互联网技术、机器学习相关的文章,偶尔跟朋友们扯扯淡。 这两个公众号如果大家感兴趣,可以关注一下,看一看历史文章是不是合自己的胃口。再次感谢BitTiger的邀请和各位观众的支持。

本文作者:yipansansha,欢迎关注“一盘散沙的工作间”,微信公众号:yipansansha_workshop

更多精彩内容,欢迎访问官网 http://BitTiger.io 或关注 “论码农的自我修养” 微信公众号:bit_tiger