data = {
const lastDays = 90;
let arr = [];
for (const [stateId, stateObj] of Object.entries(json)) {
if (stateBlacklist.includes(stateId)) continue;
const stateData = [];
for (const [dateString, d] of Object.entries(stateObj.dates)) {
if (d.delta.confirmed < 0) continue;
const date = new Date(dateString);
if (
lastDays !== null &&
d3.timeDay.count(date, meta.lastUpdated) > lastDays
)
continue;
stateData.push({
...d,
date
});
}
let values = stateData
.map((s) => s.delta.confirmed)
.filter((v) => v !== null)
.map((v) => normalizeByStatePopulationPer(v, stateId, valuePer));
let averages = Array.from(movingAverage(values, movingAverageDays))
.slice(-1 * movingAverageDays)
.map((d, i) => [i, d]);
const slope = model(averages).m;
const angle = Math.atan(slope);
stateData[stateData.length - 1].delta.confirmedSlope = slope;
stateData[stateData.length - 1].delta.confirmedAngle = angle;
stateData.forEach((s) => {
arr.push({
...s,
state: stateId
});
});
}
arr = arr.filter((d) => d.delta.confirmedSlope !== undefined);
return arr;
}