Published
Edited
Mar 30, 2021
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
RIVMdata = d3.dsv(
';',
'https://data.rivm.nl/covid-19/COVID-19_aantallen_gemeente_per_dag.csv',
d3.autoType
)
Insert cell
NICEdata =
d3.dsv(
';',
'https://data.rivm.nl/covid-19/COVID-19_ziekenhuisopnames.csv',
d3.autoType
)
Insert cell
FileAttachment("Bevolking_op_1_januari_en_gemiddeld__geslacht__leeftijd_en_regio_26032021_174819.csv").text()
Insert cell
NICEdataT = NICEdata.map(el => ({
...el,
Date_of_report: new Date(el.Date_of_report.replace(' ', 'T')),
Date_of_statistics: new Date(el.Date_of_statistics),
week: dateFns.getISOWeek(el['Date_of_statistics'])
}))
Insert cell
transformData = (data = RIVMdata) =>
data.map(el => ({
...el,
Date_of_report: new Date(el.Date_of_report.replace(' ', 'T')),
Date_of_publication: new Date(el.Date_of_publication),
week: dateFns.getISOWeek(el['Date_of_publication'])
}))
Insert cell
data = transformData()
Insert cell
dataAms = transformData().filter(el => el.Municipality_name === 'Amsterdam')
Insert cell
allNICENL = nicedata(d => d)
Insert cell
allNICEAMS = nicedata(d => d.Municipality_name === "Amsterdam")
Insert cell
nicedata = (filterfunc) => aq
.from(NICEdataT.filter(filterfunc))
.groupby('Date_of_statistics')
.rollup({
// Total_reported: op.sum('Total_reported'),
Hospital_admission: op.sum('Hospital_admission_notification'),
// Deceased: op.sum('Deceased'),
Date_of_publication: op.any('Date_of_statistics')
}).orderby(aq.desc('Date_of_statistics'))
.ungroup() // groups persist; ungroup to avoid downstream surprises
.derive({
Hospital_admission_avg: aq.rolling(op.average('Hospital_admission'), [-6, 0]),
})
.objects()
Insert cell
dataAgg = (column, data) =>
aq
.from(data)
.groupby([column])
.rollup({
Total_reported: op.sum('Total_reported'),
Hospital_admission: op.sum('Hospital_admission'),
Deceased: op.sum('Deceased'),
Date_of_publication: op.any('Date_of_publication')
})
.orderby(aq.desc(column))
.ungroup() // groups persist; ungroup to avoid downstream surprises
.derive({
Total_reported_rm: aq.rolling(op.mean('Total_reported'), [-3, 3]),
Hospital_admission_rm: aq.rolling(op.mean('Hospital_admission'), [-3, 3]),
Deceased_rm: aq.rolling(op.mean('Deceased'), [-3, 3]),
Total_reported_avg: aq.rolling(op.average('Total_reported'), [-6, 0]),
Hospital_admission_avg: aq.rolling(op.average('Hospital_admission'), [-6, 0]),
Deceased_avg: aq.rolling(op.average('Deceased'), [-6, 0]),
})
.objects()
Insert cell
allAMS = dataAgg('Date_of_publication', dataAms)
Insert cell
allNL = dataAgg('Date_of_publication', data)
Insert cell
todayNL = allNL[0]
Insert cell
todayAMS = allAMS[0]
Insert cell
current7Days = (col, data) => data
.map(el => el[col])
.slice(0, 7).reduce((a,b)=>a+b)
Insert cell
previous7Days = (col, data) => data
.map(el => el[col])
.slice(7, 14).reduce((a,b)=>a+b)
Insert cell
weeklyChange = (col, data) =>
((current7Days(col, data) - previous7Days(col, data)) /
previous7Days(col, data)) *
100
Insert cell
aq.from(dataAgg('Date_of_publication', dataAms)).view()
Insert cell
current7Days('Hospital_admission', nicedata(d=>d))
Insert cell
previous7Days('Hospital_admission', nicedata(d=>d))
Insert cell
function doWMA(array, weightedPeriod) {
var weightedArray = [];
for (var i = 0; i <= array.length - weightedPeriod; i++) {
var sum = 0;
for (var j = 0; j < weightedPeriod; j++) {
sum += array[i + j] * (weightedPeriod - j);
}
weightedArray[i] = sum / ((weightedPeriod * (weightedPeriod + 1)) / 2);
}
return weightedArray;
}
Insert cell
sparkline = (values, width = 64, height = 17) => {
const context = DOM.context2d(width, height);
const x = d3
.scaleLinear()
.domain([0, values.length - 1])
.range([0.5, width - 0.5]);
const y = d3
.scaleLinear()
.domain(d3.extent(values))
.range([height - 0.5, 0.5]);
const line = d3
.line()
.x((d, i) => x(i))
.y(y)
.context(context);
context.beginPath(), line(values), context.stroke();
return context.canvas;
}
Insert cell
d3 = require('d3')
Insert cell
import { vl } from "@vega/vega-lite-api"
Insert cell
import { aq, op } from '@uwdata/arquero'
Insert cell
dateFns = await require('https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js')
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