簡體   English   中英

如何使用多個相關數據集?

[英]How to use more than one related dataset?

我有幾個相關的json數據文件。 在不給專有數據太多信息的情況下,並使它變得簡單...

假設有一個json文件"businesses"描述了企業,其功能包括其名稱,地址等以及唯一的ID。 這個數字成千上萬。

然后,另一個json文件"ratings"將客戶指定的業務的評級定為1-5,並以唯一的客戶ID和業務ID作為關鍵字。 所有的評分都對應於"businesses"中的"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.)

我可以顯示公司編號:

.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

有任何想法嗎? 請記住,我是新手,所以我犯了很多愚蠢的錯誤。 我也很困 謝謝。

由於我不知道您的businessesratings數組的結構,因此我不確定您的getBizName函數出了什么問題,但是通常來說,該技術可以正常工作。

請參見此處的示例(將鼠標懸停在條形圖上顯示公司名稱): http : //jsfiddle.net/n1qnyv9u/

如果namebusinesses陣列中更深的地方,則可能是錯誤地訪問了它。

編輯:由於您說businesses通常是一個大型數據集,並且ratings要小得多,因此您可能希望使用array.map更新ratings以提前包括name 這樣,您getBizName每次將ratings欄懸停在上方時都調用getBizName

在獲得businessesratings的數據之后,請執行以下操作:

ratings.map(function(a) {
    a.business_name=getBizName(a.bid);
    return a;
  }
);

現在, ratings包括business_name 構造title元素時,只需使用如下的business_name

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

在這里更新小提琴: http : //jsfiddle.net/n1qnyv9u/2/

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

暫無
暫無

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

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