Published
Edited
Jul 19, 2022
1 star
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
waveChart(658, 812, [
0,///*CASES:*/
NaN,/*CASES_W:*/
6,/*H.IN*/
9,///*DEATHS*/
10,///*H.OUT*/
3///*ICU.IN*/
], (stats[stats.length-1]['cases.confirmed.todate']-stats[658]['cases.confirmed.todate'])/7, {log: 'linear', smoothCases: 42})
Insert cell
Insert cell
waveChart(819, stats.length, [
0,///*CASES:*/
NaN,/*CASES_W:*/
5,/*H.IN*/
11,///*DEATHS*/
14,///*H.OUT*/
5///*ICU.IN*/
], (stats[stats.length-1]['cases.confirmed.todate']-stats[819]['cases.confirmed.todate'])/5, {log: 'linear'})
Insert cell
Insert cell
age_classes.map((a, idx) => a + ' F:'+d3.format(".0%")(age_weights_h.female[idx])+' M:'+d3.format(".0%")(age_weights_h.male[idx]))
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
waveChart = function(wStart, wLen, offArr, maxY, opt_param) {
const options = {log: 'linear', smoothCases: 7, ...opt_param};
const stats1 = stats.slice(wStart, wLen);
const refArr = gauss_blur(stats.map(a => a['cases.confirmed.todate']), options.smoothCases).slice(wStart, wLen);
const patients1 = patients.slice(wStart, wLen);
const smooth = 7;
const config = [{
name: "cases",
colour: "blue",
data: doData(stats1.map((a, ix) => ({...a, "cases.confirmed.todate": refArr[ix]})), refArr, 'cases.confirmed.todate', smooth, offArr[0]),
textoff: 100
},{
name: "c.w_h",
colour: "magenta",
data: doData(stats1, refArr, 'cases.weighted.h.to_date', smooth, offArr[1]),
textoff: 120
},{
name: "h.in",
colour: "orange",
data: doData(stats1, refArr, 'state.in_hospital.todate', smooth, offArr[2]),
textoff: 140
},{
name: "dec",
colour: "black",
data: doData(stats1, refArr, 'state.deceased.todate', smooth, offArr[3]),
textoff: 160
},{
name: "h.out",
colour: "green",
data: doData(stats1, refArr, 'state.out_of_hospital.todate', smooth, offArr[4]),
textoff: 180
},{
name: "icu.in",
colour: "red",
data: doData(patients1, refArr, 'state.icu.todate', smooth, offArr[5]),
textoff: 200
}];
const chrt = create_chart(maxY, stats1, options.log);
config.forEach((c, idx) => {
const days = offArr[idx].length > 1 ? offArr[idx][0] : offArr[idx];
if (!Number.isNaN(offArr[idx])) {
line_with_text(chrt, {
...c,
name: c.name + ' ('+days+'d)'
})
}
});
return chrt.svg.node();
}
Insert cell
Insert cell
gauss_blur([1,2,3,4,5,4,3,2,1],1)
Insert cell
function gauss_blur(vals, nRuns) {
let curVals = vals;
for (let run = 0; run < nRuns; ++run) {
curVals = curVals.map((v, i) => {
let sum = v;
let cnt = 1;
if (i > 0) {
sum *= vals[i-1];
cnt++;
}
if (i < vals.length - 1) {
sum *= vals[i+1];
cnt++;
}
return Math.pow(sum, 1/cnt);
});
}
return curVals;
}
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