摘要:在AI大放异彩的今天,作为AI的基础的算法和科学计算也是得到了快速发展。Python语言是AI开发的首选语言,在数据科学计算和数据可视化可以说有着强大的生态系统,比如大家耳熟能详的Anaconda、Jupyter、NumPy、Pandas、Matplotlib
在AI大放异彩的今天,作为AI的基础的算法和科学计算也是得到了快速发展。Python语言是AI开发的首选语言,在数据科学计算和数据可视化可以说有着强大的生态系统,比如大家耳熟能详的Anaconda、Jupyter、NumPy、Pandas、Matplotlib,Seborn等应用平台和库。数据可视化库Matplotlib更是使用最广泛的库,之前我们曾经作为专门的介绍,今天虫虫给大家推荐是一个全新现代的,支持GPU渲染的图形库fastlotlib,和其名字暗示的那样其主打的就是一个字快。
在数据爆炸的今天面对高维图、海量数据集(TB级),如何高效的挖掘其中的知识和宝藏是数据科学界面临的难题之一。
其次,目前市面上存在的工具都是基于静态图处理,且交互性有限,无法充分用来做数据挖掘。
另外,面对大规模数据集时候,如何快速分析、实时出结果(图形)也是常见的屏障之一。
fastplotlib是一个全新的基于WGPU的GPU渲染快速交互式科学绘图库。其设计的哲学有两个目标第一个使用简洁、其二是快速渲染,可以使用fastplotlib实现:
GPU加速可视化(最新的集成GPU就足以应付绝大多数用例的需求)。
快速原型和算法设计。
大规模数据的探索与快速渲染。
创建数据实时采集和处理系统。
fastplotlib的开源地址(Github):
github::/fastplotlib/fastplotlib
从2003年开,数据可视化生态系统发展主要的节点如
上图。
虽然科学可视化传统上依赖于静态图,但动态和交互式可视化是增强数据探索和分析的关键。
下面的交互式图例,显示fastplotlib中协方差矩阵的简单交互式可视化。作为正式定义,协方差矩阵衡量了随机变量对如何一起变化。
左侧子图显示了Olivetti人脸数据集的协方差矩阵,矩阵中的每个条目表示任意两个像素的强度如何变化。右侧子图是从协方差矩阵当前选定行重建的行图像,只需通过移动选择器,就可以查看当前选中的协方差矩阵的数据。从视觉上可以非常清楚地看出,查看协方差矩阵每一行的重建图像比仅绘制协方差矩阵本身的静态图更有价值。通过查看重建的行图像,可以了解数据集中人脸之间的像素强度变化情况。
fastplotlib的目标是通过提供一种允许创建高级交互式图表的机制来扩展科学可视化领域,最终推动科学发现。
如今,有许多开源Python可视化工具可用。然而,对数据科学家和一般用户来说,有一个限制因素,那就是学习使用这些库的门槛很高。通常涉及要调用复杂的API,这使得他们很难专注于他们的数据或研究问题。
fastplotlib的创建就是为了解决这个问题,旨在通过易于使用且直观的 API 提供快速交互式可视化。
Fastplotlib API设计遵守一个前提,以数组为核心构建数据块,其数据保持众所周知的类数组的结构,这样,让数据交互和可视化的更加简单易于理解。举例说明:
假设绘制一个简单的正弦波,代码如下:
import fastplotlib as fpl
import numpy as np
# generate some data
xs = np.linspace(-10, 10, 100)
ys = np.sin(xs)
data = np.dstack([xs, ys])[0]
# create a figure
figure = fpl.Figure
# add the data to the figure
sine_wave = figure[0, 0].add_line(data=data, thickness=10)
figure.show
现在,想要正弦波的每个第三个点更改为红色。如果可视化中的数据可以视为一个数组,那么这个需求涉及的数据与通常的NumPy数组操作完全一样,仅需:
sine_wave.colors[::3] = "red"
通过类似的理念,使得对初始绘制的对象,之后可以对其图进行不同特征(例如,颜色图、颜色、数据等)执行各种动态操作。
fastplotlib这种方法进行API设计的目标简化用户使用操作,让库灵活、直观且易于使用。
事件系统Fastplotlib另一个设计就是事件系统。使用简单的回调函数,定义图形或绘图之间的事件,从而生成和构建交互式可视化。假设要定义一个简单的点击事件:
首先生成一些数据。
import fastplotlib as fplimport numpy as np# 生成一些圆
def make_circle(center, radius: float, n_points: int = 75) -> np.ndarray:theta = np.linspace(0, 2 * np.pi, n_points)xs = radius * np.sin(theta)ys = radius * np.cos(theta)return np.column_stack([xs, ys]) + centercircles = listfor x in range(0, 50, 10):circles.append(make_circle(center=(x, 0), radius=4, n_points=100))# 创建图形fig = fpl.Figurecircles_graphic = fig[0,0].add_line_collection(data=circles, cmap="tab10", thickness=10)fig.show上面,已经生成了数据,接着以此为基础可以定义一个点击事件:当点击图时,让点击的圆圈并突出显示(改变其颜色)。
@fig.renderer.add_event_handler("click")def click_event(ev):circles_graphic.cmap = "tab10"xy = fig[0, 0].map_screen_to_world(ev)[:-1]nearest = fpl.utils.get_nearest_graphics(xy, circles_graphic)[0]nearest.colors = "w"在fastplotlib中,指定事件非常简单,只需定义想要处理的事件,然后将处理程序添加到事件对应的相应图形或绘图中即可。该方法的优点在于它不需要用户学习新的、复杂的、特定于库的API功能(仅需知道如何定义函数就足够了)。
用于数据交互和事件处理的API的简化设计是fastplotlib库的一个主要优势,使其直观且易于掌握。
支持最新硬件如今,使用GPU计算是开展科学研究的先决条件,可视化也不例外。最大限度地利用 GPU 上的计算资源是实现高分辨率高性能可视化的关键因素。下面描述的是使用fastplotlib绘制300万个点的示例。在示例中不仅可以绘制线条,还可以轻松放大和缩小,更改线条的颜色图,甚至可以单独更改特定点的颜色。
在许多其他Python科学可视化库中,一次绘制这么多的点并对点的颜色进行细粒度的控制是几乎是不可能的。
fastplotlib的性能之所以如此强大,是因为它所基于的底层图形技术。
架构Fastplotlib基于三层架构。Fastplotlib是在pygfx渲染引擎之上抽象而成。Pygf的底层是WGPU,一个跨平台图形API。通过WGPU支持三个平台的对应图像系统库Vulkan (Linux)、Metal(Mac)和DX12(Windows)。
本质上,这些新的图形API(Vulkan、Metal 和 DX12)非常快、高效,并且比老旧的底层库OpenGL,可更好地支持GPU硬件。
轻松查看数据并对其进行深层次探索是数据图形化的最终目的。在最初绘制数据后能够与数据交互然后才能推动更深层次的数据信息。然而创建类似的二次交互式图表可视化,并轻松直观地操作和分析数据并非易事,许多可视化库对此都要求学习复杂的API,这增加了入门门槛。另外很多这类库还基于OpenGL对硬件支持有限,不能充分利用现代强大的GPU算力和算法优化。
而基于Vulkan、Metal 和 DX12的fastplotlib,则可以更好地利用GPU,从而实现更强大、更富有表现力的可视化。通过简化数据块的形式(数组),和简易的API,方便易用的事件系统给我们呈上一个全新的现代的数据可视化框架。
来源:虫虫安全