COS编辑部按受访者: Hadley Wickham            采访人:YiXuan

简介:Hadley Wickham 是 RStudio 的首席科学家以及 Rice University 统计系的助理教授。他是著名图形可视化软件包 ggplot2 的开发者,以及其他许多被广泛使用的软件包的作者,代表作品如 plyrreshape2 等。

写在前面的话: 2013年9月13日小编(Yixuan)对他(Hadley)进行了一次简短的采访,谈及了他在图形可视化、数据整理和R编程等诸多方面的工作。

Yixuan:是否可以给我们介绍一下,你是如何进入统计学,或者说数据科学这一领域的?

Hadley:我的第一个学位是在一个医科学校获得的,事实上我差点就成为一名医生了(笑)。但是后来我意识到我并不想从医,所以就重新找回我在高中时的兴趣,开始学习计算机和统计学。我尤其喜欢编程和统计,后来便在美国读博士,研究的方向是数据可视化和多元数据分析。

Yixuan:你如何定义数据科学家?和统计学家有区别吗?

Hadley:我觉得他们基本上是相同的。或许数据科学家会更关心数据库和编程等方面,但他们试图做的是同一件事。

Yixuan:所以你觉得数据科学家会涉及更多实际的数据?

Hadley:是的。传统的统计学非常注重数理的那一方面,一个好的数学背景与一个好的计算机背景同样重要。在某种程度上,只要你所做的东西方向是对的,你并不需要知道如何用计算机去实现。当然了,另一种可能是你并不知道你在做什么,但只要让计算机算一些东西出来,问题也不大。(笑)

Yixuan:在你的工作中,最令人激动的和最具挑战性的分别是什么?

Hadley:现阶段最令我兴奋的工作是下一代的 ggplot2,叫做 ggvis,它试图在图形中加入交互的元素。目前我正与 Winston Chang(他也在 RStudio 工作)一起着手 ggvis 的开发,希望能在年底以前发布一些可供展示的例子。

Yixuan:所以这是一个针对 ggplot2 的长期开发计划?

Hadley:是的。很明显的一个事实是,目前的数据可视化工作,你会希望让它在网页上实现,因为所有人都拥有一个网页浏览器。另一个原因是,各大浏览器的开发者都将大部分的时间投入在如何让图形既快速又能跨平台的问题之上。现在有很多浏览器之间的测试和比赛,例如比较到底是 Firefox 更快还是 Chrome 更快。这些技术的进步都使得交互式统计图形的快速绘制成为可能,而在过去这是一件比较困难的事。要向图形中方便地加入交互元素,速度是一个很重要的原则。有了交互式图形,你可以在图形中添加一个滑杆,让它调节直方图的窗宽或是 Loess 曲线的平滑参数。这些都是很有趣的工作。

Yixuan:那最具挑战性的工作呢?

Hadley:目前我在做的另一件事是 dplyr 的开发,它是 plyr 的下一代产品。在这个过程中,我需要学习如何编写高效率的 SQL 代码。如果你在两星期前问我,我对 SQL 了解多少,或许我会说“75%吧”。然而现在,自从我真的开始使用它之后,我才意识到我可能只了解它的25%。SQL 远比我想像的要更复杂、更精深。这些工作可以说是挑战与乐趣并存。

Yixuan:就我看来,在之前你最著名的作品是 ggplot2,而现在,我们可以看到你正试图将更多的精力放在数据整理的工具之上,例如你编写的 plyr 包和 reshape2 包。同时,你也写过一些利用 Rcpp 进行高性能计算的教程。你觉得这些技术都是如何关联在一起的?数据可视化,数据整理,以及高性能计算?

Hadley:我感兴趣的是如何让数据分析更简便、更快速。所以你只需要考虑一下你在数据分析中各环节所用的时间。如果你用了8小时进行数据清理和数据整理,而只用了2小时进行建模,那么很明显,你希望了解如何将数据清理和整理的时间尽可能缩短。正如我今天的报告提及的那样,我们会发现现在数据分析有两个瓶颈,一是我们的目标是什么,二是我们如何用计算机去实现。我现有的很多作品,如 ggplot2plyrreshape2,更关注的是如何更简单地表达你的目标,而不是如何让计算机算得更快。现在做这些事情都变得相对简单了,而瓶颈就成了如何去进行实际的计算。我现在正在学习的就是如何编写快速的代码,如何用R调用C++以获得更快的速度等。这就像是一个往复循环的过程:如果瓶颈在这儿,你就去修复这个问题,直到它消耗更短的时间;然后瓶颈又转移到那儿,你便去着手那一个问题。

Yixuan:所以你试图缩短这两方面的时间,表达数据,以及进行计算。

Hadley:是的。而另一个我感兴趣的话题是……很明显,我不可能逐一去编写人们需要的每一个R包,所以我应该如何让其他人编写优质的代码,以及优质的R包呢?

Yixuan:那便是 devtools 包试图做的?

Hadley:对,这个包就是希望能让其他人使用R的过程更加简便,然后鼓励他们去为社区做贡献。

Yixuan:能否为我们介绍一下你的数据分析工具箱?例如使用的软件、编程语言等。

Hadley:我现在是 RStudio 的忠实用户(笑)。我曾经在 Mac 上用 Sublime Text,但在过去几个月转而使用 RStudio 了,现在它在处理函数方面非常便捷。我的工作是分析数据,所以我把90%的时间投入在R中。此外,我也在试图回答一些其他的问题,例如“其他用户都在做什么”,“他们会在哪方面遇到困难”,“如何用R更简洁地表达这个想法”,以及“我如何能将代码变得更加高效”。所以尽管我主要用的是R,我依然会用C++来写一些能快速运行的代码。这其中最大的挑战在于,你可以(用C++)让代码变得非常快,但同时你需要耗费更多的时间来编写。如果我代码中有错误,它很有可能使得R崩溃,然后你就必须从头开始。当然,对现在的 RStudio,如果R崩溃了,它会自动重启R而不致强行退出。

Yixuan:很多我们网站(统计之都)的访客都对动态图形很感兴趣。他们想知道你是否有在下一代的 ggplot2 中整合 R 和 D3 的计划?

Hadleyggvis(下一代的 ggplot2)的工作原理是生成 Vega 代码,而 Vega 是一个基于 D3 的软件库。所以在这个意义上,可以说 ggvis 是基于D3的,它支持动态的、可交互的图形。我可以给你演示一段 ggvis 的示例。(示例演示中……)

Yixuan:这几年以来,对于软件开发,我们能看到的一个显著变化是社会化编程变得更加流行了,许多开发者都有了一个 Github 帐号。你觉得这种现象是否会改变R以及R包的开发模式?

Hadley:我认为是的。我发现从我创立一个 Github 项目(repository)到我收到第一个提交请求(pull request)的时间变得越来越短了。最近我刚新建了一个项目而且没有告诉任何一个人,但我发现4小时之后就有人向我发送提交请求了。我认为这是社会化编程非常酷的一个方面,作者会更加有动力投入到他们的项目中,因为人们不仅是在用你的软件,而且是在参与你的开发过程。我和我的同事曾经在讨论如何利用 Gist,其中一个例子便是 RPubs。它应该基于 Gist 构建,这样你便可以在上面 fork 其他人的作品,然后添加一些修改。如果原作者愿意,他们会将修改反过来应用上去。我们有很多关于这方面的想法。

Yixuan:作为 RStudio 的首席科学家,你对 RStudio 有什么未来的计划?

Hadley:我希望未来的某一天会有更多的科学家参与进来(笑)。我想当我们开始盈利的时候,我们会基于R的社区进行投资。其中一件可能会做的事就是让R成为一门高效的编程语言。

我同时还对统计学习非常感兴趣,我希望它能成为一整套的统计建模工具,将它们整合在一起,形成一套模型的语法。正如图形语法能将现有的图形部件进行组合从而形成新的图形一样,你应该也能利用已有的模型来组合成新的模型。我认为那样会使建模的过程更加简单。例如,你可以用一种方式来拟合线性模型,用另一种方式来拟合随机森林,然后在一个统一的框架下进行建模。

另一个我正在思考的问题是 Lasso 类的统计方法。在我上过的一门课中,我想告诉学生,现在你应该尝试一些稳健的回归方法,以及类似 Lasso 的方法。目前大概有13个关于 Lasso 的R包,我全都试了一遍,但发现其中的每一个都会因为某种原因而失效。例如,有些不能处理缺失值,有些不支持分类变量,有些不能做预测或计算标准误,或者有些不能自动选 $\lambda$ 参数等等。或许这是因为这些软件包的作者对理论更感兴趣,而不是想提供一个实际的数据分析的工具。所以,我想将它们整合在一起,形成一套既高效、又能良好运行的工具。

Yixuan:我们的团队翻译了你的ggplot2书,而且 Winston 的 R Graphics Cookbook 也正在翻译中。你能否给我们介绍一下你的下一本著作,如果我没有说错的话,应该叫做《R高级编程》(Advanced R Programming)?

Hadley:《R高级编程》的目标是让人们成为更好的R程序员。目前绝大部分关于R的书籍都是教你如何用R来做统计分析的,而很少是介绍编程本身的。Matloff 的《R语言编程艺术》Art of R Programming)是一本很好的入门和进阶水平的书,而我想要介绍的是那些我认为很酷很强大的R语言特性。为了了解如何使用这些特性,我需要阅读大量的文档,并且我自己也做了很多实验来弄清楚其中的机理。我感兴趣的是如何帮助人们理解并编写高效的、表达力强的R代码。

R作为一门编程语言似乎名声不太好,但我觉得那不是事实。我认为R的核心是一门优雅的编程语言,只是因为绝大部分的R用户都不是程序员,所以伴随着这个优雅的核心的,是大量冗长乏味的代码。R其实和 Javascript 很像,有一本书叫做《JavaScript语言精粹》(JavaScript: The Good Parts),它试图提炼出 Javascript 优雅的一面。而我的书与此类似,不仅是如何教会人们如何编写优雅的R代码,而且试图让问题解决的过程更加简单。当然,这需要介绍一些R背后的机制和理论。

Yixuan:最后一个问题:在你的闲暇时间里,都有哪些爱好?

Hadley:我喜欢烹饪。最近我正在学美式烧烤,我还喜欢调鸡尾酒。

Yixuan:好的,非常感谢你给我这次采访的机会!

(Hadley Wickham 和统计之都翻译的《ggplot2:数据分析与图形艺术》

Click here to see the English version

发表/查看评论