[译]解密Airbnb的数据科学部门如何使用R语言
概述
我之所以在aribnb希望成為一名數(shù)據(jù)科學(xué)家是因?yàn)檫@里可以有一個(gè)非常多元化的團(tuán)隊(duì)來一起解決重要的現(xiàn)實(shí)問題。我們不僅僅在性別上多樣化,而且在教育背景和工作經(jīng)歷也是霄壤之別。我們的團(tuán)隊(duì)包括數(shù)理統(tǒng)計(jì)的專家,從教育學(xué)到基因計(jì)算的博士,甚至也包括前職業(yè)橋牌選手和退伍老兵。這個(gè)訓(xùn)練和經(jīng)歷的差異性是我們團(tuán)隊(duì)創(chuàng)造性思維的強(qiáng)大源泉?jiǎng)恿屠斫庥脩舻淖詈梦淦?#xff0c;但是它在團(tuán)隊(duì)協(xié)作和知識(shí)共享上也對(duì)我們提出了挑戰(zhàn)。新加入Airbnb的團(tuán)隊(duì)成員通常都掌握各式各樣的編程語言,包括R、Python、Matlab、Stata、SAS或者SPSS。為了擴(kuò)大協(xié)作范圍,我們借助工具、培訓(xùn)和基礎(chǔ)設(shè)施來統(tǒng)一我們的數(shù)據(jù)科學(xué)品牌。本文,我們將專注于我們?cè)贏irbnb所構(gòu)建的R語言工具和一些列的R語言教程,其中大多數(shù)的課程都是適用于Python的。
在普及R語言上,我們還是兩條腿走路:一條腿是包的構(gòu)建,另一條腿是教程。一方面,我們通過構(gòu)建包來為常見問題來開發(fā)協(xié)作方案,將可視化工作標(biāo)準(zhǔn)化并且避免重復(fù)造輪子。另一方面,教程的努力目標(biāo)在于給所有的數(shù)據(jù)科學(xué)家暴露我們所使用的特定包,并且提供深入學(xué)習(xí)各自想要學(xué)習(xí)的技能的機(jī)會(huì)。
為什么要統(tǒng)一R包
在小的數(shù)據(jù)科學(xué)團(tuán)隊(duì)中,獨(dú)立貢獻(xiàn)者經(jīng)常寫一個(gè)函數(shù)、腳本或者模板來優(yōu)化他們的工作流。而隨著團(tuán)隊(duì)成長(zhǎng),不同的人會(huì)開發(fā)他們自己的工具來解決類似的問題。這就帶來了三個(gè)主要的挑戰(zhàn):
團(tuán)隊(duì)在制作工具和代碼審查上重復(fù)勞動(dòng)。
缺乏有效的文檔和工具使用的透明度將導(dǎo)致不正確的工具使用和bug頻頻。
對(duì)新的開發(fā)在不同開發(fā)者之間將很難共享,這進(jìn)一步導(dǎo)致開發(fā)效率的下降。
什么是 Rbnb
R開發(fā)中遇到的挑戰(zhàn)
通過GitHub企業(yè)版共享R包可以解決這三個(gè)挑戰(zhàn),這使對(duì)我們的需求是一個(gè)完美的解決方案。具體來說:
多用戶可以同時(shí)協(xié)作,共同改進(jìn)工具和解決bug。
貢獻(xiàn)者是相互評(píng)審代碼的。
新版本可以為所有用戶按需部署。
包是R代碼可重用的最小單元。他們可以包括函數(shù)、文檔、數(shù)據(jù)、測(cè)試、插件、教程甚至是Rmarkdown模板。在兩年以前,我為內(nèi)部開發(fā)了我的第一個(gè)的R包,它后來被稱為 Rbnb。它起初只是一些函數(shù),后來這個(gè)包囊括了超過60個(gè)函數(shù),有許多積極的開發(fā)者還持續(xù)為這個(gè)包做貢獻(xiàn),這個(gè)包現(xiàn)在服務(wù)于工程部門、數(shù)據(jù)科學(xué)部門、分析部門、用戶體驗(yàn)部門。時(shí)至今日,我們內(nèi)部知識(shí)倉庫已經(jīng)有將近500個(gè)使用 Rbnb包 的 R Markdown 調(diào)查報(bào)告。
這個(gè)包放在我們內(nèi)部的Github企業(yè)版?zhèn)}庫,相應(yīng)的,用戶可以提交問題和改進(jìn)建議。如果在一個(gè)分支上有新代碼被提交,那么這些代碼可以被Rbnb組內(nèi)的開發(fā)者互相審查。一旦這個(gè)改變被大家認(rèn)可并形成文檔,他們就會(huì)將新代碼融入到主分支,形成一個(gè)新版本的包。團(tuán)隊(duì)成員可以用devtools直接從Github安裝最新版本的Rbnb。我們現(xiàn)在致力于添加風(fēng)格和語法審查,并且用testthat測(cè)試覆蓋率。
Rbnb的構(gòu)成
Rbnb主要有四個(gè)組件:
一個(gè)基于我們數(shù)據(jù)基礎(chǔ)設(shè)施上的不同地點(diǎn)之間移動(dòng)數(shù)據(jù)的一致API。
為ggplot2做了品牌化的可視化主題、拓展等
為不同類型的報(bào)告制作Rmarkdown模板,并且自定義函數(shù)來優(yōu)化我們工作流的不同部分。
Rbnb的作用
大多數(shù)我們?cè)?Rbnb 中使用的函數(shù)允許我們從Hadoop或者SQL環(huán)境將數(shù)據(jù)移動(dòng)、聚合或篩選到R里面,然后用來做可視化、自然地完成基于內(nèi)存的分析工作。在Rbnb之前,從Presto獲取數(shù)據(jù)到R里面來運(yùn)行一個(gè)模型需要許多步驟。 數(shù)據(jù)科學(xué)家們需要對(duì)集群的準(zhǔn)入做認(rèn)真、打開SSH隧道、為Presto輸入主機(jī)、端口、模型、目錄數(shù)據(jù)來下載一個(gè) csv 文件加載到R里面,這一切只是為了跑一下我們想要的模型。現(xiàn)在,所有的這些工作可以通過兩個(gè)函數(shù)完成管道化操作。隨著 Rbnb 將這些過程隱藏在蒼穹之下,我們搞了一個(gè)像RPresto一樣維護(hù)良好的包。類似地,從R獲取數(shù)據(jù)然后移動(dòng)到AWS的S3也是一行代碼搞定。數(shù)據(jù)科學(xué)家不再需要從R保存csv文件,通過我們的API秘鑰直接完成AWS的多用戶認(rèn)證配置,并且支持直接通過shell腳本將csv文件移動(dòng)到云端。更加重要的是,所有函數(shù)都遵循一個(gè)類似的標(biāo)準(zhǔn)(比如,place_action(orgin,destination))。
Rbnb的優(yōu)勢(shì)
如果我們的數(shù)據(jù)基礎(chǔ)設(shè)施有所變化,-比如,如果一個(gè)集群移動(dòng)或者AWS S3 認(rèn)證的細(xì)節(jié)變動(dòng) - 我們可以修改我們的Rbnb包的內(nèi)部,而不用修改我們之前定義好的函數(shù)接口。
這里展示了Rbnb中的一些函數(shù)。所有函數(shù)遵循一個(gè)類似的規(guī)范,通過綜合的代碼審查和對(duì)我們工作流的抽象減少了我們很多平常的工作。
品牌化
這個(gè)包通過一致的數(shù)據(jù)可視化風(fēng)格也幫助我們的工作在Airbnb內(nèi)部品牌化 - 比如這些又 Bar Ifrach 和 Lisa Qian 提交的示例。我們也已經(jīng)為 ggplot2、htmlwidgets、Shiny、不同報(bào)告的Rmarkdown模板的CSS樣式 構(gòu)建了自定義主題、縮放規(guī)則和設(shè)計(jì)對(duì)象。這些特性重構(gòu)了 R 字體和顏色默認(rèn)的設(shè)置,使得整體上和Airbnb的品牌保持一致。
這個(gè) Rbnb 包也有許多函數(shù)幫助我們來完成自動(dòng)化任務(wù),比如缺失值處理、按年趨勢(shì)計(jì)算、提升數(shù)據(jù)聚合性能、我們用來分析實(shí)驗(yàn)的可重用模式等等。添加一個(gè)函數(shù)到這個(gè)包里可能花費(fèi)很多時(shí)間,但是這最初的投資將帶來長(zhǎng)期的回報(bào)。通過使用一樣的R包作為我們的構(gòu)建模板來開發(fā)一樣的語言、數(shù)據(jù)可視化風(fēng)格以及相互評(píng)審。
如何普及R語言
集訓(xùn)營與導(dǎo)師制
如果人們不知道怎么使用工具的話,你做了多少個(gè)工具都沒用。在一系列快速增長(zhǎng)之后,我么年開始每月為新成員和現(xiàn)有成員做為期一周的數(shù)據(jù)集訓(xùn)營。他們包括3個(gè)小時(shí)的 R 培訓(xùn)以及一些用R和R Markdown完成的有可選導(dǎo)師的集訓(xùn)營項(xiàng)目。
這個(gè)R集訓(xùn)營班專注于 Rbnb 包和一些常用數(shù)據(jù)操作包的使用,包括數(shù)據(jù)框操作(比如tidyr和dplyr)、數(shù)據(jù)可視化(ggplot2)、以及動(dòng)態(tài)報(bào)告撰寫(R Markdown)。我們?cè)谡n程開始前會(huì)為參與者發(fā)放學(xué)習(xí)指南和資料。在上課期間,我們使用自己的數(shù)據(jù)貫穿一個(gè)結(jié)構(gòu)化的教程,包括我們以工作實(shí)例的形式展現(xiàn)一些我們?cè)诠ぷ髦杏龅降奶魬?zhàn)。
這個(gè)方法允許用戶在剛開始的幾個(gè)小時(shí)里不需要熟悉R的代碼就可以開始寫代碼了,并且完全不必?fù)?dān)心高級(jí)編程方法的復(fù)雜性。我們也介紹用戶使用我們內(nèi)部風(fēng)格指南和其他許多有用的R包,比如 formattable、diagrammeR以及broom。最后,我們給他們尋求幫助和網(wǎng)絡(luò)資源的一些方向。
在集訓(xùn)營之后,我們鼓勵(lì)用戶持續(xù)學(xué)習(xí)。我們贊助每個(gè)人參加 DataCamp 來幫助團(tuán)隊(duì)成員根據(jù)自己的學(xué)習(xí)進(jìn)度組織學(xué)習(xí)小組完成可交互性的在線課程。我們也讓新人和導(dǎo)師結(jié)對(duì),這些導(dǎo)師幫新人帶上數(shù)據(jù)科學(xué)家的臺(tái)階。我們有一個(gè)內(nèi)部R語言問答的Slack頻道。我們團(tuán)隊(duì)成員組織學(xué)習(xí)的課程主題有 SparkR、R 對(duì)象系統(tǒng)、包的開發(fā)等等。最近,我們團(tuán)隊(duì)成員參加一個(gè)由RStudio組織的高級(jí)的R開發(fā)者沙龍,并且分享了我們從團(tuán)隊(duì)成長(zhǎng)中的點(diǎn)點(diǎn)滴滴。
我們的數(shù)據(jù)科學(xué)團(tuán)隊(duì)的成員也鼓勵(lì)Rbnb貢獻(xiàn)代碼。通過一個(gè)全面的代碼評(píng)審的過程允許用戶開發(fā)新技能將為將來的項(xiàng)目帶來有價(jià)值。此外,他們對(duì)一個(gè)重要的內(nèi)部工具有了主人翁精神并且從同行那里知道如何從各自的貢獻(xiàn)中受益。我們?cè)谧罴褜?shí)踐、功能文檔,測(cè)試,和風(fēng)格方面都會(huì)指導(dǎo)新的貢獻(xiàn)者。
R語言社區(qū)
我們也致力于在Airbnb之外擴(kuò)展R語言社區(qū)。我們贊助像即將開始的 rOpenSci Unconf 大會(huì),為開源項(xiàng)目貢獻(xiàn)代碼(比如ggtech、ggradar),以及在 Shiny 開發(fā)者大會(huì) 和 UseR 大會(huì)做一些分享。去年,我們很榮幸影響到了許多R 開發(fā)者,包括 Hadley Wickham 和 Ramnath Vaidyanathan 他們也拜訪了我們?cè)谌械目偛俊?/p>
在結(jié)構(gòu)化學(xué)習(xí)資源中這個(gè)工具變得越來越有影響力。
基礎(chǔ)設(shè)施建設(shè)
在工具和教程之外,我們也發(fā)明一些強(qiáng)大的數(shù)據(jù)基礎(chǔ)設(shè)施。在過去的3年間,我們的 Shiny 應(yīng)用從我們的服務(wù)器開始運(yùn)行的第一天就已經(jīng)有將近10萬個(gè)頁面瀏覽量。我們最近開始支持一個(gè)新的 RStudio Server 和 SparkR 集群。我們有一個(gè)獨(dú)立主廚的R包配方以及橫跨我們集群上的版本控制,這允許我們產(chǎn)出快速的更新并且大規(guī)模部署。
總結(jié)
強(qiáng)大的 R 語言工具、持續(xù)學(xué)習(xí)、與R社區(qū)的緊密結(jié)合、強(qiáng)大的數(shù)據(jù)基礎(chǔ)設(shè)施,這些都幫助我么你的數(shù)據(jù)科學(xué)團(tuán)隊(duì)不斷成長(zhǎng)。自從兩年以前我們開始這個(gè)動(dòng)議,我們看過的團(tuán)隊(duì)成員有從未打開R到轉(zhuǎn)變成強(qiáng)大的開發(fā)人員現(xiàn)在都開始給我們的新員工教R。這個(gè)我們已經(jīng)建立的基礎(chǔ)允許我們雇傭一個(gè)大范圍的數(shù)據(jù)科學(xué)家來分享成長(zhǎng)心態(tài)和學(xué)習(xí)新技能的興奮。這個(gè)方法幫助我們建立一個(gè)能為我們的工作帶來新的見解和觀點(diǎn)的多元化團(tuán)隊(duì)。
Rbnb R包的創(chuàng)建也激發(fā)了Python開發(fā)人員發(fā)布數(shù)據(jù)科學(xué)家的內(nèi)部稱為Airpy的Python包。我們的R開發(fā)人員也在合作開發(fā)這個(gè)包,所以這個(gè)包有一個(gè)類似的接口和函數(shù)集。我們鼓勵(lì)團(tuán)隊(duì)成員同時(shí)為Rbnb何Airpy來貢獻(xiàn)代碼,我們也在一起工作來開發(fā)更多有效的教育資源和工具來加持我們的團(tuán)隊(duì)。今天,許多我們團(tuán)隊(duì)的成員同時(shí)精通Python和R,同時(shí)用這兩張語言都可以評(píng)審和寫出可靠的代碼。在最近的一個(gè)為數(shù)66人的團(tuán)隊(duì)成員調(diào)查中,我們發(fā)現(xiàn)80%的數(shù)據(jù)科學(xué)家和分析師在R的數(shù)據(jù)分析的自我評(píng)價(jià)都是偏向于"專家"而不是"初學(xué)者",即使其中只有64%的人將R作為他們首選的數(shù)據(jù)分析語言。類似地,47%的團(tuán)隊(duì)成員認(rèn)為自己用Python做數(shù)據(jù)分析已經(jīng)進(jìn)入專家的行列,即使只有31%的人將Python作為首選分析工具。這保留了5%表明他們同時(shí)均衡地使用這兩種工具。我們專注于建立一個(gè)同時(shí)精通兩種語言的平衡團(tuán)隊(duì),在我們招聘的過程中也不會(huì)帶有任何偏好或偏見。這是個(gè)讓我們技能、經(jīng)歷、背景多樣化的方法又進(jìn)一步提升了團(tuán)隊(duì)的影響力。
感謝 Jenny Bryan, Mine Cetinkaya-Rundel, Scott Chamberlain, Garrett Grolemund, Amelia McNamara, Hilary Parker, Karthik Ram, Hadley Wickham 以及 Airbnb 工程部 和數(shù)據(jù)科學(xué)團(tuán)隊(duì) 在本文早期版本的評(píng)論。
推薦閱讀
Python 開發(fā)者如何正確使用 RStudio 編輯器
文檔定義應(yīng)用:數(shù)據(jù)科學(xué)的文檔革命
原作者:Ricardo Bion 翻譯:Harry Zhu
英文原文地址:Using R packages and education to scale Data Science at Airbnb
作為分享主義者(sharism),本人所有互聯(lián)網(wǎng)發(fā)布的圖文均遵從CC版權(quán),轉(zhuǎn)載請(qǐng)保留作者信息并注明作者 Harry Zhu 的 FinanceR專欄:https://segmentfault.com/blog...,如果涉及源代碼請(qǐng)注明GitHub地址:https://github.com/harryprince。微信號(hào): harryzhustudio
商業(yè)使用請(qǐng)聯(lián)系作者。
總結(jié)
以上是生活随笔為你收集整理的[译]解密Airbnb的数据科学部门如何使用R语言的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS的UI基础02
- 下一篇: select,poll,epoll区别。