Published
Edited
Oct 14, 2020
Insert cell
md`# The CoViD-19 Report - Sri Lanka`
Insert cell
{
const xList = SL_COVID_DATA.map(d => d.ut);

const yListMap = Object({
['Confirmed New']: SL_COVID_DATA.map(d => d.confirmed_new)
});

return drawXYsPlot(xList, yListMap, {
chartTitle: `CoViD19 in Sri Lanka`,
xAxisLabel: 'Time',

markerRadius: 0,

fFormatX: a => formatDate(a),
fFormatY: a => d3.format(',')(Math.round(a)),
lineColorScheme: ['red']
});
}
Insert cell
{
const xList = SL_COVID_DATA.map(d => d.ut);

const yListMap = Object({
recovered: SL_COVID_DATA.map(d => d.recovered),
confirmed: SL_COVID_DATA.map(d => d.confirmed),
active: SL_COVID_DATA.map(d => d.active)
});

return drawXYsPlot(xList, yListMap, {
chartTitle: `CoViD19 in Sri Lanka`,
xAxisLabel: 'Time',

markerRadius: 0,

fFormatX: a => formatDate(a),
fFormatY: a => d3.format(',')(a),
lineColorScheme: ['green', 'orange', 'red']
});
}
Insert cell
{
const xList = SL_COVID_DATA.map(d => d.ut);
const confirmedList = SL_COVID_DATA.map(d => d.confirmed);
const confirmedShiftedList = function(WINDOW) {
return confirmedList.map((d, i) =>
i > WINDOW ? confirmedList[i - WINDOW] : 0
);
};

const yListMap = Object({
recovered: SL_COVID_DATA.map(d => d.recovered),
'confirmed (21 days ago)': confirmedShiftedList(21)
});

return drawXYsPlot(xList, yListMap, {
chartTitle: `CoViD19 in Sri Lanka`,
xAxisLabel: 'Time',

markerRadius: 0,

fFormatX: a => formatDate(a),
fFormatY: a => d3.format(',')(a),
lineColorScheme: ['green', 'red']
});
}
Insert cell
drawSimulatedPlot(i => (i < 7 ? 100 : 10))
Insert cell
drawSimulatedPlot(i => 100)
Insert cell
d3 = require('d3')
Insert cell
import { COVID_DATA } from '@nuuuwan/covid19-report'
Insert cell
import {
SECS_IN,
getCurrentUnixTime,
getUnixTimeFromDateStr,
formatDate
} from '@nuuuwan/time-utils'
Insert cell
import { range } from '@nuuuwan/list-utils'
Insert cell
import { drawXYsPlot } from '@nuuuwan/xy-charts'
Insert cell
Insert cell
N_SL_COVID_DATA = SL_COVID_DATA.length
Insert cell
SL_COVID_DATA_LAST_WEEK = SL_COVID_DATA.slice(
N_SL_COVID_DATA - 7,
N_SL_COVID_DATA
)
Insert cell
function simulate(nDays, funcConfirmed) {
let simulatedData = SL_COVID_DATA;
const lastDay = SL_COVID_DATA[N_SL_COVID_DATA - 1];
const deathRate = lastDay.deaths / lastDay.confirmed;

range(0, nDays).map(function(i) {
const confirmed =
simulatedData[N_SL_COVID_DATA + i - 1].confirmed + funcConfirmed(i);
const deaths = Math.round(confirmed * deathRate);

const recovered = simulatedData[N_SL_COVID_DATA + i - 21].confirmed;
const active = confirmed - deaths - recovered;
simulatedData.push({
ut: lastDay.ut + SECS_IN.DAY * (i + 1),
confirmed,
recovered,
deaths,
active
});
});

return simulatedData;
}
Insert cell
function drawSimulatedPlot(funcConfirmed) {
const simulatedData = simulate(100, funcConfirmed);

const xList = simulatedData.map(d => d.ut);
const yListMap = Object({
active: simulatedData.map(d => d.active),
confirmed: simulatedData.map(d => d.confirmed)
});

return drawXYsPlot(xList, yListMap, {
chartTitle: `CoViD19 in Sri Lanka`,
xAxisLabel: 'Time',

markerRadius: 0,

fFormatX: a => formatDate(a),
fFormatY: a => d3.format(',')(a),
lineColorScheme: ['red', 'orange']
});
}
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