CSV格式化

Howard Liang edited this page Jan 11, 2016 · 2 revisions

WikiAPI--中文手册核心函数CSV格式化

CSV 格式化 (d3.csv)

  • d3.csv - 获取一个CSV (comma-separated values, 冒号分隔值)文件。
  • d3.csv.parse - 将CSV文件字符串转化成object的数组,object的key由第一行决定。如: [{"Year": "1997", "Length": "2.34"}, {"Year": "2000", "Length": "2.38"}]
  • d3.csv.parseRows - 将CSV文件字符串转化成数组的数组。如: [ ["Year", "Length"],["1997", "2.34"],["2000", "2.38"] ]
  • d3.csv.format - 将object的数组转化成CSV文件字符串,是d3.csv.parse的逆操作。
  • d3.csv.formatRows - 将数组的数组转化成CSV文件字符串,是d3.csv.parseRows的逆操作。
  • d3.tsv - 获取一个TSV (tab-separated values, tab分隔值)文件。
  • d3.tsv.parse - 类似于d3.csv.parse。
  • d3.tsv.parseRows - 类似于d3.csv.parseRows。
  • d3.tsv.format - 类似于d3.csv.format。
  • d3.tsv.formatRows - 类似于d3.csv.formatRows。
  • d3.dsv - 创建一个类似于d3.csv的文件处理对象,可以自定义分隔符和mime type。如:vardsv = d3.dsv("|", "text/plain");

D3对逗号分隔值(CSV, comma-separated values),制表符分隔值(TSV, tab-separated values)和任意分隔值(DSV, arbitrary delimiter-separated values)等数据格式的解析提供内置支持。这些表格格式深受诸如Microsoft Excel电子表格程序。表格格式通常比JSON更省空间,这可以提高大型数据集加载时间。

# d3.csv(url[[, accessor], callback])

在指定的url为逗号分隔值(CSV)文件发出一个HTTP GET请求。一般认为文件内容是RFC4180-compliant。请求的mime(多用途互联网邮件扩展类型)类型一般为“text/csv”。此请求会被异步处理,在打开请求后此方法会立即返回。CSV数据可用时,将以parsed rows作为参数调用指定的回调。如果出现错误,此回调函数将返回null。一个可选的访问器方法可能被指定,然后传递给d3.csv.parse;也可以通过使用返回请求对象的row函数来指定。例如:

d3.csv("path/to/file.csv")
    .row(function(d) { return {key: d.key, value: +d.value}; })
    .get(function(error, rows) { console.log(rows); });

查看样例:unemployment choropleth

# d3.csv.parse(string[, accessor])

通过一个CSV文件的内容解析指定的字符串,返回一个代表解析行的对象数组。一般认为文件内容是RFC4180-compliant。与parseRows方法不同的是,这种方法要求CSV文件的第一行包含一个以逗号分隔的列名;这些列名成为返回的对象的属性。例如,参考以下CSV文件:

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

生成的JavaScript数组:

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

值得注意的是这些值都是字符串;它们不会自动转为数字类型值。JavaScript会强制字符串自动转换成数字类型值(例如,使用+运算符)。通过指定一个访问器函数,您可以将字符串转换为数字或其他特定的类型,如日期:

d3.csv("example.csv", function(d) {
  return {
    year: new Date(+d.Year, 0, 1), // convert "Year" column to Date
    make: d.Make,
    model: d.Model,
    length: +d.Length // convert "Length" column to number
  };
}, function(error, rows) {
  console.log(rows);
});

尽管由很多的限制,但使用连接符”+”比parseIntparseFloat 通常更快。例如,“30 px”当强制使用“+“返回NaN,而parseInt和parseFloat返回30。

# d3.csv.parseRows(string[, accessor])

通过一个CSV文件的内容解析指定的字符串,返回一个代表解析行的对象数组。一般认为文件内容是RFC4180-compliant。与parse 方法,不论CSV文件是否不包含一个头,该方法将标题行作为标准并且使用。每一行都被表示为一个数组而不是一个对象。行可能会变长。例如,考虑以下CSV文件:

1997,Ford,E350,2.34
2000,Mercury,Cougar,2.38

生成的JavaScript数组:

[
  ["1997", "Ford", "E350", "2.34"],
  ["2000", "Mercury", "Cougar", "2.38"]
]

值得注意的是这些值都是字符串;它们不会自动转为数字类型值。有关详细请参阅parse。 第二个参数([, accessor])可以指定一个访问器函数。这个函数调用CSV文件中的每一行数据,通过当前行数据对象和当前行索引作为两个参数。函数的返回值将取代所在返回数组里的元素数据;如果函数返回null,此行便从返回的数组里剔除。实际上,这个访问器类似于mapfilter操作符去返回数据行。访问器函数通过parse将每一行转换为一个带有一些已命名属性的对象。

# d3.csv.format(rows)

将指定数组里的行内容转换为逗号分隔值格式的字符串并返回。这个操作是parse方法的逆转。每一行将会由一个换行符(\ n)隔开,并在每一行的每一列将以逗号(,)隔开。数据值中包含的逗号,双引号(“)或换行符会使用双引号将其取代(最后这句实践后不理解,理解不透)。

每一行视为一个对象,并且所有的对象属性将被转换成字段。为了更好的控制那些被转换的属性,将行内容转换为只包含这些应该被转换的属性的数组并且使用formatRows方法。

# d3.csv.formatRows(rows)

将指定数组里的行内容转换为逗号分隔值格式的字符串并返回。这个操作是parseRows方法的逆转。每一行将会由一个换行符(\ n)隔开,并在每一行的每一列将以逗号(,)隔开。值所包含的逗号,双引号(“)或换行符会使用双引号将其脱逃。

TSV

除了分隔符由制表符代替了逗号(制表符分隔值相当于逗号分隔值),其它没有太大区别。

# d3.tsv(url[, accessor][, callback])

相当于d3.csv,只是分隔符为制表符而已。

# d3.tsv.parse(string[, accessor])

相当于csv.parse,只是分隔符为制表符而已。

# d3.tsv.parseRows(string[, accessor])

相当于csv.parseRows,只是分隔符为制表符而已。

# d3.tsv.format(rows)

相当于csv.format,只是分隔符为制表符而已。

# d3.tsv.formatRows(rows)

相当于csv.formatRows,只是分隔符为制表符而已。

Arbitrary Delimiters

# d3.dsv(delimiter, mimeType)

对于给定分隔符和mime类型构造一个新的解析器。例如,解析值由“|”分隔,竖线字符,使用如下:

var dsv = d3.dsv("|", "text/plain");

# dsv(url[, accessor][, callback])

相当于d3.csv,只是分隔符为具体值而已。

# dsv.parse(string[, accessor])

相当于csv.parse,只是分隔符为具体值而已。

# dsv.parseRows(string[, accessor])

相当于csv.parseRows,只是分隔符为具体值而已。

# dsv.format(rows)

相当于csv.format,只是分隔符为具体值而已。

# dsv.formatRows(rows)

相当于csv.formatRows,只是分隔符为具体值而已。

HarryT20140329

MIME: https://zh.wikipedia.org/wiki/多用途互聯網郵件擴展 (Howard L. -- 11.Jan.2016)

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.