
解密Airbnb的數(shù)據(jù)科學部門如何使用R語言
我之所以在aribnb希望成為一名數(shù)據(jù)科學家是因為這里可以有一個非常多元化的團隊來一起解決重要的現(xiàn)實問題。我們不僅僅在性別上多樣化,而且在教育背景和工作經(jīng)歷也是霄壤之別。我們的團隊包括數(shù)理統(tǒng)計的專家,從教育學到基因計算的博士,甚至也包括前職業(yè)橋牌選手和退伍老兵。這個訓練和經(jīng)歷的差異性是我們團隊創(chuàng)造性思維的強大源泉動力和理解用戶的最好武器,但是它在團隊協(xié)作和知識共享上也對我們提出了挑戰(zhàn)。新加入Airbnb的團隊成員通常都掌握各式各樣的編程語言,包括R、Python、Matlab、Stata、SAS或者SPSS。為了擴大協(xié)作范圍,我們借助工具、培訓和基礎設施來統(tǒng)一我們的數(shù)據(jù)科學品牌。本文,我們將專注于我們在Airbnb所構(gòu)建的R語言工具和一些列的R語言教程,其中大多數(shù)的課程都是適用于Python的。
在普及R語言上,我們還是兩條腿走路:一條腿是包的構(gòu)建,另一條腿是教程。一方面,我們通過構(gòu)建包來為常見問題來開發(fā)協(xié)作方案,將可視化工作標準化并且避免重復造輪子。另一方面,教程的努力目標在于給所有的數(shù)據(jù)科學家暴露我們所使用的特定包,并且提供深入學習各自想要學習的技能的機會。
在小的數(shù)據(jù)科學團隊中,獨立貢獻者經(jīng)常寫一個函數(shù)、腳本或者模板來優(yōu)化他們的工作流。而隨著團隊成長,不同的人會開發(fā)他們自己的工具來解決類似的問題。這就帶來了三個主要的挑戰(zhàn):
通過GitHub企業(yè)版共享R包可以解決這三個挑戰(zhàn),這使對我們的需求是一個完美的解決方案。具體來說:
這個包放在我們內(nèi)部的Github企業(yè)版?zhèn)}庫,相應的,用戶可以提交問題和改進建議。如果在一個分支上有新代碼被提交,那么這些代碼可以被Rbnb組內(nèi)的開發(fā)者互相審查。一旦這個改變被大家認可并形成文檔,他們就會將新代碼融入到主分支,形成一個新版本的包。團隊成員可以用devtools直接從Github安裝最新版本的Rbnb。我們現(xiàn)在致力于添加風格和語法審查,并且用testthat測試覆蓋率。
Rbnb主要有四個組件:
大多數(shù)我們在 Rbnb 中使用的函數(shù)允許我們從Hadoop或者SQL環(huán)境將數(shù)據(jù)移動、聚合或篩選到R里面,然后用來做可視化、自然地完成基于內(nèi)存的分析工作。在Rbnb之前,從Presto獲取數(shù)據(jù)到R里面來運行一個模型需要許多步驟。 數(shù)據(jù)科學家們需要對集群的準入做認真、打開SSH隧道、為Presto輸入主機、端口、模型、目錄數(shù)據(jù)來下載一個 csv 文件加載到R里面,這一切只是為了跑一下我們想要的模型。現(xiàn)在,所有的這些工作可以通過兩個函數(shù)完成管道化操作。隨著 Rbnb 將這些過程隱藏在蒼穹之下,我們搞了一個像RPresto一樣維護良好的包。類似地,從R獲取數(shù)據(jù)然后移動到AWS的S3也是一行代碼搞定。數(shù)據(jù)科學家不再需要從R保存csv文件,通過我們的API秘鑰直接完成AWS的多用戶認證配置,并且支持直接通過shell腳本將csv文件移動到云端。更加重要的是,所有函數(shù)都遵循一個類似的標準(比如,place_action(orgin,destination))。
如果我們的數(shù)據(jù)基礎設施有所變化,-比如,如果一個集群移動或者AWS S3 認證的細節(jié)變動 – 我們可以修改我們的Rbnb包的內(nèi)部,而不用修改我們之前定義好的函數(shù)接口。
這里展示了Rbnb中的一些函數(shù)。所有函數(shù)遵循一個類似的規(guī)范,通過綜合的代碼審查和對我們工作流的抽象減少了我們很多平常的工作。
這個包通過一致的數(shù)據(jù)可視化風格也幫助我們的工作在Airbnb內(nèi)部品牌化 – 比如這些又 Bar Ifrach 和 Lisa Qian 提交的示例。我們也已經(jīng)為 ggplot2、htmlwidgets、Shiny、不同報告的Rmarkdown模板的CSS樣式 構(gòu)建了自定義主題、縮放規(guī)則和設計對象。這些特性重構(gòu)了 R 字體和顏色默認的設置,使得整體上和Airbnb的品牌保持一致。
這個 Rbnb 包也有許多函數(shù)幫助我們來完成自動化任務,比如缺失值處理、按年趨勢計算、提升數(shù)據(jù)聚合性能、我們用來分析實驗的可重用模式等等。添加一個函數(shù)到這個包里可能花費很多時間,但是這最初的投資將帶來長期的回報。通過使用一樣的R包作為我們的構(gòu)建模板來開發(fā)一樣的語言、數(shù)據(jù)可視化風格以及相互評審。
如果人們不知道怎么使用工具的話,你做了多少個工具都沒用。在一系列快速增長之后,我么年開始每月為新成員和現(xiàn)有成員做為期一周的數(shù)據(jù)集訓營。他們包括3個小時的 R 培訓以及一些用R和R Markdown完成的有可選導師的集訓營項目。
這個R集訓營班專注于 Rbnb 包和一些常用數(shù)據(jù)操作包的使用,包括數(shù)據(jù)框操作(比如tidyr和dplyr)、數(shù)據(jù)可視化(ggplot2)、以及動態(tài)報告撰寫(R Markdown)。我們在課程開始前會為參與者發(fā)放學習指南和資料。在上課期間,我們使用自己的數(shù)據(jù)貫穿一個結(jié)構(gòu)化的教程,包括我們以工作實例的形式展現(xiàn)一些我們在工作中遇到的挑戰(zhàn)。
這個方法允許用戶在剛開始的幾個小時里不需要熟悉R的代碼就可以開始寫代碼了,并且完全不必擔心高級編程方法的復雜性。我們也介紹用戶使用我們內(nèi)部風格指南和其他許多有用的R包,比如 formattable、diagrammeR以及broom。最后,我們給他們尋求幫助和網(wǎng)絡資源的一些方向。
在集訓營之后,我們鼓勵用戶持續(xù)學習。我們贊助每個人參加 DataCamp 來幫助團隊成員根據(jù)自己的學習進度組織學習小組完成可交互性的在線課程。我們也讓新人和導師結(jié)對,這些導師幫新人帶上數(shù)據(jù)科學家的臺階。我們有一個內(nèi)部R語言問答的Slack頻道。我們團隊成員組織學習的課程主題有 SparkR、R 對象系統(tǒng)、包的開發(fā)等等。最近,我們團隊成員參加一個由RStudio組織的高級的R開發(fā)者沙龍,并且分享了我們從團隊成長中的點點滴滴。
我們的數(shù)據(jù)科學團隊的成員也鼓勵Rbnb貢獻代碼。通過一個全面的代碼評審的過程允許用戶開發(fā)新技能將為將來的項目帶來有價值。此外,他們對一個重要的內(nèi)部工具有了主人翁精神并且從同行那里知道如何從各自的貢獻中受益。我們在最佳實踐、功能文檔,測試,和風格方面都會指導新的貢獻者。
我們也致力于在Airbnb之外擴展R語言社區(qū)。我們贊助像即將開始的 rOpenSci Unconf 大會,為開源項目貢獻代碼(比如ggtech、ggradar),以及在 Shiny 開發(fā)者大會 和 UseR 大會做一些分享。去年,我們很榮幸影響到了許多R 開發(fā)者,包括 Hadley Wickham 和 Ramnath Vaidyanathan 他們也拜訪了我們在三藩市的總部。
在結(jié)構(gòu)化學習資源中這個工具變得越來越有影響力。
在工具和教程之外,我們也發(fā)明一些強大的數(shù)據(jù)基礎設施。在過去的3年間,我們的 Shiny 應用從我們的服務器開始運行的第一天就已經(jīng)有將近10萬個頁面瀏覽量。我們最近開始支持一個新的 RStudio Server 和 SparkR 集群。我們有一個獨立主廚的R包配方以及橫跨我們集群上的版本控制,這允許我們產(chǎn)出快速的更新并且大規(guī)模部署。
強大的 R 語言工具、持續(xù)學習、與R社區(qū)的緊密結(jié)合、強大的數(shù)據(jù)基礎設施,這些都幫助我么你的數(shù)據(jù)科學團隊不斷成長。自從兩年以前我們開始這個動議,我們看過的團隊成員有從未打開R到轉(zhuǎn)變成強大的開發(fā)人員現(xiàn)在都開始給我們的新員工教R。這個我們已經(jīng)建立的基礎允許我們雇傭一個大范圍的數(shù)據(jù)科學家來分享成長心態(tài)和學習新技能的興奮。這個方法幫助我們建立一個能為我們的工作帶來新的見解和觀點的多元化團隊。
Rbnb R包的創(chuàng)建也激發(fā)了Python開發(fā)人員發(fā)布數(shù)據(jù)科學家的內(nèi)部稱為Airpy的Python包。我們的R開發(fā)人員也在合作開發(fā)這個包,所以這個包有一個類似的接口和函數(shù)集。我們鼓勵團隊成員同時為Rbnb何Airpy來貢獻代碼,我們也在一起工作來開發(fā)更多有效的教育資源和工具來加持我們的團隊。今天,許多我們團隊的成員同時精通Python和R,同時用這兩張語言都可以評審和寫出可靠的代碼。在最近的一個為數(shù)66人的團隊成員調(diào)查中,我們發(fā)現(xiàn)80%的數(shù)據(jù)科學家和分析師在R的數(shù)據(jù)分析的自我評價都是偏向于”專家”而不是”初學者”,即使其中只有64%的人將R作為他們首選的數(shù)據(jù)分析語言。類似地,47%的團隊成員認為自己用Python做數(shù)據(jù)分析已經(jīng)進入專家的行列,即使只有31%的人將Python作為首選分析工具。這保留了5%表明他們同時均衡地使用這兩種工具。我們專注于建立一個同時精通兩種語言的平衡團隊,在我們招聘的過程中也不會帶有任何偏好或偏見。這是個讓我們技能、經(jīng)歷、背景多樣化的方法又進一步提升了團隊的影響力。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內(nèi)涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數(shù)據(jù)分析與統(tǒng)計學領域,假設檢驗是驗證研究假設、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數(shù)據(jù)把關的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10