【 D3.js 进阶系列 — 1.0 】 CSV 表格文件的读取
在入门系列的教程中。我们经常使用 d3.json() 函数来读取 json 格式的文件。json 格式非常强大。但对于普通用户可能不太适合,普通用户更喜欢的是用 Microsoft Excel 或 OpenOffice Calc 等生成的表格文件,由于简单易懂,easy编辑。

Microsoft Excel 一般会保存为 xls 格式。 OpenOffice Calc 一般会保存为 ods 格式。
这些格式作为表格文件来说都非常强大。但要读取它们是有些麻烦的。D3 中也没有提供这个方案。可是表格软件都会支持生成csv 格式,它是一种非常主要的、通用的、简单的表格文件。
本文将会说明在 D3 中怎么读取和使用 csv 文件。
1. CSV 格式是什么
CSV(Comma Separated Values),逗号分隔值。它是以纯文本形式存储表格数据的。每一个单元格之间用逗号(Comma)分隔。CSV格式没有一个通用标准,通常使用的是RFC 4180 中所看到的的描写叙述。
CSV 的文本格式例如以下:
省份,人口,GDP
山东,9000,50000
浙江,5000,20000
理解起来很easy,每个单元格之间用逗号隔开。假设想在单元格里输入逗号怎么办呢?用双引號框起来即可,例如以下:
省份,人口,GDP
山东,"9,000","50,000"
浙江,"5,000","20,000"
有些软件在保存CSV格式时,会让你选择使用什么符号(逗号、分号等)来分隔单元格,尽量选择逗号吧。
2. 在 OpenOffice 中编辑和保存 CSV 文件
Microsoft Excel 尽管强大却是收费的。近几年我已不使用。 OpenOffice 不仅开源免费,并且功能相同强大。以下来说一下用 OpenOffice 怎么编辑和保存为 CSV 文件,当然一般自己摸索着也能会用,很easy。
(1) 首先。打开 OpenOffice Calc 。就像 Microsoft Office 中有 Word、Excel、PowerPoint 一样。OpenOffice 中编辑表示使用的是 Calc 。打开之后,像正常一样输入单元格的内容,如果输入例如以下:

(2)点击“文件”,“另存为”。
文件类型选择 “CSV 文本”,底下再勾选上“编辑筛选设置”。

(3) 弹出的对话框中,选择编码(建议用 UTF8),字段分隔符选择"逗号"。文本分隔符选择“分号”。
点击“确定”。

(4) 保存成功后,用记事本打开,结果例如以下:

在 D3.js 中。读取 CSV 文件的函数仅仅支持用逗号分隔单元格,所以请务必这样保存。
3. 在 D3.js 中读取 CSV 文件
在 D3.js 中提供了 d3.csv() 函数来读取 CSV 文件。函数 API 可參见: https://github.com/mbostock/d3/wiki/CSV 。
用它读取文件的代码例如以下:
		d3.csv("table.csv",function(error,csvdata){
			if(error){
				console.log(error);
			}
			console.log(csvdata);
		});
这段代码是读取了 table.csv 文件后,再输出读到的数据。输出例如以下:

我们能够看到。变量中 csvdata 是保存了一个数组。数组中的每一个元素都一个对象。每一个对象里都有 age 、name、sex 三个成员变量。这三个成员变量正是所编辑的表格的头一排的三个单元格。如此,我们就能够在代码中这样调用了。
			for( var i=0; i<csvdata.length; i++ ){
				var name = csvdata[i].name;
				var sex = csvdata[i].sex;
				var age = csvdata[i].age;
				console.log( "name: " + name + "\n" +
							 "sex: " + sex + "\n" +
							 "age: " + age  );
			}
4. 将读入的数据转换为字符串
在 D3 的官方 API 中。看上去似乎另一些函数: parse 、parseRows、format、formatRows。但经过我的试验,仅仅有 format 一个函数能够使用,其他的都是在 D3 内部使用的。基本上须要读入 CSV 的数据的情况下。仅仅要有上面第3节所叙述的内容就足够了。
以下是 format 的用法。
			d3.csv("table.csv",function(error,csvdata){
				var str = d3.csv.format( csvdata );
				console.log(str.length);
				console.log(str);
			});
上面的代码。str 中保存的就是转换后的字符串。
5. 结束语
CSV 格式是一种很easy的表格文件,它的每一个单元格以逗号分隔,有的表格编辑软件在保存的时候会让选择用分号或逗号等保存,这时候最好是选择用逗号。
在 D3 中读取 CSV 文件基本上仅仅须要用 d3.csv() 函数就可以。
谢谢阅读。
文档信息
- 版权声明:署名(BY)-非商业性(NC)-禁止演绎(ND)
 - 发表日期:2014年10月03日
 - 很多其它内容:OUR D3.JS - 数据可视化专题站 和CSDN个人博客
 - 备注:转载请注明出处。谢谢
 
【 D3.js 进阶系列 — 1.0 】 CSV 表格文件的读取的更多相关文章
- 【 D3.js 进阶系列 — 4.0 】 绘制箭头
		
转自:http://www.ourd3js.com/wordpress/?p=660 [ D3.js 进阶系列 — 4.0 ] 绘制箭头 发表于2014/12/08 在 SVG 绘制区域中作图,在绘制 ...
 - 【 D3.js 进阶系列 — 5.0 】 直方图
		
直方图用于描写叙述概率分布,D3 提供了直方图的布局 Histogram 用于转换数据. 假设有数组 a = [10, 11, 11.5, 12.5, 13, 15, 19, 20 ],如今把10~2 ...
 - 【 D3.js 进阶系列 】 进阶总结
		
进阶系列的文章从去年10月开始写的,晃眼又是4个多月了,想在年前总结一下. 首先恭祝大家新年快乐.今年是羊年吧.前段时间和朋友聊天,聊到十二生肖里为什么没猫,我张口就道:不是因为十二生肖开会的时候猫迟 ...
 - 【 D3.js 进阶系列 — 1.1 】 其它表格文件的读取
		
CSV 表格文件是以逗号作为单元分隔符的,其他还有以制表符 Tab 作为单元分隔符的 TSV 文件,还有人为定义的其他分隔符的表格文件.本文将说明在 D3 中怎样读取它们. 1. TSV 表格文件是什 ...
 - 【 D3.js 进阶系列 — 1.2 】 读取 CSV 文件时乱码的解决方法
		
在 D3 中使用 d3.csv 读取 CSV 文件时,有时会出现乱码问题. 怎么解决呢? 1. 乱码问题 使用 d3.csv 读取 xxx.csv 文件时.假设 xxx.csv 文件使用的是 UTF- ...
 - 【 D3.js 高级系列 — 4.0 】 矩阵树图
		
矩阵树图(Treemap),也是层级布局的扩展,根据数据将区域划分为矩形的集合.矩形的大小和颜色,都是数据的反映.许多门户网站都能见到类似图1,将照片以不同大小的矩形排列的情形,这正是矩阵树图的应用. ...
 - 【 D3.js 高级系列 — 1.0 】 文本的换行
		
在 SVG 中添加文本是使用 text 元素.但是,这个元素不能够自动换行,超出的部分就显示不出来了,怎么办呢? 高级系列开篇前言 从今天开始写高级系列教程.还是那句话,由于本人实力有限,不一定保证入 ...
 - 【 D3.js 进阶系列 — 6.1 】 缩放的应用(Zoom)
		
缩放(Zoom)是另一种重要的可视化操作,主要是使用鼠标的滚轮进行. 1. zoom 的定义 缩放是由 d3.behavior.zoom() 定义的. var zoom = d3.behavior.z ...
 - 【 D3.js 高级系列 — 8.0 】 标线
		
有时候,需要在地图上绘制连线,表示"从某处到某处"的意思,这种时候在地图上绘制的连线,称为"标线". 1. 标线是什么 标线,是指地图上需要两个坐标以上才能表示 ...
 
随机推荐
- [JOYOI] 1415 西瓜种植
			
题目描述 笨笨种了一块西瓜地,但这块西瓜地的种植范围是一条直线的-- 笨笨在一番研究过后,得出了m个结论,这m个结论可以使他收获的西瓜最多. 笨笨的结论是这样的: 从西瓜地B处到E处至少要种植T个西瓜 ...
 - java反编译工具jad
			
下好以后解压就可以用了,软件就只有一个exe文件和一个帮助文件.在众多的JAVA反编译工具中,有几种非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:FrontEnd Plus.mDeJav ...
 - 19.	REFERENTIAL_CONSTRAINTS
			
19. REFERENTIAL_CONSTRAINTS REFERENTIAL_CONSTRAINTS表提供有关外键的信息. REFERENTIAL_CONSTRAINTS有以下列: CONSTRAI ...
 - Python旅途——文件操作
			
Python--文件操作 1.理解文件操作 可能有的时候有人会在想为什么要对文件进行操作,无论对于文件还是网络之间的交互,我们都是建立在数据之上的,如果我们没有数据,那么很多的事情也就不能够成立,比如 ...
 - POJ 3620 Avoid The Lakes (求连接最长的线)(DFS)
			
Description Farmer John's farm was flooded in the most recent storm, a fact only aggravated by the i ...
 - jquery中的全选,全不选
			
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
 - 大数据学习——采集文件到HDFS
			
采集需求:比如业务系统使用log4j生成的日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs 根据需求,首先定义以下3大要素 l 采集源,即source——监控文件内容更新 : ...
 - ORACLE-023:令人烦恼的 ora-01722 无效数字
			
https://blog.csdn.net/yysyangyangyangshan/article/details/51762746
 - 图的最小生成树——Kruskal算法
			
Kruskal算法 图的最小生成树的算法之一,运用并查集思想来求出最小生成树. 基本思路就是把所有边从小到大排序,依次遍历这些边.如果这条边所连接的两个点在一个连通块里,遍历下一条边,如果不在,就把这 ...
 - 【ITOO 4】WCF中,分布式事务处理
			
导读:事务可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠.在项目中,就有 ...