Public
Edited
Sep 4, 2023
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
groups = d3.group(data, d => d.medium, d => d.date);
Insert cell
flatGroups = d3.flatGroup(data, d => d.medium, d => d.date);
Insert cell
Insert cell
rollup = d3.rollup(data, contents => contents.length, d => d.medium, d => d.date);
Insert cell
Array.from(rollup, ([key, value]) => ( Array.from(value, ([k, v]) => ({date: k, count: v, medium: key})) ));
Insert cell
Select a data source…
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
d3.rollups(data, contents => contents.length, d => d.medium, d => d.date);
Insert cell
Select a data source…
Type Chart, then Shift-Enter. Ctrl-space for more options.

Insert cell
flatRollup = d3.flatRollup(data, contents => contents.length, d => d.medium, d => d.date);
Insert cell
unfavorability = d3.rollup(data, v => Number(d3.mean(v, d => d.unfavorability).toFixed(3)), d => d.medium);
Insert cell
groupByDate = d3.group(data, d => d.date);
Insert cell
arrayByDate = Array.from(groupByDate, ([date, articles]) => ({ date, count: articles.length }));
Insert cell
groupedArticles = d3.rollup(
data,
articles => articles.length,
d => d.medium,
d => d.crime
);
Insert cell
aggregatedArticles = Array
.from(groupedArticles, ([medium, siteData]) => ({
medium,
crimeData: Array
.from(siteData, ([crime, count]) => ({ crime, count }))
.sort((a, b) => b.crime.localeCompare(a.crime)),
combined: Array.from(siteData, ([crime, count]) => ({ crime, count }))
.reduce((accumulator, currentValue) => {
return accumulator + currentValue.count;
}, 0)
})).sort((a, b) => b.combined - a.combined);
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