Notebooks 2.0 is here.

Published
Edited
Dec 28, 2021
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
data = FileAttachment("1-1.csv").csv()
Insert cell
formattedData = convertCsv(data)
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
pack(formattedData);
Insert cell
Insert cell
color = d3.scaleSequential([8, 0], d3.interpolateMagma)
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
convertCsv = (json) => {
const result = { name: "World", children: [] };
const layers = {};

json.forEach((row) => {
const layer = row.Layer;
let current = layers[layer];

if (!current) {
layers[layer] = {
name: layer,
sum: 0,
count: 0,
children: [],
};
}
});

Object.values(layers).forEach((layer) => {
const categories = {};

json.forEach((row) => {
if (row.Layer !== layer.name) {
return;
}

if (!categories[row.Category]) {
categories[row.Category] = {
name: row.Category,
sum: 0,
count: 0,
children: [],
};
}

categories[row.Category].children.push({
name: row.Name,
value: row.R,
});

categories[row.Category].sum += +row.R;
categories[row.Category].count++;
});

Object.values(categories).forEach((category) => {
layer.children.push(category);
layer.sum += category.sum;
layer.count += category.count;
});
});

Object.values(layers).forEach((layer) => {
result.children.push(layer);
});

return result;

}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more