来源:中国数据分析行业网 | 时间:2016-06-17 | 作者:数据委
摘要:本文介绍了如何使用开源软件迅速的搭建一个数据分析平台,包含数据导入,变形,分析,预测,可视化。
最近,国内涌现出了不少数据分析平台产品,例如魔镜和数据观。
这些产品的目标应该都是self service的BI,利用可视化提供数据探索的功能,并且加入机器学习和预测的功能。它们对标的产品应该是Tableau或者SAP Lumira。因为笔者曾经为Lumira开发数据可视化的功能,对这一块很感兴趣,于是就试用了一下这些产品,感觉这些产品似乎还有很大的差距,于是就 想自己用开源软件搭一个简单的数据分析平台试试看。
代码在这里 https://github.com/gangtao/dataplay2
废话少说,上架构图:
开发构建工具
好了,罗列了这么多的开源软件后,我们看看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
线性回归
逻辑回归
基本功能就这些了,这里列出一些我想要实现的功能:
好了,最后谈谈简单的感受