DSPL 世代

DSPL Gen 是一种命令行实用程序,有助于将 CSV 数据表转换为简单的 DSPL 数据集。该工具会解析输入文件,创建所有必要的数据表,并布局 DSPL XML 文件。 结果是几乎完整的数据集“模板”,只需进行细微的优化即可上传和直观呈现。

DSPL Gen 背后的基本假设是,输入 CSV 文件中的每一列对应于单个 DSPL 概念,并且每行都是对维度组合的单个观察结果。该工具的工作原理是遍历列,为每个列 / 概念建立适当的元数据(例如,ID、类型、是维度还是指标等),然后生成所有必要的概念定义和切片表。

运行 DSPL Gen

语法

注意:以下说明假定您已按照 DSPL 工具页面提供的安装说明操作。

如需运行 DSPL Gen,请转到系统上的终端 / 提示符,然后输入:

python dsplgen.py -o [output path] [path to CSV file] 

括号中的字词替换如下:

  • [output path]:您要放置输出文件的目录的路径;此目录必须已存在于文件系统中。
  • [path to CSV file]:输入 CSV 文件的路径。如需详细了解如何设置此文件的格式,请参阅下文

-o [output path] 组件是可选的;如果省略此组件,输出文件将放置在当前目录中。

然后,该工具会运行,遍历您的 CSV 文件,提取概念定义并生成 Slice 表。除非发现任何错误,否则系统会将 XML 文件以及一个或多个 CSV 文件写入输出目录。

最后,在您选择的文本编辑器中打开 XML 文件,然后进行所需的更改。您至少应填写该工具使用 ** INSERT ... ** 表示法标记的名称、说明和其他值。

简单示例

假设我们有一个 CSV 文件,其中按月、国家/地区和年龄段细分了疾病的病例总数。为简单起见,我们假设每个维度有两个值:

date,country,age_group,disease_cases
01/2000,US,old,102030
01/2000,MX,old,192939
01/2000,US,young,23131
01/2000,MX,young,12311
02/2000,US,old,143135
02/2000,MX,old,203131
02/2000,US,young,22990
02/2000,MX,young,12591

在上面的输入上运行该工具会生成 4 个文件:

  • dataset.xml:DSPL XML 模板
  • country_table.csvcountry 概念的值
  • age_group_table.csvage_group 概念的值
  • slice_0_table.csv:数据集切片的表(与输入表相同,但排序除外)

在此特定情况下,该工具能够正确猜测所有列类型和格式。所以,我们只需进入 XML 文件,然后修改数据集元数据中的各种名称、说明和网址。

为输入 CSV 添加注解

基本选项

在许多情况下(如上例所示),DSPL Gen 可以猜测每一列的基本元数据,例如类型、格式,以及它是维度还是指标。不过,在其他情况下,此工具可能无法猜出这些答案,或者猜测不正确,或者虽然猜测正确,但仍不会执行所需的行为。

为了处理这些情况,该工具支持在 CSV 标题行中添加 DSPL 生成选项/“提示”。它们的语法如下:

column1[option1=value1;option2=value2;...],column2[option1=value1;option2=value2;...],column3[...],...

请特别注意,选项列表位于列名称右侧的方括号内,连续的选项设置由英文分号分隔。每个选项都包含一个选项名称、一个等号和一个选项值。

DSPL Gen 现在支持以下基本选项:

选项 说明 默认
type 此列的 DSPL 数据类型;必须是 datefloatintegerstring 之一。 根据数据推测得出
format 此日期列的格式;与在 DSPL 中一样,此格式应使用 Joda 日期时间标准进行编码。 根据数据推测得出
slice_role 在任何切片中,此列的角色是什么;必须为 dimensionmetric 如果列的类型为 datestring,则为 dimension,否则为 metric
concept 此列表示的规范概念,例如 geo:country;如果指定,则系统会导入此概念,并且 XML 文件中不会生成定义。
extends 此列扩展的规范概念,例如 entity:entity
parent

此列的父级概念。此父项必须是数据集内定义的维度概念(即未导入的);如果指定,此信息将用于定义数据集中的概念层次结构。

请注意,每个子级实例只能有一个父级。如果检测到多个父级值,该工具将生成错误。

价值总览

除了上述基本“提示”选项之外,DSPL Gen 还支持切片总览:在给定单一表格输入的情况下,该工具可以自动创建具有有限维度子集的其他表格。例如,如果输入表对应于包含三个非时间维度(例如,dimension1dimension2dimensions3),该工具也可以创建一些额外的切片:只有 dimension1dimension2dimension1 dimension2 等。

添加这些额外的切片可以让您的数据集更易于浏览,因为它可以减少生成可视化图表所需的维度过滤条件的数量。另一方面,此过程可能会引入原始文件中找不到的“新”数据,因此,如果使用不当,也可能会导致错误;请在发布数据集之前仔细检查汇总数字。

汇总流程会在 CSV 输入标题中包含一些其他选项来触发:

选项 说明 默认
aggregation 合并此列的多个值时使用的聚合方法;必须是 AVGCOUNTMAXMINSUM 之一;仅对指标有意义。 SUM
rollup 如果值为 true,则该列的概念为“总览”(即汇总起来);仅对维度概念有意义。 错误
total_val 此列中的值表示在汇总此列时保留的行数;仅对维度概念有意义。 None

然后,DSPL 使用以下算法计算总览:

  • 使用 rollup 标记的值计算所有可能的列组合
  • 对于每个组合:
    • 如果任何总览列设置了 total_val 参数,请按此值过滤行;否则,请选择所有行
    • 删除汇总列
    • 按其余维度列的值对行进行分组
    • 使用其 aggregation 参数中指定的方法聚合每个指标
    • 为结果创建切片和关联的表

请注意,如果每个分组中只有一个值,汇总函数设置为 SUM(默认值),则源表和生成的表中的指标值将相同,即不会生成任何新值。因此,借助 total_val 参数并确保其他维度的每个组合都只有一个“total”行,您可以直接在源代码中存储预计算的汇总数据。

警告:生成的切片数量等于 2 个汇总列。将此选项应用于大量列可能会导致运行时间过长和/或数据集过大。

高级示例

假设我们有与上例相同的输入数据,但现在包括不同国家/地区的汇总:

date,country,age_group,disease_cases
01/2000,US,old,102030
01/2000,MX,old,192939
01/2000,total,old,152012
01/2000,US,young,23131
01/2000,MX,young,12311
01/2000,total,young,241011
02/2000,US,old,143135
02/2000,MX,old,203131
02/2000,total,old,211310
02/2000,US,young,22990
02/2000,MX,young,12591
02/2000,total,young,240131

每个年龄段的总数可能与国家/地区值的总和不一致,例如,因为方法的不同或列表中未列到的其他国家/地区存在。

现在,我们需要创建一个具有以下附加功能的 DSPL 数据集:

  1. “汇总”国家/地区,以便仅查看各个年龄段的病例总数
  2. 请为 country 列使用规范的 geo:country 概念,以便我们自动获取这些列的全名、位置等。
  3. 使 disease_cases 概念扩展 quantity:amount,以便我们(手动)将单元信息添加到 XML 文件中

为此,我们需要修改输入 CSV 的标题行,如下所示:

date,country[concept=geo:country;rollup=true;total_val=total],age_group,disease_cases[extends=quantity:amount]

再次运行该工具,我们现在会得到一个额外的切片表格,该表格会按国家/地区进行消除:

date,age_group,disease_cases
01/2000,old,152012
02/2000,old,211310
01/2000,young,241011
02/2000,young,240131

请注意,如果我们没有在源表中包括总值和 total_val 标记,则会得到每个年龄段的计算总和。

此外,XML 文件中的 disease_cases 定义现在包含所需的 quantity:amount 扩展。country 的定义已从 XML 文件中删除,因为我们为此使用导入的概念。

填写各种名称、说明和单位信息后,我们可以压缩数据集包,然后将其上传到 Public Data Explorer 进行可视化处理。