【问题标题】:Reduce function in dc.js在 dc.js 中减少函数
【发布时间】:2015-01-10 14:05:22
【问题描述】:

我是 dc.js 库的新手,想对我的 geochoropleth 图表的组方法进行下面的交叉过滤器计算。我很确定有一些函数可以传递给groupreduce 方法。

我在DATA.csv中有以下数据(第一行包含列名):

BUDGET,GID,MDIS,USPRO,TYPE,FILEURL,RVID,VERDATE,VERSTAT,SCORE
10428,ALI-G-006,Aliabad,Kunduz,Hard,/uploadedfiles/reports/SIKA North/136-SIKA-North-ALI-G-006.pdf,0,19-08-2014,2,0
24853,ALI-G-008,Aliabad,Kunduz,Hard,/uploadedfiles/reports/SIKA North/561-SIKA-North-ALI-G-008.pdf,0,19-08-2014,0
24831,ALI-G-019,Aliabad,Kunduz,Hard,/uploadedfiles/reports/SIKA North/987-SIKA-North-ALI-G-019.pdf,0,18-08-2014,2,0
24771,IMA-G-017,Imam Sahib,Kunduz,Hard,/uploadedfiles/reports/SIKA North/557-SIKA-North- IMA-G-017.pdf,0,28-08-2014,2,1
21818,IMA-G-019,Imam Sahib,Kunduz,Hard,/uploadedfiles/reports/SIKA North/992-SIKA-North-IMA-G-019.pdf,0,27-08-2014,2,0
12266,KHA-G-007,Khanabad,Kunduz,Hard,/uploadedfiles/reports/SIKA North/583-SIKA-North - KHA-G-007.pdf,0,7/9/2014,1,0
23148,KUN-G-002,Kunduz,Kunduz,Hard,/uploadedfiles/reports/SIKA North/909-SIKA-North - KUN-G-002.pdf,0,1/9/2014,2,0
54584,KUN-G-004,Kunduz,Kunduz,Hard,/uploadedfiles/reports/SIKA North/702-SIKA-North - KUN-G-004 20140709.pdf,0,9/7/2014,1,0
24544,PUL-G-001,Pul-e Khumri,Baghlan,Hard,/uploadedfiles/reports/SIKA North/599-SIKA-North - PUL-G-001 - 20140623.pdf,0,6/7/2014,2,1
40149,SSKDAG046,Arghandab (1),Kandahar,Hard,/uploadedfiles/reports/SIKA South/239-SIKA-South-SSKDAG046.pdf,0,12/9/2014,0,0.625
39452,0003 LGR MAG,Muhammad Aghah,Logar,Hard,/uploadedfiles/reports/SIKA East/792-SIKA-East - 0003 LGR MAG - 20140610.pdf,0,10/6/2014,2,0.7
58298,0013 LGR MAG,Muhammad Aghah,Logar,Hard,/uploadedfiles/reports/SIKA East/591-SIKA-East - 0013 LGR MAG 20140601.pdf,0,1/6/2014,2,0]        

以下是我的图表的维度和组:

var facts = crossfilter(data);
var scoref = facts.dimension(function (d) { return d.district;});

var scoreg = scoref.group().reduceSum(function(d){return d.score;});

d.score 字段的值是使用下面的 PHP 代码计算的:

$tempsql = $dbase->query('select "VERMDIS", COUNT(*) AS TOTAL, SUM("VERSTAT") AS SAM FROM mt_fver GROUP BY "VERMDIS"');

while ($r = pg_fetch_array($tempsql)) {
    $dist = $r['VERMDIS'];
    $score = $r[2] / (2 * $r[1]);   
    $disxx[$dist] = $score;
}

我想要实现的是使用 dc.js 库中的 group().reduce(function (p,v) { /* ... */ }) 进行相同的计算,同时按地区名称对值进行分组。

【问题讨论】:

  • 欢迎来到 Stack Overflow! dc 标签用于完全不相关的编程语言,因此我将其删除。我还对您的问题进行了其他改进。

标签: dc.js crossfilter


【解决方案1】:

您得到什么结果/错误?看起来几乎是正确的想法,但请考虑:

  • 如果您使用d3.csv(),它会将值作为字符串返回,因此您需要预处理数据,或者在读取值时使用+d.score 转换值
  • 该字段可能显示为 d.SCORE,具体取决于您读取 CSV 的方式。
  • 您可能需要调整 reduce 函数以适应您的计算

如果您在传递给 reduce 的函数中放置一个换行符,您可以使用浏览器的调试器在该处设置一个断点,并在控制台上进行试验,以找出适合您需要的表达式。

【讨论】:

  • 非常感谢您的回复,事实上,如果我不应用任何过滤器(不点击任何图表),我的方法是有效的,我正在使用 d3.csv() 并且它返回的数据有效,但是我不希望在生成 CSV 文件时使用 php 计算 SCORE 字段,实际上我的 CSV 中不应该有任何 SCORE 字段,我想在创建时使用 VERSTAT 字段进行计算我的图表的组,因此它也适用于过滤器,VERSTAT 字段具有三个值 (0,1,2),并且我希望在基于 MDIS 字段进行分组时使用下面的公式 -> Sum(VERSTAT)/(2*count(MDIS) )
  • 啊,我应该要求澄清一下。我真的不知道你想要的确切公式,但它看起来像是某种形式的平均值。如果您查看annotated stock example,那里会计算出一些平均值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
相关资源
最近更新 更多