浅思图数据可视化

原文地址:https://geekplux.com/2019/07/27/network-data-visualization (opens in a new tab)

Why - 图分析的价值

首先,图是最能描述世界的结构。几乎所有事物都能抽象成图。有一门学科叫作“复杂网络”是专门用图这种数据结构来研究世界规律的。图一直是炙手可热的研究方向,国内复杂网络的研究不仅热门,也颇有成就。在图分析领域,已经沉淀了很多分析方法、研究模式,我们光是把这些现成的算法筛选,进而应用到我们的业务中已经很有价值了,更别说我们可以根据我们的需求去拓展图分析的边界。

目前我能想到的一些场景:

具体的场景:

用户进入一个网站之后,不停的跳转,然后每个页面是一个节点,每次跳转是一条边。我能不能比较多个用户跳转图的相似性,先把他们分类,然后再比较他们的偏好不同。搞清楚用户到底是为什么点击到了这个产品,这个链路的特点是什么,等等。

计算 - 图数据结构类库

既然图可视化需求这么多,我觉得应该把数据作为核心,数据和视图分离,抽象出一个单独的模块用来维护、处理、计算图数据结构。比如基本的节点查找、路径查找、最小生成树算法等等。

这个库的作用只用来计算,输出统一结构的图数据,我们甚至可以将图数据定义标准化,这样在其他图可视化或应用到图数据结构的场景中就能通用。

类似的轮子已经有了,我所用过最强大的是 networkx (opens in a new tab) ,但它是一个 python 库。我调研了一下发现目前前端可用的库要不是太简单(只能加减数据,查找节点),要不就太复杂(JSNetworkX (opens in a new tab) ,是 networkx 的 JS 版,功能很多)。

定义了标准化的数据结构之后,就能将库设计为插件化的,主体只实现基本算法,插件实现特殊需求算法。

目前我想到的一些计算:

布局 - 图可视化布局

交互 - 图交互与分析

交互是数据可视分析中必不可少的步骤。通过各种交互,我们可以探索数据的模式。

典型的几个交互: