簡體   English   中英

d3使用d3.map和d3 queue()函數讀取csv

[英]d3 read csv with d3.map and d3 queue() function

我想映射到每個省的數據城市。

這是我的示例csv數據。 (又稱“ city.csv”)

citycode,province,name
3704051,ProvinceA,city1
3704052,ProvinceA,city2
3704054,ProvinceA,city3
3704062,ProvinceA,city4
3704056,ProvinceA,city5
3704058,ProvinceA,city6
3704059,ProvinceA,city7
3704060,ProvinceB,city8
3704061,ProvinceB,city9
3704063,ProvinceB,city10
3702011,ProvinceC,city11
3702012,ProvinceC,city12

映射后,我想獲取所有省份信息。 例如,如果我輸入值'ProvinceA',則返回'3704051','3704052'..etc

首先,我必須讀取這樣的數據。

var popByProvinceName = d3.map()

queue()
  .defer(d3.json, "municipalities.json")
  .defer(d3.csv, "city.csv", function(d) {
    d.citycode = +d.citycode;
    popByProvinceName.set(d.province, + d.citycode);
  }).await(ready);

function ready(error, data1) {
  console.log(popByProvinceName.get("ProvinceA");
}

按省只返回一個城市代碼。

 3704059

我該如何解決? 請幫忙!

您將在每次迭代中覆蓋該值。 您需要將它們推入數組:

queue()
  //.defer(d3.json, "municipalities.json")
  .defer(d3.csv, "city.csv", function(d) {
    d.citycode = +d.citycode;
    // first time we've seen province
    if (!popByProvinceName.has(d.province)) {
      popByProvinceName.set(d.province, []);
    }
    // get the array and add to it
    popByProvinceName.get(d.province).push(d.citycode);
  }).await(ready);

完整代碼


另一種更簡潔的方法是在您的ready函數中使用d3.nest

function ready(error, data1) {
  var nest = d3.nest()
    .key(function(d) { return d.province; })
    .rollup(function(r){
      return r.map(function(d){
        return +d.citycode;
      });
    })
    .entries(data1);

完整代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM