再谈使用开源软件搭建数据分析平台
三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发展可谓日新月异,我希望试试利用最新的技术来帮助没有数据科学背景的人也能够轻松的进行数据分析和预测,于是就有了dataplay3 。
架构
老规矩,先上架构图:
为了构建一个最简单的开箱即用的数据分析平台,我使用了如下的技术栈:
服务器端:
- sanic 基于Python3的web服务器
- pandas Python上最流行的数据分析库
- auto-sklearn 基于sklearn的自动机器学习库
- prophet 非死不可开源的时间序列分析库
- pandassql 能够在Panda数据框上运行SQL的库
- gunicorn 基于python的WSGI HTTP服务器
客户端:
- React 前端框架
- Ant Design Pro 蚂蚁开源的企业级应用框架套装
- BizCharts 基于G2和React的可视化库
- G2 The Grammar of Graphics in JavaScript
功能
Dataplay3提供了数据分析的基本功能,希望尽可能的简化用户数据分析的复杂性。
- 基于Pandas的数据集管理
- 基于SQL和Pands的查询
- 基于Grammar of Graphics的可视化
- 简单的仪表盘
- 基于自动化机器学习, 提供数值和分类数据的建模和预测
- 时间序列分析
这里上几个功能截图,具体功能请参考 https://gangtao.github.io/dataplay3/features
或者参考这个视频介绍
对架构和功能的思考
前端
React毫无疑问非常流行,Vue同样优秀。我这里不想讨论和比较。
对于React的前端栈而言,现在开发工具的过程都已经非常成熟。基于Redux的状态管理解决了前端状态管理的大难题。但是即便如此,开发一个产品,无论是代码量还是所花费的时间来说,前端的工作都占据了开发的大头。作为一个前端的开发人员,你需要了解:
- 最新的ES6的规范 推荐https://es6.ruanyifeng.com/
- React和redux
- 使用webpack打包你的应用
- 使用Less扩充你的css
- 浏览器的知识
- ... ...
为了更容易上手,我选择使用了蚂蚁开源的 Ant Design Pro,用框架的好处是你不需要太多的设计,基本的模式照着用就好了,缺点呢,就是有些功能框架包装的太多,你想实现一些自己想要的功能呢就比计较困难。所以对于用不用框架,取决于你对于代码希望掌控的程度。
Ant Design Pro构建于:
- UmiJS 中文可发音为乌米,是一个可插拔的企业级 react 应用框架。umi 以路由为基础的,支持类 next.js 的约定式路由,以及各种进阶的路由功能,并以此进行功能扩展,比如支持路由级的按需加载。然后配以完善的插件体系,覆盖从源码到构建产物的每个生命周期,支持各种功能扩展和业务需求,目前内外部加起来已有 50+ 的插件。
- Dva 基于 redux、redux-saga 和 react-router 的轻量级前端框架。
我个人比较喜欢的Ant Design Pro的功能是测试这一块,通过mock服务器请求,前后端的开发可以分离,这个很方便。基于Rest API的前端开发的过程基本如下:
- 定义REST API
- 在前端实现REST API调用的异步请求,(利用Axios HTTP request)
- 实现前端的接口Mock
- 定义页面对应的模型Model,并实现状态的管理
- 绑定模型到页面,实现页面功能
可视化
Dataplay2使用echart作为可视化库,而Dataplay3使用了蚂蚁的G2,在我的前一篇博文中我就提到:
Baidu的echart是非常优秀的可视化库,可是用于数据探索时,还不够好。希望能有一套类似ggplot的前端可视化库来使用。
令人高兴的是,这个类似ggplot的前端可视化库已经有了,它就是蚂蚁的G2。这里我要称赞一下我的北邮校友林峰,他同时也是echart的作者。他领导的团队开发出了世界领先的可视化库,G2是其中之一。我认为G2已经超越了echart,希望他们能够越做越好!
作为语法驱动的图形,对于用户的使用是一个挑战,所以,在Dataplay3中同时提供了基于图标类型的可视化。
利用图形语法,新的图表类型可以用一个配置项来扩展,例如,对于Area chart的配置如下:
const areaChart = { name: 'area', icon: 'area-chart', feeds: [ { name: 'x', min: 1, max: 1, }, { name: 'y', min: 1, max: 1, }, ], build(feeds) { const grammar = {}; grammar.facat = null; grammar.coordination = 'rect'; grammar.geom = {}; const geom = {}; geom.geometry = 'area'; if (feeds.x && feeds.y) { geom.position = [feeds.x, feeds.y]; } grammar.geom.Geom1 = geom; return grammar; }, };
现在Dataplay3支持的图形种类还不多,后面,我可能会加入更多的类型。
后端
对于后端Python应用来说,全面拥抱Python3是必然选择。对于Web服务,Sanic是一个不错的选择,它基本继承了Flask的所有优点,但是提供了Async的支持,能够提供能好的服务性能,当然选择一个新的框架必然有风险。参考这篇文章,Sanic 的若干吐槽
Dataplay3仍然使用REST API而没有使用最新很流行的Graphql, 对于这个选择,大家也可以根据自己的应用来做决定。可以参考GraphQL vs. REST
机器学习
因为希望这是一款小白也能使用的数据分析工具,我希望提供的预测功能越简单越好,利用Auto-SKlearn,我们把机器学习的建模过程变得非常简单。用户只需要选择用于建模的数据,特征和目标就好了。用户不需要选择应用什么类型的算法,如果构建数据流水线,如何预处理数据,以及如果ensemb模型。唯一要考虑的是能够付出多少资源(时间,CPU,内存)来构建模型。
Auto-Sklearn的主要功能是:
- 利用元学习来选择算法的流水线
- 利用贝叶斯优化来选择参数
- 利用ensemble来构建复合的模型。
对于另一种常见的数据分析类型的时间序列,我选择了facebook开源的Prophet,(基于pystan构建)
Dataplay3还没有实现模型部署的功能,以后可能会考虑。
从全栈工程师到全生命周期工程师
因为更多的应用已经迁移到云或者在迁移到云的过程中,对于软件工程师而言,全栈已经不足以满足要求,现在需要的是全生命周期工程师,工程师不但要覆盖前后端的代码实现和测试,而且要参与软件生命周期的每一个部分,尤其是DevOps。
以Dataplay3为例,我需要做的事包括:
- 思考我想要解决什么问题,面向什么用户 -》 产品定义
- 设计软件架构 -》架构阶段
- 前后端的代码设计,选型 -》 设计阶段
- 前后端的实现和测试 -》 实现阶段
- 持续集成和部署 -》 CICD
- 部署后的运营和监控 , 产品的市场宣传 (例如我正在写的这篇文章)-》 运营阶段
这里,我主要讲一下CICD。DevOps和CICD在现在的软件生命周期中已经占据非常重要的地位。这篇文章提供了不少CICD的项目。
在Dataplay3中,我使用
- CICD codeship
- Automated code reviews & code analytics, codeacy
- Automated code reviews & code analytics, ebert
CICD的服务不少,开源项目最为流行的可能是Travis CI。另外gitlab也即成了很好的CICD的功能。codeship因为拥有很好的容器的功能,也是一个很不错的选择。现在的dataplay3的CI之使用了codeship的基本功能。可以利用codeship的pro的功能,构建更为强大的CICD。codeship对于开源项目提供每月100次build的免费服务,对于一些开发密度不是很大的项目来说应该足够用了。
codacy和ebert都是自动化的代码分析工具,你只需要创建一个项目,连接到你的github项目,就可以在提交代码或者合并PR的时候进行自动的代码分析,这个一般是可以在CI中实现的,使用这些服务可以然你更容易的了解你的代码的质量变化。
总结
如果说dataplay只是一些很原始的想法,dataplay2最多算是一个原型,那么dataplay3应该是一个还算勉强可用的工具了,当然它现在还很简单,可能有很多的bug和问题,我也希望能慢慢地改进。
对于三年前的一些想法,Dataplay3也做出了回应
可视化库
Baidu的echart是非常优秀的可视化库,可是用于数据探索时,还不够好。希望能有一套类似ggplot的前端可视化库来使用。另外地图功能和层级化的图表也是数据分析常见的功能。
还需要加入图表的选项
仪表盘功能
这个版本的dataplay没有仪表盘功能,这个功能是数据分析软件的标配,必须有。pyxley似乎是个不错的选择,也和dataplay的架构一致(python,reactjs),有时间可以尝试一下
机器学习和预测
dataplay现在实现了最简单的一些机器学习的算法,我觉得方向应该是面向用户,变得更简单,用户只给出简单的选项,例如要预测的目标属性,和用于预测的属性,然后自动的选择算法。另外需要更方便的对算法进行扩展。
这要感谢开源作者们的无私奉献。另外的一些功能呢,因为本人精力有限,只能抽空慢慢的实现,如果有对数据科学,开源应用有兴趣的小伙伴,也欢迎给我提意见,提PR,报Bug。
最后重点发一下项目地址 https://github.com/gangtao/dataplay3 欢迎大家和我交流。
参考

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
稳定ORACLE的执行计划
原文发表在:http://l4j.cc/2019/04/19/oracle-sql-plan-management/ 很多时候可能我们都希望CBO能够帮我们生成正确、高效的执行计划,但是很多时候事实并非如此,可能因为各种各样的原因(如,统计信息不正确或者CBO天生的缺陷等)都会导致生成的执行计划特别的低效。之前的一家公司有一台专门用于批量做数据校验清洗的数据库,每次校验清洗完成数据就会清理掉,统计信息经常会发生较大的变更,之前跑得好好的SQL,可能有时候跑5-6个小时都跑不完了,这时候查看执行计划,发现不正确的统计信息导致了执行计划的变更。 <!-- more --> 这时候我们就希望数据库中运行的SQL都能有正确、稳定的执行计划,在10g开始的版本中可以通过SQL Profile来稳定执行计划或者在不改变SQL的情况下修改执行计划。11g开始可以使用偏主动的稳定执行计划的手段——SPM(SQL PLAN MANAGEMENT),保证只有被验证过的执行计划才会被启用。 SQL Profile SQL Profile是包含特定于SQL语句的辅助统计信息的数据库对象,可以...
- 下一篇
什么是TensorBoard?
前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾前面: 从零开始学TensorFlow【01-搭建环境、HelloWorld篇】 什么是TensorFlow? TensorFlow读写数据 如何理解axis? 这篇文章主要讲讲TensorBoard的基本使用以及name_scope和variable_scope的区别 一、入门TensorBoard 首先来讲讲TensorBoard是什么吧,我当时是在官方文档里学习的,官网也放出了介绍TensorBoard的视频。我在b站搜了一把,发现也有,大家可以先去看看视频了解一下(其实已经说得很好了): https://www.bilibili.com/video/av35203293?from=search&seid=6605552834229124959 为了更方便 TensorFlow 程序的理解、调试与优化,于是就有了TensorBoard 这样的的可视化工具 因为我们编写出来的TensorFlow程序,建好一个神经网络,其实我...
相关文章
文章评论
共有0条评论来说两句吧...