简介
G2 2.x 基于 DataFrame ,内置了大量的统计函数,以一句话一张图表的目标来实现图形语法,但是用户的接受程度并不高,理解困难,有一些内置的逻辑。
G2 3.x 开始我们提供了外置的数据处理模块 DataSet ,以 View 为核心概念,提供数据的转换、统计、布局等功能,但是这种方案也并不完美,整个生命周期没用同 G2 打通,无法同 G2 的交互进行整合。
G2 4.0 我们开始探索交互语法,交互过程中最终的反馈往往反映到数据上,这对数据管理的要求更高,G2 4.x 的后面几个版本中我们会将多维分析作为一个重点来做,所以整个数据处理模块需要重新设计。
G2 数据处理的内容
由于 G2 是面向工程的,而非直接的分析产品,我们需要在工程上考虑整个数据的生命周期,我们的数据处理模块将提供以下功能:
- 数据生命周期管理:数据加载、数据缓存、更新、视图
- 数据加工:数据过滤、排序、转换、去重、补齐、行列转换、数据清洗
- 数据聚合:汇总、封箱、回归、密度函数等
- 多维数据分析:切片、drill down, roll up
除此之外,还有一些功能是同数据处理相关,但是并没有放入数据处理模块中,而是同 G2 做更紧密的集成:
- 关系图布局、TreeMap 生成(布局放在那里呢?)
- 文本防遮挡
数据调整(stack, jitter, symetric 和 dodge)
生命周期管理
数据加载模块
缓存
视图
同一个数据源会生成不同的视图,每个视图展示数据的不同信息,可以在视图上进行数据加工、数据聚合,可以基于视图生成新的视图。
多视图也需要支持 join 功能。更新
数据加工
数据过滤
度量数据和维度数据的过滤方式有一些差异:
度量数据的过滤方式有:大于、小于、等于、区间
-
排序
转换
一般是指度量数据和维度数据的转换,但是也可以是单个维度拆分成多个维度,例如时间拆分成年月日。
去重
在前端页面做去重的并不多,但是有些场景下(宽表存在数据冗余的情况下)根据指定的几个字段进行去重还是必要的,可以形成一个新的视图。
补齐
数据的补齐一般发生在某些维度组合的情况下数据有丢失的情况,为了图表显示的正常而补充 0,这种情况经常发生在层叠面积图的场景下,否则会出现显示的错误。
行列转换
数据处理模块是为 G2的显示做准备的,数据库表中存储的结构可能会与 G2 要求的结构不一致,这就需要进行行列转换。
数据清洗
数据字段为 null 或者不符合数据字段类型的情形,一般不在前端处理,但是显示前需要处理掉。
数据聚合
汇总,常见的 min, max, count, avg, percent 等
- 封箱,对数据进行区间的划分,用于生成直方图、色块图
- 回归,各种线性回归、非线性回归
-
多维数据分析
多维数据一般用 cube 表示,数据类型一般分为 度量(连续数据)和 维度(分类数据),是 BI 系统中的数据组成方式。
切片
根据维度将数据分割成不同的切片,然后在每个切片上实现数据加工和数据聚合,数据切片也是 rollup 和 drill down 的依据。
rollup
rollup 的中文是”上卷“,上卷操作可以给用户更加上层的概念,可以降低需要显示的图形。在上卷过程中,会自动的将数据进行汇总计算,常见的有 count, sum, min, max 等,
上卷操作可以直接基于缓存的明细数据直接计算,
- 可以多级递归上卷,这需要多个维度(或者单个维度自动转换成多个维度)
上卷可以是异步的,当明细数据时抽样数据时,上卷操作需要后台计算并返回
drill down
dirll down 的中文是 “下钻”,是上卷的反过程,通过查看明细的方式将汇总数据分解,一般有两种初始化方式:
初始化时仅加载顶层的汇总数据,每次下钻都请求下一级数据
- 初始化时加载明细数据,自动计算每一级的上卷数据进行缓存,每次下钻时仅取缓存的数据
对于多个维度的数据每一级对应一个维度,但是对于单个时间维度来说可以对时间进行分解:年月日时分秒 都可以分解成一个独立的维度。