> [Wiki](Home) ? [[API--中文手冊]] ? [[核心函數]] ? *CSV格式化*
* 如發現翻譯不當或有其他問題可以通過以下方式聯系譯者:
* 郵箱:zhang_tianxu@sina.com
* QQ群:[D3數據可視化](http://jq.qq.com/?_wv=1027&k=ZGcqYF)205076374,[大數據可視化](http://jq.qq.com/?_wv=1027&k=S8wGMe)436442115
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");
CSV
D3解析comma-separated values,制表符分隔值和任意分割值提供內置支持。這些表格格式深受諸如Microsoft Excel電子表格程序。表格格式通常比JSON更省空間,這可以提高大型數據集加載時間。
#d3.csv(url[, accessor][, callback])
在指定的url為逗號分隔值(CSV)文件發出一個HTTP GET請求。一般認為文件內容是RFC4180-compliant(應該是csv文件介紹)。請求的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:newDate(+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);
});
盡管由很多的限制,但使用連接符”+”比parseInt或parseFloat 通常更快。例如,“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,此行便從返回的數組里剔除。實際上,這個訪問器類似于map 和filter操作符去返回數據行。訪問器函數通過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類型構造一個新的解析器。例如,解析值由“|”分隔,豎線字符,使用如下:
vardsv=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