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.csv
:country
概念的值age_group_table.csv
:age_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 数据类型;必须是 date 、float 、integer 或 string 之一。 |
根据数据推测得出 |
format |
此日期列的格式;与在 DSPL 中一样,此格式应使用 Joda 日期时间标准进行编码。 | 根据数据推测得出 |
slice_role |
在任何切片中,此列的角色是什么;必须为 dimension 或 metric 。 |
如果列的类型为 date 或 string ,则为 dimension ,否则为 metric |
concept |
此列表示的规范概念,例如 geo:country ;如果指定,则系统会导入此概念,并且 XML 文件中不会生成定义。 |
无 |
extends |
此列扩展的规范概念,例如 entity:entity 。 |
无 |
parent |
此列的父级概念。此父项必须是数据集内定义的维度概念(即未导入的);如果指定,此信息将用于定义数据集中的概念层次结构。 请注意,每个子级实例只能有一个父级。如果检测到多个父级值,该工具将生成错误。 |
无 |
价值总览
除了上述基本“提示”选项之外,DSPL Gen 还支持切片总览:在给定单一表格输入的情况下,该工具可以自动创建具有有限维度子集的其他表格。例如,如果输入表对应于包含三个非时间维度(例如,dimension1
、dimension2
和 dimensions3
),该工具也可以创建一些额外的切片:只有 dimension1
、dimension2
、dimension1
和
dimension2
等。
添加这些额外的切片可以让您的数据集更易于浏览,因为它可以减少生成可视化图表所需的维度过滤条件的数量。另一方面,此过程可能会引入原始文件中找不到的“新”数据,因此,如果使用不当,也可能会导致错误;请在发布数据集之前仔细检查汇总数字。
汇总流程会在 CSV 输入标题中包含一些其他选项来触发:
选项 | 说明 | 默认 |
---|---|---|
aggregation |
合并此列的多个值时使用的聚合方法;必须是 AVG 、COUNT 、MAX 、MIN 或 SUM 之一;仅对指标有意义。 |
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 数据集:
- “汇总”国家/地区,以便仅查看各个年龄段的病例总数
- 请为
country
列使用规范的geo:country
概念,以便我们自动获取这些列的全名、位置等。 - 使
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 进行可视化处理。