跳到主要内容

数据规范

AIGC 场景可视化组件的数据规范标准解释。

数据集的结构

参考 Plot、Vega、AntV 等社区可视化项目在自动化可视化生成相关领域的探索,基本都采用表格数据集的形式。其有以下优势:

  • 作为一种大众存储数据的原始形式,用户侧不需要进一步对其进行预处理
  • 虽然结构简单,但通过一些通用的数据转换操作可以得到适应于各种类型图表的数据集

综上,表格数据集对于用户来说是无成本的,也统一了数据接口,我们规定其具体结构为一维对象数组

编码与数据转换

具体到某个特定类型的可视化图表,从原始的表格数据集还要经过编码映射(数据转换) 操作才能得到所需要的数据结构。

当前版本,没有对编码进行统一的抽象实现(下个版本的目标),而是对于不同类型组件指定编码需要的数据转换参数。举例说明:

const dataset = [
{ date: "2022-12-01", value: 10 },
{ date: "2023-12-01", value: 5 },
{ date: "2024-12-01", value: 18 },
];

// 对于一个简单的柱状图,需要 x 轴和 y 轴数据,则指定以下编码所需的数据转换参数:
const encoding = {
x: "date",
y: "value",
};

// 经过计算得到最终绘图所需的数据结构
const xAxisData = dataset.map((item) => item[encoding.x]);
const yAxisData = dataset.map((item) => item[encoding.y]);

可视化 AIGC 图表推荐服务训练相关

在数据方面,不同组件(层)的差异在于编码所需的数据转换参数,其作为组件的数据特征被用来训练图表推荐服务的 AI 模型。

根据 CDG 组同事 @韩东明 制定的规范,数据特征主要指的是参数字段值的数据类型。(参考 src/utils/DEFINE.ts 文件)

其中主要关注以下几点:

  • 字段值的类型,可枚举多种类型
  • 若支持多种类型,可指定最高优先级类型
  • 字段值的类别,例如单个值、数组等
  • 字段是否可选

以简单柱状图系列 x 轴所需数据为字符串或者日期类型,优先展示日期类型数据,且堆叠所需数据为可选的字符串或者日期类型为例,给出数据特征定义:

const dataRequire = {
/** x代表 x 轴所需数据为字符串或者日期类型,优先展示日期类型数据 */
x: {
/** 代表x指定的数据来源的类型可以是string或者date类型 */
itemType: [DEFINE.STR, DEFINE.DATE],
/** 代表x输入的值是单个值 */
category: DEFINE.SINGLE,
/** 代表x指定的数据来源的类型以date类型优先级最高 */
priority: DEFINE.DATE,
},
/** y代表 y 轴所需数据为数值类型,且y的输入为数组 */
y: {
itemType: [DEFINE.NUMBER],
category: DEFINE.ARRAY,
},
/** z代表该字段是可选类型,所需数据为字符串或者日期类型,优先展示字符串类型数据 */
z: {
itemType: [DEFINE.DATE, DEFINE.STR],
category: DEFINE.SINGLE,
priority: DEFINE.STR,
/** 代表z指定的数据来源是可选的 */
optional: true,
},
};

案例

综上所述,要开发一个新的层(可视化组件),首先要定义规范参数,涉及引用的数据集和编码所需要的数据转换参数。另外,还需要将编码所需的数据转换参数的定义(数据特征)提供给 CDG 组同时进行图表推荐服务 AI 模型的训练。

对于简单的柱状图组件(层),给出规范参数定义:

// 一个层(组件)的规范参数定义
type Spec = {
// 数据集不需要额外声明,声明引用的数据集索引
dataIndex: number;
// 编码所需的数据转换参数
encoding: {
x: string;
y: string[];
z?: string;
};
// ...
};

另外,再给出编码参数的定义(数据特征):

const dataRequire = {
x: {
itemType: [DEFINE.STR, DEFINE.DATE],
category: DEFINE.SINGLE,
priority: DEFINE.DATE,
},
y: {
itemType: [DEFINE.NUMBER], // 数据源的类型(例如源数据中“股东总户数”字段对应的类型是数值类型)
category: DEFINE.ARRAY, // encoding中“y”字段的类型(例如y: ["股东总户数"],y的类型是数组)
},
z: {
itemType: [DEFINE.DATE, DEFINE.STR],
category: DEFINE.SINGLE,
priority: DEFINE.STR,
optional: true,
},
};

数据来源示例:

data = [
{
股票简称: "立讯精密",
变动日期: "2023-11-10",
股东总户数: "271096",
同花顺代码: "002475.SZ",
},
// ...
];

编码所需的数据指定:

encoding = {
x: "变动日期",
y: ["股东总户数"],
z: "股票简称"
};