最近,國內(nèi)涌現(xiàn)出了不少數(shù)據(jù)分析平臺產(chǎn)品。這些產(chǎn)品的目標(biāo)應(yīng)該都是self service的BI,利用可視化提供數(shù)據(jù)探索的功能,并且加入機器學(xué)習(xí)和預(yù)測的功能。它們對標(biāo)的產(chǎn)品應(yīng)該是Tableau或者SAP Lumira。因為筆者曾經(jīng)為Lumira開發(fā)數(shù)據(jù)可視化的功能,對這一塊很感興趣,于是就試用了一下這些產(chǎn)品,感覺這些產(chǎn)品似乎還有很大的差距,于是就想自己用開源軟件搭一個簡單的數(shù)據(jù)分析平臺試試看。
代碼在這里 https://github.com/gangtao/dataplay2
廢話少說,上架構(gòu)圖:
列一下主要用到的開源軟件:
服務(wù)器端:
客戶端:
開發(fā)構(gòu)建工具
好了,羅列了這么多的開源軟件后,我們看看dataplay2的功能,然后看看這些開源軟件起到的作用和我為什么要選擇它們的原因。
在介入正題之前,我們先聊聊dataplay2這個名字,dataplay很容易理解,我希望創(chuàng)建一個簡單易用的數(shù)據(jù)平臺,使用起來像玩一樣的愉快。但為什么是2呢?因為這個軟件很二么?當(dāng)然不是。其實我之前寫過一個dataplay的,當(dāng)時的架構(gòu)略有不同,為了使用R里的ggplot來支持語法驅(qū)動的可視化方案,我后臺使用了R/Python的橋接方案,前臺的可視化操作會生成ggplot的命令,好處是可以有一個統(tǒng)一的數(shù)據(jù)模型和語法來驅(qū)動數(shù)據(jù)的可視化分析,便于用戶進行數(shù)據(jù)的探索。然而這樣的架構(gòu)太復(fù)雜了,服務(wù)器端既有R又有Python,我自己都看不下去了,后來就放棄了。新的dataplay2使用echart的圖表庫來做可視化,優(yōu)缺點我們后面再聊。
好了,運行dataplay2非常簡單,下載github上的code后,建議安裝anaconda,所有的Python依賴就都準(zhǔn)備好了,進入dataplay2/package目錄,運行:
1 | python main.py |
這里補充說明一下,因為react的jsf需要編譯,需要運行如下的命令用babel進行jsf的編譯才能運行,具體命令如下:
1 2 3 4 5 6 | ## install node first ## cd package/static npm install -g babel-cli npm install babel-preset-es2015 --save npm install babel-preset-react --save babel --presets es2015,react --watch js/ --out-dir lib/ |
另外還需要使用bower安裝客戶端的所有依賴
1 2 3 | ## install bower first ## cd package/static bower install |
大家也可以參考package/static/package.json了解需要的依賴。有時間需要集成一個更簡單的build腳本來做這些事情。生成的JS文件在lib目錄下。修改js目錄下的原始文件,babel會觸發(fā)編譯,生成新的js文件在lib目錄下。
然后在瀏覽器中鍵入 localhost:5000啟動客戶端。
首先我們進入數(shù)據(jù)菜單
在這個頁面,用戶可以瀏覽已有的數(shù)據(jù),或者上傳一個CSV文件,增加一個數(shù)據(jù)集。
簡單介紹一下這一部分的實現(xiàn)。
數(shù)據(jù)上傳用到了file input控件,數(shù)據(jù)表用了datatable控件。為了方便CSV文件直接存貯在本地文件系統(tǒng)中。后臺用pandas對csv文件進行處理。前臺用Rest API讀取csv文件,然后用papaparse解析后,展現(xiàn)在數(shù)據(jù)表中。這樣做純粹是為了方便,因為整個POC是我在假期花了3/4天做的,所以怎么方便怎么來。更好的做法是在后臺用Python對CSV文件作解析。
注意這里我們對上傳的CSV文件有嚴(yán)格的要求,必須有首行的header,末尾不能有空行。
有了數(shù)據(jù)后,就可以開始做分析了。首先我們看看可視化的分析。點擊菜單Analysis/Visualization
例如我們選定Iris數(shù)據(jù)源做一個Scatter Plot
可視化這一塊的主要工作是從CSV的表結(jié)構(gòu)數(shù)據(jù),根據(jù)數(shù)據(jù)綁定,變形到echart的數(shù)據(jù)結(jié)構(gòu)。因為echart并沒有一個統(tǒng)一的數(shù)據(jù)模型,所以每一個類型的圖表都需要有對應(yīng)的數(shù)據(jù)變形的邏輯 。(代碼 package/static/js/visualization )
現(xiàn)在主要的做了Pie,Bar,Line,Treemap,Scatter, Area這幾種chart。
現(xiàn)在用下來感覺echart優(yōu)缺點都很明顯,他提供的輔助功能很好,可以方便的增加輔助線,note,存貯為圖形等。但是由于缺乏統(tǒng)一的數(shù)據(jù)模型擴展起來比較麻煩,我希望有時間試用一下plotly,當(dāng)然highchart是非常成熟的圖表庫,無需證明。
其實我希望能找到一個ggplot的D3的實現(xiàn),例如這個http://benjh33.github.io/ggd3/ ,可惜該項目似乎不活躍了。
除了基于可視化的分析功能,還有機器學(xué)習(xí)的功能。
分類
分類的算法可以使用KNN,Bayes和SVM。
如果選擇兩個Feature做預(yù)測,我用D3畫出了該預(yù)測的模型。大于兩個時,就沒有辦法畫出來了。
然后用戶可以選擇基于該模型來做預(yù)測。
聚類和回歸的功能和分類基本一致。
聚類
聚類算法現(xiàn)在實現(xiàn)了Kmeans
線性回歸
邏輯回歸
基本功能就這些了,這里列出一些我想要實現(xiàn)的功能:
好了,最后談?wù)労唵蔚母惺?/p>