如何使用多个相关数据集?

时间:2014-10-01 15:48:36

标签: javascript json d3.js

我有几个相关的json数据文件。不要过多地关注专有数据,并简化它......

假设一个json文件"businesses"描述了企业,其功能是其名称,地址等,以及唯一的ID。这个数字在数十万。

然后另一个json文件"ratings"为客户提供的商家保留评级1-5,以唯一客户ID和商家ID为键。所有评级都与"businesses"中的商家相对应(我希望如此)。 "ratings"是一个小得多的文件,实际上我只使用了我所拥有的数万个评级​​中的1000个。

我还有一些其他相关文件,但我现在只是限制它们。

假设我制作某种评级的d3图表,比如条形图,其中每个垂直条代表一项业务,高度由其平均等级决定。

我想这样做,以便当您将鼠标悬停在条形图上时,您可以看到商家名称,为此,我必须同时从"businesses""ratings"进行抽奖。我一直只看到一个数据集的例子。

我加载两个数据集并将每个数据集分配给一个变量:

(通常我会进行错误检查,但为了简单起见我将其删除)

var businesses = [];
var ratings = [];
d3.json("data/business.json", function(json) {
    businesses = json;
    console.log(businesses);
}); 
d3.json("data/rating.json", function(json) {                
    ratings = json;
    console.log(ratings);
});     

两个数据集都出现在控制台中。我制作酒吧,如下:

var svg = d3.select("body")
    .append("svg")
    .attr("width", w)
    .attr("height", h);
svg.selectAll("rect")
    .data(ratings)
    .enter()
    .append("rect")
    (more attribs for ht, width, fill, etc.)

我可以显示商家ID:

.append("title").text(function(d) {return "" + d.business_id ;});

但它只是一个无意义的字符串,数字,连字符和下划线。

如何最有效地从企业阵列中提取与该ID匹配的商家名称?


我试过

.append("title").text(function(d) {return getBizName(d.business_id); });

调用

var getBizName = function(bizId) {
    var i;
    for (i=0; i<businesses.length; i++) {
        if (businesses[i].business_id==bizId) return businesses[i].name;
    }
};

它不起作用。我尝试了一些方法,如果我有标题出现,他们会说undefined。如果我在控制台中输入getBizName(some-valid-business-id),则会显示some-valid-business-id is not defined

有什么想法吗?请记住,我是新手,所以我犯了很多愚蠢的错误。我也困了。感谢。

1 个答案:

答案 0 :(得分:1)

由于我不知道您的businessesratings数组的结构,我不确定您的getBizName函数有什么问题,但通常情况下,该技术可以正常工作

请参阅此处的示例(将鼠标悬停在条形图上显示商家名称):http://jsfiddle.net/n1qnyv9u/

如果name位于businesses数组内更深处,您可能无法正确访问它。

修改:由于您说businesses通常是一个大型数据集且ratings要小得多,因此您可能希望使用array.map来更新{{ 1}}提前包含ratings。这样,每次name栏悬停时,您都不必致电getBizName

获取ratingsbusinesses中的数据后,请执行以下操作:

ratings

现在ratings.map(function(a) { a.business_name=getBizName(a.bid); return a; } ); 包含ratings。构建title元素时,只需使用下面的business_name

business_name

此处更新了小提琴:http://jsfiddle.net/n1qnyv9u/2/

您可能还希望查看https://github.com/Caged/d3-tip以获得更好看的工具提示。