root = {
let population = await d3.csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2023/2023-08-22/population.csv");
let populationedFilter = population.filter(pop => pop.coa_name == "France" | pop.coa_name == "Canada" | pop.coa_name == "Germany" | pop.coa == "USA" | pop.coa == "TUR" | pop.coa == "GBR" | pop.coa == "ITA" | pop.coa == "RUS");
let populationedSimplified = d3.rollups(populationedFilter, v => d3.sum(v, d => d.refugees), d => d.coa_name, d => d.coo_name);
let groupAggregator = function(subset) {
let tempArray = [];
for (let i = 0; i < subset.length; i++) {
tempArray.push(subset[i][1]);
}
let sum = 0;
tempArray.forEach(a => {sum += a;});
return ["Other", sum];
}
let aggregatedArray = [];
for (let i = 0; i < populationedSimplified.length; i++) {
let top10 = [populationedSimplified[i][0], populationedSimplified[i][1].sort((a, b) => b[1] - a[1]).slice(0,10)];
let toBeGrouped = populationedSimplified[i][1].sort((a, b) => b[1] - a[1]).slice(10,);
aggregatedArray.push(top10);
aggregatedArray[i][1].push(groupAggregator(toBeGrouped));
}
aggregatedArray[2][0] = "United Kingdom"
aggregatedArray[7][0] = "United States"
aggregatedArray.sort((a, b) => (a[0] > b[0]) ? 1 : ((b[0] > a[0]) ? -1 : 0));
let objectChildConverter = function(child, k) {
let tempObject = {name: false,
value: false};
tempObject.name = child[k][0];
tempObject.value = child[k][1];
return tempObject;
}
let objectParentConverter = function(data, i) {
let tempObject = {name: false,
children: false};
tempObject.name = data[i][0];
let tempChildren = []
for (let k = 0; k < data[i][1].length; k++) {
tempChildren.push(objectChildConverter(data[i][1], k))
}
tempObject.children = tempChildren;
return tempObject;
};
let data = [];
for (let i = 0; i < aggregatedArray.length; i++) {
data.push(objectParentConverter(aggregatedArray,i));
}
return d3.hierarchy({
name: "refugee_data",
children: data})
.sum(d => d.value)
.sort((a, b) => b.name - a.name)
.eachAfter(d => d.index = d.parent ? d.parent.index = d.parent.index + 1 || 0 : 0)
}