Public
Edited
Nov 15, 2022
Importers
10 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
timeWindow = d3.timeFormat('%A')
Insert cell
Insert cell
timeWindow(new Date)
Insert cell
Insert cell
seasonallyAdjustedMTA = seasonalityIndex(sampleData, "Value", "Date", timeWindow)
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
seasonalityIndex = (data, valueKey, dateKey, seasonalityDateFormat) => {
/*
seasonalityDateFormat supports d3.utcFormat or d3.timeFormats
*/
const distinctUnits = Array.from(new Set(data.map(d => d[dateKey]).map(d => seasonalityDateFormat(d))));
const unitMeans = d3.rollup(data, v => d3.mean(v, d => d[valueKey]), d => seasonalityDateFormat(d[dateKey]));
const overallAverage = d3.mean(Array.from(unitMeans), d => d[1]);
const unitSeasonalityIndex = d3.rollup(unitMeans, v => v[0][1] / overallAverage, d => d[0]);

return data.map(d => {
const unit = seasonalityDateFormat(d[dateKey])
const index = unitSeasonalityIndex.get(unit)
return {
...d,
seasonality: d[valueKey] / index
}
});
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
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