APP下载

plotly Bokeh 哪个好Python化函式库视觉功能的测定?资料科学工具专家告诉你

消息来源:baojiabao.com 作者: 发布时间:2024-05-02

报价宝综合消息plotly Bokeh 哪个好Python化函式库视觉功能的测定?资料科学工具专家告诉你

Python是资料科学家爱用的分析用开发语言,但除了统计和数学函式库以外,Python的资料视觉化函式库也越来越丰富,号称涵盖各种常用函式库的Python懒人包发行版本Anaconda,其解决方案架构师Jim Bednar最近详细地整理出Python资料视觉化函式库的整个生态系,要让资料科学家了解Python资料视觉化处理的威力。

在Python资料视觉化函式库的生态系中,可分为几个群组,这些群组都来自不同的起源,但主要可划分为科学视觉化(SciVis)和资讯视觉化(InfoVis)两块函式库。其中科学视觉化函式库主要用来视觉化地理位置资料,相关函式库有VisPy、glumpy、GR、Mayavi、ParaView、VTK和yt。主要是建构于OpenGL图形标准之上,可以为规则或不规则资料,提供三维或是四维的物理程序图形视觉化。这些函式库发展早于HTML5支援的网页应用程序,通常被用于工程或是科学环境中。

除了科学视觉化函式库这个区块,其他的函式库都属于资讯视觉化(InfoVis)函式库的群组,专注于对任意空间的资讯视觉化,以两个维度的抽象空间,使用轴和标签解释多维空间的资料。Jim Bednar提到,资讯视觉化函式库还可以进一步细分成多个子群组,区分成Matplotlib、JavaScript、JSON或是WebGL等各类型。

Matplotlib具有长久的历史,也是极受欢迎的的资讯视觉化函式库,支援广泛的2D绘图类型以及输出格式,Matplotlib发展也早于有HTML5的网页应用程序,因此主要是使用像是Qt和GTK的桌面GUI工具包,功能重点在于绘制静态图像,以及互动式图形的呈现上。Matplotlib提供部分3D支援,但比起学视觉化函式库有更多的限制。

而多年Matplotlib发展以来,有多种工具建立在Matplotlib的2D绘图功能之上,Jim Bednar将其归类成特定类型资料的渲染引擎,例如熊猫、NetworkX、Cartopy以及yt,而也有像是ggplot、plotnine、HoloViews和GeoViews函式库,提供高阶的绘图API。

在HTML5出现后,浏览器支援更丰富的互动功能,许多函式库开始为网页或是Jupyter Notebooks提供2D互动图形功能,无论是自定义Bokeh和Toyplot的函式库,或是包装既有的绘图函式库D3成更容易使用的函式库的Plotly和bqplot。Jim Bednar提到,也由于D3这样的JavaScript函式库已经发展成熟,可以简单地为任何语言包括Python产生JavaScript图形,透过Altair旧能以JSON移植完整的图形,并整合到许多类型的工具之中。

另外,对网页应用程序很重要的WebGL技术,也能提供网页丰富的绘图功能,就像HTML5用于2D JavaScript绘图的方式一样,WebGL标准在浏览器和Jupyter Notebooks中,也可以实现互动3D体验。Jim Bednar认为,虽然three.js、vtk.js或是regl,这些基于网页3D的方法都没有达到桌面科学视觉化函式库的深度,但是因为跟Jupyter Notebooks良好整合,可以透过网页和远端分享,大幅增加了便利性。他也提到,虽然WebGL工具与科学视觉化工具有部分重叠,但性质还是偏向资讯视觉化领域。

不同的函式库有适合不同的使用情境,Jim Bednar将用途归类成6大类。几乎所有资讯视觉化函式库都能良好的制作统计图,包括散点图、线、面积、长条图和直方图,但表现较杰出的有Seaborn、bqplot、Altair、ggplot2和plotnine。图像、规则网格和矩形网格,开发者可以使用Bokeh、Datashader、HoloViews、Matplotlib和Plotly,大多数科学视觉化函式库也都有支援。

不规则的二维网格包括三角形网格,可以使用学视觉化函式库以及Matplotlib、Bokeh、Datashader和HoloViews。无论是Matplotlib结合Cartopy,或是GeoViews、ipyleaflet与Plotly,都能用来绘制地理资料。网络(Networks)与图(Graphs)则能使用NetworkX、Plotly、Bokeh、HoloViews以及Datashader。在3D网格或散点图,则要使用Plotl、Matplotlib、HoloViews和ipyvolume,科学视觉化函式库也都有良好的支援。

此外,不同函式库也提供不同的界面,Jim Bednar将之区分为5大类,大多数函式库都提供无头操作,以生成静态图形,而像是科学视觉化函式库、Matplotlib和Vaex,都可以创建特定操作系统的GUI视窗,另外,大多数的JavaScript和JSON的资料视觉化函式库,都可以在没有服务器的情况下,产生互动式绘图,透过电子邮件或发布到不支援Python的网页服务器上。

热门的Jupyter Notebook受到广大的资讯视觉化函式库支援,大多数视觉化函式库都能够和Jupyter Notebook互通使用,开发者特别可以使用ipywidgets,以获得更好的整合体验。当然也有不少函式库提供独立的网页仪表板和应用程序,Plotly图表就能以Dash在独立的应用程序中使用,Bokeh、HoloViews和GeoViews可以使用Bokeh Server进行部署。大部分的资讯视觉化函式库都能使用Panel函式库部署仪表板,包括Matplotlib、Altair、Plotly、Datashader、hvPlot、Seaborn、plotnine和yt都没问题。

除了视觉化界面,资讯视觉化函式库也都提供了丰富的API,让不同类型的用户都能建置适合的视觉呈现。Jim Bednar表示,这些函式库提供的API都具有不同的背景和目标,适用于解决特定的任务,除了Matplotlib之外,大多数函式库都支援一个或最多个备用API,开发者在解决问题之前,应该选择适当的工具。

Matplotlib主要提供物件导向的API,开发者能掌握完全的控制和组合性,不过操作起来较为复杂。而ggplot、plotnine和Altair则属声明性图形API,提供组合图形的原语,让开发者直觉地组成图形。HoloViews和GeoViews则提供声明性资料API,让开发者能以高阶的声明和组合API,专注于标记、叙述和处理视觉化资料。

Jim Bednar提醒,大量且不同类型的Python资料视觉化函式库,提供开发者大量建构图形的不同方法,而这也意味着,开发者应该在深入投资开发资源前,先考虑这些差异带来的影响。

2018-11-20 00:34:00

相关文章