dc.js 中的相关矩阵
Correlation Matrix in dc.js
我正在尝试使用 dc.js 作为 correlation matrix。
我的数据如下所示:
name,v1,v2,v3,v4
john,1,1,2,0
mary,2,1,1,1
albert,2,1,0,1
lynn,2,2,1,1
...
我想渲染一个如下所示的图表:
v1
v2
v3
v4
v1
x
.1
.1
.1
v2
.1
x
.1
.1
v3
.1
.1
x
.1
v4
.1
.1
.1
x
其中每个变量 (v1-v4) 创建一行和一列,并在它们的交集处计算一个值。相关因子本身的计算不是这个问题的一部分。
现在我的问题是:我将如何在 dc.js 中执行此“变量作为行和列”的操作?这个例子中的dimensions/groups是什么?
dc.js中至少有两种处理多维数据的方法:
- 您可以为维度和组创建“多键”,这会导致维度基于两个键而不是一个键进行过滤和聚合。这就是 heatmap and series chart 示例的工作原理。
- 您可以创建一个组,其中值是对象,聚合函数将多个值聚合到对象的键下。
第二个可能更容易与数据一起使用 table,因为您随后为每一列指定了一个访问器,它从组值对象中提取子值。
我猜你可能没有使用 crossfilter 来计算相关矩阵,因为这听起来不像是适合 crossfilter 的 dimension/group 数据模型的普通聚合操作。
因此您可能想要创建一个 "fake group",即看起来像一个组但 returns 您计算的相关矩阵值的对象。
此函数的模板可能如下所示:
const variables = ['v1', 'v2', 'v3', 'v4'];
function correlation_group(group) {
// group = source data, some ordinary crossfilter group with
// the data you need to calculate correlations
// do calculations here
return {
all: function() {
return variables.map(vy => ({
key: vy,
value: variables.reduce(vx => /* insert matrix value vx, vy */
})
}
};
}
现在您可以使用“假组”as the dimension 获取数据 table。
我知道这是一个部分答案...它仅涵盖如何将您的数据置于 dc.js 数据 table 可以使用的形状,我省略了很多有关如何使用组数据计算相关性以及如何指定数据的详细信息 table.
我想这是一个很大的话题,开放式问题邀请开放式答案。 :)
我正在尝试使用 dc.js 作为 correlation matrix。 我的数据如下所示:
name,v1,v2,v3,v4
john,1,1,2,0
mary,2,1,1,1
albert,2,1,0,1
lynn,2,2,1,1
...
我想渲染一个如下所示的图表:
v1 | v2 | v3 | v4 | |
---|---|---|---|---|
v1 | x | .1 | .1 | .1 |
v2 | .1 | x | .1 | .1 |
v3 | .1 | .1 | x | .1 |
v4 | .1 | .1 | .1 | x |
其中每个变量 (v1-v4) 创建一行和一列,并在它们的交集处计算一个值。相关因子本身的计算不是这个问题的一部分。
现在我的问题是:我将如何在 dc.js 中执行此“变量作为行和列”的操作?这个例子中的dimensions/groups是什么?
dc.js中至少有两种处理多维数据的方法:
- 您可以为维度和组创建“多键”,这会导致维度基于两个键而不是一个键进行过滤和聚合。这就是 heatmap and series chart 示例的工作原理。
- 您可以创建一个组,其中值是对象,聚合函数将多个值聚合到对象的键下。
第二个可能更容易与数据一起使用 table,因为您随后为每一列指定了一个访问器,它从组值对象中提取子值。
我猜你可能没有使用 crossfilter 来计算相关矩阵,因为这听起来不像是适合 crossfilter 的 dimension/group 数据模型的普通聚合操作。
因此您可能想要创建一个 "fake group",即看起来像一个组但 returns 您计算的相关矩阵值的对象。
此函数的模板可能如下所示:
const variables = ['v1', 'v2', 'v3', 'v4'];
function correlation_group(group) {
// group = source data, some ordinary crossfilter group with
// the data you need to calculate correlations
// do calculations here
return {
all: function() {
return variables.map(vy => ({
key: vy,
value: variables.reduce(vx => /* insert matrix value vx, vy */
})
}
};
}
现在您可以使用“假组”as the dimension 获取数据 table。
我知道这是一个部分答案...它仅涵盖如何将您的数据置于 dc.js 数据 table 可以使用的形状,我省略了很多有关如何使用组数据计算相关性以及如何指定数据的详细信息 table.
我想这是一个很大的话题,开放式问题邀请开放式答案。 :)