2014-11-13 5 views
0

저는 dc.js 라이브러리에 익숙하지 않고 내 geochoropleth 차트의 그룹 방법에 대해 아래의 교차 필터 계산을 수행하려고합니다. 나는 groupreduce 메서드로 전달할 수있는 함수가 있음을 확신합니다. dc.js의 함수 축소

나는이 DATA.csv이 (첫 번째 행에 열 이름을 포함)에 다음과 같은 데이터 :

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 필드의 값이 계산됩니다 다음

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]   

내 차트에 대한 치수 및 그룹 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) { /* ... */ })을 사용하여 같은 계산을하는 것입니다.

+0

스택 오버 플로우에 오신 것을 환영합니다! [tag : dc] 태그는 완전히 관련없는 프로그래밍 언어 용이므로 제거했습니다. 나는 또한 당신의 질문에 대한 다른 개선을했다. – nyuszika7h

답변

1

어떤 결과/오류가 있습니까? 거의 올바른 생각처럼 보이지만 고려 :

  • 당신이 d3.csv()를 사용하는 경우, 그것은 당신이 사전 처리에 데이터를 하나를해야합니다, 그래서 문자열로 값을 반환하거나 변환 할 +d.score를 사용합니다 그들에게
  • 을 읽는 값 동안 필드는에 CSV를 읽는 방법을 따라 d.SCORE으로 나올 수 있습니다. 기능을 감소
  • 당신이 당신의 계산을 맞게 적응해야 할 수도 있습니다

당신이 줄을 추가하는 경우 함수를 중단하다 줄이기 위해 패스하면 브라우저의 디버거를 사용하여 중단 점을 설정하고 콘솔에서 실험하여 필요한 표현이 작동하는지 파악할 수 있습니다.

+0

많은 응답을 주셔서 감사합니다 실제로 어떤 방식 으로든 필터를 적용하지 않으면 d3.csv()를 사용하고 반환하는 데이터가 작동하지만 실제로는 내 접근 방식이 작동합니다. 내 CSV 파일을 생성 할 때 SCORE 필드를 php로 계산해야합니다. 사실 내 CSV에 점수 필드가 없어야합니다. 내 차트의 그룹을 만들 때 VERSTAT 필드를 사용하여 계산을 수행하고 싶습니다. 그래서 그것은 또한 필터와 함께 작동, VERSTAT 필드는 (0,1,2)의 세 가지 값을 가지고 MDIS 필드 -> 합계 (VERSTAT)/(2 * 카운트 (MDIS))를 기반으로 그룹화 할 때 수식 아래에 싶습니다 –

+0

아, 해명을 요구 했어야했다. 나는 당신이 원하는 정확한 공식을 정말로 모르지만 그것은 어떤 형태의 평균처럼 보입니다. [주석이 달린 주식 예] (http://dc-js.github.io/dc.js/docs/stock.html)를 보면 거기에서 계산 된 평균값이 있습니다. – Gordon