2014-11-25 3 views
0

나는 csv 파일을 읽기, D3.js 또는 일반 자바 스크립트를 사용하여이 데이터에서이 개 수치를 계산하기 위해 필요 해요 :계산 최대

이 한 번에 할 수있을 것 그러나 설명 목적으로 분해했습니다.

데이터를 읽은 후 "1"에서 "10"까지의 각 열을 반복해야합니다. (이 데이터의 길이 알 수없는 길이이므로 12 또는 20 개까지 올 수도 있음)

... "multiplier"뒤에 오는 각 열에 "mult iplier " (데이터에서는 1.5, 1, 0,5의 임의의 값을 사용하여 시각적으로 더 명확하게 판독 할 수있었습니다).

이렇게하면 각 새 ID의 최대 점수와 최소 점수를 각 ID에 대해 1에서 n까지 계산해야하는 새로운 그리드가 나타납니다. 따라서 각 ID는 최대 값과 최소값을가집니다. 변수로 반환 된 전체 데이터에서 이러한 새로운 점수의 최대 값과 최소값을 알아야합니다.

데이터가 판독된다

d3.csv("data.csv", function(csv) { var mydata = bars .selectAll("rect") .data(csv) .enter()};

예제 데이터는 다음과 같이 나타납니다

ID, 총, mutiplier, 하나, 둘, 셋, 넷, 다섯, 여섯, 일곱, 여덟, 아홉, 열 1,16500,1.5,0.362,0.37, 0.1,0.101,0.035,0.362,0.37,0.1,0.101,0.035 2,61000,1,0.426,0.382,0.115,0.084,0.053,0.426,0.382,0.115,0.084,0.053 3,48700,1.5,0.156, 0.531,0.195,0.399,0.14,0.156,0.149,0.106,0.399,0.14 4330000.5,0.462,0.409,0.149,0.106,0.149,0.106,0.085,0.1,0.106,0.051 5,8000,0.5, 0.327,0.316,0.085,0.1,0.085,0.1,0.057,0.245,0.1,0.057 6,12760,1,0.149,0.195,0.057,0.245,0.057,0.245,0.119,0.114,0.245,0.08

이 원본 데이터는 나중에 참조 할 수 있으므로 교체 할 수 없습니다. 이 데이터에서 그래서

은 모든 열을 반복, 전체 데이터를 통해 각에서 최대 및 최소 복용 후 --- 최소는 0.003535이고 최대 값은 3.8875575

... 그리고 나는 필요 함수는 다음 계산을 위해 var min 및 var max를 반환합니다.

누군가가 도움을 줄 수 있기를 바랍니다.

답변

0

데이터를 텍스트로로드 할 수있는 방법 중 하나는 d3.csv.parseRows을 사용하여 배열 배열로 CSV를 구문 분석하는 것입니다. 슬라이스를 가져 와서 첫 번째 3 개의 열을 무시하십시오.

d3.text('data.csv', function(text) 
{ 
    var rows = d3.csv.parseRows(text, function(row, index) 
    { 
    // skip header, coerce to Number values 
    if(index > 0) 
    { 
     return row.map(Number); 
    } 
    }); 
    var extent = rows.reduce(function(result, row) 
    { 
    return d3.extent(result.concat(row.slice(3).map(function(value) 
    { 
     return value * row[2]; 
    }))); 
    }, [NaN, NaN]); 
    var min = extent[0]; 
    var max = extent[1]; 
}); 

다른 방법으로 오브젝트의 배열 나중에 플로팅에 대한 더 편리한 구조 인 경우, 다음을 수행 할 수 있습니다.

var nonMeasureColumns = {'ID': 0, 'total': 0, 'multiplier': 0}; 
d3.csv('data.csv') 
    .row(function(row) 
    { 
    for(var key in row) 
    { 
     row[key] = Number(row[key]); 
    } 
    return row; 
    }) 
    .get(function(error, rows) 
    { 
    var extent = rows.reduce(function(result, row) 
    { 
     return d3.extent(result.concat(d3.map(row).entries() 
     .filter(function(entry) 
     { 
      return !(entry.key in nonMeasureColumns); 
     }) 
     .map(function(entry) 
     { 
      return entry.value * row['multiplier']; 
     }) 
    )); 
    }, [NaN, NaN]); 
    var min = extent[0]; 
    var max = extent[1]; 
    });