[譯]解密Airbnb的數據科學部門如何使用R語言

概述

我之因此在aribnb但願成爲一名數據科學家是由於這裏能夠有一個很是多元化的團隊來一塊兒解決重要的現實問題。咱們不只僅在性別上多樣化,並且在教育背景和工做經歷也是霄壤之別。咱們的團隊包括數理統計的專家,從教育學到基因計算的博士,甚至也包括前職業橋牌選手和退伍老兵。這個訓練和經歷的差別性是咱們團隊創造性思惟的強大源泉動力和理解用戶的最好武器,可是它在團隊協做和知識共享上也對咱們提出了挑戰。新加入Airbnb的團隊成員一般都掌握各式各樣的編程語言,包括R、Python、Matlab、Stata、SAS或者SPSS。爲了擴大協做範圍,咱們藉助工具、培訓和基礎設施來統一咱們的數據科學品牌。本文,咱們將專一於咱們在Airbnb所構建的R語言工具和一些列的R語言教程,其中大多數的課程都是適用於Python的。html

在普及R語言上,咱們仍是兩條腿走路:一條腿是包的構建,另外一條腿是教程。一方面,咱們經過構建包來爲常見問題來開發協做方案,將可視化工做標準化而且避免重複造輪子。另外一方面,教程的努力目標在於給全部的數據科學家暴露咱們所使用的特定包,而且提供深刻學習各自想要學習的技能的機會。git

爲何要統一R包

在小的數據科學團隊中,獨立貢獻者常常寫一個函數、腳本或者模板來優化他們的工做流。而隨着團隊成長,不一樣的人會開發他們本身的工具來解決相似的問題。這就帶來了三個主要的挑戰:github

  1. 團隊在製做工具和代碼審查上重複勞動。shell

  2. 缺少有效的文檔和工具使用的透明度將致使不正確的工具使用和bug頻頻。編程

  3. 對新的開發在不一樣開發者之間將很難共享,這進一步致使開發效率的降低。segmentfault

什麼是 Rbnb

R開發中遇到的挑戰

經過GitHub企業版共享R包能夠解決這三個挑戰,這使對咱們的需求是一個完美的解決方案。具體來講:服務器

  1. 多用戶能夠同時協做,共同改進工具和解決bug。微信

  2. 貢獻者是相互評審代碼的。markdown

  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包的內部,而不用修改咱們以前定義好的函數接口。

https://cdn-images-1.medium.com/max/1600/1*Z4JhpuVgOoDgPhNH722fVg.png

這裏展現了Rbnb中的一些函數。全部函數遵循一個相似的規範,經過綜合的代碼審查和對咱們工做流的抽象減小了咱們不少日常的工做。

品牌化

這個包經過一致的數據可視化風格也幫助咱們的工做在Airbnb內部品牌化 - 好比這些又 Bar Ifrach 和 Lisa Qian 提交的示例。咱們也已經爲 ggplot二、htmlwidgets、Shiny、不一樣報告的Rmarkdown模板的CSS樣式 構建了自定義主題、縮放規則和設計對象。這些特性重構了 R 字體和顏色默認的設置,使得總體上和Airbnb的品牌保持一致。

https://cdn-images-1.medium.com/max/1600/1*AHc5ykZByrNWn30UKsqfXw.png

https://cdn-images-1.medium.com/max/1600/1*HQZxwPd87fi9kXdpKfe2PQ.png

https://cdn-images-1.medium.com/max/1600/1*vABiXxOWSs5Ve-Wa2nocOQ.png

這個 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 他們也拜訪了咱們在三藩市的總部。

https://cdn-images-1.medium.com/max/1600/1*jw1uy30AcPEUUcNFIqY0Hw.png

在結構化學習資源中這個工具變得愈來愈有影響力。

基礎設施建設

在工具和教程以外,咱們也發明一些強大的數據基礎設施。在過去的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 工程部 和數據科學團隊 在本文早期版本的評論。

推薦閱讀

原做者: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商業使用請聯繫做者。

相關文章
相關標籤/搜索