概述
和那些數據科學比賽不同,在真實的數據科學中,我們可能更多的時間不是在做算法的開發,而是對需求的定義和數據的治理。所以,如何更好的結合現實業務,讓數據真正產生價值成了一個更有意義的話題。
數據科學項目的完整流程通常是這樣的五步驟:需求定義=》數據獲取=》數據治理=》數據分析=》數據可視化
一、需求定義
需求定義是數據科學項目和數據科學比賽的最大不同之處,在真實情景下,我們往往對目標函數、自變量、約束條件都并不清晰。需要通過訪談、論文、文檔等等形式對問題進行系統地分析,將實際問題量化為可以解決的抽象問題,確定自變量、約束條件以及目標函數。在真實情景下,需求往往是多變化的,臨時的,如何把握好需求成為了整個項目后續推進的關鍵要素。
二、數據獲取
數據獲取的形式主要包括:
現有數據庫的調用
現有API的調用
自行設計的爬蟲
在數據獲取中,比較重頭的一項就是爬蟲的開發,這里 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的隨意性會釀成巨大的慘案。