【问题标题】:Calculate Max of Sum Product of D3 array计算 D3 数组的和积的最大值
【发布时间】:2014-11-25 14:09:54
【问题描述】:

我正在读取一个 csv 文件,并且需要使用 D3.js 或普通 JavaScript 从该数据中计算出两个数字:

这也许可以一步完成,但为了便于说明,我将其分解:

读入数据后,我需要遍历标记为“一”到“十”的每一列 (这个数据的长度是未知长度,所以它可能会增加到十二或二十),

...每次将“乘数”之后的每一列乘以称为“乘数”的变量 (在数据中,我给了它任意值 1.5, 1, 0,5 以使阅读在视觉上更清晰)。

这给出了一个新的数字网格,必须根据从 1 到 n 的每个 ID 计算每个新数字的最高分数和最低分数。所以每个ID都会有一个最大值和最小值。我需要知道作为变量返回的整个数据中这些新分数的最大值和最小值。

数据被读入:

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

示例数据显示为:

ID,总数,乘数,一,二,三,四,五,六,七,八,九,十 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 4,33000,0.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 用于下一次计算。

希望有人可以提供帮助!

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    您可以将数据加载为文本,然后使用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];
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多