2014-11-13 6 views
0

Я новичок в библиотеке dc.js и хотел сделать расчет перекрестного фильтра ниже по групповому методу моей геохрополевой диаграммы. Я уверен, что есть некоторая функция, которую я мог бы передать методу reducegroup.Уменьшить функцию в dc.js

У меня есть следующие данные в 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; 
} 

То, что я хотел бы достичь, - сделать то же вычисление, используя group().reduce(function (p,v) { /* ... */ }) из библиотеки dc.js, при группировке значений по названиям районов.

+0

Добро пожаловать в переполнение стека! Тег [tag: dc] предназначен для совершенно несвязанного языка программирования, поэтому я удалил его. Я также сделал другие улучшения в вашем вопросе. – nyuszika7h

ответ

1

Какие результаты/ошибки вы получаете? Похоже, в значительной степени правильная идея, но принимать во внимание:

  • если вы используете d3.csv(), он будет возвращать значения как строки, так что вам нужно либо предварительной обработки данных, или использовать +d.score для преобразования значения при чтении их
  • поле может выйти, как d.SCORE в зависимости, как вы читаете CSV в.
  • вам, возможно, потребуется адаптировать уменьшить функцию, чтобы удовлетворить ваши подсчеты

Если поместить строку перерыв в функции y ou pass to reduce, вы можете установить контрольную точку там, используя отладчик браузера, и поэкспериментировать на консоли, чтобы выяснить, какое выражение работает для того, что вам нужно.

+0

Many Спасибо за ответ: На самом деле мой подход работает, если я не применяю никаких фильтров (не нажимаю на какую-либо диаграмму), я использую d3.csv(), и данные, которые он возвращает, работают, t хочу, чтобы поле SCORE вычислялось с использованием php, когда я генерирую CSV-файл, на самом деле в моем CSV не должно быть поля SCORE, я бы хотел сделать вычисление, используя поле VERSTAT, когда создаю группу для своей диаграммы поэтому он работает также с фильтрами, поле VERSTAT имеет три значения (0,1,2) и я хочу ниже формулы при группировке на основе поля MDIS -> Sum (VERSTAT)/(2 * count (MDIS)) –

+0

А, I должен был попросить разъяснений. Я действительно не знаю точной формулы, которую вы хотите, но она выглядит как обычная форма. Если вы посмотрите на [пример аннотированного запаса] (http://dc-js.github.io/dc.js/docs/stock.html), там есть некоторые средние значения. – Gordon