概述

我之所以在aribnb希望成为一名数据科学家是因为这里可以有一个非常多元化的团队来一起解决重要的现实问题。我们不仅仅在性别上多样化,而且在教育背景和工作经历也是霄壤之别。我们的团队包括数理统计的专家,从教育学到基因计算的博士,甚至也包括前职业桥牌选手和退伍老兵。这个训练和经历的差异性是我们团队创造性思维的强大源泉动力和理解用户的最好武器,但是它在团队协作和知识共享上也对我们提出了挑战。新加入Airbnb的团队成员通常都掌握各式各样的编程语言,包括R、Python、Matlab、Stata、SAS或者SPSS。为了扩大协作范围,我们借助工具、培训和基础设施来统一我们的数据科学品牌。本文,我们将专注于我们在Airbnb所构建的R语言工具和一些列的R语言教程,其中大多数的课程都是适用于Python的。

在普及R语言上,我们还是两条腿走路:一条腿是包的构建,另一条腿是教程。一方面,我们通过构建包来为常见问题来开发协作方案,将可视化工作标准化并且避免重复造轮子。另一方面,教程的努力目标在于给所有的数据科学家暴露我们所使用的特定包,并且提供深入学习各自想要学习的技能的机会。

为什么要统一R包

在小的数据科学团队中,独立贡献者经常写一个函数、脚本或者模板来优化他们的工作流。而随着团队成长,不同的人会开发他们自己的工具来解决类似的问题。这就带来了三个主要的挑战:

  1. 团队在制作工具和代码审查上重复劳动。

  2. 缺乏有效的文档和工具使用的透明度将导致不正确的工具使用和bug频频。

  3. 对新的开发在不同开发者之间将很难共享,这进一步导致开发效率的下降。

什么是 Rbnb

R开发中遇到的挑战

通过GitHub企业版共享R包可以解决这三个挑战,这使对我们的需求是一个完美的解决方案。具体来说:

  1. 多用户可以同时协作,共同改进工具和解决bug。

  2. 贡献者是相互评审代码的。

  3. 新版本可以为所有用户按需部署。
    包是R代码可重用的最小单元。他们可以包括函数、文档、数据、测试、插件、教程甚至是Rmarkdown模板。在两年以前,我为内部开发了我的第一个的R包,它后来被称为 Rbnb。它起初只是一些函数,后来这个包囊括了超过60个函数,有许多积极的开发者还持续为这个包做贡献,这个包现在服务于工程部门、数据科学部门、分析部门、用户体验部门。时至今日,我们内部知识仓库已经有将近500个使用 Rbnb包 的 R Markdown 调查报告。

这个包放在我们内部的Github企业版仓库,相应的,用户可以提交问题和改进建议。如果在一个分支上有新代码被提交,那么这些代码可以被Rbnb组内的开发者互相审查。一旦这个改变被大家认可并形成文档,他们就会将新代码融入到主分支,形成一个新版本的包。团队成员可以用devtools直接从Github安装最新版本的Rbnb。我们现在致力于添加风格和语法审查,并且用testthat测试覆盖率。

Rbnb的构成

Rbnb主要有四个组件:

  1. 一个基于我们数据基础设施上的不同地点之间移动数据的一致API。

  2. 为ggplot2做了品牌化的可视化主题、拓展等

  3. 为不同类型的报告制作Rmarkdown模板,并且自定义函数来优化我们工作流的不同部分。

Rbnb的作用

大多数我们在 Rbnb 中使用的函数允许我们从Hadoop或者SQL环境将数据移动、聚合或筛选到R里面,然后用来做可视化、自然地完成基于内存的分析工作。在Rbnb之前,从Presto获取数据到R里面来运行一个模型需要许多步骤。 数据科学家们需要对集群的准入做认真、打开SSH隧道、为Presto输入主机、端口、模型、目录数据来下载一个 csv 文件加载到R里面,这一切只是为了跑一下我们想要的模型。现在,所有的这些工作可以通过两个函数完成管道化操作。随着 Rbnb 将这些过程隐藏在苍穹之下,我们搞了一个像RPresto一样维护良好的包。类似地,从R获取数据然后移动到AWS的S3也是一行代码搞定。数据科学家不再需要从R保存csv文件,通过我们的API秘钥直接完成AWS的多用户认证配置,并且支持直接通过shell脚本将csv文件移动到云端。更加重要的是,所有函数都遵循一个类似的标准(比如,place_action(orgin,destination))。

Rbnb的优势

如果我们的数据基础设施有所变化,-比如,如果一个集群移动或者AWS S3 认证的细节变动 - 我们可以修改我们的Rbnb包的内部,而不用修改我们之前定义好的函数接口。

这里展示了Rbnb中的一些函数。所有函数遵循一个类似的规范,通过综合的代码审查和对我们工作流的抽象减少了我们很多平常的工作。

品牌化

这个包通过一致的数据可视化风格也帮助我们的工作在Airbnb内部品牌化 - 比如这些又 Bar Ifrach 和 Lisa Qian 提交的示例。我们也已经为 ggplot2、htmlwidgets、Shiny、不同报告的Rmarkdown模板的CSS样式 构建了自定义主题、缩放规则和设计对象。这些特性重构了 R 字体和颜色默认的设置,使得整体上和Airbnb的品牌保持一致。

这个 Rbnb 包也有许多函数帮助我们来完成自动化任务,比如缺失值处理、按年趋势计算、提升数据聚合性能、我们用来分析实验的可重用模式等等。添加一个函数到这个包里可能花费很多时间,但是这最初的投资将带来长期的回报。通过使用一样的R包作为我们的构建模板来开发一样的语言、数据可视化风格以及相互评审。

如何普及R语言

集训营与导师制

如果人们不知道怎么使用工具的话,你做了多少个工具都没用。在一系列快速增长之后,我么年开始每月为新成员和现有成员做为期一周的数据集训营。他们包括3个小时的 R 培训以及一些用R和R Markdown完成的有可选导师的集训营项目。

这个R集训营班专注于 Rbnb 包和一些常用数据操作包的使用,包括数据框操作(比如tidyr和dplyr)、数据可视化(ggplot2)、以及动态报告撰写(R Markdown)。我们在课程开始前会为参与者发放学习指南和资料。在上课期间,我们使用自己的数据贯穿一个结构化的教程,包括我们以工作实例的形式展现一些我们在工作中遇到的挑战。

这个方法允许用户在刚开始的几个小时里不需要熟悉R的代码就可以开始写代码了,并且完全不必担心高级编程方法的复杂性。我们也介绍用户使用我们内部风格指南和其他许多有用的R包,比如 formattablediagrammeR以及broom。最后,我们给他们寻求帮助和网络资源的一些方向。

在集训营之后,我们鼓励用户持续学习。我们赞助每个人参加 DataCamp 来帮助团队成员根据自己的学习进度组织学习小组完成可交互性的在线课程。我们也让新人和导师结对,这些导师帮新人带上数据科学家的台阶。我们有一个内部R语言问答的Slack频道。我们团队成员组织学习的课程主题有 SparkR、R 对象系统、包的开发等等。最近,我们团队成员参加一个由RStudio组织的高级的R开发者沙龙,并且分享了我们从团队成长中的点点滴滴。

我们的数据科学团队的成员也鼓励Rbnb贡献代码。通过一个全面的代码评审的过程允许用户开发新技能将为将来的项目带来有价值。此外,他们对一个重要的内部工具有了主人翁精神并且从同行那里知道如何从各自的贡献中受益。我们在最佳实践、功能文档,测试,和风格方面都会指导新的贡献者。

R语言社区

我们也致力于在Airbnb之外扩展R语言社区。我们赞助像即将开始的 rOpenSci Unconf 大会,为开源项目贡献代码(比如ggtech、ggradar),以及在 Shiny 开发者大会 和 UseR 大会做一些分享。去年,我们很荣幸影响到了许多R 开发者,包括 Hadley Wickham 和 Ramnath Vaidyanathan 他们也拜访了我们在三藩市的总部。

在结构化学习资源中这个工具变得越来越有影响力。

基础设施建设

在工具和教程之外,我们也发明一些强大的数据基础设施。在过去的3年间,我们的 Shiny 应用从我们的服务器开始运行的第一天就已经有将近10万个页面浏览量。我们最近开始支持一个新的 RStudio Server 和 SparkR 集群。我们有一个独立主厨的R包配方以及横跨我们集群上的版本控制,这允许我们产出快速的更新并且大规模部署。

总结

强大的 R 语言工具、持续学习、与R社区的紧密结合、强大的数据基础设施,这些都帮助我么你的数据科学团队不断成长。自从两年以前我们开始这个动议,我们看过的团队成员有从未打开R到转变成强大的开发人员现在都开始给我们的新员工教R。这个我们已经建立的基础允许我们雇佣一个大范围的数据科学家来分享成长心态和学习新技能的兴奋。这个方法帮助我们建立一个能为我们的工作带来新的见解和观点的多元化团队。

Rbnb R包的创建也激发了Python开发人员发布数据科学家的内部称为Airpy的Python包。我们的R开发人员也在合作开发这个包,所以这个包有一个类似的接口和函数集。我们鼓励团队成员同时为Rbnb何Airpy来贡献代码,我们也在一起工作来开发更多有效的教育资源和工具来加持我们的团队。今天,许多我们团队的成员同时精通Python和R,同时用这两张语言都可以评审和写出可靠的代码。在最近的一个为数66人的团队成员调查中,我们发现80%的数据科学家和分析师在R的数据分析的自我评价都是偏向于"专家"而不是"初学者",即使其中只有64%的人将R作为他们首选的数据分析语言。类似地,47%的团队成员认为自己用Python做数据分析已经进入专家的行列,即使只有31%的人将Python作为首选分析工具。这保留了5%表明他们同时均衡地使用这两种工具。我们专注于建立一个同时精通两种语言的平衡团队,在我们招聘的过程中也不会带有任何偏好或偏见。这是个让我们技能、经历、背景多样化的方法又进一步提升了团队的影响力。

感谢 Jenny Bryan, Mine Cetinkaya-Rundel, Scott Chamberlain, Garrett Grolemund, Amelia McNamara, Hilary Parker, Karthik Ram, Hadley Wickham 以及 Airbnb 工程部 和数据科学团队 在本文早期版本的评论。

推荐阅读

  • Python 开发者如何正确使用 RStudio 编辑器

  • 文档定义应用:数据科学的文档革命

原作者:Ricardo Bion 翻译:Harry Zhu
英文原文地址:Using R packages and education to scale Data Science at Airbnb

作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者 Harry Zhu 的 FinanceR专栏:https://segmentfault.com/blog...,如果涉及源代码请注明GitHub地址:https://github.com/harryprince。微信号: harryzhustudio
商业使用请联系作者。

[译]解密Airbnb的数据科学部门如何使用R语言相关推荐

  1. [译] 解密 Airbnb 的数据科学部门如何构建知识仓库

    顽疾 Airbnb的数据团队很重要的一个职责就是传播基于数据的决策方法.我们将数据的获取民主化,使得每一个Airbnb的成员都可以量化他们基于数据的决策影响力并且借此洞察用户偏好,提升数据产品的用户体 ...

  2. R与数据分析学习总结之一:R语言基本操作

    最近开始学习R语言,把学习笔记和小伙伴们分享一下吧,欢迎一起交流 R 起源: R是S语言的一种实现.S语言是由 AT&T贝尔实验室开发的一种用来进行数据探索.统计分析.作图的解释型语言.最初S ...

  3. 2017WOT全球软件开发技术峰会:面向数据的思维模式和R语言编程

    跨界知识聚会系列文章,"知识是用来分享和传承的",各种会议.论坛.沙龙都是分享知识的绝佳场所.我也有幸作为演讲嘉宾参加了一些国内的大型会议,向大家展示我所做的一些成果.从听众到演讲 ...

  4. Python超过R,成为数据科学和机器学习的首选语言!

    | 全文1765共字,建议阅读时长3分钟 | 近期,数据挖掘资讯网站KDnuggets开展了一项调查,问题是"2016年和2017年,在数据分析.数据科学和机器学习工作中,你使用 ...

  5. python是用什么语言开发的-专为人工智能和数据科学而生的Go语言,或将取代Python...

    时间回到30年前,Python 首次亮相.花了20年时间,Python才获得开发者的认可.来到 2019 年,Python已经成为开发人员第二喜欢的语言. 在过去的5年时间里,Python 成为了机器 ...

  6. python是什么语言开发的-专为人工智能和数据科学而生的Go语言,或将取代Python...

    时间回到30年前,Python 首次亮相.花了20年时间,Python才获得开发者的认可.来到 2019 年,Python已经成为开发人员第二喜欢的语言. 在过去的5年时间里,Python 成为了机器 ...

  7. 专为人工智能和数据科学而生的Go语言,或将取代Python

    时间回到30年前,Python 首次亮相.花了20年时间,Python才获得开发者的认可.来到 2019 年,Python已经成为开发人员第二喜欢的语言. 在过去的5年时间里,Python 成为了机器 ...

  8. r语言数据变量分段_使用R语言实现数据分段

    使用R语言实现数据分段 今天跟大家讲讲我工作中用到的数据分段,数据分段一般在什么地方会使用到呢?评分.之前写过一篇<实战: RFM>模型使用,那篇文章就详细介绍了CRM(客户关系管理)分析 ...

  9. r语言爬虫数据html表格,如何用R语言爬取网页表格数据节省一天工作时间

    今天R语言给我帮了一个大忙,简单的几行代码几乎节省了我一天的时间,小白表示R语言太有用了! 问题如下: 我想获取网页中表格里的数据,网页表格如下图 但是呢,很坑爹的是,这个表格不能复制粘贴,Ctrl+ ...

最新文章

  1. 改名 Meta,打元宇宙牌,老龄化的 Facebook 能否再换新颜
  2. 纯PB9开发短文本加密
  3. java i=(int)b_定义类B和类C如下,并将其保存为B.java文件,得到的结果是()class B{int b;B(int i){b=i;}}class C extend...
  4. JAVA写的文件分割与文件合并程序
  5. 请写出至少五个块级元素_2020高考元素化合物命题特点及复习思路
  6. 【王道考研计算机网络】—分层结构 协议 接口 服务
  7. 多个python脚本同时执行_用shell同时启动多个python脚本
  8. matlab用dft对连续信号做谱分析,用 DFT 对连续信号进行谱分析的误差问题有哪些?...
  9. 通过 Telnet 在 Linux 终端中观看ASCII 星球大战
  10. Win10 不火不行!Edge 无缝兼容 Chrome扩展
  11. 冒泡排序java代码
  12. java小游戏源码_分享几款java小游戏源码
  13. Java二维码的生成以及附加Logo
  14. 91手机助手官网iPhone版 v5.6.1 官方版
  15. 【Excel VBA】一键取消excel中所有隐藏sheet
  16. Linux性能优化之 CPU 篇
  17. 微信小程序的图片预加载处理
  18. 如何才能成为年薪百万的编程高手?
  19. 美信GMSL技术让汽车数据传输更为高效
  20. 技术人员需要了解的手机验证码登录风险

热门文章

  1. 上传图片时 , 返回 nginx 出现413 Request Entity Too Large 问题
  2. 车和家李想:在智能电动车的红海里,这是我唯一能够胜出的机会所在...
  3. 如何玩转跨库Join?跨数据库实例查询应用实践
  4. Django 权限管理-后台根据用户权限动态生成菜单
  5. 安装Kubernetes-Dashboard插件
  6. Scala基础 - 下划线使用指南
  7. OPhone2.0应该重在中文应用体验
  8. JSP+Servlet + JDBC 实现简单的登录验证模块
  9. View工作原理(四)view的layout过程
  10. ListView详解 (ListView图文混排)