我有一个json数据文件,其结构有点复杂,类似:
[
{
"patient_id": "f1ff9870",
"demographics": {
"gender": "female",
"age": 78
},
"measurements": [
{
"unit": "bpm",
"kind": "pulse",
"value": "130",
"measurementDate": "2017-05-04 03:00:00+03"
}
],
"problems": [
{
"name_title": "problem1",
"category": "Primary disease",
"startDate": "2017-05-12 03:00:00+03"
},
{
"name_title": "problem2",
"category": "Primary disease",
"startDate": "2017-05-12 03:00:00+03"
}
]
},
{
"patient_id": "c9047712",
"demographics": {
"gender": "male",
"age": 60
}
}
]
每个对象都是一个可以拥有多个字段的患者,其中一些是数组,并非所有患者都有相同数量的字段。
我正在尝试找到一种方法来使用交叉过滤器并为图表制作组,但我并不是真正接近解决方案。我想为每个字段使用图表(即问题,年龄等),每个字段都应该是一个过滤器。因此,如果我选择一个特定的问题,我将能够看到有多少患者有这个问题,他们的年龄,测量等。有没有办法解决非线性数据?
答案 0 :(得分:0)
这是一个广泛的问题。让我谈谈这个具体部分:
如果我选择一个特定的问题,我将能够看到有多少患者有这个问题,他们的年龄,测量等。
“问题”可以被视为tag or array dimension。
所以你可以汇总问题和这样的年龄:
var cf = crossfilter(data);
var problemsDim = cf.dimension(d => d.problems.map(p => p.category), true);
var ageDim = cf.dimension(d => d.demographics.age);
var problemsGroup = problemsDim.group(); // default is "reduceCount"
var ageGroup = ageDim.group();
现在,当您选择特定问题时,您将看到所有患有该问题的患者的计数。当您选择特定年龄时,您将获得所有患有此问题的患者的计数。
请注意,对于标记维度,所有计数的总和通常总计超过记录数。
您可以为测量做类似的事情。当然,有些患者可能没有问题或测量,因此他们不会出现在这些图表中。如果患者有多个相同的测量结果,您最终可能会得到奇怪的结果。