高级数据分析可视化低代码技术框架选型初步分析

Posted 肖永威

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高级数据分析可视化低代码技术框架选型初步分析相关的知识,希望对你有一定的参考价值。

本文重点是以数据分析、算法研发人员视角,以数据分析可视化为主线,探讨低代码数据分析可视化技术方案。

做为数据分析、算法研发者,数据分析可视化IT技能一般都比较弱,或者不具备,迫切需求低代码工具,快速把数据分析结果展现给客户。

1. Python可视化工具

1.1. Python可视化工具概况

python可视化库可以大致分为几类:

  • 基于matplotlib的可视化库
  • 基于JS的可视化库
  • 基于上述两者或其他组合功能的库

1.1.1. 基于matplotlib的可视化库

matplotlib是python可视化库的基础。matplotlib库的设计参考了matlab,甚至连名称也是以“mat”开头。

推荐知乎上一遍文章,深度好文 |Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码)

两个重要且常见的基于matplotlib的第三方库:

  • Pandas:一般用于数据分析和处理,其实也提供较为简单的API绘制图形如pandas.tools.plotting
  • Seaborn:matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图。

1.1.2. 常用的三个基于javascript的可视化库

  • bokeh:Bokeh (Bokeh.js) 是一个 Python 交互式可视化库,支持现代化Web浏览器,提供非常完美的展示功能。Bokeh 的目标是使用 D3.js样式提供优雅,简洁新颖的图形化风格,同时提供大型数据集的高性能交互功能。详细Bokeh.js官网

  • plotly:Plotly是另一个免费进行数据分析和绘制图表的APP,建立在d3.js上。 Plotly图可下载为SVG,EPS或PNG格式,并简单地导入到Illustrator或者Photoshop中。跟bokeh类似,也可以制作一些交互式的web图。详细plotly官网

  • pyecharts是基于百度开源的Echarts开发的Python版可视化工具。

1.1.3. 其他综合类型库

  • Holoviews:能够让用户构建有助于可视化的数据结构,而且它包含丰富的可组合元素库,可以覆盖、嵌套和轻松定位。同时,它还支持快速数据探索。Holoviews可以和Seaborn、pandas或者bokeh组合使用。
  • Altair:Altairs起源于D3,但代码编写量要比D3简单。Altair 是 Python 高级声明式可视化库。Altair 提供一个 Python API 在声明式 manner 中构建静态统计可视化库。

1.2. 常用可视化工具分析

  • 由于Pyecharts是基于Echarts制作的,因此生成图表比较美观,并且官方中文文档对相关设置讲解非常详细,有关Pyecharts的讨论也非常多,所以如果在使用过程中有相关疑问也很容易通过检索找到答案,但遗憾的是不支持使用pandas中的series数据,需要转换为list才可以使用

  • Plotly也是一款非常强大的Python可视化库,Plotly内置完整的交互能力及编辑工具,支持在线和离线模式,提供稳定的API以便与现有应用集成,既可以在web浏览器中展示数据图表,也可以存入本地拷贝。但是由于官方未提供中文文档,网上关于Plotly的教程也仅限于官方的一些demo,对于一些详细的参数设置并没有太多资料

  • Bokeh是一个专门针对Web浏览器的呈现功能的交互式可视化Python库。这是Bokeh与其它可视化库最核心的区别,它可以做出像D3.js简洁漂亮的交互可视化效果,但是使用难度低于D3.js,并且Bokeh有自己的数据结构ColumnDataSource,所以要先对数据进行转换,接着就是创建画布、添加数据及设置,Bokeh做出来的图也是支持交互的,并且样式之类的看上去还是比较舒服的,只是代码量稍稍多些。

相对于前两款Python可视化工具,plotly.py更偏重于交互式图形可视化。

  • plotly.py是基于plotly.js进行开发,它继承了plotly.js的诸多优点,例如,可以绘制科学图表,3D图形,统计图表,SVG地图,财务图表等丰富图形。

  • Seaborn利用matplotlib的强大功能,几行代码就能创建漂亮的图表。其与matplotlib主要的区别是Seaborn的默认样式以及更美观、更现代的调色板设计。因为Seaborn建立在matplotlib之上,所以你需要了解matplotlib来调整Seaborn 的默认值。

2. Python Web 框架与数据可视化

2.1. 传统Web框架

2.1.1. Django

Django是一个基于Python的开放源代码的Web应用框架,采用了MTV的框架模式(模型M,模板T和视图V)。Django与其他框架比较,它有个比较独特的特性,支持orm,将数据库的操作封装成为python,对于需要适用多种数据库的应用来说是个比较好的特性。不过这种特性,已经有其他库完成了,sqlalchemy.

2.1.2. Flask

Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。

Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。

Flask 很轻,花很少的成本就能够开发一个简单的网站。非常适合初学者学习。Flask 框架学会以后,可以考虑学习插件的使用。例如使用 WTForm + Flask-WTForm 来验证表单数据,用 SQLAlchemy + Flask-SQLAlchemy 来对你的数据库进行控制。

2.1.3. Tornado

Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。

得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。不过现在与众多的框架比较,Tornado已经被抛在了后面,Django已经超过了它,更不说其他框架了。

数据来源详见[1]

2.2. 低代码Web框架

低代码揭示了一种APP开发的趋势:使用更高级的框架,尽可能地忽略掉底层的细节,以此达到快速开发和迭代的目的。

不过这并不意味着以后开发人员就不用弄懂web的各种细节。相反,只有明白底层细节才能快速上手高级框架,并且不至于跌入高度抽象的陷阱当中。想要去个性化地定制系统或者提高性能,就必须深入了解其底层架构。

引用文中观点:低代码Web 框架中垂直类开始崛起,这里的垂直类框架,是指 FastAPI 和 Dash、Streamli。Plotly Dash 和 Streamlit是这方面的两个新星,特别是后者,虽然晚于前者三年出现,但上升势头很快。JP Hwang 2020年7月在他的博客中对二者进行了较为全面的对比,原文标题为《Plotly Dash vs Streamlit — Which is the best library for building data dashboard web apps?》

2.2.1. FastAPI框架

FastAPI 是专门用于开发 Rest 服务的框架,国内有很多 Python 自媒体都发文推荐过,性能表现非常优秀,可以媲美 NodeJS 和 Go。

FastAPI 基于 Scarlett和P ydantic。

2.2.2. Dash框架

Dash 是 Plotly 出品专门用于开发数据可视化应用的框架,基于 Flask、Plotly.js 和 React.js 打造,但是在编码的时候,可以只使用 Python 来实现。

这两个框架的排名都比较靠前,数据表现很好。

尤其要说明的是 Dash 的势头很强,最近一个月仅靠 4 名贡献者就更新了超过 10 万行代码,背后一个重要的原因是它背后有商业化力量在推动。Dash 是 Plotly 公司基于 Plotly.js 打造的,虽然开源,但是还提供了针对企业的私有部署服务。所以它有很强的动力来推广 Dash。

Dash是一个用于构建Web应用程序的高效Python框架。

Dash写在Flask,Plotly.js和React.js之上,非常适合在纯Python中,使用高度自定义的用户界面,构建数据可视化应用程序。它特别适合使用Python进行数据分析的人。

通过几个简单的模式,Dash抽象出构建基于Web的交互式应用程序所需的所有技术和协议。

Dash应用程序在Web浏览器中呈现,可以将应用程序部署到服务器,然后通过URL进行共享。

由于Dash应用程序是在Web浏览器中进行查看,因此Dash本质上是跨平台和移动端的。

Dash是一个开源库,在许可的MIT下发布,Plotly开发Dash,并提供了一个在企业环境中轻松部署Dash应用程序的平台。

2.2.3. Streamlit框架

要说2019年开源社区的宝藏项目,Streamlit绝对排的上号。官方宣称它是:The fastest way to build custom ML tools。

streamlit框架底层依赖tornado,支持的可视化库包括:Matplotlib、Seaborn、Altair、Plotly、Bokeh,数据分析支持 Pandas 和 NumPy。

注:Streamlit框架做为后起之秀,相关资料和应用案例很少,由于学习成本较低,具体情况多探索试验看看。

2.3. 低代码UI层比较

Dash和Streamlight基于AI和机器学习模型的低代码UI层比较。

DashStreamlit
支持语言Python/R/.NetPython only
许可MITApache 2.0
后端架构StatelessStateful
Web协议HTTP(S)Websockets
推荐部署Dash EnterpriseHeroku
用户体验Web appNotebook with controls
应用程序结构Multi-pageNotebook with code
前端ReactReact
互操作性Complete: any component can be an input/output, including tablesLimited: only widgets as inputs, graphs and tables can only be outputs
样式控制Dash Design Kit, Basic Bootstrap, or CSS受限
Crossfiltering
动态布局模式匹配回调
成立年份20172019
基金 (USD)$20M$27M

在文档、产品成熟、使用者更多方面,Plotly Dash领先具有优势,但是Streamlit作为后来者也在急速追赶,大有反超之势。

整体来说,我觉得 Python Web 框架生态是越来越繁荣了,对于广大的开发者来说是特别棒的一件事情。

3. Python高级数据分析可视化架构方案

3.1. 有限个性化(python)方案

有限个性化(python)方案,采用Plotly Dash Web框架,可视化工具使用Plotly,前端底层为React.js,Web服务端底层为Flask。
计算架构层采用Pandas、SKlearn、Tensorflow、Python等。

基于Plotly Dash解决方案,界面个性化空间较大,同时对应的代码量也较大。

3.2. 低代码纯python方案

低代码纯python方案,采用Streamlit Web框架,可视化工具默认使用Bokeh,可以同时兼容使用Plotly,前端底层为React.js,Web服务端底层为Tornado。
计算架构层采用Pandas、SKlearn、Tensorflow、Python等。

注:支持pyecharts——streamlit-echarts

低代码纯python方案,学习曲线快、简易,代码量较小,很多功能已封装好,相应的,其灵活性也降低了,整体性能弱些,Streamlit作为纯python库,可以很好兼容Keras、Pytorch、Altair、Bokeh、Plotly 等大部分。

3.3. 前后端分离方案

前后端分离架构,将使用Node.js构建前端,使用Vue和ECharts做完前端工具。
后端服务层使用支持异步的Tornado,以及pycharts快速开发图表。

前后端分离方案是个比较适合主流IT架构,技术栈比较全面,个性化、可扩展性比较强,但是开发成本高、周期长。

3.3. 对比分析

对比项目低代码纯Python方案有限个性化(Python)方案前后端分离方案
Web框架SreamlitPlotly DashVue
可视化工具Bokeh/Plotly等plotlypyecharts
Web服务TornadoFlaskNode.js + Tornado
UI层代码量很少中(有模板可用)大量自主开发
支持个性化有限受限自由
学习内容Sreamlit UI组件Dash UI组件、html、CSS、布局等前端全家桶及数据接口
性能一般好(看开发者水平)
美观配色方案配色方案和自定义自行设计
动态布局?(自行开发)支持自行开发
成立年份20192017
Git fork1.6k1.6k
Git Starred17.2k15.7k
前端工具Dash Enterprise(收费)前端工具较多

4. 总结

对于数据分析、算法研发者,不熟悉前端设计、或者没有前端艺术细胞;也不想实现太复杂的网页结构;只是想把python程序用极短的时间快速生成一个基于Web的GUI,那么,streamlit就是一个非常好的解决方案。

对于有较充裕研发资金者,可以选择Dash Enterprise,通过可视化开发实现低代码快速开发实现数据分析可视化应用。

对于独立自主研发产品,形成自主的产品线,那么前后端分离方案将是个不错的选择。

参考:

[1]. codingpy. 用脚投票,Python Web 框架最新排名出炉. CSDN博客. 2021.06
[2]. weixin_39818521. python十大框架_python 十大web框架排名总结.CSDN博客. 2020.10
[3]. 菜鸟学Python. 可视化工具不知道怎么选?深度评测5大Python数据可视化工具.CSDN博客. 2020.07
[4]. 大号扁平脸. python可视化工具.简书. 2018.04
[5]. https://matplotlib.org/
[6]. 惑也. Python的Web可视化框架Dash(1)—简介. 简书. 2019.09
[7]. 狮弟.比较Plotly Dash 和 Streamlit. CSDN博客. 2021.02
[8]. 羋虹光. Python开发NLP应用新思路:Streamlit与FastAPI双剑合璧. 简书 .2020.03
[9]. 61Duke. 全栈之后端开发系列 - “轮子” | 依赖库与工具. 知乎. 2022.01

以上是关于高级数据分析可视化低代码技术框架选型初步分析的主要内容,如果未能解决你的问题,请参考以下文章

Python数据分析师使用低代码Streamlit实现Web数据可视化方法——入门篇

Python数据分析师使用低代码Streamlit实现Web数据可视化方法——入门篇

微搭低代码入门教程03

Python数据分析师使用低代码Streamlit实现Web数据可视化方法——Plotly可视化基础篇

低代码/零代码平台表单引擎技术方案

Zeppelin源码分析—Zeppelin的设计思想