数据可视化d3源码学习,仿写d3-dsv之数据解析模块

evs-dsv

该模块为文本分隔符分隔进行解析,常见的数据格式为逗号分隔的csv文件或制表符分割的tsv文件,这些表格非常受excel欢迎,而且比json更节省空间,代码实现基于论文RFC 4180Common Format and MIME Type for Comma-Separated Values (CSV) Files. 感兴趣的可以访问github阅读源码及解析esv-dsv

API参考与算法解析:

evs.dsvFormat(delimiter):

为指定的dsv构造一个新的dsv解析器和格式化程序,分割符必须为单个字符,如ASCII码

dsv.parse(string[, row])

解析指定的字符串,该字符串要采用带有相应分隔符值的格式,返回解析后的对象数组。

该方法不同于dsv.parseRows,该方法要求DSV内容的第一行包含以分隔符分隔的列名列表,例如:

Year,Make,Model,Length
1997,Ford,E350,2.34
2000,Mercury,Cougar,2.38

解析后的js数组为:

[
  {"Year": "1997", "Make": "Ford", "Model": "E350", "Length": "2.34"},
  {"Year": "2000", "Make": "Mercury", "Model": "Cougar", "Length": "2.38"}
]

另外对于row转换函数,如果未指定则字段值都为字符串类型,为了安全起见不会转换为数字、日期或其他类型。(在某些情况下,Javascript可能会自动将字符串强制转换为数字,例如使用+运算符的时候,这是原生Js的内容了)。但是最后是指定这样一个转换函数,此外,本模块中还写了以一个接口实现自动的转化函数,推断和胁迫强制类型的转换。

如果你指定了一个行转换函数,则会为每一行调用指定的函数,得到一个表示当前行的d对象以及下标i从0开始的项,如果遇到空或undefined程序会自动忽略。一个传入行转换函数的用法是这样的(结合上面的数组去理解):

var data = d3.csvParse(string, function(d) {
  return {
    year: new Date(+d.Year, 0, 1), // lowercase and convert "Year" to Date
    make: d.Make, // lowercase
    model: d.Model, // lowercase
    length: +d.Length // lowercase and convert "Length" to number
  };
});

d3中也提到一点:使用+而不是parseInt或ParseFloat通常更快,但是具有限制性,如使用+强制执行“30px”时的返回结果是NaN,另外两个函数返回30。

dsv.parseRows(string[, row])

解析指定的字符串,该字符串必须使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值