当前位置: 主页 > Python语言

python可视化数据分析-数据可视化python

发布时间:2023-02-08 22:38   浏览次数:次   作者:佚名

python数据可视化站点_数据可视化python_python可视化数据分析

在奥斯汀举办的SciPy2018专场大会上,众多开源Python可视化工具的代表就Python数据可视化的未来发展发表了不同的看法。 我们听到了有关 Matplotlib、Plotly 和 VisPy 等的更新。 我作为 PyViz、GeoViews、Datashader、Panel、hvPlot 和 Boken 的代表参加了 SciPy2018 特别会议,我的 Anaconda 同事 Jean-Luc Stevens 代表 HoloViews 参加了会议。 本文对目前可用的软件包进行了调查,并展示了它们之间的联系,后续文章将讨论这些工具近年来的发展情况以及它们未来可能如何发展。

目前的情况

为了清楚起见,我介绍了 Jake VanderPlas 对当今 Python 中不同库如何相互关联的概述:

数据可视化python_python数据可视化站点_python可视化数据分析

在这里,您可以看到几个主要的图书馆团体,每个都有不同的起源、历史和重点。 “SciVis”是一组可分离的库,主要用于物理位置数据的可视化(图左下角)。 这些工具(VisPy、glumpy、GR、Mayavi、paraView、VTK 和 yt)主要基于 1992 OpenGL 图形标准,以三维或四维(3D over time)对物理过程进行图形密集型可视化形式,用于常规或非常规网格数据。 这些库早于 HTML5 对富 Web 应用程序的支持,并且通常专注于工程领域或科学环境中的高性能桌面 GUI 应用程序。

其他库几乎都来自“InfoVis”库组python可视化数据分析,主要关注任意空间信息的可视化,不一定来自3D物理世界。 InfoVis 库使用打印页面或计算机屏幕的两个维度来解释抽象空间,通常使用轴和标签。 InfoVis库可以细分为很多子库:

Matplotlib

Matplotlib 于 2003 年发布,具有非常广泛的二维绘图类型和输出格式,是最古老且迄今为止最受欢迎的 InfoVis 库之一。 Matplotlib 还早于 HTML5 对富 Web 应用程序的支持,专注于静态图像和使用桌面 GUI 工具包(如 Qt 和 GTK)的图形交互。 Matplotlib 提供一些 3D 支持,但比 SciVis 库提供的 3D 支持更有限。

python数据可视化站点_数据可视化python_python可视化数据分析

基于 Matplotlib

近年来,基于Matplotlib的二维绘图能力建立了多种工具,可以作为特定数据类型或特定领域的渲染引擎(pandas、NetworkX、Cartopy、yt等),也可以提供更高级别的 API 来简化绘图创建(ggplot、plotnine、HoloViews、GeoViews),或使用其他绘图类型(seaborn 等)对其进行扩展。

JavaScript

一旦 HTML5 在浏览器之间实现了丰富的交互性,许多库就可以开始在网页或 Jupyter 笔记本上提供交互式 2D 绘图,或者使用自定义 JS(Boken、Toyplot)或封装现有的 JS 库,如 D3(Plotly、bqplot)。 封装现有的 JS 可以很容易地添加为大型 JS 市场(例如 Plotly)创建的新图形,而使用自定义 Js 允许您定义低级 Js 原语,这些原语可以组合成 Python Plot 类型(用于 Bokeh)中的全新图形。

JSON

随着 D3 等 JavaScript 库的发展,它们的功能也出现在声明性 JSON 规范(Vega、Vega-Lite)中,使得用任何语言生成 JavaScript 图形变得更加容易,现在包括 Python(通过 Altair,以前通过 vincent)。 完整的绘图规范以可移植的 JSON 形式提供,支持跨多个工具的集成。

WebGL

python可视化数据分析_python数据可视化站点_数据可视化python

就像 HTML5 用于 2D JavaScript 绘图一样,WebGL 标准实现了浏览器与 Jupyter 之间的 3D 交互,从而导致三者的建立。 3D浏览器内置绘图。 这些新的基于网络的 3D 方法都没有达到桌面 SciVis 3D 库的广度和深度,但它们允许与 Jupyter 笔记本深度集成,并通过网络轻松共享和使用。 因此,尽管 WebGL 工具与 SciVis 工具有一些共同的应用,但它们可能与其他 InfoVis 工具的关系更密切。

其他

许多其他库,即使在 Jake 的表之外,也提供其他补充功能(例如用于可视化网络的 graphviz)。

可视化工具之间的区别

上面按历史和技术的细分有助于解释我们如何获得当前数量的 Python viz 包,但它也有助于解释为什么包之间的用户级别差异如此之大。 具体来说,主要区别在于支持的绘图类型、数据大小和用户界面。 这些差异使得图书馆的选择不仅仅是个人喜好或方便的问题,因此了解它们非常重要:

图纸类型

最基本的绘图类型在多个库之间共享,但其他绘图类型仅在某些库中可用。 考虑到库的数量、图的类型以及它们如何随时间变化,很难准确地绘制出每个库支持的内容,但如果您查看每个库的示例,您通常可以清楚地看到重点是什么。

数据可视化python_python数据可视化站点_python可视化数据分析

作为粗略指南:

数据大小

每个库的架构和底层技术决定了它支持的数据规模,这决定了这个库是否适用于大图像、电影、多维数组、长时序、网格或其他大型数据集:

由于这些类型的库支持广泛的数据大小(因此在某种程度上支持数据类型),需要处理大数据的用户需要在一开始就选择合适的库。

用户界面和发布

不同的库在使用绘图的方式上差异很大。

静止图像:大多数库现在都可以轻松创建静止图像,至少在 PNG 中是这样,而且通常是平滑的矢量格式,如 SVG 或 PDF。

python数据可视化站点_数据可视化python_python可视化数据分析

原生 GUI 应用程序:SciVis 库加上 Matplotlib 和 Vaex 可以创建 OS-specific GUI 窗口,提供高性能,支持大型数据集,并与其他桌面应用程序集成,但它们绑定到特定的 OS,通常需要在本地运行而不是在网络上。 在某些情况下,基于 JavaScript 的工具也可以通过嵌入 Web 浏览器嵌入到本机应用程序中。

导出为 HTML:大多数 JavaScript 和 JSON 库可以在无服务器模式下运行,该模式生成交互式图(缩放、平移等),可以通过电子邮件在 Web 服务器上发布,而不需要 Python。

Jupyter Notepad:现在大多数 InfoVis 库都支持在 Jupyter Notepad 中交互使用,Python 支持基于 JavaScript 的绘图。 基于 ipywidgets 的项目提供与 Jupyter 的更紧密集成,而其他一些方法仅在 Jupyter 中提供有限的交互性(例如,使用 Matplotlib 而不是 Bokeh 的全息视图)。

基于 Web 的独立仪表板和应用程序:Plotly 图表可以在带有 Dash 的独立可部署应用程序中使用,而 Bokeh、HoloViews 和 geoviews 可以使用 Bokeh Server 进行部署。 大多数其他 InfoVis 库都可以使用新的面板库部署为仪表板,至少包括 Matplotlib、Altair、Plotly、Datashader、hvPlot、Seaborn、plotnine 和 yt。 然而,虽然基于 Web 的交互性很棒,但基于 ipywidgets 的库(ipyleaflet、pythreejs、ipyvolume、bqplot)很难部署为面向公众的应用程序,因为 Jupyter 服务器允许任意代码执行(但请参阅已失效的 Jupyter 指令版本项目和 flask -ipywidgets 以获得潜在的解决方案)。

因此,用户需要考虑给定的库是否涵盖了他们预期的可视化使用范围。

接口类型

各种 InfoVis 库为不同类型的用户和创建可视化的不同方式提供了大量的编程接口。 这些 API 的不同之处在于完成常见任务需要多少代码,以及它们为用户提供了多少控制权来处理不常见的任务以及将原语组合成新类型的图表:

数据可视化python_python数据可视化站点_python可视化数据分析

面向对象的 Matplotlib API:对于一些常见的任务,例如创建子数据,Matplotlib 的主要 API 允许完全控制和组合,但复杂且非常冗长。

命令式 Pyplot API:Matplotlib 的基本接口允许使用 Matplotlib 风格的命令式命令,这些命令对于简单的情况来说是简洁的,但不是组合的。 因此,大多数情况下仅支持一组特定的选项。

命令式 Pandas.plot() API:以数据框为中心,用户主要在 Pandas 中准备数据,然后选择一个子集进行绘图。 正如本系列的下一篇文章中所讨论的,它们现在得到范围广泛的图表库和其他数据结构的支持,使它们成为广泛支持的基本绘图命令集。 不可直接组合,但可以从底层绘图库(对于 hvPlot)返回可组合对象。

声明式图形 API:受图形语法启发的库,如 ggplot、plotnine、Altair 和 Bokeh(在某种程度上)提供了一种自然的方式来组合图形基元(如轴和符号)以创建完整的图形。

声明式数据 API:基于其他库的原生 APIpython可视化数据分析,HoloViews 和 GeoViews 提供了更高级别的声明式和组合 API,专注于注释、描述和操作可视化数据,而不是绘制元素。

这些 API 都适合具有不同背景和目标的用户,使一些任务简单明了,而另一些任务则变得更加困难。 除了 Matplotlib 之外,大多数库都支持一个或最多两个可选 API,因此选择适合每个用户的技术背景和首选工作流程的库非常重要。

新兴趋势

如您所见,Python 提供了丰富的可视化功能,多种方法和重点反映在大量可用的库中。 方法之间的差异仍然很重要并且具有深远的影响,这意味着用户在深入研究任何一种特定方法之前需要考虑这些差异。 但正如我们在 SciPy2018 特别会议上看到的那样,趋同趋势有助于降低用户选择库的重要性。 要了解有关新兴趋势的更多信息,请继续关注本系列的第 2 部分,Python 数据可视化 2018:走向融合。

英文原文:

译者:Lyx