Completed overall testing and cases dashboard.

This commit is contained in:
Joshua Bemenderfer 2021-12-31 12:57:47 -05:00
parent bbaef02acb
commit e37988dd2f
518 changed files with 17463 additions and 285 deletions

31
components.d.ts vendored
View File

@ -6,8 +6,10 @@ declare module 'vue' {
export interface GlobalComponents { export interface GlobalComponents {
Cache: typeof import('./src/components/charts/state/testing/cache.js')['default'] Cache: typeof import('./src/components/charts/state/testing/cache.js')['default']
Card: typeof import('./src/components/Card.vue')['default'] Card: typeof import('./src/components/Card.vue')['default']
ChipsCases: typeof import('./src/components/charts/state/cases/ChipsCases.vue')['default'] ChipsCases: typeof import('./src/components/charts/overall/cases/ChipsCases.vue')['default']
ChipsTesting: typeof import('./src/components/charts/state/testing/ChipsTesting.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']
IconHealthiconsClinicalFOutline: typeof import('~icons/healthicons/clinical-f-outline')['default'] IconHealthiconsClinicalFOutline: typeof import('~icons/healthicons/clinical-f-outline')['default']
IconMdiGenderMaleFemale: typeof import('~icons/mdi/gender-male-female')['default'] IconMdiGenderMaleFemale: typeof import('~icons/mdi/gender-male-female')['default']
IconMdiGraveStone: typeof import('~icons/mdi/grave-stone')['default'] IconMdiGraveStone: typeof import('~icons/mdi/grave-stone')['default']
@ -21,19 +23,28 @@ declare module 'vue' {
JSCharting: typeof import('./src/components/jscharting/JSCharting.vue')['default'] JSCharting: typeof import('./src/components/jscharting/JSCharting.vue')['default']
JSGrid: typeof import('./src/components/jscharting/JSGrid.vue')['default'] JSGrid: typeof import('./src/components/jscharting/JSGrid.vue')['default']
JSLabel: typeof import('./src/components/jscharting/JSLabel.vue')['default'] JSLabel: typeof import('./src/components/jscharting/JSLabel.vue')['default']
MapCases: typeof import('./src/components/charts/state/cases/MapCases.vue')['default'] MapCases: typeof import('./src/components/charts/overall/cases/MapCases.vue')['default']
ParametersCases: typeof import('./src/components/charts/state/cases/ParametersCases.vue')['default'] ParametersCases: typeof import('./src/components/charts/overall/cases/ParametersCases.vue')['default']
ParametersTesting: typeof import('./src/components/charts/state/testing/ParametersTesting.vue')['default'] ParametersTesting: typeof import('./src/components/charts/overall/testing/ParametersTesting.vue')['default']
SliceSelector: typeof import('./src/components/SliceSelector.vue')['default'] SliceSelector: typeof import('./src/components/SliceSelector.vue')['default']
StatCard: typeof import('./src/components/cards/StatCard.vue')['default'] StatCard: typeof import('./src/components/cards/StatCard.vue')['default']
Store: typeof import('./src/components/charts/state/cases/store.js')['default'] Store: typeof import('./src/components/charts/overall/cases/store.js')['default']
Store_combined: typeof import('./src/components/charts/overall/cases/store_combined.js')['default']
TestingDataSetup: typeof import('./src/components/pages/state/TestingDataSetup.vue')['default'] TestingDataSetup: typeof import('./src/components/pages/state/TestingDataSetup.vue')['default']
TestingParameters: typeof import('./src/components/charts/state/testing/TestingParameters.vue')['default'] TestingParameters: typeof import('./src/components/charts/state/testing/TestingParameters.vue')['default']
TrendAntigenPositive: typeof import('./src/components/charts/state/testing/TrendAntigenPositive.vue')['default'] Total_store: typeof import('./src/components/charts/state/cases/total_store.js')['default']
TrendAntigenTests: typeof import('./src/components/charts/state/testing/TrendAntigenTests.vue')['default'] TrendAntigenPositive: typeof import('./src/components/charts/overall/testing/TrendAntigenPositive.vue')['default']
TrendAntigenTests: typeof import('./src/components/charts/overall/testing/TrendAntigenTests.vue')['default']
TrendCases: typeof import('./src/components/charts/state/cases/TrendCases.vue')['default'] TrendCases: typeof import('./src/components/charts/state/cases/TrendCases.vue')['default']
TrendPCRPositive: typeof import('./src/components/charts/state/testing/TrendPCRPositive.vue')['default'] 'TrendCases copy': typeof import('./src/components/charts/state/cases/TrendCases copy.vue')['default']
TrendPCRTests: typeof import('./src/components/charts/state/testing/TrendPCRTests.vue')['default'] TrendCasesPerCapita: typeof import('./src/components/charts/state/cases/TrendCasesPerCapita.vue')['default']
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']
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']
TrendTotalCasesPerCapita: typeof import('./src/components/charts/overall/cases/TrendTotalCasesPerCapita.vue')['default']
Util: typeof import('./src/components/charts/util.js')['default'] Util: typeof import('./src/components/charts/util.js')['default']
} }
} }

View File

@ -19,7 +19,9 @@ async function processSingleZip ({ date, zip }) {
if (!county) return counties if (!county) return counties
totalPopulation += +row.population totalPopulation += +row.population
counties[county] = { counties[county] = {
population: +row.population population: +row.population,
cases_14_days: +row['14 day case rate'],
case_rate_14_days: +row['14 day case rate']
} }
return counties return counties
}, {}) }, {})

View File

@ -4,16 +4,12 @@ import fsp from 'fs/promises'
import Papa from 'papaparse' import Papa from 'papaparse'
import { getCounty } from '../../util.js' import { getCounty } from '../../util.js'
async function processSingleZip ({ date, zip }, countyInfo) { async function processByCounty({ date, zip }, countyInfo, output) {
const output = { output = {
directory: `./public/data/state/cases`, directory: path.join(output.directory, 'by-county'),
file: county => `${county}.json` file: county => `${county}.json`
} }
try {
await fsp.rm(output.directory, { recursive: true })
} catch (e) {}
const csv = await zip.entryData('epicurve_rpt_date.csv').then(res => res.toString()) const csv = await zip.entryData('epicurve_rpt_date.csv').then(res => res.toString())
const rows = Papa.parse(csv, { const rows = Papa.parse(csv, {
@ -30,8 +26,8 @@ async function processSingleZip ({ date, zip }, countyInfo) {
population: info.population, population: info.population,
cases: parseInt(row.cases), cases: parseInt(row.cases),
cases_per_capita: parseInt(row.cases) / info.population, cases_per_capita: parseInt(row.cases) / info.population,
moving_avg_cases: parseInt(row.moving_avg_cases), cases_14_days: info.cases_14_days,
moving_avg_cases_per_capita: parseInt(row.moving_avg_cases) / info.population, case_rate_14_days: info.case_rate_14_days,
total_cases: parseInt(row.total_cases_cum), total_cases: parseInt(row.total_cases_cum),
total_cases_per_capita: parseInt(row.total_cases_cum) / info.population total_cases_per_capita: parseInt(row.total_cases_cum) / info.population
}) })
@ -48,7 +44,64 @@ async function processSingleZip ({ date, zip }, countyInfo) {
await mkdirp(output.directory) await mkdirp(output.directory)
await fsp.writeFile(path.join(output.directory, output.file(county)), JSON.stringify(data)) 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()
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]
report_dates.add(row['report_date'])
return {
county,
report_date: row['report_date'],
population: info.population,
cases: parseInt(row.cases),
cases_per_capita: parseInt(row.cases) / info.population,
cases_14_days: info.cases_14_days,
case_rate_14_days: info.case_rate_14_days,
total_cases: parseInt(row.total_cases_cum),
total_cases_per_capita: parseInt(row.total_cases_cum) / 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/cases/`,
}
try {
await fsp.rm(output.directory, { recursive: true })
} catch (e) {}
await processByCounty(zip, countyInfo, output)
await processCombined(zip, countyInfo, output)
} }
function process (zips, countyInfo) { function process (zips, countyInfo) {

View File

@ -6,7 +6,7 @@ import { getCounty } from '../../util.js'
async function processSingleZip ({ date, zip }) { async function processSingleZip ({ date, zip }) {
const output = { const output = {
directory: `./public/data/state/testing`, directory: `./public/data/state/testing/by-county/`,
file: county => `${county}.json` file: county => `${county}.json`
} }

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

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