格式Census ACS API数据用于等轴测图

时间:2013-11-01 12:47:45

标签: javascript api d3.js census

我正在使用美国人口普查ACS API来提取美国所有县的数据。然后我想根据值生成一个县级的等值线图。如果我有一个静态数据文件(区号为CSV的CSV),我可以渲染数据。但是,来自API的数据又回来了:

0: "B08101_025E"
1: "NAME"
2: "state"
3: "county"
...
0: "42"
1: "Autauga County, Alabama"
2: "01"
3: "001"

数据似乎需要:value,以便上面看起来像(忽略标题元素):

01001: 42

我认为我对数据的格式化以及预期的输出应该是多少。最后,我正在做的是:

    var pad = d3.format("05d"),
    quantize = d3.scale.quantile().domain([0, 15]).range(d3.range(9));

    d3.json("us-counties.json", function (json) {
        counties.selectAll("path")
        .data(json.features)
        .enter().append("svg:path")
        .attr("class", function (d) {
            return "q" + quantize(dataSet[pad(d.id)]) + "-9";
        })
        .attr("d", path)
        .on("click", click)
        .append("svg:title")
        .text(function (d) {
            return d.properties.name + ": " + dataSet[pad(d.id)] + "%";
        });
    });

这取自here。请注意dataSet[pad(d.id)]没有命中,因为数据不在我认为需要的键/值对中。如何以预期的格式获得这个?我试过让dataSet成为二维数组:

0: "01001"
1: 42

这仍然没有达到预期的效果。

2 个答案:

答案 0 :(得分:0)

嗯,看起来问这个问题会有所帮助。之后我又一次解决了这个问题并做了这个:

    var dataObj = {};
            d3.json(jsonRequest, function (data) {
                $.each(data, function (key, val) {
                    if (key > 0) {
                        var apiValue = parseInt(val[0], 10);
                        var apiState = val[2];
                        var apiCounty = val[3];
                        //var elmentArray = [apiState + apiCounty, apiValue];
                        //dataSet.push(elmentArray);
                        dataObj[apiState + apiCounty] = apiValue;
                    }
                });
...
 return d.properties.name + ": " + dataObj[pad(d.id)] + "%";

现在唯一的问题是,当我更改数据源时,数据不会更新。

答案 1 :(得分:0)

R的acs package是另一种获取ACS数据的有用方法(通过API,但很友好)。

还有一个有用的,广泛的讨论,使用R(包括acs包)从Census数据创建彩色编码的地图,例如:

http://blog.revolutionanalytics.com/2009/11/choropleth-map-r-challenge.html

http://eglenn.scripts.mit.edu/citystate/tag/acs/

https://gist.github.com/hadley/233134