Add hospitalizations page.

This commit is contained in:
Joshua Bemenderfer
2021-12-31 14:37:38 -05:00
parent e37988dd2f
commit c19601b8f3
188 changed files with 729 additions and 28 deletions

5
components.d.ts vendored
View File

@@ -7,6 +7,7 @@ declare module 'vue' {
Cache: typeof import('./src/components/charts/state/testing/cache.js')['default']
Card: typeof import('./src/components/Card.vue')['default']
ChipsCases: typeof import('./src/components/charts/overall/cases/ChipsCases.vue')['default']
ChipsHospitalizations: typeof import('./src/components/charts/overall/hospitalizations/ChipsHospitalizations.vue')['default']
ChipsTesting: typeof import('./src/components/charts/overall/testing/ChipsTesting.vue')['default']
County_time_series: typeof import('./src/components/charts/state/cases/county_time_series.js')['default']
County_time_series_store: typeof import('./src/components/charts/state/cases/county_time_series_store.js')['default']
@@ -24,7 +25,9 @@ declare module 'vue' {
JSGrid: typeof import('./src/components/jscharting/JSGrid.vue')['default']
JSLabel: typeof import('./src/components/jscharting/JSLabel.vue')['default']
MapCases: typeof import('./src/components/charts/overall/cases/MapCases.vue')['default']
MapHospitalizations: typeof import('./src/components/charts/overall/hospitalizations/MapHospitalizations.vue')['default']
ParametersCases: typeof import('./src/components/charts/overall/cases/ParametersCases.vue')['default']
ParametersHospitalizations: typeof import('./src/components/charts/overall/hospitalizations/ParametersHospitalizations.vue')['default']
ParametersTesting: typeof import('./src/components/charts/overall/testing/ParametersTesting.vue')['default']
SliceSelector: typeof import('./src/components/SliceSelector.vue')['default']
StatCard: typeof import('./src/components/cards/StatCard.vue')['default']
@@ -41,6 +44,8 @@ declare module 'vue' {
TrendDailyCases: typeof import('./src/components/charts/overall/cases/TrendDailyCases.vue')['default']
'TrendDailyCases copy': typeof import('./src/components/charts/state/cases/TrendDailyCases copy.vue')['default']
TrendDailyCasesPerCapita: typeof import('./src/components/charts/overall/cases/TrendDailyCasesPerCapita.vue')['default']
TrendDailyHospitalizations: typeof import('./src/components/charts/overall/hospitalizations/TrendDailyHospitalizations.vue')['default']
TrendDailyHospitalizationsPerCapita: typeof import('./src/components/charts/overall/hospitalizations/TrendDailyHospitalizationsPerCapita.vue')['default']
TrendPCRPositive: typeof import('./src/components/charts/overall/testing/TrendPCRPositive.vue')['default']
TrendPCRTests: typeof import('./src/components/charts/overall/testing/TrendPCRTests.vue')['default']
TrendTotalCases: typeof import('./src/components/charts/overall/cases/TrendTotalCases.vue')['default']

View File

@@ -3,8 +3,9 @@ import fg from 'fast-glob'
import path from 'path'
import StreamZip from 'node-stream-zip'
import Counties from './parser/counties.js'
import StateTesting from './parser/state/testing.js'
import StateCases from './parser/state/cases.js'
import OverallTesting from './parser/overall/testing.js'
import OverallCases from './parser/overall/cases.js'
import OverallHospitalizations from './parser/overall/hospitalizations.js'
async function main() {
const sources = await fg(['./data/raw/*.zip'])
@@ -17,8 +18,9 @@ async function main() {
const counties = await Counties(zips)
await StateTesting(zips)
await StateCases(zips, counties)
await OverallTesting(zips)
await OverallCases(zips, counties)
await OverallHospitalizations(zips, counties)
}
main()

View File

@@ -0,0 +1,130 @@
import mkdirp from 'mkdirp'
import path from 'path'
import fsp from 'fs/promises'
import Papa from 'papaparse'
import { getCounty } from '../../util.js'
async function processByCounty({ date, zip }, countyInfo, output) {
output = {
directory: path.join(output.directory, 'by-county'),
file: county => `${county}.json`
}
const csv = await zip.entryData('epicurve_rpt_date.csv').then(res => res.toString())
const rows = Papa.parse(csv, {
header: true
}).data
const hospitalizations_last_14_days = []
function computeHospitalizationsLast14Days() {
return hospitalizations_last_14_days.reduce((prev, current) => prev + current, 0)
}
const counties = rows.reduce((counties, row) => {
const county = getCounty(row.county)
const info = countyInfo[county]
if (!county) return counties
if (!counties[county]) counties[county] = []
hospitalizations_last_14_days.unshift(+row.confirmed_case_hospitalization)
hospitalizations_last_14_days.length = 14
counties[county].push({
report_date: row['report_date'],
population: info.population,
hospitalizations: parseInt(row.confirmed_case_hospitalization),
hospitalizations_per_capita: parseInt(row.confirmed_case_hospitalization) / info.population,
hospitalizations_last_14_days: computeHospitalizationsLast14Days(),
hospitalizations_last_14_days_per_capita: computeHospitalizationsLast14Days() / info.population
})
return counties
}, {})
for (const county in counties) {
const data = {
segment: { county },
headers: Object.keys(counties[county][0]),
rows: counties[county].map(row => Object.values(row))
}
await mkdirp(output.directory)
await fsp.writeFile(path.join(output.directory, output.file(county)), JSON.stringify(data))
}
}
async function processCombined({ date, zip }, countyInfo, output) {
output = {
directory: output.directory,
file: `combined.json`
}
const csv = await zip.entryData('epicurve_rpt_date.csv').then(res => res.toString())
const rows = Papa.parse(csv, {
header: true
}).data
const report_dates = new Set()
let hospitalizations_last_14_days = []
function computeHospitalizationsLast14Days() {
return hospitalizations_last_14_days.reduce((prev, current) => prev + current, 0)
}
let oldCounty = null
const results = rows.map(row => {
const county = getCounty(row.county)
if (!county) return null
if (['-- All --', '-- Unknown --'].includes(county)) return null
const info = countyInfo[county]
if (oldCounty !== county) {
hospitalizations_last_14_days = []
oldCounty = county
}
hospitalizations_last_14_days.unshift(+row.confirmed_case_hospitalization)
hospitalizations_last_14_days.length = 14
report_dates.add(row['report_date'])
return {
county,
report_date: row['report_date'],
population: info.population,
hospitalizations: parseInt(row.confirmed_case_hospitalization),
hospitalizations_per_capita: parseInt(row.confirmed_case_hospitalization) / info.population,
hospitalizations_last_14_days: computeHospitalizationsLast14Days(county),
hospitalizations_last_14_days_per_capita: computeHospitalizationsLast14Days(county) / info.population
}
}).filter(row => !!row)
const data = {
segment: { report_date: Array.from(report_dates) },
headers: Object.keys(results[0]),
rows: results.map(row => Object.values(row))
}
await mkdirp(output.directory)
await fsp.writeFile(path.join(output.directory, output.file), JSON.stringify(data))
}
async function processSingleZip (zip, countyInfo) {
const output = {
directory: `./public/data/state/hospitalizations/`,
}
try {
await fsp.rm(output.directory, { recursive: true })
} catch (e) {}
await processByCounty(zip, countyInfo, output)
await processCombined(zip, countyInfo, output)
}
function process (zips, countyInfo) {
return processSingleZip(zips.at(-1), countyInfo)
}
export default process

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More