如何将多个d3.csv数据转换为数字?

时间:2019-05-27 02:43:10

标签: javascript d3.js

现在,在加载csv文件后,我正在循环遍历数组中的每个对象并逐一转换。

看起来像

fulldata.forEach(function(data){
      data.healthcare = +data.healthcare;
      data.a = +data.a;
      data.b = +data.b;
      data.c = +data.c;
    })

假设您需要将大约100个特征转换为数字,是否可以同时将多个特征转换为数字?

2 个答案:

答案 0 :(得分:1)

D3 v5引入了一种非常方便的方法,称为d3.autoType,该方法:

  

对于给定对象中的每个值,都会计算修剪后的值;然后按如下所示重新分配值:

     
      
  1. 如果为空,则为null
  2.   
  3. 如果确切为“ true”,则为true
  4.   
  5. 如果确切为“ false”,则为false
  6.   
  7. 如果正好是“ NaN”,则NaN
  8.   
  9. 否则,如果强制为数字,则为数字。
  10.   
  11. 否则,如果是仅日期或日期时间的字符串,则为日期。
  12.   
  13. 否则,为字符串(原始未修剪值)。
  14.   

当您没有所有列作为数值时,这非常方便。例如,使用d3.csvParse,您只需要:

const fullData = d3.csvParse("your_CSV_URL_here", d3.autoType);

这是一个演示:

const csv = `number,string,date
32,foo,2019-01-21
47,bar,2018-11-19
17,baz,2019-07-28`;

const data = d3.csvParse(csv, d3.autoType);

console.log(data)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.9.0/d3.min.js"></script>

但是,如果实际上您有 all 列作为数值,则只需在row函数中获取所有属性即可:

const csv = `foo,bar,baz
12,43,23
75,44,32
76,93,23`;

const data = d3.csvParse(csv, function(d) {
  d3.keys(d).forEach(function(e) {
    d[e] = +d[e]
  })
  return d;
});

console.log(data)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

答案 1 :(得分:0)

您可以使用Object.keys()获取一系列功能。

fulldata.forEach(function(data) {
  Object.keys(data).forEach(function(key) {
    data[key] = +data.key;
  });
})