民生银行张丹:如何用R语言打开面向数据的思维模式

原创
CIOAge
揭底R语言如何快速帮助我们构建出能赚钱的数据产品。

【51CTO.com原创稿件】2017年12月01日-02日,由51CTO主办的WOTD全球软件开发技术峰会将在深圳中州万豪酒店隆重举行。本次峰会以软件开发为主题,数十位专家级嘉宾将带来多场精彩的技术内容分享。届时,张丹先生将在“编程语言与框架”专场与来宾分享"面向数据的思维模式和R语言编程"的主题演讲,为大家详细阐述“如何用R语言高效、优雅地解决数据分析中的问题,进而拓展编程思维。”51CTO诚邀您莅临大会,与我们共享技术带来的喜悦。

科技变革让更多IT人迎来了职业生涯的“好年景”。但就在大家都热情高涨地去研究怎样用Java、Python、C等编程语言写出更多好玩或大热的互联网产品时,另有一种小众编程语言却犹如华丽的魔术师,能给工程师们带来不一样的编程体验——它就是R语言。

“R语言可以快速地帮助我们构建出能赚钱的数据产品。”说到R语言,具有10年IT编程背景的张丹深有体会。目前在民生银行从事高级数据分析师的张丹,长期从事金融大数据研究,在他看来,掌握数据“密码”,在工作中多采用面向数据的思维模式,可以从程序员、算法工程师、分析师的自身价值方面带来巨大的提升。

 

认识R语言,感受它的独特魔力

“R语言的价值主要体现在数据分析的效率上。当我们了解一项业务后,经常会从数据的角度提出一些对业务提升的想法,那么你可以尝试用R语言花半天时间,先验证你的想法是否可行。当然,你也可以用其他的语言来验证,只是可能要花很长的时间,之后可能变成一个工程问题,远离了最初的目标。当你的想法被快速验证后,就可以决定是否要去做这件事了,后面你可以招一个团队,再用C++/Java等语言重写R语言的原型。”张丹说。

[[207538]]

 【张丹,《R的极客理想》系列图书作者,前况客创始人兼CTO。10年IT编程背景,精通R ,Java, Nodejs 编程,获得10项SUN及IBM技术认证。丰富的互联网应用开发架构经验,金融大数据专家。个人博客 http://fens.me, Alexa全球排名70k。著有《R的极客理想-工具篇》、《R的极客理想-高级开发篇》,合著《数据实践之美》,新书《R的极客理想-量化投资篇》】

其实,R语言的独特性与这门语言的出身密切相关。对此,张丹给出了更详尽地解读:首先,R语言与其他编程语言的出身是有区别的。其他编程语言,不管Java、Python、C++,还是Node.js,都是由工程技术类的人研发的,而R语言最早起源于统计学家。“统计圈跟互联网这两个群体的思维模式是非常不同的。互联网在中国已蓬勃发展了十多年,像Java、Python等语言通过互联网传播很快,流行度也很高,而R语言在统计圈中传播就显得很慢了。尽管已经发展了20多年,但目前它依然属于小众语言。”

其次,在2013年前后,当大数据变成人人都在聊的事情时,R语言借着大数据的兴起,也在这个时候被大家所认识,小火了一段时间。原因是R语言是做统计的,利用它的一些统计计算能力,大家认为可以很容易基于大数据去做分析。尽管当时只是一个噱头,不过确实将R语言给炒了起来。“现在来看,其实R语言能做的事远远不是那么简单,我们要认识R语言,就需要有一个思维模式的改变。”张丹认为,这个思维模式跟R语言的根有极大关系,“你到底要用R语言干什么!”

事实上,R语言擅长的事有很多,包括做数学计算、数据处理、统计分析、可视化等,但它并不擅长做Web开发的工程项目。“做工程的人可能用任何一个语言都会比用R语言来得顺手,但如果是做建模、做策略的人,可能会觉得R语言更为方便。”那么,对于从事编程的人来说,如何转换一种思维模式能更好地支持业务?

张丹认为,“数据很重要,要想把业务做好,需要有更高质量和更好来源的数据。如果要做好数据产品,我们的思维模式是需要发生转变的。一个工作5年的工程师,他已经熟练掌握了某种编程语言,当他接到一个项目需求,他可以快速写代码完成开发任务。如果把项目目标变一下,不是如何做出来,而是如何让这个事情变现,或者能够产生看得见的价值,那么要怎么去写代码?这体现的就是一种思维模式的变化。如果你早就有了这种想法,那么在跟业务部门沟通中肯定会聊得非常融洽,因为你做的就是他们想要的。可这样一来,你跟你的整个技术部门可能就会聊不到一块去,因为大家想的是‘我如何少写几个Bug,我的程序性能怎么能快一点。’”

还有,比如在解决性能问题的时候,其他语言基本都是基于传统的数据结构和算法理论进行算法优化,所采取的常规做法是将时间复杂度为O(N^2)的算法优化成时间复杂度为O(Log(N))。那么,这种优化在数据领域是如何解决的?

张丹解释说,“换个视角来看,O(N^2)的算法是二维的,实际上就是一个矩阵,或者叫一个‘面’。如果我们能一次算一个面,一次循环就是一个面,两次循环就是两个面……以此类推,基于这个思路,我们就可以试想用O(1)来取代O(N^2)了。这种方法其实是从数学的角度,用线性代数的思路来提升性能效率。而这种计算效率提升方式,要比原来的处理方式能够直接提升2个数量级。之所以产生这样的效果,是因为你在一个领域去想方法,接近极致的效率也是有限的。如果能拓展新的思维角度,那么就有机会做出巨大效率的提升。”

 

转换思维,就是给自己更多的成长空间

写过R代码的人,都觉得R语言的代码书写很随意。这既是缺点也是R语言代码高效的体现。不管是用Python,还是用Java,开发者在写代码的过程中都需要沿用既有的一些代码工程类的格式规范,比如写Java程序时,要先定义class类,在类的代码块中才能写method方法,但R语言没有这种强语法规范的限制,所以它的代码就较之其他语言要短小很多。

其次,R语言与其他语言出身的差异导致它与其他语言的定位有所不同。如张丹所言,R语言的定位就是解决数据问题,而不是解决工程化问题,所以R语言更偏向于建模。那么,开发者如果想要在解决建模问题的过程中表现更加出色,不妨试着多关注R语言。不过,一旦你掌握了R的语法后,你还需要更深入地去了解业务,理解业务产生的数据,并去思考更多与之相关的东西,比如这个业务为什么会产生这个数据?这类产生的数据是否有规律?如果业务突然发生了转变,那么在数据中会如何变化,我该如何处理?

当然,我们在解决实际问题的过程中,也不局限于用R语言。像张丹所说,技术并不是最核心的,思路才是关键。

“要做好一件事,如果我们思路很清楚,逻辑也很清楚,哪一种语言都可以做,只不过是代价的问题。”比如,写一个简单的数据模型,用Java可能会上千行,用Python可能是上百行,用R语言写可能只有几十行,这是一个开发的效率问题;其次,从它们面向的领域来看,Java、Python等语言都会有很多第三方开发包,Java和Python的包或其他语言的包一般都是支持Web开发的、数据库调用的、缓存处理的、网络通信的这些包。R语言也有这些包,但R语言更重要的则是对业务领域的支持。好比对于量化投资这个领域,如果我们要交易债券,R语言有支持计算债券久期的包;如果要交易股票,R语言有支持选股的包;如果要做投资组合,R语言有支持做资产配置的包;如果要进行风险控制,R语言也有支持计算风险价值的包。核心就在于因为R语言是面向业务的。所以,作为开发者,如果很了解这个业务,使用R语言就会非常顺手,通常只需几行代码结果就出来了。如果用其他编程语言,不仅整个业务逻辑需要重写一遍,还不一定能写得对。

在当前科技更追求解决应用问题的这样一个快速开发时代,特别是开发者遍地的情况下,怎样能快速成长为一名优秀的开发者也是一个显著的问题。张丹指出,其实现在很多技术人都是停留在语法上。比如这个语法我会了,但是不知道能干什么。出现这种问题的关键就在于他们还是停留在那种工程化语言的思维角度,即你要给我一个需求,并且告诉我这个东西怎么做,我才能做下去,自己是没有想法的,包括很多企业的数据部门的工程师实际上已沦为了一个BI工具。

“我一直提倡要做跨学科的人。你想突围,变得不同,想变得比别人牛,你就需要做跨学科的结合,而不是沉浸在一个单独的学科领域里。可能那个领域已经有很多大神,你不可能颠覆他们的位置,但一旦你带着原有的东西进入到另一个学科,或者多结合几个学科,就没有那么多大神了。而且现在社会就需要这种人才。”张丹说。因此,他认为,这个时代开发者转变思维模式很重要。

既然要转变思维,首先需要开发者具备跨学科的知识。这不仅体现在对R语言的认知。更多的,是需要我们建立三个,甚至更多维度的视角:做技术是一个维度,做业务是一个维度,通过数学又是另一个维度。

“对技术人而言,思维模式的转变其实提供了一个未来可提升的途径。”张丹说,“我原来也做Java,写了七八年时间,虽然自已觉得写Java代码已经写得很漂亮了,但在这条路上前面不仅有无数的大神,而且做了这么多年,感觉没给自己真正积淀下来什么价值。通常就是业务有什么需求,我都能给做出来,但是自己却提不出来需求。”

他进一步说,“如果我们换一种思维模式,当我有了数据,就会有一些想法,而且是可以变现的想法。这种面向数据的思维模式其实就可以转为面向一种变现能力的模式。当你具备了一种面向变现的能力,你的价值就会很大。你去一家公司,告诉决策者,你给我分几个人,我一年耗费五百万的成本,一年能赚回一千五百万,那你还担心找不到工作吗?所有地方都会抢你,会给你输入更多资源。而不是进入某个公司后,只限于我会Java,我只能编程。所以,如果我们依然是原来的那种思维模式,那么你在企业里的价值始终就只是一个成本因子,你能干出来多少,自己衡量不了,公司也不好给你衡量,只能按照平均行业水平给你发工资。但如果你知道自己能干什么,怎么做产品,用户是谁,怎么变现,还懂技术,那么你就放心大胆地要价吧!”(完)

使用优惠码[2017WOTDSZ],和我一起去WOTD全球软件开发技术峰会。8折优惠,仅剩48小时!

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

责任编辑:wangxuze 来源: 51cto.com
相关推荐

2017-09-27 22:23:08

R语言数据

2019-08-16 10:04:40

民生银行数据中台数据体系

2018-02-10 10:54:32

银行金融科技民生银行

2014-03-06 10:11:21

IBMSequoiaDB民生银行

2015-05-25 14:11:50

民生银行华为

2014-03-12 10:25:00

大数据民生银行

2018-12-18 18:28:05

数据库

2019-04-17 22:01:32

存储

2017-04-28 10:37:41

办公外设

2014-05-30 13:39:06

2016-11-09 15:49:28

大数据金融WOT2016

2017-03-16 10:30:43

联想

2013-12-02 13:41:56

民生银行巨杉数据库

2017-07-21 13:33:18

互联网银行金融

2012-06-21 16:49:53

视频会议飞视美

2009-03-31 13:38:33

2018-02-09 09:56:49

华为中国民生银行

2018-02-09 16:13:22

华为民生银行

2017-07-05 11:53:45

民生银行互联网消费金融

51CTO技术栈公众号