加快推進從數據探索到數據產品的過程是一件頗有意義的事情,數據分析要如何作到儘可能和數據分析的流程緊密結合,又要方便工程化落地一直困擾着許多數據分析師和Web工程師。數據分析師不想深究太多前端JS實現,Web工程師也不想插手複雜的業務邏輯與SQL,先後分離看起來勢在必行。html
對於工程化這件事情,若是數據分析輸出的圖表是基於html的,那Web工程師只須要複製粘貼相應的js配置項而後引用一下js庫就完成70%的工做了。可是對於數據探索來講,大部分的數據可視過程70%的工做可能都是失敗、或者暫時的,花費大量精力完成的前端代碼並不會對數據分析這件事情自己帶來太多幫助。前端
如何權衡前端交互與後端算法一直以來都是困擾數據分析師的一個問題,本文將對這一問題作進一步的討論。git
常見的方式好比,Caravel(Python)都具備這樣的功能,數據分析師能夠創建一個數據庫鏈接,而後在鏈接中經過SQL語句獲得想要的數據,再經過交互式的繪圖方式完成數據可視化的探索。github
優點:讓數據分析師能夠集中精力在數據分析自己,能夠快速實現數據探索、建模、甚至分享頁面和儀表盤。web
劣勢:複雜的數據分析算法實現起來比較困難,數據須要事先規整清晰好,知足多維數據分析條件才行。雖然Caravel 目前已經集成了大多數前端繪圖庫,可是總體定製性還有待增強,且對中國友人支持度不高。算法
第一種方案創建在交互式繪圖工具足夠好用的基礎上,對於不少非主流的startup並不必定徹底適用,由於startup人手有限,極可能要求數據分析師有能自行解決前端數據可視化的能力需求。sql
常見的方式是經過SQl取數後調用一個JS製圖庫(好比echarts、highcharts、plotly等等),分析師須要在js中完成許多數據描述性統計的工做直接展現在前端頁面上,而後將配置項和SQL保存在數據庫中,以供後續的API查詢調用。數據庫
優點:簡化了數據產品落地的流程,在SQL不夠用的狀況下能夠用JS來補足,能夠快速實現定製化的前端圖表輸出,知足各類可視化特殊需求。編程
劣勢:簡單的數據分析算法實現也很困難,數據分析很難專一於數據自己,須要處理不少JS相關問題。segmentfault
上述兩種方案在數據處理上都並非很是完美,更加理想的方案是經過用一種數據分析語言完成數據分析和數據可視的工做,既要保證數據分析的靈活性,又要保證工程落地的敏捷性變成一個很關鍵的事情。可是一般本身寫前端JS的代碼又很是的麻煩。
一些常見的描述性統計(極值均值求和計數等等)在前端實現都會耗費不少功夫,好比須要使用mapreduce,更不用說更高級的一些算法了,而大部分數據分析工做在Python或者R語言中實際上是能夠快速完成。那麼,從Python和R中直接輸出一些html圖表不失爲一種好的辦法,固然更多場景下我是建議用R來完成,再借助Zeppelin
/Radiant
/PowerBI
這樣的工具,咱們也能夠直接將前端頁面生成Dashboard或者經過iframe的方式獨立輸出。
優點:知足不一樣需求層次的快速數據分析,既能知足複雜的算法模型快速實現,又能知足工程敏捷落地的需求。
在簡單分析模式下,交互式數據分析能夠覆蓋60%的分析場景
在複雜分析模式下,使用R語言能夠覆蓋90%的做圖需求
在極度定製化可視化需求下,可使用JS前端控件定製知足100%的數據可視化需求
Zeppelin、Radiant、PowerBI 都是支持以R 爲輔助做圖工具的數據分析工具,因爲篇幅有限,本文以Zeppelin爲例,講解一個如何使用R語言打通數據分析從探索到產品的全流程。
在NFLab公司的推進下,Zeppelin 從0.6版本就正式開始支持 R 的編譯器,而且對此作了諸多優化與拓展。R Tutorial 也是 Zeppelin Notebook 默認的數據分析教程。
tidyverse 全家桶 (囊括基本數據處理的一切)
htmlwigets 全家桶 (N個前端可視化庫集合)
ggfortify與ggplot其餘插件 全家桶 (N個ggplot2可視化插件集合)
plotly 全家桶 (一鍵無縫遷移ggplot2到plotly)
Zeppelin (快速製做交互式 dashboard)
sqldf、SparkR、data.table、rlist (知足高級數據處理需求)
小數據集的簡單分析:
能夠經過 Zeppelin 配置 JDBC
或者 Spark.SQL
的方式鏈接多種數據庫來快速實現簡單的交互式數據分析了。
2.小數據集的複雜分析:
基於ggplot2
的統計圖表生態實在過於強大,各類插件琳琅滿目,總有一款能夠知足你奇葩的需求。好比使用ggfortify
或者ggally能夠一行代碼就完成各類複雜的可視化分析,好比PCA分析、聚類分析、協方差矩陣、時間序列預測等等,這樣就保證了數據分析結果維度的豐滿。
因爲ggally
是一個ggplot2
的一個拓展,一樣也支持ggplot2
的圖層疊加原理。經過+
的鏈式調用,能夠在同一基礎圖形上變換多種展示方式進而獲得更多多維分析結果。
若是須要將ggplot2
的結果製做成動態圖表,還能夠直接利用plotly::ggplotly()
函數作渲染,而後經過plotly::layout
函數來控制新圖表的佈局細節,知足專業數據分析與可視化的高級需求。
data(tips, package = "reshape") pm <- ggpairs(tips) pm %>% plotly::ggplotly() %>% plotly::layout(xaxis = list(title="test",showgrid = F))
3.大數據集的簡單分析:
大數據的分析每每並不須要太複雜的分析了,由於大數據集的複雜分析基本上是經過抽樣的方式轉化成小數據集分析的方式來操做。
對於大數據集的分析,咱們能夠將數據讀入Spark,經過Spark SQL來實現簡單分析,若是確實遇到須要全量分析,咱們則能夠藉助於SparkR
和sparklyr
甚至是scala
這樣的方式來進一步拓展數據分析的能力,相應的做圖也能夠藉助於 ggplot2.SparkR
包來實現。
若是是直接經過 spark.sql
的方式進行簡單的交互式分析,咱們也可使用Zeppelin自己來完成。