資料科學部門如何使用Python和R組合完成任務

發表於2016-05-04

概述

和那些資料科學比賽不同,在真實的資料科學中,我們可能更多的時間不是在做演算法的開發,而是對需求的定義和資料的治理。所以,如何更好的結合現實業務,讓資料真正產生價值成了一個更有意義的話題。

資料科學專案的完整流程通常是這樣的五步驟:
需求定義=》資料獲取=》資料治理=》資料分析=》資料視覺化

一、需求定義

需求定義是資料科學專案和資料科學比賽的最大不同之處,在真實情景下,我們往往對目標函式、自變數、約束條件都並不清晰。需要通過訪談、論文、文件等等形式對問題進行系統地分析,將實際問題量化為可以解決的抽象問題,確定自變數、約束條件以及目標函式。在真實情景下,需求往往是多變化的,臨時的,如何把握好需求成為了整個專案後續推進的關鍵要素。

二、資料獲取

資料獲取的形式主要包括:

  1. 現有資料庫的呼叫
  2. 現有API的呼叫
  3. 自行設計的爬蟲

在資料獲取中,比較重頭的一項就是爬蟲的開發,這裡 R 雖然開發了 rvest 包, 不過比起 django-scrapy 這樣完整的爬蟲排程系統不禁黯然失色,所以在第一步,我建議使用Python做爬蟲的開發。

三、資料治理

資料治理第一步就是資料的定義,而資料的定義通過 Python的各種ORM框架和admin系統,可以非常出色地完成資料倉儲的定義和管理。通過 airflow 我們又可以很好的對ETL過程做全流程的監控。
所以,在第二步,我依然建議使用Python作為資料治理的工具。

四、資料分析

資料分析首先涉及的就是探索式分析,這一點正是R語言的強項,適宜於各種強大的資料視覺化,我們可以利用R快速瞭解資料的整體特性,通過 data.table 和 Rcpp 我們也可以快速提升 R 的單機效能,省去了Cython寫wrapper的尷尬。而Python 由於需要更多約束的分析操作,在探索式分析中相比 R 少了幾分靈活性。至少是矩陣乘法我更願意接受直觀的 %*%, 而不是np.dot()。所以,第三步,我建議使用 R 完成資料的分析工作。

五、資料視覺化

資料視覺化本來是JS的天下,但是感謝 R語言生態中熱衷於給JS做封裝的開發者們,現在市面上絕大部分在BI領域會涉及到的JS庫都已經被 R 語言封裝好了,比如 echarts、highcharts、rcharts、d3等等。另一方面,通過 shiny, 我們快速極大地簡化了BI構建的流程,跳過底層jquery、boostrap、websocket等等細節,直接針對業務場景構建BI系統,幫助我們在快速構建BI原型上掃清障礙,而不是在Tornado裡面辛苦地改template。顯然,使用 R 做資料視覺化可以大大減少我們的開發時間。所以,第四部,我也建議使用 R 完成資料視覺化的工作。

總結

這樣正常資料科學專案做下來,我們需要交付一個爬蟲管理系統(django-scrapy)、一個資料倉儲管理系統(django)、一個流程監控系統(airflow)、一個BI分析系統(shiny),真正完成對整個資料科學專案的可監控、可維護,然後在這個過程中我們不斷去迭代我們的資料產品,優化流程,完善模型,最終實現反哺業務。

總結起來,將Python作為資料科學的基礎,而R作為上層建築是一個不錯的解決方案,當然這一切都建立在資料開發人員具有過硬的開發技能,否則Python和R的隨意性會釀成巨大的慘案。

相關文章