使用開源軟體快速搭建數據分析平台

最近,國內湧現出了不少數據分析平台產品,例如魔鏡和數據觀。

這些產品的目標應該都是self service的BI,利用可視化提供數據探索的功能,並且加入機器學習和預測的功能。它們對標的產品應該是Tableau或者SAP Lumira。因為筆者曾經為Lumira開發數據可視化的功能,對這一塊很感興趣,於是就試用了一下這些產品,感覺這些產品似乎還有很大的差距,於是就想自己用開源軟體搭一個簡單的數據分析平台試試看。

代碼在這裡 github.com/gangtao/data

廢話少說,上架構圖:

列一下主要用到的開源軟體:

伺服器端:

  • flask flask.pocoo.org/

輕量級的Python Web框架

  • pandas pandas.pydata.org/

Python的數據結構和數據分析工具包,提供數據處理的Wrangling的功能

  • sklearn scikit-learn.org/

非常流行的Python機器學習包,依賴於numpy,scipy和matplotlib

客戶端:

  • jquery

這個就不用介紹了

  • reactjs facebook.github.io/reac

facebook開發的js UI框架,基於組件(component)而非mvc

  • d3js d3js.org/

數據驅動的DOM操縱庫,可以創建豐富的數據可視化呈現。

  • echarts oschina.net/p/echarts

百度開發的數據可視化庫,基於canvas技術,功能豐富。實為中國開源項目的翹楚。

  • bootstrap getbootstrap.com/

twitter開發的前端框架,非常流行。

  • jquery datatables datatables.net/

非常實用的基於jquery的表格控制項

  • bootstrap fielinput github.com/kartik-v/boo

HTML5文件上傳控制項

  • papaparse github.com/mholt/PapaPa

CSV文件的JS解析

  • requirejs requirejs.org/

JS 依賴管理

  • select2 select2.github.io/

基於jquery的select控制項

開發構建工具

  • nodejs nodejs.org/en/

這個應該也不用介紹

  • babel babeljs.io/

javascript的編譯器,支持把ES6的代碼轉換成瀏覽器可執行的代碼,這裡主要是為了支持reactjs使用的jsx的編譯。

好了,羅列了這麼多的開源軟體後,我們看看dataplay2的功能,然後看看這些開源軟體起到的作用和我為什麼要選擇它們的原因。

在介入正題之前,我們先聊聊dataplay2這個名字,dataplay很容易理解,我希望創建一個簡單易用的數據平台,使用起來像玩一樣的愉快。但為什麼是2呢?因為這個軟體很二么?當然不是。其實我之前寫過一個dataplay的,當時的架構略有不同,為了使用R里的ggplot來支持語法驅動的可視化方案,我後台使用了R/Python的橋接方案,前台的可視化操作會生成ggplot的命令,好處是可以有一個統一的數據模型和語法來驅動數據的可視化分析,便於用戶進行數據的探索。然而這樣的架構太複雜了,伺服器端既有R又有Python,我自己都看不下去了,後來就放棄了。新的dataplay2使用echart的圖表庫來做可視化,優缺點我們後面再聊。

好了,運行dataplay2非常簡單,下載github上的code後,建議安裝anaconda,所有的Python依賴就都準備好了,進入dataplay2/package目錄,運行:

python main.py

這裡補充說明一下,因為react的jsf需要編譯,需要運行如下的命令用babel進行jsf的編譯才能運行,具體命令如下:

## install node first## cd package/staticnpm install -g babel-clinpm install babel-preset-es2015 --savenpm install babel-preset-react --savebabel --presets es2015,react --watch js/ --out-dir lib/

另外還需要使用bower安裝客戶端的所有依賴

## install bower first## cd package/staticbower install

大家也可以參考package/static/package.json了解需要的依賴。有時間需要集成一個更簡單的build腳本來做這些事情。生成的JS文件在lib目錄下。修改js目錄下的原始文件,babel會觸發編譯,生成新的js文件在lib目錄下。

然後在瀏覽器中鍵入 localhost:5000啟動客戶端。

首先我們進入數據菜單

在這個頁面,用戶可以瀏覽已有的數據,或者上傳一個CSV文件,增加一個數據集。

簡單介紹一下這一部分的實現。

數據上傳用到了file input控制項,數據表用了datatable控制項。為了方便CSV文件直接存貯在本地文件系統中。後台用pandas對csv文件進行處理。前台用Rest API讀取csv文件,然後用papaparse解析後,展現在數據表中。這樣做純粹是為了方便,因為整個POC是我在假期花了3/4天做的,所以怎麼方便怎麼來。更好的做法是在後台用Python對CSV文件作解析。

注意這裡我們對上傳的CSV文件有嚴格的要求,必須有首行的header,末尾不能有空行。

有了數據後,就可以開始做分析了。首先我們看看可視化的分析。點擊菜單Analysis/Visualization

例如我們選定Iris數據源做一個Scatter Plot

可視化這一塊的主要工作是從CSV的表結構數據,根據數據綁定,變形到echart的數據結構。因為echart並沒有一個統一的數據模型,所以每一個類型的圖表都需要有對應的數據變形的邏輯 。(代碼 package/static/js/visualization )

現在主要的做了Pie,Bar,Line,Treemap,Scatter, Area這幾種chart。

現在用下來感覺echart優缺點都很明顯,他提供的輔助功能很好,可以方便的增加輔助線,note,存貯為圖形等。但是由於缺乏統一的數據模型擴展起來比較麻煩,我希望有時間試用一下plotly,當然highchart是非常成熟的圖表庫,無需證明。

其實我希望能找到一個ggplot的D3的實現,例如這個benjh33.github.io/ggd3/ ,可惜該項目似乎不活躍了。

除了基於可視化的分析功能,還有機器學習的功能。

分類

分類的演算法可以使用KNN,Bayes和SVM。

如果選擇兩個Feature做預測,我用D3畫出了該預測的模型。大於兩個時,就沒有辦法畫出來了。

然後用戶可以選擇基於該模型來做預測。

聚類和回歸的功能和分類基本一致。

聚類

聚類演算法現在實現了Kmeans

線性回歸

邏輯回歸

基本功能就這些了,這裡列出一些我想要實現的功能:

  • 數據源

現在的數據源只有CSV文件,可以考慮更多的數據源支持,例如資料庫/數據倉庫,REST調用,流等等。

  • 數據模型

現在的數據模型比較簡單,就是pandas的dataframe或者一個簡單的cvs的表結構。可以考慮引入資料庫。另外還需要增加對層級數據(hierachical)的支持

  • 數據變形

數據變形是數據分析的必要準備工作。業內有很多專註於數據準備的產品,例如paxata,trifacta

這個版本的dataplay沒有任何的數據變形和準備的功能,其實pandas有非常豐富的data wrangling的功能,我希望能在這之上包裝一個data wrangling的DSL,可以讓用戶快速的進行數據準備。

  • 可視化庫

Baidu的echart是非常優秀的可視化庫,可是用於數據探索時,還不夠好。希望能有一套類似ggplot的前端可視化庫來使用。另外地圖功能和層級化的圖表也是數據分析常見的功能。

還需要加入圖表的選項

  • 儀錶盤功能

這個版本的dataplay沒有儀錶盤功能,這個功能是數據分析軟體的標配,必須有。pyxley似乎是個不錯的選擇,也和dataplay的架構一致(python,reactjs),有時間可以嘗試一下

  • 機器學習和預測

dataplay現在實現了最簡單的一些機器學習的演算法,我覺得方嚮應該是面向用戶,變得更簡單,用戶只給出簡單的選項,例如要預測的目標屬性,和用於預測的屬性,然後自動的選擇演算法。另外需要更方便的對演算法進行擴展。

好了,最後談談簡單的感受

  • reactjs真不錯,一直不喜歡MVC,reactjs的組件化用起來更舒服,而且開發效率確實高,整個項目我用假期3/4天完成,react功不可沒。
  • dataplay現在的功能還比較弱,但是基本的架構已經搭好了,大家喜歡的話可以拿去擴展。我不一定會有時間繼續對它的功能增強,但是歡迎大家和我一起討論。

更新:

因為很多同學反映不能正常運行,我製作了一個Dockerfile,大家可以參考 github.com/gangtao/data 來構建。希望可以解決大家不能運行的問題。

Image 已經發布到 docker hub 了 :hub.docker.com/r/naught

推薦閱讀:

如何挑選數據可視化的最佳形式?
R語言互動式可視化包CanvasXpress
人民日報中央廚房獲評「2017年大數據優秀應用案例」
大眾點評數據分析
數據分析神器Tableau——讓你的數據會說話

TAG:大數據分析 | 數據可視化 |