本文主要是介绍【转载】如何才是Data Scientist?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
发信站: BBS 未名空间站 (Sat Jan 4 17:53:14 2014, 美东)
如何才是Data Scientist?
小弟本是学术界的Bioinformatics Scientist,因生计问题3年前改行工业界Data
Scientist,经历过2家大的互联网公司,3个不同的岗位的Data Scientist。现将这些
年来摸爬滚打中所学所做所想所理解总结如下,抛砖引玉,还请大家多批评指点。
1.1 Data scientist的职责?
DS是数据应用科学家。他应该立足某个应用领域,根据领域需求设计合适的数据产品,
利用可以自动化获取的数据资源,设计合适的算法,采用适当的自动化工具进行数据计
算/合并/转换,最终得到数据产品。DS需要有独立的研究/开发能力,至少应该能开发
出数据产品的原型以及产生数据产品的流水线的原型,如果他能够开发出稳定可靠的工
业级数据处理流水线那就更好,因为通常在工作中找到合适容易理解你的思路并实现的
工程师本来就不是一件容易的事情。
为了履行这些职责,DS需要培养相应的能力。
1.2 Data scientist应该培养哪些能力?
1.2.1 大方向
定义数据产品
DS需要能够敏锐的捕捉数据产品的需求,能够发现并创造对企业有价值的数据产品
。根据最终消费者的不同,通常数据产品分为两类:
内部消费者 通常内部消费者为manager / director之类的人物,他们需要用
你的数据产品来辅助决策,决定下一步的发展/开发方向。由于这种数据产品是内部使
用,对数据流水线质量要求一般,通常要求DS有较强的领域知识,要有分析,写作,做
幻灯的能力。
外部消费者 也就是说最终上百万的用户使用DS的数据。比如Amazon的产品推
荐系统。这种数据产品是企业对外产品的一部分,质量要求较高。这种产品要求DS有较
强的企业级开发能力,本身要是一个合格的Developer。
数据获取能力
加工得到DS的数据产品需要各种来源数据,这些数据可能来自于各种不同的地方:
flatfile, database, api, etc,有着各种各样的格式。为了处理这些东西,DS需要掌
握相关的知识。
数据加工能力
DS首先要有足够的理论知识才能够比较游刃有余的加工各种数据,对于处理文字数
据你要有NLP的知识,处理图像数据你要有数字图像处理的知识,做机器学习应该要有
数学和统计学知识。 通常有两种手段来加工DS的数据:直接使用现成的工具包,或者
自己写程序来实现。然而最终DS都应该有写程序整合的能力,因为数据加工通常比较复
杂分为很多个步骤,为了实现这些步骤的自动化,DS需要将这些步骤整合为数据处理流
水线,不能自动化的则的不能称为“产品”,因为不能有效的利用机器从而无法达到边
际效用递减的效果。
有了大方向,DS需要修炼相应的内功和招式。
1.2.2 内功(思维/知识层面)
Data scientist首先是科学家。形而上者谓之道,DS应该要有足够的理论知识作为指导
。 做好的DS比做好的Developer更困难,因为需要学习和积累更多的东西,但通常领域
知识不容易过时,因此带来的好处是DS的职业生命力可能会较长一些。
领域科学
DS需要深刻理解他所处的领域,成为这个领域的专家。这就好比不懂生物很难成为
一个好的Bioinformatician一样。不懂领域知识的DS就是搬砖头的。 这绝不是短期内
可以达到的事情,需要大量的阅读和多年经验的积累。所以说什么几个月就能成好的DS
是鬼话。 由此可以得出推论:积累非常重要,数据科学家不应该轻易更换从业领域。
数学
数学应该是DS的专长,在工作中会起到引导方向的作用,我自己个人的理解,DS应
该掌握
线性代数:基础
概率论/统计学:猜想大部分DS靠这个混饭
最优化/运筹:碰到合适的问题这个会有奇效
计算机科学
虽然说计算机不过是实现idea的工具,但现实中各种软件工具几年一变,非常容易
过时,为了更容易的理解和掌握它们,万变不离其宗,应该学习不变的理论的东西。
数据库理论
算法: 帮助DS高效的实现程序
函数式编程:让DS脱离接近硬件的思考,设计出更贴近问题领域,更数学化的
程序
机器学习:混饭吃的招牌
NLP/Image processing/etc:这些都是抽象化各种数据,提feature的领域知识
1.2.3 招式(技术/应用层面)
企业比较喜欢自己能support自己的DS。Developer们通常很忙,沟通这件事情有时候也
很麻烦,所以DS最好有单打独斗实现idea的能力。从这个角度出发,我认为DS关于数据
这块的知识面要足够广,以支持自己单打独斗。
操作系统
DS干的活很像大学/科研院所里的Scientist干的事情;用到的各种开源工具也类似
;为了更方便的使用各种开源工具,DS应该选用合适的操作系统,当然这就是Linux。
程序设计语言
DS不应该局限于某一两种程序设计语言,否则实现能力就受到了限制。我认为DS应
该会以下几类程序设计语言:
数据操纵语言:SQL, Pig之类
科学计算语言:R / octave / scipy之类
脚本语言:Ruby / Python之类
企业开发语言:Scala / Java之类
除了这些,Lisp非常值得学习。某种程度上说,Lisp甚至可以归类于内功。 我倾
向于使用开源工具,因为这可以免费获得,学会了就是自己的,不需要给公司带来额外
的支出。
数据库
各种SQL/NoSQL的玩意,Hadoop等等
1.3 Data scientist应该如何做项目?
我的个人经验是DS很多时候需要单打独斗,和developer的集团作战不太一样的。 DS在
自己的领域要有更高的开发效率,因为很多时候DS需要开发原型或者迅速计算一些东西
以便辅助决策。如果自己的地盘上比developer还慢那还成什么话? DS写程序的原则是
能不写就不写,写了就有可能出bug。所以,尽量使用现成well tested的工具来完成任
务。 DS应该会简化问题抓住重点,解决关键的问题,因为单打独斗没有足够的时间,
很难做到面面俱到。
1.4 Data scientist的职业规划?
这个问题很难,我想很多人都在摸索中前进。 呆在一个地方,也许可以慢慢的升为
Senior以及更高,或者转为Team leader,这是两条不同的路。 第三条路,有些文章说
Data scientist => Product manager,但我不知道我们中国人的英语劣势会对此有多
大影响。 选择自己创业的DS没看到多少,是不是因为这个职业本身的性质决定的呢?
希望大家能够批评指正,谢谢。
这篇关于【转载】如何才是Data Scientist?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!