最近,國內涌現出了很多數據分析平臺產品,例如魔鏡和數據觀。javascript
這些產品的目標應該都是self service的BI,利用可視化提供數據探索的功能,而且加入機器學習和預測的功能。它們對標的產品應該是Tableau或者SAP Lumira。由於筆者曾經爲Lumira開發數據可視化的功能,對這一塊很感興趣,因而就試用了一下這些產品,感受這些產品彷佛還有很大的差距,因而就想本身用開源軟件搭一個簡單的數據分析平臺試試看。前端
代碼在這裏 https://github.com/gangtao/dataplay2 java
廢話少說,上架構圖:node
列一下主要用到的開源軟件:python
服務器端:react
flask http://flask.pocoo.org/ jquery
輕量級的Python Web框架git
pandas http://pandas.pydata.org/ github
Python的數據結構和數據分析工具包,提供數據處理的Wrangling的功能算法
sklearn http://scikit-learn.org/
很是流行的Python機器學習包,依賴於numpy,scipy和matplotlib
客戶端:
jquery
這個就不用介紹了
reactjs http://facebook.github.io/react/
facebook開發的js UI框架,基於組件(component)而非mvc
d3js https://d3js.org/
數據驅動的DOM操縱庫,能夠建立豐富的數據可視化呈現。
echarts http://www.oschina.net/p/echarts
百度開發的數據可視化庫,基於canvas技術,功能豐富。實爲中國開源項目的翹楚。
bootstrap http://getbootstrap.com/
twitter開發的前端框架,很是流行。
jquery datatables http://www.datatables.net/
很是實用的基於jquery的表格控件
bootstrap fielinput https://github.com/kartik-v/bootstrap-fileinput
HTML5文件上傳控件
papaparse https://github.com/mholt/PapaParse
CSV文件的JS解析
requirejs http://www.requirejs.org/
JS 依賴管理
select2 https://select2.github.io/
基於jquery的select控件
開發構建工具
nodejs https://nodejs.org/en/
這個應該也不用介紹
babel https://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/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安裝客戶端的全部依賴
## install bower first ## cd package/static bower 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的實現,例如這個http://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,你們能夠參考 https://github.com/gangtao/dataplay2/tree/master/docker 來構建。但願能夠解決你們不能運行的問題。 Image 已經發布到 docker hub 了 :https://hub.docker.com/r/naughtytao/dataplay/