From 006f6a2e296a28331eeb135ba0e66c1dcc78ff11 Mon Sep 17 00:00:00 2001 From: KOVALW Date: Sat, 4 Apr 2026 04:28:55 +0000 Subject: [PATCH 01/15] squash --- .gitignore | 1 + Makefile | 10 +- experiments/phase1/README.md | 21 + experiments/phase1/input/default_params.json | 74 ++++ experiments/phase1/input/dev-config.yaml | 10 + experiments/phase1/input/priors.json | 32 ++ experiments/phase1/input/prod-config.yaml | 10 + experiments/phase1/reports/calibration.qmd | 383 ++++++++++++++++++ input/input.json | 8 +- .../pyproject.toml | 14 + .../create_synthetic_population/__init__.py | 19 + .../src/create_synthetic_population/run.py | 4 +- .../test_create_synthetic_population.py | 0 .../src/importation/perkins_et_al_methods.py | 3 +- packages/ixa-epi-utils/README.md | 3 - .../src/ixa_epi_utils/__init__.py | 7 - .../src/ixa_epi_utils/parameters.py | 36 -- .../pyproject.toml | 5 +- .../src/particle_reader/__init__.py | 3 + .../src/particle_reader/particle_reader.py | 217 ++++++++++ pyproject.toml | 14 +- scripts/phase_1_calibration.py | 296 ++++++++++++++ scripts/phase_1_projection.py | 120 ++++++ src/abort_run.rs | 24 ++ src/ixa_epi_covid/__init__.py | 4 + src/ixa_epi_covid/config_parser.py | 138 +++++++ src/ixa_epi_covid/covid_model.py | 119 ++++++ src/lib.rs | 1 + src/model.rs | 6 +- src/parameters.rs | 10 + src/reports/aggregated_deaths_report.rs | 160 ++++++++ src/reports/mod.rs | 23 +- tests/test_ixa_epi_covid.py | 238 +++++++++++ uv.lock | 231 +++++++---- 34 files changed, 2105 insertions(+), 139 deletions(-) create mode 100644 experiments/phase1/README.md create mode 100644 experiments/phase1/input/default_params.json create mode 100644 experiments/phase1/input/dev-config.yaml create mode 100644 experiments/phase1/input/priors.json create mode 100644 experiments/phase1/input/prod-config.yaml create mode 100644 experiments/phase1/reports/calibration.qmd create mode 100644 packages/create_synthetic_population/pyproject.toml create mode 100644 packages/create_synthetic_population/src/create_synthetic_population/__init__.py rename scripts/create_synthetic_population.py => packages/create_synthetic_population/src/create_synthetic_population/run.py (99%) rename {scripts => packages/create_synthetic_population/tests}/test_create_synthetic_population.py (100%) delete mode 100644 packages/ixa-epi-utils/README.md delete mode 100644 packages/ixa-epi-utils/src/ixa_epi_utils/__init__.py delete mode 100644 packages/ixa-epi-utils/src/ixa_epi_utils/parameters.py rename packages/{ixa-epi-utils => particle_reader}/pyproject.toml (57%) create mode 100644 packages/particle_reader/src/particle_reader/__init__.py create mode 100644 packages/particle_reader/src/particle_reader/particle_reader.py create mode 100644 scripts/phase_1_calibration.py create mode 100644 scripts/phase_1_projection.py create mode 100644 src/abort_run.rs create mode 100644 src/ixa_epi_covid/__init__.py create mode 100644 src/ixa_epi_covid/config_parser.py create mode 100644 src/ixa_epi_covid/covid_model.py create mode 100644 src/reports/aggregated_deaths_report.rs create mode 100644 tests/test_ixa_epi_covid.py diff --git a/.gitignore b/.gitignore index fc13ce1..2b7dfe9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ **/profiling.json +experiments/**/output/ # Data *.csv diff --git a/Makefile b/Makefile index 8144d16..f69a4f6 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ uv-sync: # Generate a synthetic population (configure with STATE and SIZE) synthetic-population: - uv run scripts/create_synthetic_population.py --state $(STATE) --size $(NORMALIZED_SIZE) + uv run python -m create_synthetic_population.run --state $(STATE) --size $(NORMALIZED_SIZE) input/synth_pop_people_%.csv: uv run scripts/create_synthetic_population.py --state $(shell echo "$*" | sed 's/_.*//') --size $(shell echo "$*" | sed 's/^[A-Z]*_//') @@ -57,3 +57,11 @@ bench: input/synth_pop_people_WY_10_000.csv input/synth_pop_people_WY_100_000.cs BASE ?= HEAD bench-compare: input/synth_pop_people_WY_10_000.csv input/synth_pop_people_WY_100_000.csv uv run scripts/bench_compare.py $(BASE) + +calibrate-phase-1: ./experiments/phase1/input/priors.json ./experiments/phase1/input/default_params.json + uv run cargo build -r + uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/prod-config.yaml + +calibrate-phase-1-dev: ./experiments/phase1/input/priors.json ./experiments/phase1/input/default_params.json + uv run cargo build -r + uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/dev-config.yaml diff --git a/experiments/phase1/README.md b/experiments/phase1/README.md new file mode 100644 index 0000000..8795f37 --- /dev/null +++ b/experiments/phase1/README.md @@ -0,0 +1,21 @@ +# Running the calibration routine +In order to generate the results analysis report from the `reports/` directory, first calibrate the model by using the phase 1 calibration script. Ensure that the uv environment is synced and the rust binaries have been assembled +``` +uv sync --all-packages +uv run cargo build -r +uv run python scripts/phase_1_calibration.py +``` + +Then, to render the analysis report, ensure that `tinytex` is installed with + +``` +quarto install tinytex +``` + +and then render the document using + +``` +uv run quarto render experiments/phase1/reports/calibration.qmd +``` + +The resulting file should be a PDF in the reports directory. diff --git a/experiments/phase1/input/default_params.json b/experiments/phase1/input/default_params.json new file mode 100644 index 0000000..1fa4af4 --- /dev/null +++ b/experiments/phase1/input/default_params.json @@ -0,0 +1,74 @@ +{ + "epimodel.GlobalParams": { + "seed": 1234, + "max_time": 100.0, + "synth_population_file": "input/synth_pop_people_IN_1_000_000.csv", + "initial_prevalence": 0.0, + "imported_cases_timeseries": { + "include": true, + "filename": "./experiments/phase1/calibration/output/importation_timeseries.csv" + }, + "infectiousness_rate_fn": {"Constant": { + "rate": 0.2, + "duration": 12.0 + } + }, + "probability_mild_given_infect": 0.7, + "infect_to_mild_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_severe_given_mild": 0.2, + "mild_to_severe_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "mild_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_critical_given_severe": 0.2, + "severe_to_critical_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "severe_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_dead_given_critical": 0.2, + "critical_to_dead_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "critical_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "settings_properties": {"Home": {"alpha": 0.0}, + "Workplace": {"alpha": 0.0}, + "School": {"alpha": 0.0}, + "CensusTract": {"alpha": 0.0}}, + "itinerary_ratios": {"Home": 0.25, "Workplace": 0.25, "School": 0.25, "CensusTract": 0.25}, + "prevalence_report": { + "write": false, + "filename": "person_property_count.csv", + "period": 1.0 + }, + "incidence_report": { + "write": false, + "filename": "incidence_report.csv", + "period": 1.0 + }, + "transmission_report": { + "write": false, + "filename": "transmission_report.csv" + }, + "aggregated_deaths_report": { + "write": true, + "filename": "aggregated_deaths_report.csv", + "period": 1.0 + }, + "first_death_terminates_run": true + } +} diff --git a/experiments/phase1/input/dev-config.yaml b/experiments/phase1/input/dev-config.yaml new file mode 100644 index 0000000..c774d45 --- /dev/null +++ b/experiments/phase1/input/dev-config.yaml @@ -0,0 +1,10 @@ +exe_file: ./target/release/ixa-epi-covid +force_overwrite: true +state: Indiana +year: 2020 +symptomatic_reporting_prob: 0.5 +priors_file: ./experiments/phase1/input/priors.json +generation_particle_count: 50 +tolerance_values: [20.0, 15.0] +use_env_synth_pop_file: false +ixa_default_params_file: ./experiments/phase1/input/default_params.json diff --git a/experiments/phase1/input/priors.json b/experiments/phase1/input/priors.json new file mode 100644 index 0000000..384b38f --- /dev/null +++ b/experiments/phase1/input/priors.json @@ -0,0 +1,32 @@ +{ + "priors": { + "symptomatic_reporting_prob": { + "distribution": "beta", + "parameters": { + "alpha": 5, + "beta": 5 + } + }, + "settings_properties.Home.alpha": { + "distribution": "uniform", + "parameters": { + "min": 0.0, + "max": 1.0 + } + }, + "probability_mild_given_infect": { + "distribution": "beta", + "parameters": { + "alpha": 7, + "beta": 3 + } + }, + "infectiousness_rate_fn.Constant.rate": { + "distribution": "lognormal", + "parameters": { + "mean": -1.5, + "std_dev": 0.5 + } + } + } +} diff --git a/experiments/phase1/input/prod-config.yaml b/experiments/phase1/input/prod-config.yaml new file mode 100644 index 0000000..951574d --- /dev/null +++ b/experiments/phase1/input/prod-config.yaml @@ -0,0 +1,10 @@ +exe_file: ./target/release/ixa-epi-covid +force_overwrite: true +state: Indiana +year: 2020 +symptomatic_reporting_prob: 0.5 +priors_file: ./experiments/phase1/input/priors.json +generation_particle_count: 500 +tolerance_values: [10.0, 5.0, 2.0, 0.0] +use_env_synth_pop_file: true +ixa_default_params_file: ./experiments/phase1/input/default_params.json diff --git a/experiments/phase1/reports/calibration.qmd b/experiments/phase1/reports/calibration.qmd new file mode 100644 index 0000000..cedfd40 --- /dev/null +++ b/experiments/phase1/reports/calibration.qmd @@ -0,0 +1,383 @@ +--- +title: "Phase I calibration" +date: "2026-03-09" +format: pdf +--- + +# Overview +In this phase, we aim to calibrate the model to the timing of the first reported death due to COVID-19 in the state of Indiana. The first reported death in Indiana occurred on March 16th, 2020, 10 days after the first confirmed case. + +# Results +```{python} +#| echo: false +import pickle +from calibrationtools.calibration_results import CalibrationResults, Particle +from pathlib import Path +import os +import seaborn as sns +import matplotlib.pyplot as plt +import numpy as np +import polars as pl +import json +from particle_reader import ParticleReader +import tempfile +import polars as pl +import os +from ixa_epi_covid import CovidModel +from mrp.api import apply_dict_overrides +import multiprocessing as mp +from concurrent.futures import ThreadPoolExecutor +from typing import Any +import shutil + +os.chdir('../../../') + +wd = Path("experiments", "phase1") + +# Load results object from the calibration directory +with open(wd / "calibration" / "output" / "results.pkl", "rb") as fp: + results: CalibrationResults = pickle.load(fp) +``` + + +Quantiles for each fitted parameter +```{python} +#| echo: false +diagnostics = results.get_diagnostics() +print( + json.dumps( + { + k1: {k2: np.format_float_positional(v2, precision=3) for k2, v2 in v1.items()} + for k1, v1 in diagnostics["quantiles"].items() + }, + indent=4, + ) +) +``` + +Histograms of posterior samples compared to the probability density of each prior. For each plot, the prior is plotted as a blue line and the histogram of the posterior samples is plotted in orange with a kernel density estimator overlay. To generate the histogram, we sample $n$ particles from the posterior population, where $n$ is the effective sample size of the population. Re-sampling particles in this manner reflects the posterior weight distribution, the probability mass function over accepted particles determined by the ABC-SMC algorithm perturbation kernel and prior distributions. + +```{python} +#| echo: false +#| eval: false +# Preferred API for development in calibrationtools---------- +for param in results.fitted_params: + # get values and use weights to alter histogram instead of sampling with ESS + values = results.posterior_particles.get_values_of(param) + sns.histplot(values, weights=results.posterior_particles.weights) + + # Method to obtain the marginal prior and call PDF on those values for certain evaluation list + marginal_prior = results.get_marginal_prior(param) + eval_points = np.arange(min(values) - np.var(values), max(values) + np.var(values), 0.01) + prior_density = marginal_prior.probability_density(eval_points) + sns.lineplot( + data = pl.DataFrame({ + param: list(eval_points), + 'density': prior_density + }) + ) + plt.title(f"Posterior versus prior distribution") + plt.xlabel(" ".join(param.split("."))) + plt.ylabel("Density") + plt.tight_layout() + plt.show() + +``` +```{python} +#| echo: false +posterior_samples = results.sample_posterior_particles(n=int(results.ess)) + +for param in results.fitted_params: + vals = [p[param] for p in posterior_samples] + min_val = min(vals) + max_val = max(vals) + + sns.histplot(x=vals, stat="density", kde=True, color='orange', edgecolor='black') + eval_points = np.arange( + min_val - np.var(vals), max_val + np.var(vals), 0.01 + ) + param_prior = None + for prior in results.priors.priors: + if prior.param == param: + param_prior = prior + break + if not param_prior: + raise (ValueError, f"Could not find prior {param}") + + density_vals = [ + param_prior.probability_density(Particle({param: v})) + for v in eval_points + ] + + sns.lineplot( + data=pl.DataFrame({param: list(eval_points), "density": density_vals}), + x=param, + y="density", + ) + plt.title(f"Posterior versus prior distribution") + plt.xlabel(" ".join(param.split("."))) + plt.ylabel("Density") + plt.tight_layout() + plt.show() + +``` +```{python} +#| echo: false +## Obtaining the importation time series and death incidence data frames for a random smaple form the posterior +# Re-generating a random sample of parameter sets from posterior +particle_count = int(min(100, results.ess)) +particles = results.sample_posterior_particles(n=particle_count) + +default_params_file = wd / 'input' / 'default_params.json' + +with open(default_params_file, "rb") as fp: + default_params = json.load(fp) + +ixa_overrides = { + "synth_population_file": "./input/in.csv", + "imported_cases_timeseries": { + "filename": "./experiments/phase1/projection/imported_cases_timeseries.csv" + }, + "max_time": 200, + "first_death_terminates_run": False +} +default_params = apply_dict_overrides(default_params, {'epimodel.GlobalParams': ixa_overrides}) + +mrp_defaults = { + 'ixa_inputs': default_params, + "config_inputs": { + "exe_file": "./target/release/ixa-epi-covid", + "output_dir": "./experiments/phase1/projection/output", + "force_overwrite": True, + "outputs_to_read": ['aggregated_deaths_report', 'imported_cases_timeseries'] + }, + "importation_inputs": { + "state": "Indiana", + "year": 2020, + "symptomatic_reporting_prob": 0.5 + }, +} + + +importation_curves = [] +death_data = [] +for i, p in enumerate(particles): + seed = p['seed'] + output_path = Path(wd, "calibration", "output", f"{seed}") + importation_curves.append( + pl.read_csv(output_path / "imported_cases_timeseries.csv").with_columns( + pl.lit(i).alias("id"), + pl.col('imported_infections').cum_sum().over(order_by='time').alias('cumulative_imported_infections') + ) + ) + death_data.append( + pl.read_csv( + output_path / default_params['epimodel.GlobalParams']['aggregated_deaths_report']['filename'] + ).with_columns( + pl.lit(i).alias("id"), + pl.col('count').cum_sum().over(order_by='t_upper').alias('cumulative_deaths') + ) + ) + +importations = pl.concat(importation_curves) +deaths = pl.concat(death_data) +``` + +```{python} +#| eval: false +#| echo: false +default_params_file = wd / 'input' / 'default_params.json' + +with open(default_params_file, "rb") as fp: + default_params = json.load(fp) + +ixa_overrides = { + "synth_population_file": "./input/in.csv", + "imported_cases_timeseries": { + "filename": "./experiments/phase1/projection/imported_cases_timeseries.csv" + }, + "max_time": 200, + "first_death_terminates_run": False +} +default_params = apply_dict_overrides(default_params, {'epimodel.GlobalParams': ixa_overrides}) + +mrp_defaults = { + 'ixa_inputs': default_params, + "config_inputs": { + "exe_file": "./target/release/ixa-epi-covid", + "output_dir": "./experiments/phase1/projection/output", + "force_overwrite": True, + "outputs_to_read": ['prevalence_report', 'imported_cases_timeseries'] + }, + "importation_inputs": { + "state": "Indiana", + "year": 2020, + "symptomatic_reporting_prob": 0.5 + }, +} + +if os.path.exists(mrp_defaults["config_inputs"]["output_dir"]): + shutil.rmtree(mrp_defaults["config_inputs"]["output_dir"]) + +def update_epimodel_output_dir( + particle_params: dict[str, Any], output_dir: str +) -> dict[str, Any]: + """ + Updates the output directory in the epimodel parameters to point to the particle-specific output directory. + Args: + particle_params (dict[str, Any]): The parameters for a specific particle, which includes the default + parameters merged with the particle-specific parameters. + output_dir (str): The path to the particle-specific output directory. + Returns: + dict[str, Any]: The updated parameters with the output directory in the epimodel parameters updated to the particle-specific output directory. + """ + params = apply_dict_overrides( + particle_params, + { + "config_inputs": {"output_dir": str(output_dir)}, + "ixa_inputs": { + "epimodel.GlobalParams": { + "imported_cases_timeseries": { + "filename": str( + Path(output_dir, "imported_cases_timeseries.csv") + ) + } + } + }, + }, + ) + return params + +reader = ParticleReader(results.fitted_params + ['seed'], mrp_defaults) +def particles_to_params(particle: Particle, reader: ParticleReader = reader): + particle_params = reader.read_particle(particle=particle) + # Make particle-specific output directory and update the output path in the parameters accordingly + output_dir = Path( + particle_params["config_inputs"]["output_dir"], + str(particle_params["ixa_inputs"]["epimodel.GlobalParams"]["seed"]), + ) + try: + output_dir.mkdir(parents=True, exist_ok=False) + + updated_params = update_epimodel_output_dir(particle_params, output_dir) + return updated_params + except FileExistsError: + return {} + +uniq_id = 0 +model = CovidModel() +importation_curves = [] +prevalence_data = [] +os.makedirs(mrp_defaults["config_inputs"]["output_dir"], exist_ok=True) +parallel_executor = ThreadPoolExecutor(max_workers=mp.cpu_count()) + +def simulate_particle(p): + model_inputs = particles_to_params(p) + if not model_inputs: + return model_inputs["config_inputs"]["output_dir"] + model.simulate(model_inputs) + return model_inputs["config_inputs"]["output_dir"] + +dirs = [] +for dir in parallel_executor.map(simulate_particle, particles): + dirs.append(dir) + +for dir in dirs: + importation_curves.append( + pl.read_csv(Path(dir, "imported_cases_timeseries.csv")).with_columns(pl.lit(uniq_id).alias("id")) + ) + prevalence_data.append( + pl.read_csv(Path(dir, "prevalence_report.csv")).with_columns(pl.lit(uniq_id).alias("id")) + ) + uniq_id += 1 + +importations = pl.concat(importation_curves) +all_prevalence_data = pl.concat(prevalence_data) +deaths = ( + all_prevalence_data + .filter(pl.col("symptom_status") == "Dead") + .group_by("t", "id") + .agg(pl.sum("count")) +) +parallel_executor.shutdown() +``` + +We can show the posterior variance in the imported infections time series by overlaying samples from the simulated particles. Blue points on the plot represent the count of imported infections for a given day in a given simulation if the number of importations was above zero. Black line show the median and 95% credible interval of the number of imported infections on each day from January 1st to March 12th. +```{python} +#| echo: false +sns.scatterplot( + data=importations.filter(pl.col('imported_infections') > 0), + x="time", + y="cumulative_imported_infections", + alpha=0.05, +) +sns.lineplot( + data=importations, + x="time", + y="cumulative_imported_infections", + estimator='median' +) +plt.title(f"Cumulative imported infections over time ({particle_count} posterior samples)") +plt.xlabel("Time (days since simulation start)") +plt.ylabel("Number of imported infections (cumulative)") +plt.tight_layout() +plt.show() +``` +We can project the cumulative number of deaths observed in the model projections. Because the last SMC step has a distance tolerance threshold below one, we see no simulations accrue deaths before the first reported death in the data. +```{python} +#| echo: false + +sns.lineplot( + data=deaths, + x="t_upper", + y="cumulative_deaths", + units='id', estimator=None, + alpha=0.05 +) +sns.lineplot( + data=deaths, + x="t_upper", + y="cumulative_deaths", +) +plt.title(f"Total observed deaths over time ({particle_count} posterior samples)") +plt.xlabel("Time (days since simulation start)") +plt.ylabel("Number of deaths (cumulative)") +plt.axvline(x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)") +plt.tight_layout() +plt.show() +``` + +Finally, we can plot the same trajectories for number of infections observed in the model over time, which includes both imported infections and locally acquired infections. We see that some epidemic trajectories are strongly delayed from first imported infections due to stochasticity. + +```{python} +#| echo: false +#| eval: false +sir_data = all_prevalence_data.group_by( + 't', 'infection_status', 'id' +).agg( + pl.sum('count') +) + +g = sns.relplot( + data = sir_data, + x='t', + y='count', + kind='line', + hue='infection_status', + units='id', + estimator=None, + alpha=0.1, + row='infection_status', +) +g.fig.suptitle( + f"Individuals by infection status over time ({particle_count} posterior samples)", + fontsize='x-large', + fontweight='bold' +) +g.fig.subplots_adjust(top=0.85) +g.set_axis_labels("Time (days since simulation start)", "Number of people") +for ax in g.axes.flat: + ax.axvline(x=65, color="black", linestyle="--", label="First case reported (March 6, 2020)") + ax.axvline(x=75, color="red", linestyle="--", label="First death reported (March 16, 2020)") +plt.show() +``` diff --git a/input/input.json b/input/input.json index b332278..5c92d50 100644 --- a/input/input.json +++ b/input/input.json @@ -67,6 +67,12 @@ "transmission_report": { "write": true, "filename": "transmission_report.csv" - } + }, + "aggregated_deaths_report": { + "write": true, + "filename": "aggregated_deaths_report.csv", + "period": 1.0 + }, + "first_death_terminates_run": false } } diff --git a/packages/create_synthetic_population/pyproject.toml b/packages/create_synthetic_population/pyproject.toml new file mode 100644 index 0000000..55ad3ba --- /dev/null +++ b/packages/create_synthetic_population/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "create_synthetic_population" +version = "0.1.0" +description = "Library for creating a synthetic population of a particular size and following state structure from PUMs data" +requires-python = ">=3.12" +dependencies = [ + "numpy>=2.3.4", + "polars>=1.35.1", + "geopandas>=1.1.3" +] + +[build-system] +requires = ["uv_build>=0.9.21,<0.10.0"] +build-backend = "uv_build" diff --git a/packages/create_synthetic_population/src/create_synthetic_population/__init__.py b/packages/create_synthetic_population/src/create_synthetic_population/__init__.py new file mode 100644 index 0000000..785bd02 --- /dev/null +++ b/packages/create_synthetic_population/src/create_synthetic_population/__init__.py @@ -0,0 +1,19 @@ +from .run import ( + assign_geography, + build_outputs, + create_places, + load_tracts, + parse_args, + run, + sample_population, +) + +__all__ = [ + "run", + "assign_geography", + "build_outputs", + "create_places", + "load_tracts", + "parse_args", + "sample_population", +] diff --git a/scripts/create_synthetic_population.py b/packages/create_synthetic_population/src/create_synthetic_population/run.py similarity index 99% rename from scripts/create_synthetic_population.py rename to packages/create_synthetic_population/src/create_synthetic_population/run.py index 55f21b9..cde0519 100644 --- a/scripts/create_synthetic_population.py +++ b/packages/create_synthetic_population/src/create_synthetic_population/run.py @@ -359,7 +359,7 @@ def build_outputs(synth_pop_region_df): return people_df, region_df -def main(argv=None): +def run(argv=None): args = parse_args(argv) state_synth = args.state @@ -446,4 +446,4 @@ def main(argv=None): if __name__ == "__main__": - main() + run() diff --git a/scripts/test_create_synthetic_population.py b/packages/create_synthetic_population/tests/test_create_synthetic_population.py similarity index 100% rename from scripts/test_create_synthetic_population.py rename to packages/create_synthetic_population/tests/test_create_synthetic_population.py diff --git a/packages/importation/src/importation/perkins_et_al_methods.py b/packages/importation/src/importation/perkins_et_al_methods.py index 48eed18..c75d319 100644 --- a/packages/importation/src/importation/perkins_et_al_methods.py +++ b/packages/importation/src/importation/perkins_et_al_methods.py @@ -212,7 +212,7 @@ def prob_undetected_infections( "Parameter combination yielded low total probability (p<1e-15) for all undetected infection values. Proceeding" ) - if total_weight == 0: + if prob_data.select(pl.sum("weight").eq(0)).item(): return prob_data.with_columns( pl.lit(1.0 / prob_data.height).alias("probability") ) @@ -269,7 +269,6 @@ def sample_undetected_infections( prop_ascf=prop_ascf, ) - prob_data = prob_data sampled_undetected = np.random.choice( prob_data["n_undetected_infections"].to_list(), size=1, diff --git a/packages/ixa-epi-utils/README.md b/packages/ixa-epi-utils/README.md deleted file mode 100644 index 57ff253..0000000 --- a/packages/ixa-epi-utils/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# ixa-epi-utils - -Utility functions for organizing inputs and outputs diff --git a/packages/ixa-epi-utils/src/ixa_epi_utils/__init__.py b/packages/ixa-epi-utils/src/ixa_epi_utils/__init__.py deleted file mode 100644 index 8e68612..0000000 --- a/packages/ixa-epi-utils/src/ixa_epi_utils/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from .parameters import ( - sample_from_distributions, -) - -__all__ = [ - "sample_from_distributions", -] diff --git a/packages/ixa-epi-utils/src/ixa_epi_utils/parameters.py b/packages/ixa-epi-utils/src/ixa_epi_utils/parameters.py deleted file mode 100644 index 57acef2..0000000 --- a/packages/ixa-epi-utils/src/ixa_epi_utils/parameters.py +++ /dev/null @@ -1,36 +0,0 @@ -import numpy as np - - -def sample_from_distributions( - distributions: dict, n_samples: int = None, seed: int = None -) -> dict: - """ - Sample parameters from given distributions. - Eventually this should allow for correlated samples and other sampling techniques like sobol. - For now, only independent sampling from uniform, normal, and beta distributions is supported. - """ - - if seed is not None: - np.random.seed(seed) - - sampled_parameters = {} - for param, dist_info in distributions.items(): - dist_type = dist_info["type"] - match dist_type: - case "uniform": - sampled_parameters[param] = np.random.uniform( - low=dist_info["min"], high=dist_info["max"], size=n_samples - ) - case "normal": - sampled_parameters[param] = np.random.normal( - loc=dist_info["mean"], - scale=dist_info["std"], - size=n_samples, - ) - case "beta": - sampled_parameters[param] = np.random.beta( - a=dist_info["alpha"], b=dist_info["beta"], size=n_samples - ) - case _: - raise ValueError(f"Unknown distribution type: {dist_type}") - return sampled_parameters diff --git a/packages/ixa-epi-utils/pyproject.toml b/packages/particle_reader/pyproject.toml similarity index 57% rename from packages/ixa-epi-utils/pyproject.toml rename to packages/particle_reader/pyproject.toml index 126c66d..eeac2d3 100644 --- a/packages/ixa-epi-utils/pyproject.toml +++ b/packages/particle_reader/pyproject.toml @@ -1,8 +1,7 @@ [project] -name = "ixa-epi-utils" +name = "particle_reader" version = "0.1.0" -description = "Library of utility functions for handling inputs and outputs of the ixa-epi-covid model" -readme = "README.md" +description = "Library for reading parameters - from the dev branch of calibrationtools" requires-python = ">=3.12" dependencies = [ "numpy>=2.3.4", diff --git a/packages/particle_reader/src/particle_reader/__init__.py b/packages/particle_reader/src/particle_reader/__init__.py new file mode 100644 index 0000000..70f5e76 --- /dev/null +++ b/packages/particle_reader/src/particle_reader/__init__.py @@ -0,0 +1,3 @@ +from .particle_reader import ParticleReader + +__all__ = ["ParticleReader"] diff --git a/packages/particle_reader/src/particle_reader/particle_reader.py b/packages/particle_reader/src/particle_reader/particle_reader.py new file mode 100644 index 0000000..d244551 --- /dev/null +++ b/packages/particle_reader/src/particle_reader/particle_reader.py @@ -0,0 +1,217 @@ +import inspect +from typing import Any, Callable, Concatenate + +from calibrationtools.particle import Particle +from mrp.api import apply_dict_overrides + + +def flatten_dict( + structured_dict: dict[str, Any], + parent_key: str = "", + escape_sep: bool = True, +) -> dict[str, Any]: + """ + Flattens a nested dictionary by concatenating keys with a '.' separator. + + Args: + structured_dict (dict[str, Any]): The nested dictionary to flatten. + parent_key (str): The base key to prepend to each key in the flattened dictionary. Defaults to an empty string. + escape_sep (bool): Whether to escape the separator in keys that contain it. If True, occurrences of the separator in keys will be prefixed with a backslash. If False, a ValueError will be raised if any key contains the separator. Defaults to True. + + Returns: + dict[str, Any]: A flattened dictionary where nested keys are concatenated with the specified separator. + Raises: + ValueError: If escape_sep is False and any key in the structured_dict contains the separator + """ + items = [] + for k, v in structured_dict.items(): + if "." in k: + if escape_sep: + k = k.replace(".", "\\.") + else: + raise ValueError( + f"Key '{k}' contains the separator '.' and escape_sep is set to False." + ) + + new_key = ".".join([parent_key, k]) if parent_key else k + if isinstance(v, dict): + items.extend(flatten_dict(v, new_key).items()) + else: + items.append((new_key, v)) + return dict(items) + + +def unflatten_parameter_name( + flattened_name: str, value: Any +) -> dict[str, Any]: + """ + Unflattens a parameter name by splitting it on dots. + + Args: + flattened_name (str): The flattened parameter name (e.g., "offspring_distribution.NegativeBinomial.mean"). + value (Any): The value to assign to the unflattened parameter. + Returns: + dict[str, Any]: A dictionary representing the unflattened parameter name (e.g., {"offspring_distribution": {"NegativeBinomial": {"mean2": value}}}). + """ + name_vec = flattened_name.split(".") + param_vec = [] + i = 0 + # Corrct for any escaped separators introduced during flattening + while i < len(name_vec): + if name_vec[i].endswith("\\"): + param_vec.append(name_vec[i].replace("\\", ".") + name_vec[i + 1]) + i += 2 + else: + param_vec.append(name_vec[i]) + i += 1 + + param_dict = {param_vec[-1]: value} + for key in reversed(param_vec[:-1]): + param_dict = {key: param_dict} + return param_dict + + +class ParticleReader: + """ + ParticleReader is a utility class for converting Particle objects into dictionaries + suitable for use as model parameter inputs. It supports merging particle-provided + values into a nested default parameter structure, and also delegating conversion + to a user-supplied reader function. + Args: + particle_param_names (list[str]): Flat parameter names expected to be present + on Particle instances (e.g. ["transmission.rate", "recovery.mean"]). + default_params (dict[str, Any] | None): Nested default parameter dictionary + (possibly multi-level) that particle values should override. If provided, + ParticleReader attempts to map each flat particle parameter name to a + corresponding flattened key in this defaults dictionary. Defaults to None. + Behavior: + - When default_params is provided, the constructor flattens it (via + flatten_dict) and attempts to match each particle_param_names entry to one + flattened key by using string suffix matching (flat_name.endswith(param_name)). + If no match is found for a parameter, a ValueError is raised. If multiple + flattened keys match the same parameter name, a ValueError is raised to + avoid ambiguity. + - When no default_params are provided, particle parameters are treated as + already representing the final (flat) names. + """ + + def __init__( + self, + particle_param_names: list[str], + default_params: dict[str, Any] | None = None, + ): + self.default_params = default_params or {} + self.particle_param_names = particle_param_names + self.name_key = self._map_particle_params_to_defaults() + + def _map_particle_params_to_defaults(self) -> dict[str, str]: + """ + Creates a mapping from flat particle parameter names to their corresponding flattened keys in the default_params structure. + This mapping is used to guide the unflattening process when merging particle parameters with defaults. + + Raises: + ValueError: If a particle parameter name cannot be uniquely matched to a flattened key in default_params (no matches or multiple matches). + Returns: + dict[str, str]: A mapping from flat particle parameter names to their corresponding flattened keys in the default_params structure. + """ + if self.default_params: + flat_names = flatten_dict(self.default_params) + name_key = {} + for param_name in self.particle_param_names: + found_match_count = 0 + + for flat_name in flat_names.keys(): + if flat_name == param_name: + name_key.update({param_name: flat_name}) + found_match_count = 1 + break + elif flat_name.endswith("." + param_name): + name_key.update({param_name: flat_name}) + found_match_count += 1 + if found_match_count == 0: + raise ValueError( + f"No matching default parameter found for '{param_name}'" + ) + elif found_match_count > 1: + raise ValueError( + f"Multiple matching default parameters found for '{param_name}'" + ) + else: + name_key = { + param_name: param_name + for param_name in self.particle_param_names + } + return name_key + + def _merge_particle_with_defaults( + self, particle: Particle + ) -> dict[str, Any]: + """ + Merges the parameters from a Particle with the default parameters, using the mapping defined in self.name_key to unflatten particle parameter names into the nested structure of default_params. + + Args: + particle (Particle): The particle whose parameters are being merged with defaults. + Returns: + dict[str, Any]: A mapping from flat particle parameter names to their corresponding + flattened keys in the default_params structure, used to guide the unflattening process. + """ + particle_params = {} + for param_name, value in particle.items(): + unflattened = unflatten_parameter_name( + self.name_key[param_name], value + ) + particle_params = apply_dict_overrides( + particle_params, unflattened + ) + merged_params = apply_dict_overrides( + self.default_params, particle_params + ) + return merged_params + + def read_particle( + self, + particle: Particle, + read_fn: Callable[Concatenate[Particle, ...], dict] | None = None, + **kwargs, + ) -> dict[str, Any]: + """ + Read a Particle into a dictionary using either a user-provided reader or the internal default merger. + + If a callable read_fn is provided, it is invoked to produce the particle dictionary. The method inspects + read_fn's signature and will pass this instance's default_params as the keyword default_params if and only if + the callable either accepts arbitrary keyword arguments (**kwargs) or declares a parameter named "default_params". + All additional keyword arguments passed to this method are forwarded to read_fn. + + If read_fn is None, the particle is processed by the instance method _merge_particle_with_defaults and that + result is returned. + + Args: + particle (Particle): The particle object to read/convert into a dict. + read_fn (Callable[Concatenate[Particle, ...], dict] | None): Optional user-supplied function to read the particle. It should + accept the particle as its first argument and return a dict of attributes. If it accepts a parameter + named "default_params" or accepts arbitrary keyword arguments, default_params from this instance will be + supplied automatically. + **kwargs: Additional keyword arguments forwarded to read_fn when provided. + + Returns: + dict[str, Any]: A dictionary representation of the particle produced either by read_fn or by + _merge_particle_with_defaults. + """ + if read_fn is not None: + # Be sure to pass default params to user-defined read_fn if expected + args = inspect.signature(read_fn).parameters + accepts_default = ( + any( + req.kind == inspect.Parameter.VAR_KEYWORD + for req in args.values() + ) + or "default_params" in args + ) + if accepts_default: + return read_fn( + particle, default_params=self.default_params, **kwargs + ) + else: + return read_fn(particle, **kwargs) + else: + return self._merge_particle_with_defaults(particle) diff --git a/pyproject.toml b/pyproject.toml index fe9d232..e2de5d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "ixa-epi-covid" +name = "ixa_epi_covid" version = "0.1.0" description = "Epidemiological models for COVID-19 developed in ixa" readme = "README.md" @@ -7,7 +7,6 @@ requires-python = ">=3.12" dependencies = [ "census>=0.8.25", "dotenv>=0.9.9", - "geopandas>=1.1.3", "jupyter>=1.1.1", "matplotlib>=3.10.8", "numpy>=2.3.4", @@ -19,14 +18,19 @@ dependencies = [ "scipy>=1.16.3", "seaborn>=0.13.2", "us>=3.2.0", + "cfa-mrp", + "calibrationtools" ] [build-system] -requires = ["uv-build>=0.8.13,<0.9.0"] -build-backend = "uv-build" +requires = ["uv_build>=0.8.13,<0.9.0"] +build-backend = "uv_build" + +[tool.uv.sources] +calibrationtools = { git = "https://github.com/CDCgov/cfa-calibration-tools.git" } [tool.uv] -package = false +package = true [tool.uv.workspace] members = [ diff --git a/scripts/phase_1_calibration.py b/scripts/phase_1_calibration.py new file mode 100644 index 0000000..f7264f4 --- /dev/null +++ b/scripts/phase_1_calibration.py @@ -0,0 +1,296 @@ +import argparse +import json +import os +import pickle +import shutil +import timeit +import warnings +from pathlib import Path + +import create_synthetic_population.run as create_synthetic_population +import polars as pl +from calibrationtools import ( + ABCSampler, + AdaptMultivariateNormalVariance, + IndependentKernels, + MultivariateNormalKernel, + Particle, + SeedKernel, +) +from dotenv import load_dotenv +from particle_reader import ParticleReader +from requests.exceptions import HTTPError +from us import states + +from ixa_epi_covid import ( + CovidModel, + CovidModelConfig, + update_epimodel_output_dir, +) + +# Run-specific parameters declaration ------------------------------------------------------ +TARGET_DATA = pl.DataFrame( + { + "t": [75], + "count": [1], + } +) + + +def main( + config_file: str | Path, + output_dir: str | Path, + max_workers: int = 10, + default_population_size_dev: str = "50_000", +): + # Load environment files, defaults, and setup configurations --------------------- + config = CovidModelConfig( + config_file=config_file, + target_data=TARGET_DATA, + ) + + # Handle synth population file options ---------------------------------------------- + # Users may specify a SYNTH_POP_FILE of their choosing in the .env file, which will then be copied into the local repo input path for running + # Otherwise, the default population file is used, and can be created automatically using the create_synthetic_population package if it does not already exist at the specified path + load_dotenv() + ixa_overrides = { + "max_time": config.target_data["t"][0] + config.tolerance_values[0] + 1 + } + + synth_pop_file_env = os.getenv("SYNTH_POP_FILE") + if synth_pop_file_env and config.use_env_synth_pop_file: + print( + f"Using the synth population file specified in environment variable SYNTH_POP_FILE: {synth_pop_file_env}" + ) + if os.path.exists(synth_pop_file_env): + filename = os.path.basename(synth_pop_file_env) + local_synth_pop_file = Path( + "experiments", "phase1", "input", filename + ) + if not local_synth_pop_file.exists() and synth_pop_file_env != str( + local_synth_pop_file + ): + os.makedirs(local_synth_pop_file.parent, exist_ok=True) + shutil.copyfile(synth_pop_file_env, local_synth_pop_file) + else: + raise FileNotFoundError( + f"Synth population file specified in environment variable SYNTH_POP_FILE not found at path: {synth_pop_file_env}" + ) + ixa_overrides.update( + {"synth_population_file": str(local_synth_pop_file)} + ) + else: + us_state = states.lookup(config.state) + state_abbr = us_state.abbr + input_file = Path( + "input", + f"synth_pop_people_{state_abbr}_{default_population_size_dev}.csv", + ) + ixa_overrides.update({"synth_population_file": str(input_file)}) + print( + f"Creating a default synth population file for {us_state.name}: {input_file}." + ) + if not os.path.exists(input_file): + try: + create_synthetic_population( + [ + "--size", + default_population_size_dev, + "--state", + state_abbr, + "--year", + str(config.year), + ] + ) + except HTTPError: + warnings.warn( + f"Failed to create synthetic population file for {us_state.name} using the year {config.year}. Trying again with the default year 2023." + ) + create_synthetic_population( + [ + "--size", + default_population_size_dev, + "--state", + state_abbr, + ] + ) + + config.update_ixa_params(ixa_overrides) + # Generate MRP defaults ------------------------------------ + mrp_defaults = config.get_mrp_defaults_for_output( + output_dir, + outputs_to_read=["aggregated_deaths_report"], + ) + + # Make the output directory ----------------------------------------------------------------- + # Use the default output directory in config inputs as the base output directory for all outputs + # Create the output directory, handling the case where it already exists based on the force_overwrite flag + if os.path.exists(output_dir): + if config.force_overwrite: + shutil.rmtree(str(output_dir)) + else: + raise FileExistsError( + f"Output directory {output_dir} already exists and force_overwrite is set to False." + ) + + Path(output_dir).mkdir(parents=True, exist_ok=False) + + # Create the priors and perturbation kernels ----------------------------------------------- + + with open(config.priors_file, "r") as f: + priors = json.load(f) + + P: dict[dict, dict] = priors + K = IndependentKernels( + [ + MultivariateNormalKernel(list(P["priors"].keys())), + SeedKernel("seed"), + ] + ) + + # Model Particle Reader setup ------------------------------------------------------------- + + reader = ParticleReader( + particle_param_names=list(P["priors"].keys()) + ["seed"], + default_params=mrp_defaults, + ) + + def particles_to_params( + particle: Particle, reader: ParticleReader = reader + ): + particle_params = reader.read_particle(particle=particle) + # Make particle-specific output directory and update the output path in the parameters accordingly + output_dir = Path( + particle_params["config_inputs"]["output_dir"], + "simulations", + str( + particle_params["ixa_inputs"]["epimodel.GlobalParams"]["seed"] + ), + ) + output_dir.mkdir(parents=True, exist_ok=False) + + updated_params = update_epimodel_output_dir( + particle_params, output_dir + ) + return updated_params + + # Define the distance function ---------------------------------------------------------------- + + def outputs_to_distance( + model_output: dict[str, pl.DataFrame], target_data: pl.DataFrame + ) -> float: + """ + Calculates the absoluter error between the observed time of the first death in the model and the reported time of the first death in the data + and then adds a penalty for the number of deaths reported on that first day over one. + + Args: + model_output (dict[str, pl.DataFrame]): A dictionary containing the model outputs as Polars DataFrames. + target_data (pl.DataFrame): The target time of the first death to compare against in column 't' and the number of deaths in column 'count'. + Returns: + float: The calculated distance. + """ + first_death_observed = ( + model_output["aggregated_deaths_report"] + .filter(pl.col("count") > 0) + .filter(pl.col("t_upper") == pl.min("t_upper")) + ) + if first_death_observed.height > 0: + return abs( + target_data["t"][0] - first_death_observed.item(0, "t_upper") + ) + (first_death_observed.height - target_data["count"][0]) + else: + return 1000.0 + + # Initialize the model calibration routine ------------------------------------------------------- + + model = CovidModel() + + sampler = ABCSampler( + generation_particle_count=config.generation_particle_count, + tolerance_values=config.tolerance_values, + priors=P, + perturbation_kernel=K, + particles_to_params=particles_to_params, + variance_adapter=AdaptMultivariateNormalVariance(), + outputs_to_distance=outputs_to_distance, + target_data=config.target_data, + model_runner=model, + entropy=0x2D845A9183A835EC4A777F6C7403A6D0, + ) + + # Execute the sampler ---------------------------------------------------------------------- + start = timeit.default_timer() # Start the timer + with warnings.catch_warnings() as _: + warnings.simplefilter("ignore", category=UserWarning) + results = sampler.run_parallel(max_workers=max_workers) + finish = timeit.default_timer() # Stop the timer + print(f"Calibration completed in {finish - start:.2f} seconds.") + print(results) + + # Save results and print diagnostics --------------------------------------------------------- + diagnostics = results.get_diagnostics() + + print("\nQuantiles for each parameter:") + print( + json.dumps( + { + k1: {k2: float(v2) for k2, v2 in v1.items()} + for k1, v1 in diagnostics["quantiles"].items() + }, + indent=4, + ) + ) + + print("\nCorrelation matrix:") + print(diagnostics["correlation_matrix"]) + + with open( + Path(output_dir, "results.pkl"), + "wb", + ) as fp: + pickle.dump(results, fp) + with open( + Path(output_dir, "config.pkl"), + "wb", + ) as fp: + pickle.dump(config, fp) + + +parser = argparse.ArgumentParser( + description="Run phase 1 calibration for ixa-epi-covid." +) +parser.add_argument( + "--config_file", + "-c", + type=str, + help="Path to the configuration file for phase 1 calibration.", +) +parser.add_argument( + "--output-dir", + "-o", + type=str, + default="experiments/phase1/calibration/output", + help="Path to the output directory where results will be saved.", +) +parser.add_argument( + "--max-workers", + type=int, + default=10, + help="The maximum number of worker processes to use for parallel execution.", +) + +parser.add_argument( + "--default-population-size-dev", + type=str, + default="50_000", + help="The default population size to use for synthetic population generation in development and testing. This is used when a synth population file is not provided via the SYNTH_POP_FILE environment variable and the script needs to generate a synthetic population file automatically. The value should be a string with underscores as thousand separators, e.g. '50_000' for fifty thousand.", +) + +if __name__ == "__main__": + args = parser.parse_args() + main( + config_file=args.config_file, + output_dir=args.output_dir, + max_workers=args.max_workers, + default_population_size_dev=args.default_population_size_dev, + ) diff --git a/scripts/phase_1_projection.py b/scripts/phase_1_projection.py new file mode 100644 index 0000000..d770ed8 --- /dev/null +++ b/scripts/phase_1_projection.py @@ -0,0 +1,120 @@ +import asyncio +import pickle +from pathlib import Path + +from calibrationtools import CalibrationResults, Particle +from particle_reader import ParticleReader + +from ixa_epi_covid import CovidModel, update_epimodel_output_dir +from ixa_epi_covid.config_parser import CovidModelConfig + +# Run specific parameters declaration -------------------------------------------------------------------------------- +rerun_particle_count = 10 + +# Load the calibration -------------------------------------------------------------------------------- +calibration_output_dir = Path("experiments", "phase1", "calibration", "output") +with open(calibration_output_dir / "config.pkl", "rb") as f: + config: CovidModelConfig = pickle.load(f) + +with open(calibration_output_dir / "results.pkl", "rb") as f: + results: CalibrationResults = pickle.load(f) + +# Change parameters for projection -------------------------------------------------------------------------------- +ixa_overrides = { + "first_death_terminates_run": False, + "prevalence_report": {"write": True}, + "max_time": 150.0, # 3.5 months from the first reported death in Indiana +} + +config.update_ixa_params(ixa_overrides) + +mrp_defaults = config.get_mrp_defaults_for_output( + output_dir=Path("experiments", "phase1", "projection", "output"), + outputs_to_read=[ + "prevalence_report", + "aggregated_deaths_report", + "imported_cases_timeseries", + ], +) + +# Re-run particles with new parameters -------------------------------------------------------------------------------- +particles = results.sample_posterior_particles(n=rerun_particle_count) +model = CovidModel() + +# Model Particle Reader setup ------------------------------------------------------------- + +reader = ParticleReader( + particle_param_names=results.fitted_params + ["seed"], + default_params=mrp_defaults, +) + + +def particles_to_params(particle: Particle, reader: ParticleReader = reader): + particle_params = reader.read_particle(particle=particle) + # Make particle-specific output directory and update the output path in the parameters accordingly + output_dir = Path( + particle_params["config_inputs"]["output_dir"], + "simulations", + str(particle_params["ixa_inputs"]["epimodel.GlobalParams"]["seed"]), + ) + output_dir.mkdir(parents=True, exist_ok=False) + + updated_params = update_epimodel_output_dir(particle_params, output_dir) + return updated_params + + +def run_particle(particle: Particle): + particle_params = particles_to_params(particle=particle) + model.simulate(particle_params) + + +async def simulate_particles(particles: list[Particle]): + description = f"Projecting from posterior " + reporter + request + with reporter.create_weight_progress() as progress: + handle = self.config.reporter.start_collection_task( + progress=progress, + description=description, + total=self.config.generation_particle_count, + ) + assert request.executor is not None + + loop = asyncio.get_running_loop() + worker = partial( + run_particle, + particle_kwargs=request.particle_kwargs, + ) + particle_chunks = [ + proposed_particles[index : index + request.chunksize] + for index in range(0, len(proposed_particles), request.chunksize) + ] + tasks = [] + for chunk in particle_chunks: + task = loop.run_in_executor(request.executor, worker, chunk) + tasks.append((task, chunk)) + + attempts = 0 + try: + for task, chunk in tasks: + chunk_results = await task + attempts += self._accept_particle_batch( + generation=request.generation, + proposed_population=state.proposed_population, + proposed_particles=chunk, + errs=chunk_results, + ) + if ( + state.proposed_population.size + >= self.config.generation_particle_count + ): + break + finally: + for task, _ in tasks: + task.cancel() + + generation_stats = self._build_generation_stats( + request=request, + state=state, + ) + reporter.print_timing_summary() diff --git a/src/abort_run.rs b/src/abort_run.rs new file mode 100644 index 0000000..712738d --- /dev/null +++ b/src/abort_run.rs @@ -0,0 +1,24 @@ +use crate::{ + parameters::{ContextParametersExt, Params}, + population_loader::Person, + symptom_status_manager::SymptomStatus, +}; +use ixa::prelude::*; + +pub fn init(context: &mut Context) { + let &Params { + first_death_terminates_run, + .. + } = context.get_params(); + if first_death_terminates_run { + context.subscribe_to_event::>( + move |context, event| { + if event.current == SymptomStatus::Dead { + context.add_plan(context.get_current_time() + 1.0, move |context| { + context.shutdown(); + }); + } + }, + ); + } +} diff --git a/src/ixa_epi_covid/__init__.py b/src/ixa_epi_covid/__init__.py new file mode 100644 index 0000000..4fb24cd --- /dev/null +++ b/src/ixa_epi_covid/__init__.py @@ -0,0 +1,4 @@ +from .config_parser import CovidModelConfig, update_epimodel_output_dir +from .covid_model import CovidModel + +__all__ = ["CovidModel", "CovidModelConfig", "update_epimodel_output_dir"] diff --git a/src/ixa_epi_covid/config_parser.py b/src/ixa_epi_covid/config_parser.py new file mode 100644 index 0000000..c9ec7a3 --- /dev/null +++ b/src/ixa_epi_covid/config_parser.py @@ -0,0 +1,138 @@ +import json +from pathlib import Path +from typing import Any + +import yaml +from mrp.api import apply_dict_overrides + + +class CovidModelConfig: + """ + A class to handle the configuration for the COVID model calibration process. It reads a YAML config file, validates it, and provides methods to access the configuration parameters and generate default parameters for the MRP model based on the configuration. + The initialization also handles the generation of the default ixa parameters and some convenience methods for + + Args: + config_file (str | Path): The path to the YAML configuration file. + ixa_overrides (dict, optional): A dictionary of overrides for the ixa parameters. Defaults to an empty dictionary. + **kwargs: Additional keyword arguments that can be used to override values in the configuration file. + """ + + def __init__( + self, config_file: str | Path, ixa_overrides: dict = {}, **kwargs + ): + with open(config_file, "r") as f: + self.config = yaml.safe_load(f) + + self.config = apply_dict_overrides(self.config, kwargs) + self._validate_config() + + self.config_file = config_file + self.ixa_default_params_file = self.config["ixa_default_params_file"] + + with open(self.ixa_default_params_file, "r") as f: + self.ixa_defaults = json.load(f) + + if ixa_overrides: + self.update_ixa_params(ixa_overrides) + + # Set attributes from config for easy access + for k in self.config.keys(): + self.__setattr__(k, self.config[k]) + + @property + def required_keys(self) -> set[str]: + return { + "exe_file", + "force_overwrite", + "state", + "year", + "symptomatic_reporting_prob", + "ixa_default_params_file", + "priors_file", + "generation_particle_count", + "tolerance_values", + "target_data", + "use_env_synth_pop_file", + } + + def get_mrp_defaults_for_output( + self, output_dir: str | Path, outputs_to_read: list[str] + ) -> dict[str, Any]: + """ + Generates the default parameters for the ixa-epi-covid MRP model based on the configuration and the specified output directory and outputs to read. It also updates the output directory in the epimodel parameters to point to the particle-specific output directory. + + Args: + output_dir (str | Path): The path to the specified output directory. + outputs_to_read (list[str]): A list of outputs to read to data from the model output products printed to disk. + Returns: + dict[str, Any]: The default parameters for the MRP model, with the output directory in the epimodel parameters updated to the user-specified output directory. + """ + params = { + "ixa_inputs": self.ixa_defaults, + "config_inputs": { + "exe_file": self.config["exe_file"], + "force_overwrite": self.config["force_overwrite"], + "outputs_to_read": outputs_to_read, + }, + "importation_inputs": { + "state": self.config["state"], + "year": self.config["year"], + "symptomatic_reporting_prob": self.config[ + "symptomatic_reporting_prob" + ], + }, + } + return update_epimodel_output_dir(params, output_dir) + + def update_ixa_params(self, ixa_overrides: dict[str, Any]): + """ + Updates the ixa parameters in the configuration with any provided overrides. This allows for dynamic updates to the ixa parameters without needing to modify the default parameters file directly. + Args: + ixa_overrides (dict[str, Any]): A dictionary of overrides for the ixa parameters, which do not require epimodel.GlobalParams but may include it as a header to be skipped. + """ + if "epimodel.GlobalParams" in ixa_overrides: + ixa_overrides = ixa_overrides["epimodel.GlobalParams"] + self.ixa_defaults = apply_dict_overrides( + self.ixa_defaults, {"epimodel.GlobalParams": ixa_overrides} + ) + + def _validate_config(self): + """ + Validates that all required keys are present in the configuration. + Raises: + ValueError: if any required keys are missing. + """ + missing_keys = self.required_keys - set(self.config.keys()) + if missing_keys: + raise ValueError( + f"Missing required keys in config: {missing_keys}" + ) + + +def update_epimodel_output_dir( + particle_params: dict[str, Any], output_dir: str | Path +) -> dict[str, Any]: + """ + Updates the output directory in the epimodel parameters to point to the particle-specific output directory. + Args: + particle_params (dict[str, Any]): The parameters for a specific particle, which includes the default parameters merged with the particle-specific parameters. + output_dir (str | Path): The path to the particle-specific output directory. + Returns: + dict[str, Any]: The updated parameters with the output directory in the epimodel parameters updated to the particle-specific output directory. + """ + params = apply_dict_overrides( + particle_params, + { + "config_inputs": {"output_dir": str(output_dir)}, + "ixa_inputs": { + "epimodel.GlobalParams": { + "imported_cases_timeseries": { + "filename": str( + Path(output_dir, "imported_cases_timeseries.csv") + ) + } + } + }, + }, + ) + return params diff --git a/src/ixa_epi_covid/covid_model.py b/src/ixa_epi_covid/covid_model.py new file mode 100644 index 0000000..2e2241d --- /dev/null +++ b/src/ixa_epi_covid/covid_model.py @@ -0,0 +1,119 @@ +import json +import subprocess +from pathlib import Path +from typing import Any + +import polars as pl +from importation import ImportationModel, get_linelist_data +from mrp import MRPModel + + +class CovidModel(MRPModel): + def run(self): + pass + + @staticmethod + def simulate(model_inputs: dict[str, Any]) -> pl.DataFrame: + ixa_inputs = model_inputs["ixa_inputs"] + config_inputs = model_inputs["config_inputs"] + importation_inputs = model_inputs["importation_inputs"] + + # Write the ixa inputs to the specified file location so that downstream errors can be re-tried + input_file_path = Path(config_inputs["output_dir"], "input.json") + ixa_inputs["epimodel.GlobalParams"]["seed"] = int( + ixa_inputs["epimodel.GlobalParams"]["seed"] + ) + with open(input_file_path, "w") as f: + json.dump(ixa_inputs, f, indent=4) + + ## Generate the importation time series from relevant ixa parameters -------------- + # Calculate the probability that an inidivdual will die given that they are symptomatic + case_fatality_ratio = ( + ixa_inputs["epimodel.GlobalParams"][ + "probability_severe_given_mild" + ] + * ixa_inputs["epimodel.GlobalParams"][ + "probability_critical_given_severe" + ] + * ixa_inputs["epimodel.GlobalParams"][ + "probability_dead_given_critical" + ] + ) + + proportion_asymptomatic = ixa_inputs["epimodel.GlobalParams"][ + "probability_mild_given_infect" + ] + symptomatic_reporting_prob = model_inputs["importation_inputs"][ + "symptomatic_reporting_prob" + ] + + importation_params = { + "symptomatic_reporting_prob": symptomatic_reporting_prob, + "case_fatality_ratio": case_fatality_ratio, + "proportion_asymptomatic": proportion_asymptomatic, + } + + importation_filename = ixa_inputs["epimodel.GlobalParams"][ + "imported_cases_timeseries" + ]["filename"] + + # Create the model object + importation_model = ImportationModel( + data=get_linelist_data(), + parameters=importation_params, + national_model="multinomial", + state_model="proportional", + seed=ixa_inputs["epimodel.GlobalParams"][ + "seed" + ], # Optional argument to set the model seed + ) + + # Generate timeseries data from the model object for state and optional year + timeseries_data = importation_model.sample_state_importation_incidence( + state=importation_inputs["state"], + year=importation_inputs.get("year"), + ) + + # Store timeseries at appropriate location accessible to ixa + timeseries_data.write_csv(importation_filename) + + ## Run the ixa transmission model ------------------------ + # Write command to call the ixa model binaries + cmd = [ + config_inputs["exe_file"], + "--config", + str(input_file_path), + "--output", + config_inputs["output_dir"], + "--force-overwrite", + "--no-stats", + ] + + try: + subprocess.run(cmd, capture_output=True, check=True) + except subprocess.CalledProcessError as e: + print("Error running the ixa model:") + print("Command:", " ".join(cmd)) + print("Return code:", e.returncode) + print("Standard error:", e.stderr) + raise e + + # Read the model incidence report from the specified location and return as a DataFrame + outputs = {} + for output in config_inputs["outputs_to_read"]: + fp = ixa_inputs["epimodel.GlobalParams"][output]["filename"] + if Path(config_inputs["output_dir"], fp).exists(): + outputs.update( + { + output: pl.read_csv( + Path(config_inputs["output_dir"], fp) + ) + } + ) + elif Path(fp).exists(): + outputs.update({output: pl.read_csv(Path(fp))}) + else: + raise FileNotFoundError( + f"Expected output file {fp} not found. Looked in {config_inputs['output_dir']}" + ) + return outputs diff --git a/src/lib.rs b/src/lib.rs index 77b973f..a902bc2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ +pub mod abort_run; pub mod error; pub mod infection_importation; pub mod infection_propagation_loop; diff --git a/src/model.rs b/src/model.rs index 68f5953..a8af56e 100644 --- a/src/model.rs +++ b/src/model.rs @@ -3,8 +3,8 @@ use std::path::PathBuf; use ixa::{ExecutionPhase, prelude::*}; use crate::{ - error::ModelError, infection_importation, infection_propagation_loop, parameters, - population_loader, reports, settings, symptom_status_manager, + abort_run, error::ModelError, infection_importation, infection_propagation_loop, + parameters, population_loader, reports, settings, symptom_status_manager, }; pub fn initialize_model( @@ -38,6 +38,8 @@ pub fn initialize_model( infection_importation::init(context)?; info!("Infection importation initialized"); reports::init(context)?; + info!("Reports initialized"); + abort_run::init(context); info!("Setup complete"); Ok(()) diff --git a/src/parameters.rs b/src/parameters.rs index a008ee3..6caa37e 100644 --- a/src/parameters.rs +++ b/src/parameters.rs @@ -74,6 +74,10 @@ pub struct Params { pub incidence_report: ReportParams, /// Transmission report with a name required pub transmission_report: ReportParams, + /// Aggregated incident deaths report with a period and name required + pub aggregated_deaths_report: ReportParams, + /// Terminate run on first observed death + pub first_death_terminates_run: bool, } #[allow(clippy::too_many_lines)] @@ -367,6 +371,12 @@ impl Default for Params { filename: None, period: None, }, + aggregated_deaths_report: ReportParams { + write: false, + filename: None, + period: None, + }, + first_death_terminates_run: false, } } } diff --git a/src/reports/aggregated_deaths_report.rs b/src/reports/aggregated_deaths_report.rs new file mode 100644 index 0000000..2847d38 --- /dev/null +++ b/src/reports/aggregated_deaths_report.rs @@ -0,0 +1,160 @@ +use crate::{error::ModelError, population_loader::Person, symptom_status_manager::SymptomStatus}; +use ixa::{ExecutionPhase, prelude::*}; +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)] +struct AggregatedDeathsIncidenceReport { + t_upper: f64, + count: u32, +} + +define_report!(AggregatedDeathsIncidenceReport); + +struct PropertyReportDataContainer { + death_status_change: u32, +} + +define_data_plugin!( + PropertyReportDataPlugin, + PropertyReportDataContainer, + PropertyReportDataContainer { + death_status_change: 0 + } +); + +fn update_death_incidence( + context: &mut Context, + event: PropertyChangeEvent, +) { + if event.current == SymptomStatus::Dead { + let report_container_mut = context.get_data_mut(PropertyReportDataPlugin); + report_container_mut.death_status_change += 1; + } +} + +fn reset_incidence_map(context: &mut Context) { + let report_container = context.get_data_mut(PropertyReportDataPlugin); + report_container.death_status_change = 0; +} + +fn send_incidence_counts(context: &mut Context) { + let report_container = context.get_data(PropertyReportDataPlugin); + let t_upper = context.get_current_time(); + context.send_report(AggregatedDeathsIncidenceReport { + t_upper, + count: report_container.death_status_change, + }); + reset_incidence_map(context); +} + +/// # Errors +/// +/// Will return `ModelError` if the report cannot be added +/// +/// # Panics +/// +/// Will panic if an age group cannot be parsed from the tabulated string +pub fn init(context: &mut Context, file_name: &str, period: f64) -> Result<(), ModelError> { + context.add_report::(file_name)?; + + context.subscribe_to_event::>(|context, event| { + update_death_incidence(context, event); + }); + + context.add_periodic_plan_with_phase( + period, + move |context: &mut Context| { + send_incidence_counts(context); + }, + ExecutionPhase::Last, + ); + + Ok(()) +} + +#[cfg(test)] +mod test { + use crate::{ + parameters::{ContextParametersExt, GlobalParams, Params}, + population_loader::{Age, Person, PersonId}, + rate_fns::load_rate_fns, + reports::ReportParams, + symptom_status_manager::SymptomStatus, + }; + use ixa::{csv, prelude::*}; + use std::path::PathBuf; + use tempfile::tempdir; + + fn setup_context_with_report(aggregated_deaths_report: ReportParams) -> Context { + let mut context = Context::new(); + context + .set_global_property_value( + GlobalParams, + Params { + max_time: 3.0, + aggregated_deaths_report, + ..Default::default() + }, + ) + .unwrap(); + context.init_random(context.get_params().seed); + load_rate_fns(&mut context).unwrap(); + context + } + + #[test] + #[allow(clippy::float_cmp)] + fn test_generate_incidence_report() { + let mut context = setup_context_with_report(ReportParams { + write: true, + filename: Some("output.csv".to_string()), + period: Some(2.0), + }); + + let temp_dir = tempdir().unwrap(); + let path = PathBuf::from(&temp_dir.path()); + let config = context.report_options(); + config.directory(path.clone()); + crate::reports::init(&mut context).unwrap(); + + let _survivor: PersonId = context.add_entity((Age(42),)).unwrap(); + let target: PersonId = context.add_entity((Age(43),)).unwrap(); + let time_of_death = 1.0; + + context.add_plan(time_of_death, move |context| { + context.set_property::(target, SymptomStatus::Dead); + }); + context.execute(); + + let Params { + aggregated_deaths_report, + .. + } = context.get_params().clone(); + let file_path = if let Some(name) = aggregated_deaths_report.filename { + path.join(name) + } else { + panic!("No report name specified"); + }; + + assert!(file_path.exists()); + std::mem::drop(context); + + let mut reader = csv::Reader::from_path(file_path).unwrap(); + let mut event_count = 0; + let mut line_count = 0; + for result in reader.deserialize() { + let record: crate::reports::aggregated_deaths_report::AggregatedDeathsIncidenceReport = + result.unwrap(); + line_count += 1; + if record.t_upper == 2.0 { + assert_eq!(record.count, 1); + event_count += 1; + } else { + assert_eq!(record.count, 0); + } + } + + assert!(line_count > event_count); + assert_eq!(event_count, 1); + } +} diff --git a/src/reports/mod.rs b/src/reports/mod.rs index 960b3a7..e6941ba 100644 --- a/src/reports/mod.rs +++ b/src/reports/mod.rs @@ -5,6 +5,7 @@ use crate::{ use ixa::prelude::*; use serde::{Deserialize, Serialize}; +pub mod aggregated_deaths_report; pub mod incidence_report; pub mod prevalence_report; pub mod transmission_report; @@ -60,6 +61,7 @@ pub fn init(context: &mut Context) -> Result<(), ModelError> { prevalence_report, incidence_report, transmission_report, + aggregated_deaths_report, .. } = context.get_params().clone(); let mut report_count = 0; @@ -79,6 +81,11 @@ pub fn init(context: &mut Context) -> Result<(), ModelError> { info!("Generating the transmission report."); report_count += 1; } + if let Some((name, period)) = get_period_report_name(&aggregated_deaths_report)? { + aggregated_deaths_report::init(context, name, period)?; + info!("Generating the aggregated deaths incidence report."); + report_count += 1; + } info!("Generating {report_count} report(s) in total."); @@ -159,7 +166,13 @@ mod test { "transmission_report": { "write": true, "filename": "transmission.csv" - } + }, + "aggregated_deaths_report": { + "write": true, + "filename": "aggregated_deaths.csv", + "period": 3.0 + }, + "first_death_terminates_run": false } } "#; @@ -168,6 +181,7 @@ mod test { prevalence_report, incidence_report, transmission_report, + aggregated_deaths_report, .. } = context.get_params().clone(); @@ -188,6 +202,13 @@ mod test { Some("transmission.csv".to_string()) ); assert_eq!(transmission_report.period, None); + + assert!(aggregated_deaths_report.write); + assert_eq!( + aggregated_deaths_report.filename, + Some("aggregated_deaths.csv".to_string()) + ); + assert_eq!(aggregated_deaths_report.period, Some(3.0)); } #[test] diff --git a/tests/test_ixa_epi_covid.py b/tests/test_ixa_epi_covid.py new file mode 100644 index 0000000..d3a9c38 --- /dev/null +++ b/tests/test_ixa_epi_covid.py @@ -0,0 +1,238 @@ +import tempfile + +import pytest +import yaml + +from ixa_epi_covid import CovidModelConfig, update_epimodel_output_dir + + +@pytest.fixture +def valid_config(): + config = { + "exe_file": "path/to/exe", + "force_overwrite": True, + "state": "California", + "year": 2020, + "symptomatic_reporting_prob": 0.5, + "ixa_default_params_file": "./input/input.json", + "priors_file": "./some_path/priors.json", + "generation_particle_count": 100, + "tolerance_values": [20.0, 15.0, 10.0], + "target_data": {"t": [75], "count": [1]}, + "use_env_synth_pop_file": False, + } + return config + + +@pytest.fixture +def invalid_config(): + # Missing required keys + config = { + "exe_file": "path/to/exe", + "force_overwrite": True, + # Missing state, year, symptomatic_reporting_prob, etc. + } + return config + + +def test_update_epimodel_output_dir(): + # Given + particle_params = { + "ixa_inputs": { + "epimodel.GlobalParams": { + "imported_cases_timeseries": {"filename": "default/filename"} + } + }, + "config_inputs": { + "exe_file": "path/to/exe", + "force_overwrite": True, + "outputs_to_read": ["output1", "output2"], + "output_dir": "default/output/dir", + }, + "importation_inputs": { + "state": "California", + "year": 2020, + "symptomatic_reporting_prob": 0.5, + }, + } + output_dir = "particle/specific/output/dir" + + # When + updated_params = update_epimodel_output_dir(particle_params, output_dir) + + # Then + assert updated_params["config_inputs"]["output_dir"] == output_dir + assert ( + updated_params["ixa_inputs"]["epimodel.GlobalParams"][ + "imported_cases_timeseries" + ]["filename"] + == "particle/specific/output/dir/imported_cases_timeseries.csv" + ) + + # Assert that other parameters are unchanged + assert updated_params["importation_inputs"]["state"] == "California" + assert updated_params["config_inputs"]["outputs_to_read"] == [ + "output1", + "output2", + ] + + +def test_covid_model_config_validation(valid_config): + with tempfile.NamedTemporaryFile( + mode="w", suffix=".yaml", delete=False + ) as tmp: + yaml.dump(valid_config, tmp) + tmp_path = tmp.name + + # When / Then + try: + config = CovidModelConfig(tmp_path) + except ValueError: + pytest.fail( + "CovidModelConfig raised ValueError unexpectedly with valid config!" + ) + + assert config.exe_file == valid_config["exe_file"] + assert config.force_overwrite == valid_config["force_overwrite"] + assert config.state == valid_config["state"] + assert config.year == valid_config["year"] + assert ( + config.symptomatic_reporting_prob + == valid_config["symptomatic_reporting_prob"] + ) + assert ( + config.ixa_default_params_file + == valid_config["ixa_default_params_file"] + ) + assert config.priors_file == valid_config["priors_file"] + assert ( + config.generation_particle_count + == valid_config["generation_particle_count"] + ) + assert config.tolerance_values == valid_config["tolerance_values"] + assert config.target_data == valid_config["target_data"] + assert ( + config.use_env_synth_pop_file == valid_config["use_env_synth_pop_file"] + ) + + +def test_covid_model_config_validation_invalid(invalid_config): + # Test missing keys + invalid_config = { + "exe_file": "path/to/exe", + "force_overwrite": True, + # Missing state, year, symptomatic_reporting_prob, etc. + } + with tempfile.NamedTemporaryFile( + mode="w", suffix=".yaml", delete=False + ) as tmp: + yaml.dump(invalid_config, tmp) + invalid_tmp_path = tmp.name + with pytest.raises(ValueError): + CovidModelConfig(invalid_tmp_path) + + +def test_covid_model_config_kwargs_updates(valid_config): + with tempfile.NamedTemporaryFile( + mode="w", suffix=".yaml", delete=False + ) as tmp: + yaml.dump(valid_config, tmp) + tmp_path = tmp.name + + config = CovidModelConfig(tmp_path, state="Indiana") + + assert config.state == "Indiana" + assert config.year == valid_config["year"] # Unchanged + + +def test_covid_model_config_kwargs_supplements_invalid(invalid_config): + # Test missing keys + invalid_config = { + "exe_file": "path/to/exe", + "force_overwrite": True, + # Missing state, year, symptomatic_reporting_prob, etc. + } + with tempfile.NamedTemporaryFile( + mode="w", suffix=".yaml", delete=False + ) as tmp: + yaml.dump(invalid_config, tmp) + invalid_tmp_path = tmp.name + + try: + config = CovidModelConfig( + invalid_tmp_path, + state="Indiana", + year=2020, + symptomatic_reporting_prob=0.5, + ixa_default_params_file="./input/input.json", + priors_file="./some_path/priors.json", + generation_particle_count=100, + tolerance_values=[20.0, 15.0, 10.0], + target_data={"t": [75], "count": [1]}, + use_env_synth_pop_file=False, + ) + except ValueError: + pytest.fail( + "CovidModelConfig raised ValueError unexpectedly when kwargs supplemented missing required keys!" + ) + + assert config.state == "Indiana" + assert config.year == 2020 + assert config.symptomatic_reporting_prob == 0.5 + assert config.ixa_default_params_file == "./input/input.json" + assert config.priors_file == "./some_path/priors.json" + assert config.generation_particle_count == 100 + assert config.tolerance_values == [20.0, 15.0, 10.0] + assert config.target_data == {"t": [75], "count": [1]} + assert not config.use_env_synth_pop_file + + +def test_covid_model_config_kwargs_supplements_invalid_missing_keys( + invalid_config, +): + with tempfile.NamedTemporaryFile( + mode="w", suffix=".yaml", delete=False + ) as tmp: + yaml.dump(invalid_config, tmp) + invalid_tmp_path = tmp.name + + with pytest.raises(ValueError): + CovidModelConfig( + invalid_tmp_path, + year=2020, + symptomatic_reporting_prob=0.5, + ixa_default_params_file="./input/input.json", + priors_file="./some_path/priors.json", + generation_particle_count=100, + tolerance_values=[20.0, 15.0, 10.0], + target_data={"t": [75], "count": [1]}, + use_env_synth_pop_file=False, + ) + + +def test_update_ixa_params(valid_config): + with tempfile.NamedTemporaryFile( + mode="w", suffix=".yaml", delete=False + ) as tmp: + yaml.dump(valid_config, tmp) + tmp_path = tmp.name + + config = CovidModelConfig(tmp_path) + ixa_defaults = config.ixa_defaults.copy() + ixa_overrides = { + "imported_cases_timeseries": {"filename": "overridden/filename"} + } + config.update_ixa_params(ixa_overrides) + + assert ( + config.ixa_defaults["epimodel.GlobalParams"][ + "imported_cases_timeseries" + ]["filename"] + == "overridden/filename" + ) + assert ( + ixa_defaults["epimodel.GlobalParams"]["prevalence_report"]["filename"] + == config.ixa_defaults["epimodel.GlobalParams"]["prevalence_report"][ + "filename" + ] + ) diff --git a/uv.lock b/uv.lock index 835be49..174d392 100644 --- a/uv.lock +++ b/uv.lock @@ -12,9 +12,10 @@ resolution-markers = [ [manifest] members = [ + "create-synthetic-population", "importation", "ixa-epi-covid", - "ixa-epi-utils", + "particle-reader", ] [[package]] @@ -161,6 +162,19 @@ css = [ { name = "tinycss2" }, ] +[[package]] +name = "calibrationtools" +version = "0.1.1" +source = { git = "https://github.com/CDCgov/cfa-calibration-tools.git#266353f15e6d6a812e51b8b7df47f21e4d9e508f" } +dependencies = [ + { name = "cfa-mrp" }, + { name = "jsonschema" }, + { name = "numpy" }, + { name = "pyarrow" }, + { name = "rich" }, + { name = "scipy" }, +] + [[package]] name = "census" version = "0.8.25" @@ -182,6 +196,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, ] +[[package]] +name = "cfa-mrp" +version = "0.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/fb/3ac10fe3d102f7042af0d79c6573b792135d11e0737afb2d91969ce70dab/cfa_mrp-0.0.4.tar.gz", hash = "sha256:dd62717720d1b7f62c7f86917f4e1457adcbaf79ef5672e374ce8907ba8398ae", size = 118116, upload-time = "2026-03-04T15:31:01.032Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/64/d0a1ab7ef7e5b9eded57ea0e3b763c117568135a1c59e2c723e1c03889b4/cfa_mrp-0.0.4-py3-none-any.whl", hash = "sha256:e208abdb802ab239b9d5012aa389e2f4e1e113a76d3cf70c0976bbe3a61a84b4", size = 20206, upload-time = "2026-03-04T15:30:59.576Z" }, +] + [[package]] name = "cffi" version = "2.0.0" @@ -380,6 +406,23 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, ] +[[package]] +name = "create-synthetic-population" +version = "0.1.0" +source = { editable = "packages/create_synthetic_population" } +dependencies = [ + { name = "geopandas" }, + { name = "numpy" }, + { name = "polars" }, +] + +[package.metadata] +requires-dist = [ + { name = "geopandas", specifier = ">=1.1.3" }, + { name = "numpy", specifier = ">=2.3.4" }, + { name = "polars", specifier = ">=1.35.1" }, +] + [[package]] name = "cycler" version = "0.12.1" @@ -682,11 +725,12 @@ wheels = [ [[package]] name = "ixa-epi-covid" version = "0.1.0" -source = { virtual = "." } +source = { editable = "." } dependencies = [ + { name = "calibrationtools" }, { name = "census" }, + { name = "cfa-mrp" }, { name = "dotenv" }, - { name = "geopandas" }, { name = "jupyter" }, { name = "matplotlib" }, { name = "numpy" }, @@ -702,9 +746,10 @@ dependencies = [ [package.metadata] requires-dist = [ + { name = "calibrationtools", git = "https://github.com/CDCgov/cfa-calibration-tools.git" }, { name = "census", specifier = ">=0.8.25" }, + { name = "cfa-mrp" }, { name = "dotenv", specifier = ">=0.9.9" }, - { name = "geopandas", specifier = ">=1.1.3" }, { name = "jupyter", specifier = ">=1.1.1" }, { name = "matplotlib", specifier = ">=3.10.8" }, { name = "numpy", specifier = ">=2.3.4" }, @@ -718,21 +763,6 @@ requires-dist = [ { name = "us", specifier = ">=3.2.0" }, ] -[[package]] -name = "ixa-epi-utils" -version = "0.1.0" -source = { editable = "packages/ixa-epi-utils" } -dependencies = [ - { name = "numpy" }, - { name = "polars" }, -] - -[package.metadata] -requires-dist = [ - { name = "numpy", specifier = ">=2.3.4" }, - { name = "polars", specifier = ">=1.35.1" }, -] - [[package]] name = "jedi" version = "0.19.2" @@ -1132,6 +1162,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151, upload-time = "2025-10-27T18:25:54.882Z" }, ] +[[package]] +name = "markdown-it-py" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, +] + [[package]] name = "markupsafe" version = "3.0.3" @@ -1261,6 +1303,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516, upload-time = "2025-10-23T09:00:20.675Z" }, ] +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + [[package]] name = "mistune" version = "3.2.0" @@ -1364,63 +1415,63 @@ wheels = [ [[package]] name = "numpy" -version = "2.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/24/62/ae72ff66c0f1fd959925b4c11f8c2dea61f47f6acaea75a08512cdfe3fed/numpy-2.4.1.tar.gz", hash = "sha256:a1ceafc5042451a858231588a104093474c6a5c57dcc724841f5c888d237d690", size = 20721320, upload-time = "2026-01-10T06:44:59.619Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/7f/ec53e32bf10c813604edf07a3682616bd931d026fcde7b6d13195dfb684a/numpy-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d3703409aac693fa82c0aee023a1ae06a6e9d065dba10f5e8e80f642f1e9d0a2", size = 16656888, upload-time = "2026-01-10T06:42:40.913Z" }, - { url = "https://files.pythonhosted.org/packages/b8/e0/1f9585d7dae8f14864e948fd7fa86c6cb72dee2676ca2748e63b1c5acfe0/numpy-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7211b95ca365519d3596a1d8688a95874cc94219d417504d9ecb2df99fa7bfa8", size = 12373956, upload-time = "2026-01-10T06:42:43.091Z" }, - { url = "https://files.pythonhosted.org/packages/8e/43/9762e88909ff2326f5e7536fa8cb3c49fb03a7d92705f23e6e7f553d9cb3/numpy-2.4.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5adf01965456a664fc727ed69cc71848f28d063217c63e1a0e200a118d5eec9a", size = 5202567, upload-time = "2026-01-10T06:42:45.107Z" }, - { url = "https://files.pythonhosted.org/packages/4b/ee/34b7930eb61e79feb4478800a4b95b46566969d837546aa7c034c742ef98/numpy-2.4.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:26f0bcd9c79a00e339565b303badc74d3ea2bd6d52191eeca5f95936cad107d0", size = 6549459, upload-time = "2026-01-10T06:42:48.152Z" }, - { url = "https://files.pythonhosted.org/packages/79/e3/5f115fae982565771be994867c89bcd8d7208dbfe9469185497d70de5ddf/numpy-2.4.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0093e85df2960d7e4049664b26afc58b03236e967fb942354deef3208857a04c", size = 14404859, upload-time = "2026-01-10T06:42:49.947Z" }, - { url = "https://files.pythonhosted.org/packages/d9/7d/9c8a781c88933725445a859cac5d01b5871588a15969ee6aeb618ba99eee/numpy-2.4.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ad270f438cbdd402c364980317fb6b117d9ec5e226fff5b4148dd9aa9fc6e02", size = 16371419, upload-time = "2026-01-10T06:42:52.409Z" }, - { url = "https://files.pythonhosted.org/packages/a6/d2/8aa084818554543f17cf4162c42f162acbd3bb42688aefdba6628a859f77/numpy-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:297c72b1b98100c2e8f873d5d35fb551fce7040ade83d67dd51d38c8d42a2162", size = 16182131, upload-time = "2026-01-10T06:42:54.694Z" }, - { url = "https://files.pythonhosted.org/packages/60/db/0425216684297c58a8df35f3284ef56ec4a043e6d283f8a59c53562caf1b/numpy-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cf6470d91d34bf669f61d515499859fa7a4c2f7c36434afb70e82df7217933f9", size = 18295342, upload-time = "2026-01-10T06:42:56.991Z" }, - { url = "https://files.pythonhosted.org/packages/31/4c/14cb9d86240bd8c386c881bafbe43f001284b7cce3bc01623ac9475da163/numpy-2.4.1-cp312-cp312-win32.whl", hash = "sha256:b6bcf39112e956594b3331316d90c90c90fb961e39696bda97b89462f5f3943f", size = 5959015, upload-time = "2026-01-10T06:42:59.631Z" }, - { url = "https://files.pythonhosted.org/packages/51/cf/52a703dbeb0c65807540d29699fef5fda073434ff61846a564d5c296420f/numpy-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:e1a27bb1b2dee45a2a53f5ca6ff2d1a7f135287883a1689e930d44d1ff296c87", size = 12310730, upload-time = "2026-01-10T06:43:01.627Z" }, - { url = "https://files.pythonhosted.org/packages/69/80/a828b2d0ade5e74a9fe0f4e0a17c30fdc26232ad2bc8c9f8b3197cf7cf18/numpy-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:0e6e8f9d9ecf95399982019c01223dc130542960a12edfa8edd1122dfa66a8a8", size = 10312166, upload-time = "2026-01-10T06:43:03.673Z" }, - { url = "https://files.pythonhosted.org/packages/04/68/732d4b7811c00775f3bd522a21e8dd5a23f77eb11acdeb663e4a4ebf0ef4/numpy-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d797454e37570cfd61143b73b8debd623c3c0952959adb817dd310a483d58a1b", size = 16652495, upload-time = "2026-01-10T06:43:06.283Z" }, - { url = "https://files.pythonhosted.org/packages/20/ca/857722353421a27f1465652b2c66813eeeccea9d76d5f7b74b99f298e60e/numpy-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82c55962006156aeef1629b953fd359064aa47e4d82cfc8e67f0918f7da3344f", size = 12368657, upload-time = "2026-01-10T06:43:09.094Z" }, - { url = "https://files.pythonhosted.org/packages/81/0d/2377c917513449cc6240031a79d30eb9a163d32a91e79e0da47c43f2c0c8/numpy-2.4.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:71abbea030f2cfc3092a0ff9f8c8fdefdc5e0bf7d9d9c99663538bb0ecdac0b9", size = 5197256, upload-time = "2026-01-10T06:43:13.634Z" }, - { url = "https://files.pythonhosted.org/packages/17/39/569452228de3f5de9064ac75137082c6214be1f5c532016549a7923ab4b5/numpy-2.4.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5b55aa56165b17aaf15520beb9cbd33c9039810e0d9643dd4379e44294c7303e", size = 6545212, upload-time = "2026-01-10T06:43:15.661Z" }, - { url = "https://files.pythonhosted.org/packages/8c/a4/77333f4d1e4dac4395385482557aeecf4826e6ff517e32ca48e1dafbe42a/numpy-2.4.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0faba4a331195bfa96f93dd9dfaa10b2c7aa8cda3a02b7fd635e588fe821bf5", size = 14402871, upload-time = "2026-01-10T06:43:17.324Z" }, - { url = "https://files.pythonhosted.org/packages/ba/87/d341e519956273b39d8d47969dd1eaa1af740615394fe67d06f1efa68773/numpy-2.4.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e3087f53e2b4428766b54932644d148613c5a595150533ae7f00dab2f319a8", size = 16359305, upload-time = "2026-01-10T06:43:19.376Z" }, - { url = "https://files.pythonhosted.org/packages/32/91/789132c6666288eaa20ae8066bb99eba1939362e8f1a534949a215246e97/numpy-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:49e792ec351315e16da54b543db06ca8a86985ab682602d90c60ef4ff4db2a9c", size = 16181909, upload-time = "2026-01-10T06:43:21.808Z" }, - { url = "https://files.pythonhosted.org/packages/cf/b8/090b8bd27b82a844bb22ff8fdf7935cb1980b48d6e439ae116f53cdc2143/numpy-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79e9e06c4c2379db47f3f6fc7a8652e7498251789bf8ff5bd43bf478ef314ca2", size = 18284380, upload-time = "2026-01-10T06:43:23.957Z" }, - { url = "https://files.pythonhosted.org/packages/67/78/722b62bd31842ff029412271556a1a27a98f45359dea78b1548a3a9996aa/numpy-2.4.1-cp313-cp313-win32.whl", hash = "sha256:3d1a100e48cb266090a031397863ff8a30050ceefd798f686ff92c67a486753d", size = 5957089, upload-time = "2026-01-10T06:43:27.535Z" }, - { url = "https://files.pythonhosted.org/packages/da/a6/cf32198b0b6e18d4fbfa9a21a992a7fca535b9bb2b0cdd217d4a3445b5ca/numpy-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:92a0e65272fd60bfa0d9278e0484c2f52fe03b97aedc02b357f33fe752c52ffb", size = 12307230, upload-time = "2026-01-10T06:43:29.298Z" }, - { url = "https://files.pythonhosted.org/packages/44/6c/534d692bfb7d0afe30611320c5fb713659dcb5104d7cc182aff2aea092f5/numpy-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:20d4649c773f66cc2fc36f663e091f57c3b7655f936a4c681b4250855d1da8f5", size = 10313125, upload-time = "2026-01-10T06:43:31.782Z" }, - { url = "https://files.pythonhosted.org/packages/da/a1/354583ac5c4caa566de6ddfbc42744409b515039e085fab6e0ff942e0df5/numpy-2.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f93bc6892fe7b0663e5ffa83b61aab510aacffd58c16e012bb9352d489d90cb7", size = 12496156, upload-time = "2026-01-10T06:43:34.237Z" }, - { url = "https://files.pythonhosted.org/packages/51/b0/42807c6e8cce58c00127b1dc24d365305189991f2a7917aa694a109c8d7d/numpy-2.4.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:178de8f87948163d98a4c9ab5bee4ce6519ca918926ec8df195af582de28544d", size = 5324663, upload-time = "2026-01-10T06:43:36.211Z" }, - { url = "https://files.pythonhosted.org/packages/fe/55/7a621694010d92375ed82f312b2f28017694ed784775269115323e37f5e2/numpy-2.4.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:98b35775e03ab7f868908b524fc0a84d38932d8daf7b7e1c3c3a1b6c7a2c9f15", size = 6645224, upload-time = "2026-01-10T06:43:37.884Z" }, - { url = "https://files.pythonhosted.org/packages/50/96/9fa8635ed9d7c847d87e30c834f7109fac5e88549d79ef3324ab5c20919f/numpy-2.4.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:941c2a93313d030f219f3a71fd3d91a728b82979a5e8034eb2e60d394a2b83f9", size = 14462352, upload-time = "2026-01-10T06:43:39.479Z" }, - { url = "https://files.pythonhosted.org/packages/03/d1/8cf62d8bb2062da4fb82dd5d49e47c923f9c0738032f054e0a75342faba7/numpy-2.4.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:529050522e983e00a6c1c6b67411083630de8b57f65e853d7b03d9281b8694d2", size = 16407279, upload-time = "2026-01-10T06:43:41.93Z" }, - { url = "https://files.pythonhosted.org/packages/86/1c/95c86e17c6b0b31ce6ef219da00f71113b220bcb14938c8d9a05cee0ff53/numpy-2.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2302dc0224c1cbc49bb94f7064f3f923a971bfae45c33870dcbff63a2a550505", size = 16248316, upload-time = "2026-01-10T06:43:44.121Z" }, - { url = "https://files.pythonhosted.org/packages/30/b4/e7f5ff8697274c9d0fa82398b6a372a27e5cef069b37df6355ccb1f1db1a/numpy-2.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9171a42fcad32dcf3fa86f0a4faa5e9f8facefdb276f54b8b390d90447cff4e2", size = 18329884, upload-time = "2026-01-10T06:43:46.613Z" }, - { url = "https://files.pythonhosted.org/packages/37/a4/b073f3e9d77f9aec8debe8ca7f9f6a09e888ad1ba7488f0c3b36a94c03ac/numpy-2.4.1-cp313-cp313t-win32.whl", hash = "sha256:382ad67d99ef49024f11d1ce5dcb5ad8432446e4246a4b014418ba3a1175a1f4", size = 6081138, upload-time = "2026-01-10T06:43:48.854Z" }, - { url = "https://files.pythonhosted.org/packages/16/16/af42337b53844e67752a092481ab869c0523bc95c4e5c98e4dac4e9581ac/numpy-2.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:62fea415f83ad8fdb6c20840578e5fbaf5ddd65e0ec6c3c47eda0f69da172510", size = 12447478, upload-time = "2026-01-10T06:43:50.476Z" }, - { url = "https://files.pythonhosted.org/packages/6c/f8/fa85b2eac68ec631d0b631abc448552cb17d39afd17ec53dcbcc3537681a/numpy-2.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a7870e8c5fc11aef57d6fea4b4085e537a3a60ad2cdd14322ed531fdca68d261", size = 10382981, upload-time = "2026-01-10T06:43:52.575Z" }, - { url = "https://files.pythonhosted.org/packages/1b/a7/ef08d25698e0e4b4efbad8d55251d20fe2a15f6d9aa7c9b30cd03c165e6f/numpy-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3869ea1ee1a1edc16c29bbe3a2f2a4e515cc3a44d43903ad41e0cacdbaf733dc", size = 16652046, upload-time = "2026-01-10T06:43:54.797Z" }, - { url = "https://files.pythonhosted.org/packages/8f/39/e378b3e3ca13477e5ac70293ec027c438d1927f18637e396fe90b1addd72/numpy-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e867df947d427cdd7a60e3e271729090b0f0df80f5f10ab7dd436f40811699c3", size = 12378858, upload-time = "2026-01-10T06:43:57.099Z" }, - { url = "https://files.pythonhosted.org/packages/c3/74/7ec6154f0006910ed1fdbb7591cf4432307033102b8a22041599935f8969/numpy-2.4.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:e3bd2cb07841166420d2fa7146c96ce00cb3410664cbc1a6be028e456c4ee220", size = 5207417, upload-time = "2026-01-10T06:43:59.037Z" }, - { url = "https://files.pythonhosted.org/packages/f7/b7/053ac11820d84e42f8feea5cb81cc4fcd1091499b45b1ed8c7415b1bf831/numpy-2.4.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:f0a90aba7d521e6954670550e561a4cb925713bd944445dbe9e729b71f6cabee", size = 6542643, upload-time = "2026-01-10T06:44:01.852Z" }, - { url = "https://files.pythonhosted.org/packages/c0/c4/2e7908915c0e32ca636b92e4e4a3bdec4cb1e7eb0f8aedf1ed3c68a0d8cd/numpy-2.4.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d558123217a83b2d1ba316b986e9248a1ed1971ad495963d555ccd75dcb1556", size = 14418963, upload-time = "2026-01-10T06:44:04.047Z" }, - { url = "https://files.pythonhosted.org/packages/eb/c0/3ed5083d94e7ffd7c404e54619c088e11f2e1939a9544f5397f4adb1b8ba/numpy-2.4.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f44de05659b67d20499cbc96d49f2650769afcb398b79b324bb6e297bfe3844", size = 16363811, upload-time = "2026-01-10T06:44:06.207Z" }, - { url = "https://files.pythonhosted.org/packages/0e/68/42b66f1852bf525050a67315a4fb94586ab7e9eaa541b1bef530fab0c5dd/numpy-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:69e7419c9012c4aaf695109564e3387f1259f001b4326dfa55907b098af082d3", size = 16197643, upload-time = "2026-01-10T06:44:08.33Z" }, - { url = "https://files.pythonhosted.org/packages/d2/40/e8714fc933d85f82c6bfc7b998a0649ad9769a32f3494ba86598aaf18a48/numpy-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2ffd257026eb1b34352e749d7cc1678b5eeec3e329ad8c9965a797e08ccba205", size = 18289601, upload-time = "2026-01-10T06:44:10.841Z" }, - { url = "https://files.pythonhosted.org/packages/80/9a/0d44b468cad50315127e884802351723daca7cf1c98d102929468c81d439/numpy-2.4.1-cp314-cp314-win32.whl", hash = "sha256:727c6c3275ddefa0dc078524a85e064c057b4f4e71ca5ca29a19163c607be745", size = 6005722, upload-time = "2026-01-10T06:44:13.332Z" }, - { url = "https://files.pythonhosted.org/packages/7e/bb/c6513edcce5a831810e2dddc0d3452ce84d208af92405a0c2e58fd8e7881/numpy-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:7d5d7999df434a038d75a748275cd6c0094b0ecdb0837342b332a82defc4dc4d", size = 12438590, upload-time = "2026-01-10T06:44:15.006Z" }, - { url = "https://files.pythonhosted.org/packages/e9/da/a598d5cb260780cf4d255102deba35c1d072dc028c4547832f45dd3323a8/numpy-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:ce9ce141a505053b3c7bce3216071f3bf5c182b8b28930f14cd24d43932cd2df", size = 10596180, upload-time = "2026-01-10T06:44:17.386Z" }, - { url = "https://files.pythonhosted.org/packages/de/bc/ea3f2c96fcb382311827231f911723aeff596364eb6e1b6d1d91128aa29b/numpy-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4e53170557d37ae404bf8d542ca5b7c629d6efa1117dac6a83e394142ea0a43f", size = 12498774, upload-time = "2026-01-10T06:44:19.467Z" }, - { url = "https://files.pythonhosted.org/packages/aa/ab/ef9d939fe4a812648c7a712610b2ca6140b0853c5efea361301006c02ae5/numpy-2.4.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:a73044b752f5d34d4232f25f18160a1cc418ea4507f5f11e299d8ac36875f8a0", size = 5327274, upload-time = "2026-01-10T06:44:23.189Z" }, - { url = "https://files.pythonhosted.org/packages/bd/31/d381368e2a95c3b08b8cf7faac6004849e960f4a042d920337f71cef0cae/numpy-2.4.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:fb1461c99de4d040666ca0444057b06541e5642f800b71c56e6ea92d6a853a0c", size = 6648306, upload-time = "2026-01-10T06:44:25.012Z" }, - { url = "https://files.pythonhosted.org/packages/c8/e5/0989b44ade47430be6323d05c23207636d67d7362a1796ccbccac6773dd2/numpy-2.4.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423797bdab2eeefbe608d7c1ec7b2b4fd3c58d51460f1ee26c7500a1d9c9ee93", size = 14464653, upload-time = "2026-01-10T06:44:26.706Z" }, - { url = "https://files.pythonhosted.org/packages/10/a7/cfbe475c35371cae1358e61f20c5f075badc18c4797ab4354140e1d283cf/numpy-2.4.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:52b5f61bdb323b566b528899cc7db2ba5d1015bda7ea811a8bcf3c89c331fa42", size = 16405144, upload-time = "2026-01-10T06:44:29.378Z" }, - { url = "https://files.pythonhosted.org/packages/f8/a3/0c63fe66b534888fa5177cc7cef061541064dbe2b4b60dcc60ffaf0d2157/numpy-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42d7dd5fa36d16d52a84f821eb96031836fd405ee6955dd732f2023724d0aa01", size = 16247425, upload-time = "2026-01-10T06:44:31.721Z" }, - { url = "https://files.pythonhosted.org/packages/6b/2b/55d980cfa2c93bd40ff4c290bf824d792bd41d2fe3487b07707559071760/numpy-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7b6b5e28bbd47b7532698e5db2fe1db693d84b58c254e4389d99a27bb9b8f6b", size = 18330053, upload-time = "2026-01-10T06:44:34.617Z" }, - { url = "https://files.pythonhosted.org/packages/23/12/8b5fc6b9c487a09a7957188e0943c9ff08432c65e34567cabc1623b03a51/numpy-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:5de60946f14ebe15e713a6f22850c2372fa72f4ff9a432ab44aa90edcadaa65a", size = 6152482, upload-time = "2026-01-10T06:44:36.798Z" }, - { url = "https://files.pythonhosted.org/packages/00/a5/9f8ca5856b8940492fc24fbe13c1bc34d65ddf4079097cf9e53164d094e1/numpy-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:8f085da926c0d491ffff3096f91078cc97ea67e7e6b65e490bc8dcda65663be2", size = 12627117, upload-time = "2026-01-10T06:44:38.828Z" }, - { url = "https://files.pythonhosted.org/packages/ad/0d/eca3d962f9eef265f01a8e0d20085c6dd1f443cbffc11b6dede81fd82356/numpy-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:6436cffb4f2bf26c974344439439c95e152c9a527013f26b3577be6c2ca64295", size = 10667121, upload-time = "2026-01-10T06:44:41.644Z" }, +version = "2.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/fd/0005efbd0af48e55eb3c7208af93f2862d4b1a56cd78e84309a2d959208d/numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae", size = 20723651, upload-time = "2026-01-31T23:13:10.135Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/6e/6f394c9c77668153e14d4da83bcc247beb5952f6ead7699a1a2992613bea/numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a", size = 16667963, upload-time = "2026-01-31T23:10:52.147Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f8/55483431f2b2fd015ae6ed4fe62288823ce908437ed49db5a03d15151678/numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1", size = 14693571, upload-time = "2026-01-31T23:10:54.789Z" }, + { url = "https://files.pythonhosted.org/packages/2f/20/18026832b1845cdc82248208dd929ca14c9d8f2bac391f67440707fff27c/numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e", size = 5203469, upload-time = "2026-01-31T23:10:57.343Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/2eb97c8a77daaba34eaa3fa7241a14ac5f51c46a6bd5911361b644c4a1e2/numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27", size = 6550820, upload-time = "2026-01-31T23:10:59.429Z" }, + { url = "https://files.pythonhosted.org/packages/b1/91/b97fdfd12dc75b02c44e26c6638241cc004d4079a0321a69c62f51470c4c/numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548", size = 15663067, upload-time = "2026-01-31T23:11:01.291Z" }, + { url = "https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f", size = 16619782, upload-time = "2026-01-31T23:11:03.669Z" }, + { url = "https://files.pythonhosted.org/packages/b7/83/9751502164601a79e18847309f5ceec0b1446d7b6aa12305759b72cf98b2/numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460", size = 17013128, upload-time = "2026-01-31T23:11:05.913Z" }, + { url = "https://files.pythonhosted.org/packages/61/c4/c4066322256ec740acc1c8923a10047818691d2f8aec254798f3dd90f5f2/numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba", size = 18345324, upload-time = "2026-01-31T23:11:08.248Z" }, + { url = "https://files.pythonhosted.org/packages/ab/af/6157aa6da728fa4525a755bfad486ae7e3f76d4c1864138003eb84328497/numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f", size = 5960282, upload-time = "2026-01-31T23:11:10.497Z" }, + { url = "https://files.pythonhosted.org/packages/92/0f/7ceaaeaacb40567071e94dbf2c9480c0ae453d5bb4f52bea3892c39dc83c/numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85", size = 12314210, upload-time = "2026-01-31T23:11:12.176Z" }, + { url = "https://files.pythonhosted.org/packages/2f/a3/56c5c604fae6dd40fa2ed3040d005fca97e91bd320d232ac9931d77ba13c/numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa", size = 10220171, upload-time = "2026-01-31T23:11:14.684Z" }, + { url = "https://files.pythonhosted.org/packages/a1/22/815b9fe25d1d7ae7d492152adbc7226d3eff731dffc38fe970589fcaaa38/numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c", size = 16663696, upload-time = "2026-01-31T23:11:17.516Z" }, + { url = "https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979", size = 14688322, upload-time = "2026-01-31T23:11:19.883Z" }, + { url = "https://files.pythonhosted.org/packages/da/b4/f805ab79293c728b9a99438775ce51885fd4f31b76178767cfc718701a39/numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98", size = 5198157, upload-time = "2026-01-31T23:11:22.375Z" }, + { url = "https://files.pythonhosted.org/packages/74/09/826e4289844eccdcd64aac27d13b0fd3f32039915dd5b9ba01baae1f436c/numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef", size = 6546330, upload-time = "2026-01-31T23:11:23.958Z" }, + { url = "https://files.pythonhosted.org/packages/19/fb/cbfdbfa3057a10aea5422c558ac57538e6acc87ec1669e666d32ac198da7/numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7", size = 15660968, upload-time = "2026-01-31T23:11:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499", size = 16607311, upload-time = "2026-01-31T23:11:28.117Z" }, + { url = "https://files.pythonhosted.org/packages/14/d9/4b5adfc39a43fa6bf918c6d544bc60c05236cc2f6339847fc5b35e6cb5b0/numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb", size = 17012850, upload-time = "2026-01-31T23:11:30.888Z" }, + { url = "https://files.pythonhosted.org/packages/b7/20/adb6e6adde6d0130046e6fdfb7675cc62bc2f6b7b02239a09eb58435753d/numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7", size = 18334210, upload-time = "2026-01-31T23:11:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/78/0e/0a73b3dff26803a8c02baa76398015ea2a5434d9b8265a7898a6028c1591/numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110", size = 5958199, upload-time = "2026-01-31T23:11:35.385Z" }, + { url = "https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622", size = 12310848, upload-time = "2026-01-31T23:11:38.001Z" }, + { url = "https://files.pythonhosted.org/packages/6e/8d/6da186483e308da5da1cc6918ce913dcfe14ffde98e710bfeff2a6158d4e/numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71", size = 10221082, upload-time = "2026-01-31T23:11:40.392Z" }, + { url = "https://files.pythonhosted.org/packages/25/a1/9510aa43555b44781968935c7548a8926274f815de42ad3997e9e83680dd/numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262", size = 14815866, upload-time = "2026-01-31T23:11:42.495Z" }, + { url = "https://files.pythonhosted.org/packages/36/30/6bbb5e76631a5ae46e7923dd16ca9d3f1c93cfa8d4ed79a129814a9d8db3/numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913", size = 5325631, upload-time = "2026-01-31T23:11:44.7Z" }, + { url = "https://files.pythonhosted.org/packages/46/00/3a490938800c1923b567b3a15cd17896e68052e2145d8662aaf3e1ffc58f/numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab", size = 6646254, upload-time = "2026-01-31T23:11:46.341Z" }, + { url = "https://files.pythonhosted.org/packages/d3/e9/fac0890149898a9b609caa5af7455a948b544746e4b8fe7c212c8edd71f8/numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82", size = 15720138, upload-time = "2026-01-31T23:11:48.082Z" }, + { url = "https://files.pythonhosted.org/packages/ea/5c/08887c54e68e1e28df53709f1893ce92932cc6f01f7c3d4dc952f61ffd4e/numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f", size = 16655398, upload-time = "2026-01-31T23:11:50.293Z" }, + { url = "https://files.pythonhosted.org/packages/4d/89/253db0fa0e66e9129c745e4ef25631dc37d5f1314dad2b53e907b8538e6d/numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554", size = 17079064, upload-time = "2026-01-31T23:11:52.927Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d5/cbade46ce97c59c6c3da525e8d95b7abe8a42974a1dc5c1d489c10433e88/numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257", size = 18379680, upload-time = "2026-01-31T23:11:55.22Z" }, + { url = "https://files.pythonhosted.org/packages/40/62/48f99ae172a4b63d981babe683685030e8a3df4f246c893ea5c6ef99f018/numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657", size = 6082433, upload-time = "2026-01-31T23:11:58.096Z" }, + { url = "https://files.pythonhosted.org/packages/07/38/e054a61cfe48ad9f1ed0d188e78b7e26859d0b60ef21cd9de4897cdb5326/numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b", size = 12451181, upload-time = "2026-01-31T23:11:59.782Z" }, + { url = "https://files.pythonhosted.org/packages/6e/a4/a05c3a6418575e185dd84d0b9680b6bb2e2dc3e4202f036b7b4e22d6e9dc/numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1", size = 10290756, upload-time = "2026-01-31T23:12:02.438Z" }, + { url = "https://files.pythonhosted.org/packages/18/88/b7df6050bf18fdcfb7046286c6535cabbdd2064a3440fca3f069d319c16e/numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b", size = 16663092, upload-time = "2026-01-31T23:12:04.521Z" }, + { url = "https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000", size = 14698770, upload-time = "2026-01-31T23:12:06.96Z" }, + { url = "https://files.pythonhosted.org/packages/fb/0b/f9e49ba6c923678ad5bc38181c08ac5e53b7a5754dbca8e581aa1a56b1ff/numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1", size = 5208562, upload-time = "2026-01-31T23:12:09.632Z" }, + { url = "https://files.pythonhosted.org/packages/7d/12/d7de8f6f53f9bb76997e5e4c069eda2051e3fe134e9181671c4391677bb2/numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74", size = 6543710, upload-time = "2026-01-31T23:12:11.969Z" }, + { url = "https://files.pythonhosted.org/packages/09/63/c66418c2e0268a31a4cf8a8b512685748200f8e8e8ec6c507ce14e773529/numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a", size = 15677205, upload-time = "2026-01-31T23:12:14.33Z" }, + { url = "https://files.pythonhosted.org/packages/5d/6c/7f237821c9642fb2a04d2f1e88b4295677144ca93285fd76eff3bcba858d/numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325", size = 16611738, upload-time = "2026-01-31T23:12:16.525Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a7/39c4cdda9f019b609b5c473899d87abff092fc908cfe4d1ecb2fcff453b0/numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909", size = 17028888, upload-time = "2026-01-31T23:12:19.306Z" }, + { url = "https://files.pythonhosted.org/packages/da/b3/e84bb64bdfea967cc10950d71090ec2d84b49bc691df0025dddb7c26e8e3/numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a", size = 18339556, upload-time = "2026-01-31T23:12:21.816Z" }, + { url = "https://files.pythonhosted.org/packages/88/f5/954a291bc1192a27081706862ac62bb5920fbecfbaa302f64682aa90beed/numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a", size = 6006899, upload-time = "2026-01-31T23:12:24.14Z" }, + { url = "https://files.pythonhosted.org/packages/05/cb/eff72a91b2efdd1bc98b3b8759f6a1654aa87612fc86e3d87d6fe4f948c4/numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75", size = 12443072, upload-time = "2026-01-31T23:12:26.33Z" }, + { url = "https://files.pythonhosted.org/packages/37/75/62726948db36a56428fce4ba80a115716dc4fad6a3a4352487f8bb950966/numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05", size = 10494886, upload-time = "2026-01-31T23:12:28.488Z" }, + { url = "https://files.pythonhosted.org/packages/36/2f/ee93744f1e0661dc267e4b21940870cabfae187c092e1433b77b09b50ac4/numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308", size = 14818567, upload-time = "2026-01-31T23:12:30.709Z" }, + { url = "https://files.pythonhosted.org/packages/a7/24/6535212add7d76ff938d8bdc654f53f88d35cddedf807a599e180dcb8e66/numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef", size = 5328372, upload-time = "2026-01-31T23:12:32.962Z" }, + { url = "https://files.pythonhosted.org/packages/5e/9d/c48f0a035725f925634bf6b8994253b43f2047f6778a54147d7e213bc5a7/numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d", size = 6649306, upload-time = "2026-01-31T23:12:34.797Z" }, + { url = "https://files.pythonhosted.org/packages/81/05/7c73a9574cd4a53a25907bad38b59ac83919c0ddc8234ec157f344d57d9a/numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8", size = 15722394, upload-time = "2026-01-31T23:12:36.565Z" }, + { url = "https://files.pythonhosted.org/packages/35/fa/4de10089f21fc7d18442c4a767ab156b25c2a6eaf187c0db6d9ecdaeb43f/numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5", size = 16653343, upload-time = "2026-01-31T23:12:39.188Z" }, + { url = "https://files.pythonhosted.org/packages/b8/f9/d33e4ffc857f3763a57aa85650f2e82486832d7492280ac21ba9efda80da/numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e", size = 17078045, upload-time = "2026-01-31T23:12:42.041Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b8/54bdb43b6225badbea6389fa038c4ef868c44f5890f95dd530a218706da3/numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a", size = 18380024, upload-time = "2026-01-31T23:12:44.331Z" }, + { url = "https://files.pythonhosted.org/packages/a5/55/6e1a61ded7af8df04016d81b5b02daa59f2ea9252ee0397cb9f631efe9e5/numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443", size = 6153937, upload-time = "2026-01-31T23:12:47.229Z" }, + { url = "https://files.pythonhosted.org/packages/45/aa/fa6118d1ed6d776b0983f3ceac9b1a5558e80df9365b1c3aa6d42bf9eee4/numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236", size = 12631844, upload-time = "2026-01-31T23:12:48.997Z" }, + { url = "https://files.pythonhosted.org/packages/32/0a/2ec5deea6dcd158f254a7b372fb09cfba5719419c8d66343bab35237b3fb/numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181", size = 10565379, upload-time = "2026-01-31T23:12:51.345Z" }, ] [[package]] @@ -1502,6 +1553,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668, upload-time = "2025-08-23T15:15:25.663Z" }, ] +[[package]] +name = "particle-reader" +version = "0.1.0" +source = { editable = "packages/particle_reader" } +dependencies = [ + { name = "numpy" }, + { name = "polars" }, +] + +[package.metadata] +requires-dist = [ + { name = "numpy", specifier = ">=2.3.4" }, + { name = "polars", specifier = ">=1.35.1" }, +] + [[package]] name = "pexpect" version = "4.9.0" @@ -2089,6 +2155,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f", size = 8046, upload-time = "2025-07-18T01:05:03.843Z" }, ] +[[package]] +name = "rich" +version = "14.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/c6/f3b320c27991c46f43ee9d856302c70dc2d0fb2dba4842ff739d5f46b393/rich-14.3.3.tar.gz", hash = "sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b", size = 230582, upload-time = "2026-02-19T17:23:12.474Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl", hash = "sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d", size = 310458, upload-time = "2026-02-19T17:23:13.732Z" }, +] + [[package]] name = "rpds-py" version = "0.30.0" From 63429cd1ce78b15067d937a72f88ca49222bdadd Mon Sep 17 00:00:00 2001 From: KOVALW Date: Sat, 4 Apr 2026 04:48:09 +0000 Subject: [PATCH 02/15] rebase to new params --- Makefile | 2 +- experiments/phase1/input/default_params.json | 46 +++++++++++--------- scripts/phase_1_calibration.py | 1 - src/ixa_epi_covid/covid_model.py | 31 +++++++++---- src/model.rs | 4 +- 5 files changed, 51 insertions(+), 33 deletions(-) diff --git a/Makefile b/Makefile index f69a4f6..852c0c4 100644 --- a/Makefile +++ b/Makefile @@ -57,7 +57,7 @@ bench: input/synth_pop_people_WY_10_000.csv input/synth_pop_people_WY_100_000.cs BASE ?= HEAD bench-compare: input/synth_pop_people_WY_10_000.csv input/synth_pop_people_WY_100_000.csv uv run scripts/bench_compare.py $(BASE) - + calibrate-phase-1: ./experiments/phase1/input/priors.json ./experiments/phase1/input/default_params.json uv run cargo build -r uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/prod-config.yaml diff --git a/experiments/phase1/input/default_params.json b/experiments/phase1/input/default_params.json index 1fa4af4..5311002 100644 --- a/experiments/phase1/input/default_params.json +++ b/experiments/phase1/input/default_params.json @@ -13,43 +13,49 @@ "duration": 12.0 } }, + "symptom_age_groups": [ + {"label": "Age0To17", "min": 0, "max": 17}, + {"label": "Age18To49", "min": 18, "max": 49}, + {"label": "Age50To64", "min": 50, "max": 64}, + {"label": "Age65Plus", "min": 65, "max": 120} + ], "probability_mild_given_infect": 0.7, "infect_to_mild_delay": { - "mu": 0.1, - "sigma": 0.1 + "mu": 1.63, + "sigma": 0.50 }, - "probability_severe_given_mild": 0.2, + "probability_severe_given_mild": {"Age0To17": 0.004, "Age18To49": 0.034, "Age50To64": 0.108, "Age65Plus": 0.684}, "mild_to_severe_delay": { - "mu": 0.1, - "sigma": 0.1 + "mu": 1.386, + "sigma": 1.307 }, "mild_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 + "mu": 2.079, + "sigma": 0.544 }, - "probability_critical_given_severe": 0.2, + "probability_critical_given_severe": {"Age0To17": 0.275, "Age18To49": 0.189, "Age50To64": 0.271, "Age65Plus": 0.269}, "severe_to_critical_delay": { - "mu": 0.1, - "sigma": 0.1 + "mu": -0.693, + "sigma": 1.307 }, "severe_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 + "mu": 1.609, + "sigma": 0.843 }, - "probability_dead_given_critical": 0.2, + "probability_dead_given_critical": {"Age0To17": 0.026, "Age18To49": 0.111, "Age50To64": 0.292, "Age65Plus": 0.699}, "critical_to_dead_delay": { - "mu": 0.1, - "sigma": 0.1 + "mu": 2.565, + "sigma": 0.814 }, "critical_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 + "mu": 2.565, + "sigma": 0.814 }, "settings_properties": {"Home": {"alpha": 0.0}, - "Workplace": {"alpha": 0.0}, + "Work": {"alpha": 0.0}, "School": {"alpha": 0.0}, - "CensusTract": {"alpha": 0.0}}, - "itinerary_ratios": {"Home": 0.25, "Workplace": 0.25, "School": 0.25, "CensusTract": 0.25}, + "Community": {"alpha": 0.0}}, + "itinerary_ratios": {"Home": 0.25, "Work": 0.25, "School": 0.25, "Community": 0.25}, "prevalence_report": { "write": false, "filename": "person_property_count.csv", diff --git a/scripts/phase_1_calibration.py b/scripts/phase_1_calibration.py index f7264f4..25fc5d3 100644 --- a/scripts/phase_1_calibration.py +++ b/scripts/phase_1_calibration.py @@ -121,7 +121,6 @@ def main( output_dir, outputs_to_read=["aggregated_deaths_report"], ) - # Make the output directory ----------------------------------------------------------------- # Use the default output directory in config inputs as the base output directory for all outputs # Create the output directory, handling the case where it already exists based on the force_overwrite flag diff --git a/src/ixa_epi_covid/covid_model.py b/src/ixa_epi_covid/covid_model.py index 2e2241d..1d33beb 100644 --- a/src/ixa_epi_covid/covid_model.py +++ b/src/ixa_epi_covid/covid_model.py @@ -28,16 +28,29 @@ def simulate(model_inputs: dict[str, Any]) -> pl.DataFrame: ## Generate the importation time series from relevant ixa parameters -------------- # Calculate the probability that an inidivdual will die given that they are symptomatic + # This calculation assumes that individuals are evenly distributed by age group + n_age_groups = len( + ixa_inputs["epimodel.GlobalParams"]["symptom_age_groups"] + ) case_fatality_ratio = ( - ixa_inputs["epimodel.GlobalParams"][ - "probability_severe_given_mild" - ] - * ixa_inputs["epimodel.GlobalParams"][ - "probability_critical_given_severe" - ] - * ixa_inputs["epimodel.GlobalParams"][ - "probability_dead_given_critical" - ] + sum( + ixa_inputs["epimodel.GlobalParams"][ + "probability_severe_given_mild" + ].values() + ) + / n_age_groups + * sum( + ixa_inputs["epimodel.GlobalParams"][ + "probability_critical_given_severe" + ].values() + ) + / n_age_groups + * sum( + ixa_inputs["epimodel.GlobalParams"][ + "probability_dead_given_critical" + ].values() + ) + / n_age_groups ) proportion_asymptomatic = ixa_inputs["epimodel.GlobalParams"][ diff --git a/src/model.rs b/src/model.rs index a8af56e..8b63965 100644 --- a/src/model.rs +++ b/src/model.rs @@ -3,8 +3,8 @@ use std::path::PathBuf; use ixa::{ExecutionPhase, prelude::*}; use crate::{ - abort_run, error::ModelError, infection_importation, infection_propagation_loop, - parameters, population_loader, reports, settings, symptom_status_manager, + abort_run, error::ModelError, infection_importation, infection_propagation_loop, parameters, + population_loader, reports, settings, symptom_status_manager, }; pub fn initialize_model( From d359a46bb2fb23d1128bd73c2f04538871978cf4 Mon Sep 17 00:00:00 2001 From: KOVALW Date: Tue, 7 Apr 2026 16:41:50 +0000 Subject: [PATCH 03/15] updated paricle output manager --- .gitignore | 2 +- .../phase1/input/prod-test-config.yaml | 10 + .../projection/output/1233664235/input.json | 85 ++++++++ .../projection/output/1636522374/input.json | 85 ++++++++ .../projection/output/188677716/input.json | 85 ++++++++ .../projection/output/2143248664/input.json | 85 ++++++++ .../projection/output/2316239387/input.json | 85 ++++++++ .../projection/output/2346301887/input.json | 85 ++++++++ .../projection/output/3229486440/input.json | 85 ++++++++ .../projection/output/4119188398/input.json | 85 ++++++++ .../projection/output/710268182/input.json | 85 ++++++++ pyproject.toml | 2 +- scripts/phase_1_calibration.py | 16 +- scripts/phase_1_projection.py | 196 ++++++++++++++---- uv.lock | 4 +- 15 files changed, 948 insertions(+), 47 deletions(-) create mode 100644 experiments/phase1/input/prod-test-config.yaml create mode 100644 experiments/phase1/projection/output/1233664235/input.json create mode 100644 experiments/phase1/projection/output/1636522374/input.json create mode 100644 experiments/phase1/projection/output/188677716/input.json create mode 100644 experiments/phase1/projection/output/2143248664/input.json create mode 100644 experiments/phase1/projection/output/2316239387/input.json create mode 100644 experiments/phase1/projection/output/2346301887/input.json create mode 100644 experiments/phase1/projection/output/3229486440/input.json create mode 100644 experiments/phase1/projection/output/4119188398/input.json create mode 100644 experiments/phase1/projection/output/710268182/input.json diff --git a/.gitignore b/.gitignore index 2b7dfe9..0c668f1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ **/profiling.json -experiments/**/output/ +experiments/**/simulations/ # Data *.csv diff --git a/experiments/phase1/input/prod-test-config.yaml b/experiments/phase1/input/prod-test-config.yaml new file mode 100644 index 0000000..ff53016 --- /dev/null +++ b/experiments/phase1/input/prod-test-config.yaml @@ -0,0 +1,10 @@ +exe_file: ./target/release/ixa-epi-covid +force_overwrite: true +state: Indiana +year: 2020 +symptomatic_reporting_prob: 0.5 +priors_file: ./experiments/phase1/input/priors.json +generation_particle_count: 400 +tolerance_values: [2.0] +use_env_synth_pop_file: true +ixa_default_params_file: ./experiments/phase1/input/default_params.json diff --git a/experiments/phase1/projection/output/1233664235/input.json b/experiments/phase1/projection/output/1233664235/input.json new file mode 100644 index 0000000..d6e47f8 --- /dev/null +++ b/experiments/phase1/projection/output/1233664235/input.json @@ -0,0 +1,85 @@ +{ + "epimodel.GlobalParams": { + "seed": 1233664235, + "max_time": 200, + "synth_population_file": "./input/in.csv", + "initial_prevalence": 0.0, + "imported_cases_timeseries": { + "include": true, + "filename": "experiments/phase1/projection/output/1233664235/imported_cases_timeseries.csv" + }, + "infectiousness_rate_fn": { + "Constant": { + "rate": 0.605374792010029, + "duration": 5.0 + } + }, + "probability_mild_given_infect": 0.4803667236120297, + "infect_to_mild_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_severe_given_mild": 0.2, + "mild_to_severe_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "mild_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_critical_given_severe": 0.2, + "severe_to_critical_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "severe_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_dead_given_critical": 0.2, + "critical_to_dead_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "critical_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "settings_properties": { + "Home": { + "alpha": 0.42105840758744206 + }, + "Workplace": { + "alpha": 0.0 + }, + "School": { + "alpha": 0.0 + }, + "CensusTract": { + "alpha": 0.0 + } + }, + "itinerary_ratios": { + "Home": 0.25, + "Workplace": 0.25, + "School": 0.25, + "CensusTract": 0.25 + }, + "prevalence_report": { + "write": true, + "filename": "person_property_count.csv", + "period": 1.0 + }, + "incidence_report": { + "write": true, + "filename": "incidence_report.csv", + "period": 1.0 + }, + "transmission_report": { + "write": false, + "filename": "transmission_report.csv" + }, + "first_death_terminates_run": false + } +} \ No newline at end of file diff --git a/experiments/phase1/projection/output/1636522374/input.json b/experiments/phase1/projection/output/1636522374/input.json new file mode 100644 index 0000000..aa58350 --- /dev/null +++ b/experiments/phase1/projection/output/1636522374/input.json @@ -0,0 +1,85 @@ +{ + "epimodel.GlobalParams": { + "seed": 1636522374, + "max_time": 200, + "synth_population_file": "./input/in.csv", + "initial_prevalence": 0.0, + "imported_cases_timeseries": { + "include": true, + "filename": "experiments/phase1/projection/output/1636522374/imported_cases_timeseries.csv" + }, + "infectiousness_rate_fn": { + "Constant": { + "rate": 0.593767212873822, + "duration": 5.0 + } + }, + "probability_mild_given_infect": 0.6359758214549668, + "infect_to_mild_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_severe_given_mild": 0.2, + "mild_to_severe_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "mild_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_critical_given_severe": 0.2, + "severe_to_critical_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "severe_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_dead_given_critical": 0.2, + "critical_to_dead_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "critical_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "settings_properties": { + "Home": { + "alpha": 0.7013876610474458 + }, + "Workplace": { + "alpha": 0.0 + }, + "School": { + "alpha": 0.0 + }, + "CensusTract": { + "alpha": 0.0 + } + }, + "itinerary_ratios": { + "Home": 0.25, + "Workplace": 0.25, + "School": 0.25, + "CensusTract": 0.25 + }, + "prevalence_report": { + "write": true, + "filename": "person_property_count.csv", + "period": 1.0 + }, + "incidence_report": { + "write": true, + "filename": "incidence_report.csv", + "period": 1.0 + }, + "transmission_report": { + "write": false, + "filename": "transmission_report.csv" + }, + "first_death_terminates_run": false + } +} \ No newline at end of file diff --git a/experiments/phase1/projection/output/188677716/input.json b/experiments/phase1/projection/output/188677716/input.json new file mode 100644 index 0000000..b4cc45b --- /dev/null +++ b/experiments/phase1/projection/output/188677716/input.json @@ -0,0 +1,85 @@ +{ + "epimodel.GlobalParams": { + "seed": 188677716, + "max_time": 200, + "synth_population_file": "./input/in.csv", + "initial_prevalence": 0.0, + "imported_cases_timeseries": { + "include": true, + "filename": "experiments/phase1/projection/output/188677716/imported_cases_timeseries.csv" + }, + "infectiousness_rate_fn": { + "Constant": { + "rate": 0.21675169774925596, + "duration": 5.0 + } + }, + "probability_mild_given_infect": 0.6227137436968164, + "infect_to_mild_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_severe_given_mild": 0.2, + "mild_to_severe_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "mild_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_critical_given_severe": 0.2, + "severe_to_critical_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "severe_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_dead_given_critical": 0.2, + "critical_to_dead_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "critical_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "settings_properties": { + "Home": { + "alpha": 0.6722833913813158 + }, + "Workplace": { + "alpha": 0.0 + }, + "School": { + "alpha": 0.0 + }, + "CensusTract": { + "alpha": 0.0 + } + }, + "itinerary_ratios": { + "Home": 0.25, + "Workplace": 0.25, + "School": 0.25, + "CensusTract": 0.25 + }, + "prevalence_report": { + "write": true, + "filename": "person_property_count.csv", + "period": 1.0 + }, + "incidence_report": { + "write": true, + "filename": "incidence_report.csv", + "period": 1.0 + }, + "transmission_report": { + "write": false, + "filename": "transmission_report.csv" + }, + "first_death_terminates_run": false + } +} \ No newline at end of file diff --git a/experiments/phase1/projection/output/2143248664/input.json b/experiments/phase1/projection/output/2143248664/input.json new file mode 100644 index 0000000..e2befd2 --- /dev/null +++ b/experiments/phase1/projection/output/2143248664/input.json @@ -0,0 +1,85 @@ +{ + "epimodel.GlobalParams": { + "seed": 2143248664, + "max_time": 200, + "synth_population_file": "./input/in.csv", + "initial_prevalence": 0.0, + "imported_cases_timeseries": { + "include": true, + "filename": "experiments/phase1/projection/output/2143248664/imported_cases_timeseries.csv" + }, + "infectiousness_rate_fn": { + "Constant": { + "rate": 0.38129393458037253, + "duration": 5.0 + } + }, + "probability_mild_given_infect": 0.549756606918229, + "infect_to_mild_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_severe_given_mild": 0.2, + "mild_to_severe_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "mild_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_critical_given_severe": 0.2, + "severe_to_critical_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "severe_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_dead_given_critical": 0.2, + "critical_to_dead_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "critical_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "settings_properties": { + "Home": { + "alpha": 0.25628084496915715 + }, + "Workplace": { + "alpha": 0.0 + }, + "School": { + "alpha": 0.0 + }, + "CensusTract": { + "alpha": 0.0 + } + }, + "itinerary_ratios": { + "Home": 0.25, + "Workplace": 0.25, + "School": 0.25, + "CensusTract": 0.25 + }, + "prevalence_report": { + "write": true, + "filename": "person_property_count.csv", + "period": 1.0 + }, + "incidence_report": { + "write": true, + "filename": "incidence_report.csv", + "period": 1.0 + }, + "transmission_report": { + "write": false, + "filename": "transmission_report.csv" + }, + "first_death_terminates_run": false + } +} \ No newline at end of file diff --git a/experiments/phase1/projection/output/2316239387/input.json b/experiments/phase1/projection/output/2316239387/input.json new file mode 100644 index 0000000..cef2f23 --- /dev/null +++ b/experiments/phase1/projection/output/2316239387/input.json @@ -0,0 +1,85 @@ +{ + "epimodel.GlobalParams": { + "seed": 2316239387, + "max_time": 200, + "synth_population_file": "./input/in.csv", + "initial_prevalence": 0.0, + "imported_cases_timeseries": { + "include": true, + "filename": "experiments/phase1/projection/output/2316239387/imported_cases_timeseries.csv" + }, + "infectiousness_rate_fn": { + "Constant": { + "rate": 0.5831477385552657, + "duration": 5.0 + } + }, + "probability_mild_given_infect": 0.7305764875435811, + "infect_to_mild_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_severe_given_mild": 0.2, + "mild_to_severe_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "mild_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_critical_given_severe": 0.2, + "severe_to_critical_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "severe_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_dead_given_critical": 0.2, + "critical_to_dead_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "critical_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "settings_properties": { + "Home": { + "alpha": 0.7211968482003426 + }, + "Workplace": { + "alpha": 0.0 + }, + "School": { + "alpha": 0.0 + }, + "CensusTract": { + "alpha": 0.0 + } + }, + "itinerary_ratios": { + "Home": 0.25, + "Workplace": 0.25, + "School": 0.25, + "CensusTract": 0.25 + }, + "prevalence_report": { + "write": true, + "filename": "person_property_count.csv", + "period": 1.0 + }, + "incidence_report": { + "write": true, + "filename": "incidence_report.csv", + "period": 1.0 + }, + "transmission_report": { + "write": false, + "filename": "transmission_report.csv" + }, + "first_death_terminates_run": false + } +} \ No newline at end of file diff --git a/experiments/phase1/projection/output/2346301887/input.json b/experiments/phase1/projection/output/2346301887/input.json new file mode 100644 index 0000000..6112788 --- /dev/null +++ b/experiments/phase1/projection/output/2346301887/input.json @@ -0,0 +1,85 @@ +{ + "epimodel.GlobalParams": { + "seed": 2346301887, + "max_time": 200, + "synth_population_file": "./input/in.csv", + "initial_prevalence": 0.0, + "imported_cases_timeseries": { + "include": true, + "filename": "experiments/phase1/projection/output/2346301887/imported_cases_timeseries.csv" + }, + "infectiousness_rate_fn": { + "Constant": { + "rate": 0.4819061165882031, + "duration": 5.0 + } + }, + "probability_mild_given_infect": 0.4975577343837682, + "infect_to_mild_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_severe_given_mild": 0.2, + "mild_to_severe_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "mild_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_critical_given_severe": 0.2, + "severe_to_critical_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "severe_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_dead_given_critical": 0.2, + "critical_to_dead_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "critical_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "settings_properties": { + "Home": { + "alpha": 0.36864251611062887 + }, + "Workplace": { + "alpha": 0.0 + }, + "School": { + "alpha": 0.0 + }, + "CensusTract": { + "alpha": 0.0 + } + }, + "itinerary_ratios": { + "Home": 0.25, + "Workplace": 0.25, + "School": 0.25, + "CensusTract": 0.25 + }, + "prevalence_report": { + "write": true, + "filename": "person_property_count.csv", + "period": 1.0 + }, + "incidence_report": { + "write": true, + "filename": "incidence_report.csv", + "period": 1.0 + }, + "transmission_report": { + "write": false, + "filename": "transmission_report.csv" + }, + "first_death_terminates_run": false + } +} \ No newline at end of file diff --git a/experiments/phase1/projection/output/3229486440/input.json b/experiments/phase1/projection/output/3229486440/input.json new file mode 100644 index 0000000..e972097 --- /dev/null +++ b/experiments/phase1/projection/output/3229486440/input.json @@ -0,0 +1,85 @@ +{ + "epimodel.GlobalParams": { + "seed": 3229486440, + "max_time": 200, + "synth_population_file": "./input/in.csv", + "initial_prevalence": 0.0, + "imported_cases_timeseries": { + "include": true, + "filename": "experiments/phase1/projection/output/3229486440/imported_cases_timeseries.csv" + }, + "infectiousness_rate_fn": { + "Constant": { + "rate": 0.4699308621003202, + "duration": 5.0 + } + }, + "probability_mild_given_infect": 0.46000524946803945, + "infect_to_mild_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_severe_given_mild": 0.2, + "mild_to_severe_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "mild_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_critical_given_severe": 0.2, + "severe_to_critical_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "severe_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_dead_given_critical": 0.2, + "critical_to_dead_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "critical_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "settings_properties": { + "Home": { + "alpha": 0.7404129336677752 + }, + "Workplace": { + "alpha": 0.0 + }, + "School": { + "alpha": 0.0 + }, + "CensusTract": { + "alpha": 0.0 + } + }, + "itinerary_ratios": { + "Home": 0.25, + "Workplace": 0.25, + "School": 0.25, + "CensusTract": 0.25 + }, + "prevalence_report": { + "write": true, + "filename": "person_property_count.csv", + "period": 1.0 + }, + "incidence_report": { + "write": true, + "filename": "incidence_report.csv", + "period": 1.0 + }, + "transmission_report": { + "write": false, + "filename": "transmission_report.csv" + }, + "first_death_terminates_run": false + } +} \ No newline at end of file diff --git a/experiments/phase1/projection/output/4119188398/input.json b/experiments/phase1/projection/output/4119188398/input.json new file mode 100644 index 0000000..e6f9a7a --- /dev/null +++ b/experiments/phase1/projection/output/4119188398/input.json @@ -0,0 +1,85 @@ +{ + "epimodel.GlobalParams": { + "seed": 4119188398, + "max_time": 200, + "synth_population_file": "./input/in.csv", + "initial_prevalence": 0.0, + "imported_cases_timeseries": { + "include": true, + "filename": "experiments/phase1/projection/output/4119188398/imported_cases_timeseries.csv" + }, + "infectiousness_rate_fn": { + "Constant": { + "rate": 0.2701895073489868, + "duration": 5.0 + } + }, + "probability_mild_given_infect": 0.638845894352331, + "infect_to_mild_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_severe_given_mild": 0.2, + "mild_to_severe_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "mild_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_critical_given_severe": 0.2, + "severe_to_critical_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "severe_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_dead_given_critical": 0.2, + "critical_to_dead_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "critical_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "settings_properties": { + "Home": { + "alpha": 0.29807721182711877 + }, + "Workplace": { + "alpha": 0.0 + }, + "School": { + "alpha": 0.0 + }, + "CensusTract": { + "alpha": 0.0 + } + }, + "itinerary_ratios": { + "Home": 0.25, + "Workplace": 0.25, + "School": 0.25, + "CensusTract": 0.25 + }, + "prevalence_report": { + "write": true, + "filename": "person_property_count.csv", + "period": 1.0 + }, + "incidence_report": { + "write": true, + "filename": "incidence_report.csv", + "period": 1.0 + }, + "transmission_report": { + "write": false, + "filename": "transmission_report.csv" + }, + "first_death_terminates_run": false + } +} \ No newline at end of file diff --git a/experiments/phase1/projection/output/710268182/input.json b/experiments/phase1/projection/output/710268182/input.json new file mode 100644 index 0000000..34db019 --- /dev/null +++ b/experiments/phase1/projection/output/710268182/input.json @@ -0,0 +1,85 @@ +{ + "epimodel.GlobalParams": { + "seed": 710268182, + "max_time": 200, + "synth_population_file": "./input/in.csv", + "initial_prevalence": 0.0, + "imported_cases_timeseries": { + "include": true, + "filename": "experiments/phase1/projection/output/710268182/imported_cases_timeseries.csv" + }, + "infectiousness_rate_fn": { + "Constant": { + "rate": 0.5329885599434854, + "duration": 5.0 + } + }, + "probability_mild_given_infect": 0.8482922067498563, + "infect_to_mild_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_severe_given_mild": 0.2, + "mild_to_severe_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "mild_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_critical_given_severe": 0.2, + "severe_to_critical_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "severe_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "probability_dead_given_critical": 0.2, + "critical_to_dead_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "critical_to_resolved_delay": { + "mu": 0.1, + "sigma": 0.1 + }, + "settings_properties": { + "Home": { + "alpha": 0.311833310838526 + }, + "Workplace": { + "alpha": 0.0 + }, + "School": { + "alpha": 0.0 + }, + "CensusTract": { + "alpha": 0.0 + } + }, + "itinerary_ratios": { + "Home": 0.25, + "Workplace": 0.25, + "School": 0.25, + "CensusTract": 0.25 + }, + "prevalence_report": { + "write": true, + "filename": "person_property_count.csv", + "period": 1.0 + }, + "incidence_report": { + "write": true, + "filename": "incidence_report.csv", + "period": 1.0 + }, + "transmission_report": { + "write": false, + "filename": "transmission_report.csv" + }, + "first_death_terminates_run": false + } +} \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index e2de5d4..e3c7dbe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ requires = ["uv_build>=0.8.13,<0.9.0"] build-backend = "uv_build" [tool.uv.sources] -calibrationtools = { git = "https://github.com/CDCgov/cfa-calibration-tools.git" } +calibrationtools = { git = "https://github.com/CDCgov/cfa-calibration-tools.git" , branch = "wtk-store-distances"} [tool.uv] package = true diff --git a/scripts/phase_1_calibration.py b/scripts/phase_1_calibration.py index 25fc5d3..c24003d 100644 --- a/scripts/phase_1_calibration.py +++ b/scripts/phase_1_calibration.py @@ -159,12 +159,18 @@ def particles_to_params( ): particle_params = reader.read_particle(particle=particle) # Make particle-specific output directory and update the output path in the parameters accordingly - output_dir = Path( + simulations_dir = Path( particle_params["config_inputs"]["output_dir"], - "simulations", - str( - particle_params["ixa_inputs"]["epimodel.GlobalParams"]["seed"] - ), + "simulations" + ) + # Count existing directories in simulations_dir + if not simulations_dir.exists(): + dir_count = 0 + else: + dir_count = len(os.walk(simulations_dir).__next__()[1]) + output_dir = Path( + simulations_dir, + ".".join([str(dir_count), str(particle_params["ixa_inputs"]["epimodel.GlobalParams"]["seed"])]), ) output_dir.mkdir(parents=True, exist_ok=False) diff --git a/scripts/phase_1_projection.py b/scripts/phase_1_projection.py index d770ed8..64d5423 100644 --- a/scripts/phase_1_projection.py +++ b/scripts/phase_1_projection.py @@ -1,24 +1,62 @@ import asyncio +from io import StringIO import pickle from pathlib import Path +from typing import Callable, Any, NoReturn +import threading from calibrationtools import CalibrationResults, Particle +from concurrent.futures import ThreadPoolExecutor from particle_reader import ParticleReader from ixa_epi_covid import CovidModel, update_epimodel_output_dir from ixa_epi_covid.config_parser import CovidModelConfig +import seaborn as sns +import matplotlib.pyplot as plt +import polars as pl +import os +import time +from rich.console import Console + # Run specific parameters declaration -------------------------------------------------------------------------------- -rerun_particle_count = 10 +rerun_particle_count = 2 +max_workers = 4 # Load the calibration -------------------------------------------------------------------------------- -calibration_output_dir = Path("experiments", "phase1", "calibration", "output") +calibration_output_dir = Path("experiments", "phase1", "calibration", "test") with open(calibration_output_dir / "config.pkl", "rb") as f: config: CovidModelConfig = pickle.load(f) with open(calibration_output_dir / "results.pkl", "rb") as f: results: CalibrationResults = pickle.load(f) +distances = results.flatten_distance_history() +for generation, errs in distances.items(): + print(f"Generation {generation} errors: {errs}") + sns.histplot(errs, label=f"Generation {generation}") + plt.show() + +imported_cases_timeseries = [] +aggregated_deaths_report = [] +for particle in results.sample_posterior_particles(n=rerun_particle_count): + seed = particle["seed"] + simulation_output_dir = Path( + calibration_output_dir, + "simulations", + str(seed), + ) + imported_cases_timeseries.append(pl.read_csv(simulation_output_dir / "imported_cases_timeseries.csv").with_columns(pl.lit(seed).alias("seed"))) + aggregated_deaths_report.append(pl.read_csv(simulation_output_dir / "aggregated_deaths_report.csv").with_columns(pl.lit(seed).alias("seed"))) + +imported_cases_timeseries_df = pl.concat(imported_cases_timeseries) +aggregated_deaths_report_df = pl.concat(aggregated_deaths_report) + +sns.lineplot(data=imported_cases_timeseries_df, x="time", y="imported_infections", units="seed", estimator=None) +plt.show() +sns.lineplot(data=aggregated_deaths_report_df.filter(pl.col("t_upper") > 70), x="t_upper", y="count", units="seed", estimator=None) +plt.show() + # Change parameters for projection -------------------------------------------------------------------------------- ixa_overrides = { "first_death_terminates_run": False, @@ -52,10 +90,18 @@ def particles_to_params(particle: Particle, reader: ParticleReader = reader): particle_params = reader.read_particle(particle=particle) # Make particle-specific output directory and update the output path in the parameters accordingly - output_dir = Path( + simulations_dir = Path( particle_params["config_inputs"]["output_dir"], - "simulations", - str(particle_params["ixa_inputs"]["epimodel.GlobalParams"]["seed"]), + "simulations" + ) + # Count existing directories in simulations_dir + if not simulations_dir.exists(): + dir_count = 0 + else: + dir_count = len(os.walk(simulations_dir).__next__()[1]) + output_dir = Path( + simulations_dir, + ".".join([str(dir_count), str(particle_params["ixa_inputs"]["epimodel.GlobalParams"]["seed"])]), ) output_dir.mkdir(parents=True, exist_ok=False) @@ -67,54 +113,128 @@ def run_particle(particle: Particle): particle_params = particles_to_params(particle=particle) model.simulate(particle_params) +def get_console(verbose: bool = True) -> Console: + """Return the console used for sampler reporting. -async def simulate_particles(particles: list[Particle]): - description = f"Projecting from posterior " - reporter - request - with reporter.create_weight_progress() as progress: - handle = self.config.reporter.start_collection_task( - progress=progress, - description=description, - total=self.config.generation_particle_count, + This helper creates a visible Rich console for normal runs and a hidden + in-memory console when sampler output should be suppressed. + + Args: + verbose (bool): Whether console output should be visible. + + Returns: + Console: Rich console configured for the requested verbosity. + """ + + if verbose: + return Console(force_terminal=True) + return Console(file=StringIO(), force_terminal=False) + +class SamplerReporter: + """Create progress displays and print run summaries. + + This helper owns the Rich console and the formatting of generation and run + summaries so execution engines do not need to duplicate UI setup. + + Args: + verbose (bool): Whether progress and summary output should be visible. + console (Console | None): Optional console override used for tests. + """ + + def __init__( + self, + verbose: bool, + console: Console | None = None, + ) -> None: + self.console = ( + console if console is not None else get_console(verbose) ) - assert request.executor is not None + + +async def simulate_particles( + particles: list[Particle], + executor: ThreadPoolExecutor, + chunksize: int = 1, + reporter: SamplerReporter | None = None, +): + if reporter is None: + reporter = SamplerReporter() + + with reporter.create_weight_progress() as progress: + assert executor is not None loop = asyncio.get_running_loop() - worker = partial( - run_particle, - particle_kwargs=request.particle_kwargs, - ) + worker = run_particle particle_chunks = [ - proposed_particles[index : index + request.chunksize] - for index in range(0, len(proposed_particles), request.chunksize) + particles[index : index + chunksize] + for index in range(0, len(particles), chunksize) ] tasks = [] for chunk in particle_chunks: - task = loop.run_in_executor(request.executor, worker, chunk) + task = loop.run_in_executor(executor, worker, chunk) tasks.append((task, chunk)) - attempts = 0 + completed = 0 try: for task, chunk in tasks: chunk_results = await task - attempts += self._accept_particle_batch( - generation=request.generation, - proposed_population=state.proposed_population, - proposed_particles=chunk, - errs=chunk_results, - ) - if ( - state.proposed_population.size - >= self.config.generation_particle_count - ): - break + completed += 1 + progress.update(completed=completed) finally: for task, _ in tasks: task.cancel() - generation_stats = self._build_generation_stats( - request=request, - state=state, - ) reporter.print_timing_summary() + +# Doesn't need to change across implementations, so we can keep it in calibrationtools to avoid code duplication +def run_coroutine_from_sync(coroutine_factory: Callable[[], Any]) -> Any: + """Run an async workflow from synchronous code. + + This helper executes the coroutine directly when no event loop is active. + If the caller already runs inside an event loop, it executes the coroutine + in a dedicated worker thread and re-raises any exception from that thread. + + Args: + coroutine_factory (Callable[[], Any]): Factory returning the coroutine + to execute. + + Returns: + Any: The value returned by the coroutine. + """ + + try: + asyncio.get_running_loop() + except RuntimeError: + return asyncio.run(coroutine_factory()) + + result: dict[str, Any] = {} + error: dict[str, BaseException] = {} + + def runner() -> None: + try: + result["value"] = asyncio.run(coroutine_factory()) + except BaseException as exc: # pragma: no cover - passthrough + error["value"] = exc + + def raise_worker_error(exc: BaseException) -> NoReturn: + raise exc + + thread = threading.Thread(target=runner, daemon=True) + thread.start() + thread.join() + if "value" in error: + raise_worker_error(error["value"]) + return result["value"] + +start = time.time() + +run_coroutine_from_sync( + lambda: simulate_particles( + executor=ThreadPoolExecutor(max_workers=max_workers), + chunksize=1, + reporter=SamplerReporter(), + particles=particles, + ) +) + + diff --git a/uv.lock b/uv.lock index 174d392..b51749c 100644 --- a/uv.lock +++ b/uv.lock @@ -165,7 +165,7 @@ css = [ [[package]] name = "calibrationtools" version = "0.1.1" -source = { git = "https://github.com/CDCgov/cfa-calibration-tools.git#266353f15e6d6a812e51b8b7df47f21e4d9e508f" } +source = { git = "https://github.com/CDCgov/cfa-calibration-tools.git?branch=wtk-store-distances#fb5d0cd5095263fdeec6e81e12c38910a32d1d3f" } dependencies = [ { name = "cfa-mrp" }, { name = "jsonschema" }, @@ -746,7 +746,7 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "calibrationtools", git = "https://github.com/CDCgov/cfa-calibration-tools.git" }, + { name = "calibrationtools", git = "https://github.com/CDCgov/cfa-calibration-tools.git?branch=wtk-store-distances" }, { name = "census", specifier = ">=0.8.25" }, { name = "cfa-mrp" }, { name = "dotenv", specifier = ">=0.9.9" }, From adb4af244dff89530f6131f6ce65b1915cf5fa17 Mon Sep 17 00:00:00 2001 From: KOVALW Date: Wed, 8 Apr 2026 18:16:24 +0000 Subject: [PATCH 04/15] clean up scripts for projection and report --- Makefile | 12 +- experiments/phase1/input/prod-config.yaml | 4 +- ...-test-config.yaml => prod-smc-config.yaml} | 4 +- .../projection/output/1233664235/input.json | 85 ---- .../projection/output/1636522374/input.json | 85 ---- .../projection/output/188677716/input.json | 85 ---- .../projection/output/2143248664/input.json | 85 ---- .../projection/output/2316239387/input.json | 85 ---- .../projection/output/2346301887/input.json | 85 ---- .../projection/output/3229486440/input.json | 85 ---- .../projection/output/4119188398/input.json | 85 ---- .../projection/output/710268182/input.json | 85 ---- experiments/phase1/reports/calibration.qmd | 411 ++++++++---------- .../src/importation/perkins_et_al_methods.py | 9 +- scripts/phase_1_calibration.py | 16 +- scripts/phase_1_projection.py | 233 +++++----- scripts/plot_phase_1_projection.py | 219 ++++++++++ uv.lock | 2 +- 18 files changed, 532 insertions(+), 1143 deletions(-) rename experiments/phase1/input/{prod-test-config.yaml => prod-smc-config.yaml} (79%) delete mode 100644 experiments/phase1/projection/output/1233664235/input.json delete mode 100644 experiments/phase1/projection/output/1636522374/input.json delete mode 100644 experiments/phase1/projection/output/188677716/input.json delete mode 100644 experiments/phase1/projection/output/2143248664/input.json delete mode 100644 experiments/phase1/projection/output/2316239387/input.json delete mode 100644 experiments/phase1/projection/output/2346301887/input.json delete mode 100644 experiments/phase1/projection/output/3229486440/input.json delete mode 100644 experiments/phase1/projection/output/4119188398/input.json delete mode 100644 experiments/phase1/projection/output/710268182/input.json create mode 100644 scripts/plot_phase_1_projection.py diff --git a/Makefile b/Makefile index 852c0c4..419e012 100644 --- a/Makefile +++ b/Makefile @@ -58,10 +58,16 @@ BASE ?= HEAD bench-compare: input/synth_pop_people_WY_10_000.csv input/synth_pop_people_WY_100_000.csv uv run scripts/bench_compare.py $(BASE) -calibrate-phase-1: ./experiments/phase1/input/priors.json ./experiments/phase1/input/default_params.json +TARGET_RESULTS = ./experiments/phase1/calibration/output_indiana/results.pkl +calibrate-phase-1: $(TARGET_RESULTS) +$(TARGET_RESULTS): ./experiments/phase1/input/priors.json ./experiments/phase1/input/default_params.json uv run cargo build -r - uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/prod-config.yaml + uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/prod-config.yaml -o ./experiments/phase1/calibration/output_indiana + +calibrate-phase-1-smc: ./experiments/phase1/input/priors.json ./experiments/phase1/input/default_params.json + uv run cargo build -r + uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/prod-smc-config.yaml -o ./experiments/phase1/calibration/smc calibrate-phase-1-dev: ./experiments/phase1/input/priors.json ./experiments/phase1/input/default_params.json uv run cargo build -r - uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/dev-config.yaml + uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/dev-config.yaml -o ./experiments/phase1/calibration/dev_$(SIZE) --default-population-size-dev $(SIZE) diff --git a/experiments/phase1/input/prod-config.yaml b/experiments/phase1/input/prod-config.yaml index 951574d..ff53016 100644 --- a/experiments/phase1/input/prod-config.yaml +++ b/experiments/phase1/input/prod-config.yaml @@ -4,7 +4,7 @@ state: Indiana year: 2020 symptomatic_reporting_prob: 0.5 priors_file: ./experiments/phase1/input/priors.json -generation_particle_count: 500 -tolerance_values: [10.0, 5.0, 2.0, 0.0] +generation_particle_count: 400 +tolerance_values: [2.0] use_env_synth_pop_file: true ixa_default_params_file: ./experiments/phase1/input/default_params.json diff --git a/experiments/phase1/input/prod-test-config.yaml b/experiments/phase1/input/prod-smc-config.yaml similarity index 79% rename from experiments/phase1/input/prod-test-config.yaml rename to experiments/phase1/input/prod-smc-config.yaml index ff53016..951574d 100644 --- a/experiments/phase1/input/prod-test-config.yaml +++ b/experiments/phase1/input/prod-smc-config.yaml @@ -4,7 +4,7 @@ state: Indiana year: 2020 symptomatic_reporting_prob: 0.5 priors_file: ./experiments/phase1/input/priors.json -generation_particle_count: 400 -tolerance_values: [2.0] +generation_particle_count: 500 +tolerance_values: [10.0, 5.0, 2.0, 0.0] use_env_synth_pop_file: true ixa_default_params_file: ./experiments/phase1/input/default_params.json diff --git a/experiments/phase1/projection/output/1233664235/input.json b/experiments/phase1/projection/output/1233664235/input.json deleted file mode 100644 index d6e47f8..0000000 --- a/experiments/phase1/projection/output/1233664235/input.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "epimodel.GlobalParams": { - "seed": 1233664235, - "max_time": 200, - "synth_population_file": "./input/in.csv", - "initial_prevalence": 0.0, - "imported_cases_timeseries": { - "include": true, - "filename": "experiments/phase1/projection/output/1233664235/imported_cases_timeseries.csv" - }, - "infectiousness_rate_fn": { - "Constant": { - "rate": 0.605374792010029, - "duration": 5.0 - } - }, - "probability_mild_given_infect": 0.4803667236120297, - "infect_to_mild_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_severe_given_mild": 0.2, - "mild_to_severe_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "mild_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_critical_given_severe": 0.2, - "severe_to_critical_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "severe_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_dead_given_critical": 0.2, - "critical_to_dead_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "critical_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "settings_properties": { - "Home": { - "alpha": 0.42105840758744206 - }, - "Workplace": { - "alpha": 0.0 - }, - "School": { - "alpha": 0.0 - }, - "CensusTract": { - "alpha": 0.0 - } - }, - "itinerary_ratios": { - "Home": 0.25, - "Workplace": 0.25, - "School": 0.25, - "CensusTract": 0.25 - }, - "prevalence_report": { - "write": true, - "filename": "person_property_count.csv", - "period": 1.0 - }, - "incidence_report": { - "write": true, - "filename": "incidence_report.csv", - "period": 1.0 - }, - "transmission_report": { - "write": false, - "filename": "transmission_report.csv" - }, - "first_death_terminates_run": false - } -} \ No newline at end of file diff --git a/experiments/phase1/projection/output/1636522374/input.json b/experiments/phase1/projection/output/1636522374/input.json deleted file mode 100644 index aa58350..0000000 --- a/experiments/phase1/projection/output/1636522374/input.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "epimodel.GlobalParams": { - "seed": 1636522374, - "max_time": 200, - "synth_population_file": "./input/in.csv", - "initial_prevalence": 0.0, - "imported_cases_timeseries": { - "include": true, - "filename": "experiments/phase1/projection/output/1636522374/imported_cases_timeseries.csv" - }, - "infectiousness_rate_fn": { - "Constant": { - "rate": 0.593767212873822, - "duration": 5.0 - } - }, - "probability_mild_given_infect": 0.6359758214549668, - "infect_to_mild_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_severe_given_mild": 0.2, - "mild_to_severe_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "mild_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_critical_given_severe": 0.2, - "severe_to_critical_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "severe_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_dead_given_critical": 0.2, - "critical_to_dead_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "critical_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "settings_properties": { - "Home": { - "alpha": 0.7013876610474458 - }, - "Workplace": { - "alpha": 0.0 - }, - "School": { - "alpha": 0.0 - }, - "CensusTract": { - "alpha": 0.0 - } - }, - "itinerary_ratios": { - "Home": 0.25, - "Workplace": 0.25, - "School": 0.25, - "CensusTract": 0.25 - }, - "prevalence_report": { - "write": true, - "filename": "person_property_count.csv", - "period": 1.0 - }, - "incidence_report": { - "write": true, - "filename": "incidence_report.csv", - "period": 1.0 - }, - "transmission_report": { - "write": false, - "filename": "transmission_report.csv" - }, - "first_death_terminates_run": false - } -} \ No newline at end of file diff --git a/experiments/phase1/projection/output/188677716/input.json b/experiments/phase1/projection/output/188677716/input.json deleted file mode 100644 index b4cc45b..0000000 --- a/experiments/phase1/projection/output/188677716/input.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "epimodel.GlobalParams": { - "seed": 188677716, - "max_time": 200, - "synth_population_file": "./input/in.csv", - "initial_prevalence": 0.0, - "imported_cases_timeseries": { - "include": true, - "filename": "experiments/phase1/projection/output/188677716/imported_cases_timeseries.csv" - }, - "infectiousness_rate_fn": { - "Constant": { - "rate": 0.21675169774925596, - "duration": 5.0 - } - }, - "probability_mild_given_infect": 0.6227137436968164, - "infect_to_mild_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_severe_given_mild": 0.2, - "mild_to_severe_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "mild_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_critical_given_severe": 0.2, - "severe_to_critical_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "severe_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_dead_given_critical": 0.2, - "critical_to_dead_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "critical_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "settings_properties": { - "Home": { - "alpha": 0.6722833913813158 - }, - "Workplace": { - "alpha": 0.0 - }, - "School": { - "alpha": 0.0 - }, - "CensusTract": { - "alpha": 0.0 - } - }, - "itinerary_ratios": { - "Home": 0.25, - "Workplace": 0.25, - "School": 0.25, - "CensusTract": 0.25 - }, - "prevalence_report": { - "write": true, - "filename": "person_property_count.csv", - "period": 1.0 - }, - "incidence_report": { - "write": true, - "filename": "incidence_report.csv", - "period": 1.0 - }, - "transmission_report": { - "write": false, - "filename": "transmission_report.csv" - }, - "first_death_terminates_run": false - } -} \ No newline at end of file diff --git a/experiments/phase1/projection/output/2143248664/input.json b/experiments/phase1/projection/output/2143248664/input.json deleted file mode 100644 index e2befd2..0000000 --- a/experiments/phase1/projection/output/2143248664/input.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "epimodel.GlobalParams": { - "seed": 2143248664, - "max_time": 200, - "synth_population_file": "./input/in.csv", - "initial_prevalence": 0.0, - "imported_cases_timeseries": { - "include": true, - "filename": "experiments/phase1/projection/output/2143248664/imported_cases_timeseries.csv" - }, - "infectiousness_rate_fn": { - "Constant": { - "rate": 0.38129393458037253, - "duration": 5.0 - } - }, - "probability_mild_given_infect": 0.549756606918229, - "infect_to_mild_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_severe_given_mild": 0.2, - "mild_to_severe_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "mild_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_critical_given_severe": 0.2, - "severe_to_critical_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "severe_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_dead_given_critical": 0.2, - "critical_to_dead_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "critical_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "settings_properties": { - "Home": { - "alpha": 0.25628084496915715 - }, - "Workplace": { - "alpha": 0.0 - }, - "School": { - "alpha": 0.0 - }, - "CensusTract": { - "alpha": 0.0 - } - }, - "itinerary_ratios": { - "Home": 0.25, - "Workplace": 0.25, - "School": 0.25, - "CensusTract": 0.25 - }, - "prevalence_report": { - "write": true, - "filename": "person_property_count.csv", - "period": 1.0 - }, - "incidence_report": { - "write": true, - "filename": "incidence_report.csv", - "period": 1.0 - }, - "transmission_report": { - "write": false, - "filename": "transmission_report.csv" - }, - "first_death_terminates_run": false - } -} \ No newline at end of file diff --git a/experiments/phase1/projection/output/2316239387/input.json b/experiments/phase1/projection/output/2316239387/input.json deleted file mode 100644 index cef2f23..0000000 --- a/experiments/phase1/projection/output/2316239387/input.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "epimodel.GlobalParams": { - "seed": 2316239387, - "max_time": 200, - "synth_population_file": "./input/in.csv", - "initial_prevalence": 0.0, - "imported_cases_timeseries": { - "include": true, - "filename": "experiments/phase1/projection/output/2316239387/imported_cases_timeseries.csv" - }, - "infectiousness_rate_fn": { - "Constant": { - "rate": 0.5831477385552657, - "duration": 5.0 - } - }, - "probability_mild_given_infect": 0.7305764875435811, - "infect_to_mild_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_severe_given_mild": 0.2, - "mild_to_severe_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "mild_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_critical_given_severe": 0.2, - "severe_to_critical_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "severe_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_dead_given_critical": 0.2, - "critical_to_dead_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "critical_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "settings_properties": { - "Home": { - "alpha": 0.7211968482003426 - }, - "Workplace": { - "alpha": 0.0 - }, - "School": { - "alpha": 0.0 - }, - "CensusTract": { - "alpha": 0.0 - } - }, - "itinerary_ratios": { - "Home": 0.25, - "Workplace": 0.25, - "School": 0.25, - "CensusTract": 0.25 - }, - "prevalence_report": { - "write": true, - "filename": "person_property_count.csv", - "period": 1.0 - }, - "incidence_report": { - "write": true, - "filename": "incidence_report.csv", - "period": 1.0 - }, - "transmission_report": { - "write": false, - "filename": "transmission_report.csv" - }, - "first_death_terminates_run": false - } -} \ No newline at end of file diff --git a/experiments/phase1/projection/output/2346301887/input.json b/experiments/phase1/projection/output/2346301887/input.json deleted file mode 100644 index 6112788..0000000 --- a/experiments/phase1/projection/output/2346301887/input.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "epimodel.GlobalParams": { - "seed": 2346301887, - "max_time": 200, - "synth_population_file": "./input/in.csv", - "initial_prevalence": 0.0, - "imported_cases_timeseries": { - "include": true, - "filename": "experiments/phase1/projection/output/2346301887/imported_cases_timeseries.csv" - }, - "infectiousness_rate_fn": { - "Constant": { - "rate": 0.4819061165882031, - "duration": 5.0 - } - }, - "probability_mild_given_infect": 0.4975577343837682, - "infect_to_mild_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_severe_given_mild": 0.2, - "mild_to_severe_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "mild_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_critical_given_severe": 0.2, - "severe_to_critical_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "severe_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_dead_given_critical": 0.2, - "critical_to_dead_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "critical_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "settings_properties": { - "Home": { - "alpha": 0.36864251611062887 - }, - "Workplace": { - "alpha": 0.0 - }, - "School": { - "alpha": 0.0 - }, - "CensusTract": { - "alpha": 0.0 - } - }, - "itinerary_ratios": { - "Home": 0.25, - "Workplace": 0.25, - "School": 0.25, - "CensusTract": 0.25 - }, - "prevalence_report": { - "write": true, - "filename": "person_property_count.csv", - "period": 1.0 - }, - "incidence_report": { - "write": true, - "filename": "incidence_report.csv", - "period": 1.0 - }, - "transmission_report": { - "write": false, - "filename": "transmission_report.csv" - }, - "first_death_terminates_run": false - } -} \ No newline at end of file diff --git a/experiments/phase1/projection/output/3229486440/input.json b/experiments/phase1/projection/output/3229486440/input.json deleted file mode 100644 index e972097..0000000 --- a/experiments/phase1/projection/output/3229486440/input.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "epimodel.GlobalParams": { - "seed": 3229486440, - "max_time": 200, - "synth_population_file": "./input/in.csv", - "initial_prevalence": 0.0, - "imported_cases_timeseries": { - "include": true, - "filename": "experiments/phase1/projection/output/3229486440/imported_cases_timeseries.csv" - }, - "infectiousness_rate_fn": { - "Constant": { - "rate": 0.4699308621003202, - "duration": 5.0 - } - }, - "probability_mild_given_infect": 0.46000524946803945, - "infect_to_mild_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_severe_given_mild": 0.2, - "mild_to_severe_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "mild_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_critical_given_severe": 0.2, - "severe_to_critical_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "severe_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_dead_given_critical": 0.2, - "critical_to_dead_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "critical_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "settings_properties": { - "Home": { - "alpha": 0.7404129336677752 - }, - "Workplace": { - "alpha": 0.0 - }, - "School": { - "alpha": 0.0 - }, - "CensusTract": { - "alpha": 0.0 - } - }, - "itinerary_ratios": { - "Home": 0.25, - "Workplace": 0.25, - "School": 0.25, - "CensusTract": 0.25 - }, - "prevalence_report": { - "write": true, - "filename": "person_property_count.csv", - "period": 1.0 - }, - "incidence_report": { - "write": true, - "filename": "incidence_report.csv", - "period": 1.0 - }, - "transmission_report": { - "write": false, - "filename": "transmission_report.csv" - }, - "first_death_terminates_run": false - } -} \ No newline at end of file diff --git a/experiments/phase1/projection/output/4119188398/input.json b/experiments/phase1/projection/output/4119188398/input.json deleted file mode 100644 index e6f9a7a..0000000 --- a/experiments/phase1/projection/output/4119188398/input.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "epimodel.GlobalParams": { - "seed": 4119188398, - "max_time": 200, - "synth_population_file": "./input/in.csv", - "initial_prevalence": 0.0, - "imported_cases_timeseries": { - "include": true, - "filename": "experiments/phase1/projection/output/4119188398/imported_cases_timeseries.csv" - }, - "infectiousness_rate_fn": { - "Constant": { - "rate": 0.2701895073489868, - "duration": 5.0 - } - }, - "probability_mild_given_infect": 0.638845894352331, - "infect_to_mild_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_severe_given_mild": 0.2, - "mild_to_severe_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "mild_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_critical_given_severe": 0.2, - "severe_to_critical_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "severe_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_dead_given_critical": 0.2, - "critical_to_dead_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "critical_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "settings_properties": { - "Home": { - "alpha": 0.29807721182711877 - }, - "Workplace": { - "alpha": 0.0 - }, - "School": { - "alpha": 0.0 - }, - "CensusTract": { - "alpha": 0.0 - } - }, - "itinerary_ratios": { - "Home": 0.25, - "Workplace": 0.25, - "School": 0.25, - "CensusTract": 0.25 - }, - "prevalence_report": { - "write": true, - "filename": "person_property_count.csv", - "period": 1.0 - }, - "incidence_report": { - "write": true, - "filename": "incidence_report.csv", - "period": 1.0 - }, - "transmission_report": { - "write": false, - "filename": "transmission_report.csv" - }, - "first_death_terminates_run": false - } -} \ No newline at end of file diff --git a/experiments/phase1/projection/output/710268182/input.json b/experiments/phase1/projection/output/710268182/input.json deleted file mode 100644 index 34db019..0000000 --- a/experiments/phase1/projection/output/710268182/input.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "epimodel.GlobalParams": { - "seed": 710268182, - "max_time": 200, - "synth_population_file": "./input/in.csv", - "initial_prevalence": 0.0, - "imported_cases_timeseries": { - "include": true, - "filename": "experiments/phase1/projection/output/710268182/imported_cases_timeseries.csv" - }, - "infectiousness_rate_fn": { - "Constant": { - "rate": 0.5329885599434854, - "duration": 5.0 - } - }, - "probability_mild_given_infect": 0.8482922067498563, - "infect_to_mild_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_severe_given_mild": 0.2, - "mild_to_severe_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "mild_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_critical_given_severe": 0.2, - "severe_to_critical_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "severe_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "probability_dead_given_critical": 0.2, - "critical_to_dead_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "critical_to_resolved_delay": { - "mu": 0.1, - "sigma": 0.1 - }, - "settings_properties": { - "Home": { - "alpha": 0.311833310838526 - }, - "Workplace": { - "alpha": 0.0 - }, - "School": { - "alpha": 0.0 - }, - "CensusTract": { - "alpha": 0.0 - } - }, - "itinerary_ratios": { - "Home": 0.25, - "Workplace": 0.25, - "School": 0.25, - "CensusTract": 0.25 - }, - "prevalence_report": { - "write": true, - "filename": "person_property_count.csv", - "period": 1.0 - }, - "incidence_report": { - "write": true, - "filename": "incidence_report.csv", - "period": 1.0 - }, - "transmission_report": { - "write": false, - "filename": "transmission_report.csv" - }, - "first_death_terminates_run": false - } -} \ No newline at end of file diff --git a/experiments/phase1/reports/calibration.qmd b/experiments/phase1/reports/calibration.qmd index cedfd40..4815837 100644 --- a/experiments/phase1/reports/calibration.qmd +++ b/experiments/phase1/reports/calibration.qmd @@ -33,12 +33,17 @@ import shutil os.chdir('../../../') wd = Path("experiments", "phase1") +results_name = "output_indiana" + +calibration_dir = wd / "calibration" / results_name +projection_dir = wd / "projection" / results_name # Load results object from the calibration directory -with open(wd / "calibration" / "output" / "results.pkl", "rb") as fp: +with open(calibration_dir / "results.pkl", "rb") as fp: results: CalibrationResults = pickle.load(fp) ``` +## Parameters Quantiles for each fitted parameter ```{python} @@ -55,7 +60,7 @@ print( ) ``` -Histograms of posterior samples compared to the probability density of each prior. For each plot, the prior is plotted as a blue line and the histogram of the posterior samples is plotted in orange with a kernel density estimator overlay. To generate the histogram, we sample $n$ particles from the posterior population, where $n$ is the effective sample size of the population. Re-sampling particles in this manner reflects the posterior weight distribution, the probability mass function over accepted particles determined by the ABC-SMC algorithm perturbation kernel and prior distributions. +Histograms of posterior samples compared to the probability density of each prior. For each plot, the prior is plotted as a blue line and the histogram of the posterior samples is plotted in orange with a kernel density estimator overlay. To generate the histogram, we sample $n$ particles from the posterior population, where $n$ is the effective sample size of the population. Re-sampling particles in this manner reflects the posterior weight distribution, the probability mass function over accepted particles determined by the ABC-SMC algorithm perturbation kernel and prior distributions. We can see that the posteriors do not storngly diverge from the priors, indicating the expected result that limited data does not provide much information when priors are well-specified. ```{python} #| echo: false @@ -121,263 +126,217 @@ for param in results.fitted_params: plt.show() ``` -```{python} -#| echo: false -## Obtaining the importation time series and death incidence data frames for a random smaple form the posterior -# Re-generating a random sample of parameter sets from posterior -particle_count = int(min(100, results.ess)) -particles = results.sample_posterior_particles(n=particle_count) - -default_params_file = wd / 'input' / 'default_params.json' - -with open(default_params_file, "rb") as fp: - default_params = json.load(fp) - -ixa_overrides = { - "synth_population_file": "./input/in.csv", - "imported_cases_timeseries": { - "filename": "./experiments/phase1/projection/imported_cases_timeseries.csv" - }, - "max_time": 200, - "first_death_terminates_run": False -} -default_params = apply_dict_overrides(default_params, {'epimodel.GlobalParams': ixa_overrides}) - -mrp_defaults = { - 'ixa_inputs': default_params, - "config_inputs": { - "exe_file": "./target/release/ixa-epi-covid", - "output_dir": "./experiments/phase1/projection/output", - "force_overwrite": True, - "outputs_to_read": ['aggregated_deaths_report', 'imported_cases_timeseries'] - }, - "importation_inputs": { - "state": "Indiana", - "year": 2020, - "symptomatic_reporting_prob": 0.5 - }, -} - - -importation_curves = [] -death_data = [] -for i, p in enumerate(particles): - seed = p['seed'] - output_path = Path(wd, "calibration", "output", f"{seed}") - importation_curves.append( - pl.read_csv(output_path / "imported_cases_timeseries.csv").with_columns( - pl.lit(i).alias("id"), - pl.col('imported_infections').cum_sum().over(order_by='time').alias('cumulative_imported_infections') - ) - ) - death_data.append( - pl.read_csv( - output_path / default_params['epimodel.GlobalParams']['aggregated_deaths_report']['filename'] - ).with_columns( - pl.lit(i).alias("id"), - pl.col('count').cum_sum().over(order_by='t_upper').alias('cumulative_deaths') - ) - ) -importations = pl.concat(importation_curves) -deaths = pl.concat(death_data) -``` +## Infection imprtation and local transmission ```{python} -#| eval: false #| echo: false -default_params_file = wd / 'input' / 'default_params.json' - -with open(default_params_file, "rb") as fp: - default_params = json.load(fp) - -ixa_overrides = { - "synth_population_file": "./input/in.csv", - "imported_cases_timeseries": { - "filename": "./experiments/phase1/projection/imported_cases_timeseries.csv" - }, - "max_time": 200, - "first_death_terminates_run": False -} -default_params = apply_dict_overrides(default_params, {'epimodel.GlobalParams': ixa_overrides}) - -mrp_defaults = { - 'ixa_inputs': default_params, - "config_inputs": { - "exe_file": "./target/release/ixa-epi-covid", - "output_dir": "./experiments/phase1/projection/output", - "force_overwrite": True, - "outputs_to_read": ['prevalence_report', 'imported_cases_timeseries'] - }, - "importation_inputs": { - "state": "Indiana", - "year": 2020, - "symptomatic_reporting_prob": 0.5 - }, -} - -if os.path.exists(mrp_defaults["config_inputs"]["output_dir"]): - shutil.rmtree(mrp_defaults["config_inputs"]["output_dir"]) - -def update_epimodel_output_dir( - particle_params: dict[str, Any], output_dir: str -) -> dict[str, Any]: - """ - Updates the output directory in the epimodel parameters to point to the particle-specific output directory. - Args: - particle_params (dict[str, Any]): The parameters for a specific particle, which includes the default - parameters merged with the particle-specific parameters. - output_dir (str): The path to the particle-specific output directory. - Returns: - dict[str, Any]: The updated parameters with the output directory in the epimodel parameters updated to the particle-specific output directory. - """ - params = apply_dict_overrides( - particle_params, - { - "config_inputs": {"output_dir": str(output_dir)}, - "ixa_inputs": { - "epimodel.GlobalParams": { - "imported_cases_timeseries": { - "filename": str( - Path(output_dir, "imported_cases_timeseries.csv") - ) - } - } - }, - }, - ) - return params - -reader = ParticleReader(results.fitted_params + ['seed'], mrp_defaults) -def particles_to_params(particle: Particle, reader: ParticleReader = reader): - particle_params = reader.read_particle(particle=particle) - # Make particle-specific output directory and update the output path in the parameters accordingly - output_dir = Path( - particle_params["config_inputs"]["output_dir"], - str(particle_params["ixa_inputs"]["epimodel.GlobalParams"]["seed"]), - ) - try: - output_dir.mkdir(parents=True, exist_ok=False) - - updated_params = update_epimodel_output_dir(particle_params, output_dir) - return updated_params - except FileExistsError: - return {} - -uniq_id = 0 -model = CovidModel() -importation_curves = [] -prevalence_data = [] -os.makedirs(mrp_defaults["config_inputs"]["output_dir"], exist_ok=True) -parallel_executor = ThreadPoolExecutor(max_workers=mp.cpu_count()) - -def simulate_particle(p): - model_inputs = particles_to_params(p) - if not model_inputs: - return model_inputs["config_inputs"]["output_dir"] - model.simulate(model_inputs) - return model_inputs["config_inputs"]["output_dir"] - -dirs = [] -for dir in parallel_executor.map(simulate_particle, particles): - dirs.append(dir) - -for dir in dirs: - importation_curves.append( - pl.read_csv(Path(dir, "imported_cases_timeseries.csv")).with_columns(pl.lit(uniq_id).alias("id")) - ) - prevalence_data.append( - pl.read_csv(Path(dir, "prevalence_report.csv")).with_columns(pl.lit(uniq_id).alias("id")) - ) - uniq_id += 1 - -importations = pl.concat(importation_curves) -all_prevalence_data = pl.concat(prevalence_data) -deaths = ( - all_prevalence_data - .filter(pl.col("symptom_status") == "Dead") - .group_by("t", "id") - .agg(pl.sum("count")) -) -parallel_executor.shutdown() + +# Load the data from the projection directory +projections_path = projection_dir / "simulations" +aggregated_deaths_report_list = [] +imported_cases_timeseries_list = [] +prevalence_report_list = [] +for particle_dir in projections_path.iterdir(): + if particle_dir.is_dir(): + try: + imported_cases_timeseries = pl.read_csv(particle_dir / "imported_cases_timeseries.csv") + aggregated_deaths_report = pl.read_csv(particle_dir / "aggregated_deaths_report.csv") + imported_cases_timeseries = imported_cases_timeseries.with_columns( + pl.col("imported_infections").cum_sum().over(order_by="time").alias("cumulative_imported_infections"), + pl.lit(particle_dir.name).alias("seed") + ) + aggregated_deaths_report = aggregated_deaths_report.with_columns( + pl.col("count").cum_sum().over(order_by="t_upper").alias("cumulative_count"), + pl.lit(particle_dir.name).alias("seed") + ) + prevalence_report = pl.read_csv(particle_dir / "person_property_count.csv").with_columns( + pl.when(pl.col('age') < 18).then(pl.lit("Age0To17")) + .when((pl.col('age') >= 18) & (pl.col('age') < 50)).then(pl.lit("Age18to49")) + .when((pl.col('age') >= 50) & (pl.col('age') < 65)).then(pl.lit("Age50to64")) + .otherwise(pl.lit("Age65Plus")).alias("age_group") + ).group_by( + 't', 'age_group', 'symptom_status', 'infection_status' + ).agg( + pl.sum('count').alias('count') + ).sort(['t', 'age_group', 'symptom_status', 'infection_status']).with_columns( + pl.lit(particle_dir.name).alias("seed") + ) + imported_cases_timeseries_list.append(imported_cases_timeseries) + aggregated_deaths_report_list.append(aggregated_deaths_report) + prevalence_report_list.append(prevalence_report) + except (pl.exceptions.NoDataError, FileNotFoundError) as e: + print(f"No data found for particle directory: {particle_dir}, skipping.") + + +death_data = pl.concat(aggregated_deaths_report_list) +imported_data = pl.concat(imported_cases_timeseries_list) +prevalence_data = pl.concat(prevalence_report_list) ``` -We can show the posterior variance in the imported infections time series by overlaying samples from the simulated particles. Blue points on the plot represent the count of imported infections for a given day in a given simulation if the number of importations was above zero. Black line show the median and 95% credible interval of the number of imported infections on each day from January 1st to March 12th. +When we inspect the infections that are imported, we see that the posterior estimate of earliest infection importation is in late January, or day 20 in the simulation. Cumulative imported infections tended to grow exponsentially by the beginning of MArch, or day 60 in the simulation. ```{python} -#| echo: false + sns.scatterplot( - data=importations.filter(pl.col('imported_infections') > 0), + data=imported_data.filter(pl.col('imported_infections') > 0), x="time", y="cumulative_imported_infections", - alpha=0.05, + alpha=0.2, ) sns.lineplot( - data=importations, + data=imported_data, x="time", y="cumulative_imported_infections", - estimator='median' + estimator='median', ) -plt.title(f"Cumulative imported infections over time ({particle_count} posterior samples)") -plt.xlabel("Time (days since simulation start)") -plt.ylabel("Number of imported infections (cumulative)") -plt.tight_layout() +plt.xlabel("Time") +plt.ylabel("Cumulative Imported Infections") plt.show() ``` -We can project the cumulative number of deaths observed in the model projections. Because the last SMC step has a distance tolerance threshold below one, we see no simulations accrue deaths before the first reported death in the data. + +We can now see the unobserved posterior infection dyanmics prior to the first reported death. Infections consistently outpace importation, indicating sustained local transmission. The number of individuals who have already recovered from their infection is already high by the time the first death was observed, indicating that local tranmsission is occurring rapidly by the time surveillance efforts can detect and respond to the outbreak. The red dashed veritcal line shows the first reported case observed in Indiana (not used in calibration), while the black dashed vertical line shows the date of first observed death in the data (used to define the distance function). + ```{python} -#| echo: false -sns.lineplot( - data=deaths, - x="t_upper", - y="cumulative_deaths", - units='id', estimator=None, - alpha=0.05 +g=sns.relplot( + data=prevalence_data.group_by( + "t", "infection_status", "seed" + ).agg( + pl.sum('count').alias('count') + ).filter( + (pl.col('t') < 80) & (pl.col('infection_status').is_in(["Infectious", "Recovered"])) + ), + x="t", y="count", + kind="line", + hue="infection_status", + alpha=0.3, + units="seed", + estimator=None, + col="infection_status", + col_order=["Infectious", "Recovered"], + # estimator='median', + # errorbar=lambda x: (x.quantile(0.1), x.quantile(0.9)) ) -sns.lineplot( - data=deaths, - x="t_upper", - y="cumulative_deaths", +g.set(ylim=(0, 100)) +plt.xlabel("Time") +for ax in g.axes.flat: + ax.axvline(x=65, color="red", linestyle="--", label="First case reported (March 6, 2020)") + ax.axvline(x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)") +plt.ylabel("Count") +plt.show() +``` + +Expanding the time horizon of our simulations, we can see that the SIR transmission dynamics of the model are highly variable after the first death occurs. We can conclude that given the timing of the first death, the peak prevalence of infections is likely to occur within three months, but we don't have a strong indication of the magnitude of that prevalence, as the peak ranges from 500 thousand to 5 million active infections across simulations. We can show from these projections that the model behaves as expected according to classical epidemic theory - delayed epidemic peaks tend to have lower magnitudes of maximum prevalence but similar epidemic sizes. + +```{python} + +g=sns.relplot( + data=prevalence_data.group_by( + "t", "infection_status", "seed" + ).agg( + pl.sum('count').alias('count') + ), + x="t", y="count", + kind="line", + hue="infection_status", + alpha=0.3, + units="seed", + estimator=None, + col="infection_status", + col_order=["Susceptible", "Infectious", "Recovered"], + # estimator='median', + # errorbar=lambda x: (x.quantile(0.1), x.quantile(0.9)) ) -plt.title(f"Total observed deaths over time ({particle_count} posterior samples)") -plt.xlabel("Time (days since simulation start)") -plt.ylabel("Number of deaths (cumulative)") +plt.xlabel("Time") +for ax in g.axes.flat: + # ax.axvline(x=65, color="red", linestyle="--", label="First case reported (March 6, 2020)") + ax.axvline(x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)") +plt.ylabel("Count") +plt.show() +``` + +## Morbidity and mortality +We can compare the trajectories of the cumulative count of deaths to the time of the frist reported death that we used in defining the distance function of our calibration approach. There is a large range of mortality rates across simulations, but they are appropriately concentrated to begin near in time to the first observed death. + +```{python} +sns.lineplot(data=death_data, x="t_upper", y="cumulative_count", alpha=0.2, units ="seed", estimator=None) +plt.xlabel("Time") +plt.ylabel("Cumulative Deaths") +plt.yscale("log") plt.axvline(x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)") -plt.tight_layout() plt.show() ``` -Finally, we can plot the same trajectories for number of infections observed in the model over time, which includes both imported infections and locally acquired infections. We see that some epidemic trajectories are strongly delayed from first imported infections due to stochasticity. +If we look at the proportion of simulations that have observed at least one critical or sever case by age group, we can see that the timing of most simulations aligns well with the first reported symptomatic case observed in Indiana (MArch 6th, 2020). Only the category of individuals 65 and older always see at least one severe and critical case in each simulation by the calibration window end. ```{python} -#| echo: false -#| eval: false -sir_data = all_prevalence_data.group_by( - 't', 'infection_status', 'id' -).agg( - pl.sum('count') -) +n_unique_seeds = prevalence_data.select(pl.col("seed").n_unique()).item() + +age_group_values = prevalence_data.filter( + pl.col('symptom_status').is_in(["Severe", "Critical"]) + ).group_by( + "t", "age_group", "symptom_status", "seed" + ).agg( + pl.sum('count').alias('count') + ).filter( + pl.col('t') < 85 + ).group_by( + "age_group", "symptom_status", "t" + ).agg( + (pl.len() / n_unique_seeds).alias('proportion_of_simualtions_have_had_cases') + ) g = sns.relplot( - data = sir_data, - x='t', - y='count', - kind='line', - hue='infection_status', - units='id', - estimator=None, - alpha=0.1, - row='infection_status', + data=age_group_values, + x="t", y="proportion_of_simualtions_have_had_cases", + kind="line", + col="age_group", + col_order=["Age0To17", "Age18to49", "Age50to64", "Age65Plus"], + col_wrap=2, + hue="symptom_status", ) -g.fig.suptitle( - f"Individuals by infection status over time ({particle_count} posterior samples)", + +g.set(ylim=(0,1)) + +g.figure.suptitle( + f"Observing symptomatic cases in simulations", fontsize='x-large', fontweight='bold' ) -g.fig.subplots_adjust(top=0.85) -g.set_axis_labels("Time (days since simulation start)", "Number of people") +g.figure.subplots_adjust(top=0.85) +g.set_axis_labels("Time (days since simulation start)", "Proportion of simulations with at least one case") for ax in g.axes.flat: - ax.axvline(x=65, color="black", linestyle="--", label="First case reported (March 6, 2020)") - ax.axvline(x=75, color="red", linestyle="--", label="First death reported (March 16, 2020)") + ax.axvline(x=65, color="red", linestyle="--", label="First case reported (March 6, 2020)") + ax.axvline(x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)") +plt.show() +``` + +Expanding the time horizon again and assessing prevalence of symptom statuses across age groups, we can see that the trajectories are just as variable as the infection prevalence trajectories. However, we generally see highest prevalence of critical and severe symptoms in the 65 and older age group, as we would expect, while the highest prevalence of mild symptoms occurs in the 18 to 49 age group, which constitutes the largest age group class and so would also be expected to be the higest proportion with symptoms in the absence of age-specific symptom probability and attack rates. + +```{python} +g = sns.relplot( + data=prevalence_data.filter( + ~pl.col('symptom_status').is_in(["NoSymptoms", "Dead", "Resolved"]) + ).group_by( + "t", "age_group", "symptom_status", "seed" + ).agg( + pl.sum('count').alias('count') + ), + x="t", y="count", + kind="line", + col="age_group", row='symptom_status', + col_order=["Age0To17", "Age18to49", "Age50to64", "Age65Plus"], + row_order=["Mild", "Severe", "Critical"], + facet_kws={'sharey': 'row', 'sharex': True}, + hue="symptom_status", + alpha=0.2, + units="seed", + estimator=None, + # estimator='median', + # errorbar = lambda x: (x.quantile(0.025), x.quantile(0.975)) +) +g.figure.subplots_adjust(top=0.85) +g.set_axis_labels("Time (days since simulation start)", "Number of people") +g.set_titles("") plt.show() ``` diff --git a/packages/importation/src/importation/perkins_et_al_methods.py b/packages/importation/src/importation/perkins_et_al_methods.py index c75d319..f457b5f 100644 --- a/packages/importation/src/importation/perkins_et_al_methods.py +++ b/packages/importation/src/importation/perkins_et_al_methods.py @@ -258,7 +258,9 @@ def sample_undetected_infections( """ if seed is not None: - np.random.seed(seed) + rng = np.random.default_rng(seed) + else: + rng = np.random.default_rng() prob_data = prob_undetected_infections( n_undetected=list( @@ -269,7 +271,7 @@ def sample_undetected_infections( prop_ascf=prop_ascf, ) - sampled_undetected = np.random.choice( + sampled_undetected = rng.choice( prob_data["n_undetected_infections"].to_list(), size=1, p=prob_data["probability"].to_list(), @@ -298,9 +300,6 @@ def sample_us_importation_incidence_data( onset_day, and exposure_day with limited effort, albeit likely overfitted to the 153 data points. """ - if seed is not None: - np.random.seed(seed) - prop_ascf = get_prop_ascf(importation_parameters) # Sample undetected infections based on known cases and deaths diff --git a/scripts/phase_1_calibration.py b/scripts/phase_1_calibration.py index c24003d..f341138 100644 --- a/scripts/phase_1_calibration.py +++ b/scripts/phase_1_calibration.py @@ -160,17 +160,25 @@ def particles_to_params( particle_params = reader.read_particle(particle=particle) # Make particle-specific output directory and update the output path in the parameters accordingly simulations_dir = Path( - particle_params["config_inputs"]["output_dir"], - "simulations" + particle_params["config_inputs"]["output_dir"], "simulations" ) # Count existing directories in simulations_dir if not simulations_dir.exists(): dir_count = 0 else: - dir_count = len(os.walk(simulations_dir).__next__()[1]) + dir_count = len(os.walk(simulations_dir).__next__()[1]) output_dir = Path( simulations_dir, - ".".join([str(dir_count), str(particle_params["ixa_inputs"]["epimodel.GlobalParams"]["seed"])]), + ".".join( + [ + str(dir_count), + str( + particle_params["ixa_inputs"]["epimodel.GlobalParams"][ + "seed" + ] + ), + ] + ), ) output_dir.mkdir(parents=True, exist_ok=False) diff --git a/scripts/phase_1_projection.py b/scripts/phase_1_projection.py index 64d5423..b4dc4d5 100644 --- a/scripts/phase_1_projection.py +++ b/scripts/phase_1_projection.py @@ -1,61 +1,63 @@ import asyncio -from io import StringIO +import os import pickle +import shutil +import time +from concurrent.futures import ThreadPoolExecutor from pathlib import Path -from typing import Callable, Any, NoReturn -import threading -from calibrationtools import CalibrationResults, Particle -from concurrent.futures import ThreadPoolExecutor +import matplotlib.pyplot as plt +import seaborn as sns +from calibrationtools import ( + CalibrationResults, + Particle, + SamplerReporter, + run_coroutine_from_sync, +) from particle_reader import ParticleReader from ixa_epi_covid import CovidModel, update_epimodel_output_dir from ixa_epi_covid.config_parser import CovidModelConfig -import seaborn as sns -import matplotlib.pyplot as plt -import polars as pl -import os -import time -from rich.console import Console - # Run specific parameters declaration -------------------------------------------------------------------------------- -rerun_particle_count = 2 +rerun_particle_count = 100 +directory_name = "output_indiana" max_workers = 4 +parallel = False +force_overwrite = True +plot_distance_distribution = True + # Load the calibration -------------------------------------------------------------------------------- -calibration_output_dir = Path("experiments", "phase1", "calibration", "test") +calibration_output_dir = Path( + "experiments", "phase1", "calibration", directory_name +) +if not calibration_output_dir.exists(): + raise FileNotFoundError( + f"Calibration output directory {calibration_output_dir} does not exist. Run the calibration script before running this projection script." + ) +projection_output_dir = Path( + "experiments", "phase1", "projection", directory_name +) +if projection_output_dir.exists(): + if force_overwrite: + shutil.rmtree(projection_output_dir) + else: + raise FileExistsError( + f"Projection output directory {projection_output_dir} already exists. Set force_overwrite to True to overwrite it." + ) + with open(calibration_output_dir / "config.pkl", "rb") as f: config: CovidModelConfig = pickle.load(f) with open(calibration_output_dir / "results.pkl", "rb") as f: results: CalibrationResults = pickle.load(f) -distances = results.flatten_distance_history() -for generation, errs in distances.items(): - print(f"Generation {generation} errors: {errs}") - sns.histplot(errs, label=f"Generation {generation}") - plt.show() - -imported_cases_timeseries = [] -aggregated_deaths_report = [] -for particle in results.sample_posterior_particles(n=rerun_particle_count): - seed = particle["seed"] - simulation_output_dir = Path( - calibration_output_dir, - "simulations", - str(seed), - ) - imported_cases_timeseries.append(pl.read_csv(simulation_output_dir / "imported_cases_timeseries.csv").with_columns(pl.lit(seed).alias("seed"))) - aggregated_deaths_report.append(pl.read_csv(simulation_output_dir / "aggregated_deaths_report.csv").with_columns(pl.lit(seed).alias("seed"))) - -imported_cases_timeseries_df = pl.concat(imported_cases_timeseries) -aggregated_deaths_report_df = pl.concat(aggregated_deaths_report) - -sns.lineplot(data=imported_cases_timeseries_df, x="time", y="imported_infections", units="seed", estimator=None) -plt.show() -sns.lineplot(data=aggregated_deaths_report_df.filter(pl.col("t_upper") > 70), x="t_upper", y="count", units="seed", estimator=None) -plt.show() +if plot_distance_distribution: + distances = results.flatten_distance_history() + for generation, errs in distances.items(): + sns.histplot(errs, label=f"Generation {generation}") + plt.show() # Change parameters for projection -------------------------------------------------------------------------------- ixa_overrides = { @@ -67,12 +69,8 @@ config.update_ixa_params(ixa_overrides) mrp_defaults = config.get_mrp_defaults_for_output( - output_dir=Path("experiments", "phase1", "projection", "output"), - outputs_to_read=[ - "prevalence_report", - "aggregated_deaths_report", - "imported_cases_timeseries", - ], + output_dir=projection_output_dir, + outputs_to_read=[], # We do not need to read the outputs from the projection runs, so we can leave this empty ) # Re-run particles with new parameters -------------------------------------------------------------------------------- @@ -91,17 +89,25 @@ def particles_to_params(particle: Particle, reader: ParticleReader = reader): particle_params = reader.read_particle(particle=particle) # Make particle-specific output directory and update the output path in the parameters accordingly simulations_dir = Path( - particle_params["config_inputs"]["output_dir"], - "simulations" + particle_params["config_inputs"]["output_dir"], "simulations" ) # Count existing directories in simulations_dir if not simulations_dir.exists(): dir_count = 0 else: - dir_count = len(os.walk(simulations_dir).__next__()[1]) + dir_count = len(os.walk(simulations_dir).__next__()[1]) output_dir = Path( simulations_dir, - ".".join([str(dir_count), str(particle_params["ixa_inputs"]["epimodel.GlobalParams"]["seed"])]), + ".".join( + [ + str(dir_count), + str( + particle_params["ixa_inputs"]["epimodel.GlobalParams"][ + "seed" + ] + ), + ] + ), ) output_dir.mkdir(parents=True, exist_ok=False) @@ -113,43 +119,26 @@ def run_particle(particle: Particle): particle_params = particles_to_params(particle=particle) model.simulate(particle_params) -def get_console(verbose: bool = True) -> Console: - """Return the console used for sampler reporting. - This helper creates a visible Rich console for normal runs and a hidden - in-memory console when sampler output should be suppressed. +def _evaluate_particle_chunk( + particles: list[Particle], +) -> list[float]: + """Evaluate a chunk of proposed particles serially. + + This helper keeps chunk evaluation reusable between the serial and + threaded batch-processing paths. Args: - verbose (bool): Whether console output should be visible. + proposed_particles (list[Particle]): Proposed particles to score. + particle_kwargs (dict[str, Any]): Additional keyword arguments + forwarded into particle evaluation. Returns: - Console: Rich console configured for the requested verbosity. + list[float]: Distances computed for the proposed particles. """ - if verbose: - return Console(force_terminal=True) - return Console(file=StringIO(), force_terminal=False) - -class SamplerReporter: - """Create progress displays and print run summaries. + return [run_particle(particle=particle) for particle in particles] - This helper owns the Rich console and the formatting of generation and run - summaries so execution engines do not need to duplicate UI setup. - - Args: - verbose (bool): Whether progress and summary output should be visible. - console (Console | None): Optional console override used for tests. - """ - - def __init__( - self, - verbose: bool, - console: Console | None = None, - ) -> None: - self.console = ( - console if console is not None else get_console(verbose) - ) - async def simulate_particles( particles: list[Particle], @@ -159,12 +148,16 @@ async def simulate_particles( ): if reporter is None: reporter = SamplerReporter() - - with reporter.create_weight_progress() as progress: - assert executor is not None + with reporter.create_task_progress() as progress: + assert executor is not None + handle = reporter.start_task( + description="Simulating results from model", + progress=progress, + total=len(particles), + ) loop = asyncio.get_running_loop() - worker = run_particle + worker = _evaluate_particle_chunk particle_chunks = [ particles[index : index + chunksize] for index in range(0, len(particles), chunksize) @@ -174,67 +167,37 @@ async def simulate_particles( task = loop.run_in_executor(executor, worker, chunk) tasks.append((task, chunk)) - completed = 0 try: for task, chunk in tasks: - chunk_results = await task - completed += 1 - progress.update(completed=completed) + _chunk_results = await task + reporter.advance(handle) finally: for task, _ in tasks: task.cancel() - reporter.print_timing_summary() - -# Doesn't need to change across implementations, so we can keep it in calibrationtools to avoid code duplication -def run_coroutine_from_sync(coroutine_factory: Callable[[], Any]) -> Any: - """Run an async workflow from synchronous code. - - This helper executes the coroutine directly when no event loop is active. - If the caller already runs inside an event loop, it executes the coroutine - in a dedicated worker thread and re-raises any exception from that thread. - - Args: - coroutine_factory (Callable[[], Any]): Factory returning the coroutine - to execute. - - Returns: - Any: The value returned by the coroutine. - """ - - try: - asyncio.get_running_loop() - except RuntimeError: - return asyncio.run(coroutine_factory()) - - result: dict[str, Any] = {} - error: dict[str, BaseException] = {} - - def runner() -> None: - try: - result["value"] = asyncio.run(coroutine_factory()) - except BaseException as exc: # pragma: no cover - passthrough - error["value"] = exc - - def raise_worker_error(exc: BaseException) -> NoReturn: - raise exc - - thread = threading.Thread(target=runner, daemon=True) - thread.start() - thread.join() - if "value" in error: - raise_worker_error(error["value"]) - return result["value"] start = time.time() -run_coroutine_from_sync( - lambda: simulate_particles( - executor=ThreadPoolExecutor(max_workers=max_workers), - chunksize=1, - reporter=SamplerReporter(), - particles=particles, +if parallel: + run_coroutine_from_sync( + lambda: simulate_particles( + executor=ThreadPoolExecutor(max_workers=max_workers), + chunksize=1, + reporter=SamplerReporter(), + particles=particles, + ) ) -) - +else: + reporter = SamplerReporter() + with reporter.create_task_progress() as progress: + handle = reporter.start_task( + description="Simulating results from model", + progress=progress, + total=len(particles), + ) + for particle in particles: + run_particle(particle=particle) + reporter.advance(handle) +end = time.time() +print(f"Total execution time: {end - start:.2f} seconds") diff --git a/scripts/plot_phase_1_projection.py b/scripts/plot_phase_1_projection.py new file mode 100644 index 0000000..2df75ef --- /dev/null +++ b/scripts/plot_phase_1_projection.py @@ -0,0 +1,219 @@ +import polars as pl +from pathlib import Path + +import seaborn as sns +import matplotlib.pyplot as plt +directory_name = "output_indiana" +projections_path = Path("experiments", "phase1", "projection", directory_name, "simulations") +figures_path = Path("experiments", "phase1", "projection", directory_name, "figures") +show_plots = False + +# Reading in the projection data ------------------------------------------------------ +aggregated_deaths_report_list = [] +imported_cases_timeseries_list = [] +prevalence_report_list = [] +for particle_dir in projections_path.iterdir(): + if particle_dir.is_dir(): + try: + print(f"Particle directory: {particle_dir}") + imported_cases_timeseries = pl.read_csv(particle_dir / "imported_cases_timeseries.csv") + aggregated_deaths_report = pl.read_csv(particle_dir / "aggregated_deaths_report.csv") + imported_cases_timeseries = imported_cases_timeseries.with_columns( + pl.col("imported_infections").cum_sum().over(order_by="time").alias("cumulative_imported_infections"), + pl.lit(particle_dir.name).alias("seed") + ) + aggregated_deaths_report = aggregated_deaths_report.with_columns( + pl.col("count").cum_sum().over(order_by="t_upper").alias("cumulative_count"), + pl.lit(particle_dir.name).alias("seed") + ) + prevalence_report = pl.read_csv(particle_dir / "person_property_count.csv").with_columns( + pl.when(pl.col('age') < 18).then(pl.lit("Age0To17")) + .when((pl.col('age') >= 18) & (pl.col('age') < 50)).then(pl.lit("Age18to49")) + .when((pl.col('age') >= 50) & (pl.col('age') < 65)).then(pl.lit("Age50to64")) + .otherwise(pl.lit("Age65Plus")).alias("age_group") + ).group_by( + 't', 'age_group', 'symptom_status', 'infection_status' + ).agg( + pl.sum('count').alias('count') + ).sort(['t', 'age_group', 'symptom_status', 'infection_status']).with_columns( + pl.lit(particle_dir.name).alias("seed") + ) + imported_cases_timeseries_list.append(imported_cases_timeseries) + aggregated_deaths_report_list.append(aggregated_deaths_report) + prevalence_report_list.append(prevalence_report) + except (pl.exceptions.NoDataError, FileNotFoundError) as e: + print(f"No data found for particle directory: {particle_dir}, skipping.") + + +death_data = pl.concat(aggregated_deaths_report_list) +imported_data = pl.concat(imported_cases_timeseries_list) +prevalence_data = pl.concat(prevalence_report_list) + +# plotting ------------------------------------------------------------------------------ + +# Imported infections over time---------------------- +sns.scatterplot( + data=imported_data.filter(pl.col('imported_infections') > 0), + x="time", + y="cumulative_imported_infections", + alpha=0.2, +) +sns.lineplot( + data=imported_data, + x="time", + y="cumulative_imported_infections", + estimator='median', +) +plt.xlabel("Time") +plt.ylabel("Cumulative Imported Infections") +plt.savefig(figures_path / "imported_infections_over_time.png", dpi=300) +if show_plots: + plt.show() +plt.close() + +# SIR transmission dynamics---------------------------- + +# Short time horizon +g=sns.relplot( + data=prevalence_data.group_by( + "t", "infection_status", "seed" + ).agg( + pl.sum('count').alias('count') + ).filter( + (pl.col('t') < 80) & (pl.col('infection_status').is_in(["Infectious", "Recovered"])) + ), + x="t", y="count", + kind="line", + hue="infection_status", + alpha=0.3, + units="seed", + estimator=None, + col="infection_status", + col_order=["Infectious", "Recovered"], + # estimator='median', + # errorbar=lambda x: (x.quantile(0.1), x.quantile(0.9)) +) +g.set(ylim=(0, 100)) +plt.xlabel("Time") +for ax in g.axes.flat: + # ax.axvline(x=65, color="red", linestyle="--", label="First case reported (March 6, 2020)") + ax.axvline(x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)") +plt.ylabel("Count") +plt.savefig(figures_path / "infection_status_by_time.png", dpi=300) +if show_plots: + plt.show() +plt.close() + +# Long time horizon +g=sns.relplot( + data=prevalence_data.group_by( + "t", "infection_status", "seed" + ).agg( + pl.sum('count').alias('count') + ), + x="t", y="count", + kind="line", + hue="infection_status", + alpha=0.3, + units="seed", + estimator=None, + col="infection_status", + col_order=["Susceptible", "Infectious", "Recovered"], + # estimator='median', + # errorbar=lambda x: (x.quantile(0.1), x.quantile(0.9)) +) +plt.xlabel("Time") +for ax in g.axes.flat: + # ax.axvline(x=65, color="red", linestyle="--", label="First case reported (March 6, 2020)") + ax.axvline(x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)") +plt.ylabel("Count") +plt.savefig(figures_path / "infection_status_by_time_full.png", dpi=300) +if show_plots: + plt.show() +plt.close() + +# Deaths over time---------------------- +sns.lineplot(data=death_data, x="t_upper", y="cumulative_count", alpha=0.2, units ="seed", estimator=None) +plt.xlabel("Time") +plt.ylabel("Cumulative Deaths") +plt.yscale("log") +plt.axvline(x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)") +plt.savefig(figures_path / "cumulative_deaths_over_time.png", dpi=300) +if show_plots: + plt.show() +plt.close() + +# Prevalence by age and symptom status---------------------------- +g = sns.relplot( + data=prevalence_data.filter( + ~pl.col('symptom_status').is_in(["NoSymptoms", "Dead", "Resolved"]) + ).group_by( + "t", "age_group", "symptom_status", "seed" + ).agg( + pl.sum('count').alias('count') + ), + x="t", y="count", + kind="line", + col="age_group", row='symptom_status', + col_order=["Age0To17", "Age18to49", "Age50to64", "Age65Plus"], + row_order=["Mild", "Severe", "Critical"], + facet_kws={'sharey': 'row', 'sharex': True}, + hue="symptom_status", + alpha=0.2, + units="seed", + estimator=None, + # estimator='median', + # errorbar = lambda x: (x.quantile(0.025), x.quantile(0.975)) +) +g.figure.subplots_adjust(top=0.85) +g.set_axis_labels("Time (days since simulation start)", "Number of people") +g.set_titles("") +plt.savefig(figures_path / "prevalence_by_age_and_symptom_status.png", dpi=300) +if show_plots: + plt.show() +plt.close() + + + +n_unique_seeds = prevalence_data.select(pl.col("seed").n_unique()).item() + +age_group_values = prevalence_data.filter( + pl.col('symptom_status').is_in(["Severe", "Critical"]) + ).group_by( + "t", "age_group", "symptom_status", "seed" + ).agg( + pl.sum('count').alias('count') + ).filter( + pl.col('t') < 85 + ).group_by( + "age_group", "symptom_status", "t" + ).agg( + (pl.len() / n_unique_seeds).alias('proportion_of_simualtions_have_had_cases') + ) + +g = sns.relplot( + data=age_group_values, + x="t", y="proportion_of_simualtions_have_had_cases", + kind="line", + col="age_group", + col_order=["Age0To17", "Age18to49", "Age50to64", "Age65Plus"], + col_wrap=2, + hue="symptom_status", +) + +g.set(ylim=(0,1)) + +g.figure.suptitle( + f"Observing symptomatic cases in simulations", + fontsize='x-large', + fontweight='bold' +) +g.figure.subplots_adjust(top=0.85) +g.set_axis_labels("Time (days since simulation start)", "Proportion of simulations with at least one case") +for ax in g.axes.flat: + ax.axvline(x=65, color="red", linestyle="--", label="First case reported (March 6, 2020)") + ax.axvline(x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)") +plt.savefig(figures_path / "prevalence_by_age_and_symptom_status.png", dpi=300) +if show_plots: + plt.show() +plt.close() diff --git a/uv.lock b/uv.lock index b51749c..9aa07a0 100644 --- a/uv.lock +++ b/uv.lock @@ -165,7 +165,7 @@ css = [ [[package]] name = "calibrationtools" version = "0.1.1" -source = { git = "https://github.com/CDCgov/cfa-calibration-tools.git?branch=wtk-store-distances#fb5d0cd5095263fdeec6e81e12c38910a32d1d3f" } +source = { git = "https://github.com/CDCgov/cfa-calibration-tools.git?branch=wtk-store-distances#90abacdb50fd84713cf4dd0746bc34c393a91cd3" } dependencies = [ { name = "cfa-mrp" }, { name = "jsonschema" }, From d76e81273d5025531b8635c6b7e039b29d500dec Mon Sep 17 00:00:00 2001 From: KOVALW Date: Wed, 8 Apr 2026 18:47:00 +0000 Subject: [PATCH 05/15] clean up prodcution of plots --- experiments/phase1/reports/calibration.qmd | 55 +++-- scripts/phase_1_projection.py | 17 +- scripts/plot_phase_1_projection.py | 237 +++++++++++++-------- uv.lock | 2 +- 4 files changed, 188 insertions(+), 123 deletions(-) diff --git a/experiments/phase1/reports/calibration.qmd b/experiments/phase1/reports/calibration.qmd index 4815837..9f91024 100644 --- a/experiments/phase1/reports/calibration.qmd +++ b/experiments/phase1/reports/calibration.qmd @@ -139,34 +139,31 @@ imported_cases_timeseries_list = [] prevalence_report_list = [] for particle_dir in projections_path.iterdir(): if particle_dir.is_dir(): - try: - imported_cases_timeseries = pl.read_csv(particle_dir / "imported_cases_timeseries.csv") - aggregated_deaths_report = pl.read_csv(particle_dir / "aggregated_deaths_report.csv") - imported_cases_timeseries = imported_cases_timeseries.with_columns( - pl.col("imported_infections").cum_sum().over(order_by="time").alias("cumulative_imported_infections"), - pl.lit(particle_dir.name).alias("seed") - ) - aggregated_deaths_report = aggregated_deaths_report.with_columns( - pl.col("count").cum_sum().over(order_by="t_upper").alias("cumulative_count"), - pl.lit(particle_dir.name).alias("seed") - ) - prevalence_report = pl.read_csv(particle_dir / "person_property_count.csv").with_columns( - pl.when(pl.col('age') < 18).then(pl.lit("Age0To17")) - .when((pl.col('age') >= 18) & (pl.col('age') < 50)).then(pl.lit("Age18to49")) - .when((pl.col('age') >= 50) & (pl.col('age') < 65)).then(pl.lit("Age50to64")) - .otherwise(pl.lit("Age65Plus")).alias("age_group") - ).group_by( - 't', 'age_group', 'symptom_status', 'infection_status' - ).agg( - pl.sum('count').alias('count') - ).sort(['t', 'age_group', 'symptom_status', 'infection_status']).with_columns( - pl.lit(particle_dir.name).alias("seed") - ) - imported_cases_timeseries_list.append(imported_cases_timeseries) - aggregated_deaths_report_list.append(aggregated_deaths_report) - prevalence_report_list.append(prevalence_report) - except (pl.exceptions.NoDataError, FileNotFoundError) as e: - print(f"No data found for particle directory: {particle_dir}, skipping.") + imported_cases_timeseries = pl.read_csv(particle_dir / "imported_cases_timeseries.csv") + aggregated_deaths_report = pl.read_csv(particle_dir / "aggregated_deaths_report.csv") + imported_cases_timeseries = imported_cases_timeseries.with_columns( + pl.col("imported_infections").cum_sum().over(order_by="time").alias("cumulative_imported_infections"), + pl.lit(particle_dir.name).alias("seed") + ) + aggregated_deaths_report = aggregated_deaths_report.with_columns( + pl.col("count").cum_sum().over(order_by="t_upper").alias("cumulative_count"), + pl.lit(particle_dir.name).alias("seed") + ) + prevalence_report = pl.read_csv(particle_dir / "person_property_count.csv").with_columns( + pl.when(pl.col('age') < 18).then(pl.lit("Age0To17")) + .when((pl.col('age') >= 18) & (pl.col('age') < 50)).then(pl.lit("Age18to49")) + .when((pl.col('age') >= 50) & (pl.col('age') < 65)).then(pl.lit("Age50to64")) + .otherwise(pl.lit("Age65Plus")).alias("age_group") + ).group_by( + 't', 'age_group', 'symptom_status', 'infection_status' + ).agg( + pl.sum('count').alias('count') + ).sort(['t', 'age_group', 'symptom_status', 'infection_status']).with_columns( + pl.lit(particle_dir.name).alias("seed") + ) + imported_cases_timeseries_list.append(imported_cases_timeseries) + aggregated_deaths_report_list.append(aggregated_deaths_report) + prevalence_report_list.append(prevalence_report) death_data = pl.concat(aggregated_deaths_report_list) @@ -299,7 +296,7 @@ g = sns.relplot( g.set(ylim=(0,1)) g.figure.suptitle( - f"Observing symptomatic cases in simulations", + "Observing symptomatic cases in simulations", fontsize='x-large', fontweight='bold' ) diff --git a/scripts/phase_1_projection.py b/scripts/phase_1_projection.py index b4dc4d5..24c8512 100644 --- a/scripts/phase_1_projection.py +++ b/scripts/phase_1_projection.py @@ -151,8 +151,9 @@ async def simulate_particles( with reporter.create_task_progress() as progress: assert executor is not None + start = time.time() handle = reporter.start_task( - description="Simulating results from model", + description="Simulating results from model... ", progress=progress, total=len(particles), ) @@ -175,23 +176,25 @@ async def simulate_particles( for task, _ in tasks: task.cancel() + end = time.time() + reporter.print_run_summary(end - start, process_name="Simulations") -start = time.time() if parallel: run_coroutine_from_sync( lambda: simulate_particles( executor=ThreadPoolExecutor(max_workers=max_workers), chunksize=1, - reporter=SamplerReporter(), + reporter=SamplerReporter(verbose=True), particles=particles, ) ) else: - reporter = SamplerReporter() + reporter = SamplerReporter(verbose=True) with reporter.create_task_progress() as progress: + start = time.time() handle = reporter.start_task( - description="Simulating results from model", + description="Simulating results from model... ", progress=progress, total=len(particles), ) @@ -199,5 +202,5 @@ async def simulate_particles( run_particle(particle=particle) reporter.advance(handle) -end = time.time() -print(f"Total execution time: {end - start:.2f} seconds") + end = time.time() + reporter.print_run_summary(end - start, process_name="Simulations") diff --git a/scripts/plot_phase_1_projection.py b/scripts/plot_phase_1_projection.py index 2df75ef..42c8c18 100644 --- a/scripts/plot_phase_1_projection.py +++ b/scripts/plot_phase_1_projection.py @@ -1,48 +1,78 @@ -import polars as pl +import os from pathlib import Path -import seaborn as sns import matplotlib.pyplot as plt +import polars as pl +import seaborn as sns +from calibrationtools import SamplerReporter + directory_name = "output_indiana" -projections_path = Path("experiments", "phase1", "projection", directory_name, "simulations") -figures_path = Path("experiments", "phase1", "projection", directory_name, "figures") +projections_path = Path( + "experiments", "phase1", "projection", directory_name, "simulations" +) +figures_path = Path( + "experiments", "phase1", "projection", directory_name, "figures" +) +os.makedirs(figures_path, exist_ok = True) show_plots = False # Reading in the projection data ------------------------------------------------------ aggregated_deaths_report_list = [] imported_cases_timeseries_list = [] prevalence_report_list = [] -for particle_dir in projections_path.iterdir(): - if particle_dir.is_dir(): - try: - print(f"Particle directory: {particle_dir}") - imported_cases_timeseries = pl.read_csv(particle_dir / "imported_cases_timeseries.csv") - aggregated_deaths_report = pl.read_csv(particle_dir / "aggregated_deaths_report.csv") +reporter = SamplerReporter(verbose=True) + +with reporter.create_task_progress() as progress: + handle = reporter.start_task( + description="Reading projection results... ", + progress=progress, + total=len(os.listdir(projections_path)), + ) + for particle_dir in projections_path.iterdir(): + if particle_dir.is_dir(): + imported_cases_timeseries = pl.read_csv( + particle_dir / "imported_cases_timeseries.csv" + ) + aggregated_deaths_report = pl.read_csv( + particle_dir / "aggregated_deaths_report.csv" + ) imported_cases_timeseries = imported_cases_timeseries.with_columns( - pl.col("imported_infections").cum_sum().over(order_by="time").alias("cumulative_imported_infections"), - pl.lit(particle_dir.name).alias("seed") + pl.col("imported_infections") + .cum_sum() + .over(order_by="time") + .alias("cumulative_imported_infections"), + pl.lit(particle_dir.name).alias("seed"), ) aggregated_deaths_report = aggregated_deaths_report.with_columns( - pl.col("count").cum_sum().over(order_by="t_upper").alias("cumulative_count"), - pl.lit(particle_dir.name).alias("seed") + pl.col("count") + .cum_sum() + .over(order_by="t_upper") + .alias("cumulative_count"), + pl.lit(particle_dir.name).alias("seed"), ) - prevalence_report = pl.read_csv(particle_dir / "person_property_count.csv").with_columns( - pl.when(pl.col('age') < 18).then(pl.lit("Age0To17")) - .when((pl.col('age') >= 18) & (pl.col('age') < 50)).then(pl.lit("Age18to49")) - .when((pl.col('age') >= 50) & (pl.col('age') < 65)).then(pl.lit("Age50to64")) - .otherwise(pl.lit("Age65Plus")).alias("age_group") - ).group_by( - 't', 'age_group', 'symptom_status', 'infection_status' - ).agg( - pl.sum('count').alias('count') - ).sort(['t', 'age_group', 'symptom_status', 'infection_status']).with_columns( - pl.lit(particle_dir.name).alias("seed") + prevalence_report = ( + pl.read_csv(particle_dir / "person_property_count.csv") + .with_columns( + pl.when(pl.col("age") < 18) + .then(pl.lit("Age0To17")) + .when((pl.col("age") >= 18) & (pl.col("age") < 50)) + .then(pl.lit("Age18to49")) + .when((pl.col("age") >= 50) & (pl.col("age") < 65)) + .then(pl.lit("Age50to64")) + .otherwise(pl.lit("Age65Plus")) + .alias("age_group") + ) + .group_by( + "t", "age_group", "symptom_status", "infection_status" + ) + .agg(pl.sum("count").alias("count")) + .sort(["t", "age_group", "symptom_status", "infection_status"]) + .with_columns(pl.lit(particle_dir.name).alias("seed")) ) imported_cases_timeseries_list.append(imported_cases_timeseries) aggregated_deaths_report_list.append(aggregated_deaths_report) prevalence_report_list.append(prevalence_report) - except (pl.exceptions.NoDataError, FileNotFoundError) as e: - print(f"No data found for particle directory: {particle_dir}, skipping.") + reporter.advance(handle) death_data = pl.concat(aggregated_deaths_report_list) @@ -53,7 +83,7 @@ # Imported infections over time---------------------- sns.scatterplot( - data=imported_data.filter(pl.col('imported_infections') > 0), + data=imported_data.filter(pl.col("imported_infections") > 0), x="time", y="cumulative_imported_infections", alpha=0.2, @@ -62,7 +92,7 @@ data=imported_data, x="time", y="cumulative_imported_infections", - estimator='median', + estimator="median", ) plt.xlabel("Time") plt.ylabel("Cumulative Imported Infections") @@ -74,17 +104,17 @@ # SIR transmission dynamics---------------------------- # Short time horizon -g=sns.relplot( - data=prevalence_data.group_by( - "t", "infection_status", "seed" - ).agg( - pl.sum('count').alias('count') - ).filter( - (pl.col('t') < 80) & (pl.col('infection_status').is_in(["Infectious", "Recovered"])) - ), - x="t", y="count", - kind="line", - hue="infection_status", +g = sns.relplot( + data=prevalence_data.group_by("t", "infection_status", "seed") + .agg(pl.sum("count").alias("count")) + .filter( + (pl.col("t") < 80) + & (pl.col("infection_status").is_in(["Infectious", "Recovered"])) + ), + x="t", + y="count", + kind="line", + hue="infection_status", alpha=0.3, units="seed", estimator=None, @@ -97,7 +127,12 @@ plt.xlabel("Time") for ax in g.axes.flat: # ax.axvline(x=65, color="red", linestyle="--", label="First case reported (March 6, 2020)") - ax.axvline(x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)") + ax.axvline( + x=75, + color="black", + linestyle="--", + label="First death reported (March 16, 2020)", + ) plt.ylabel("Count") plt.savefig(figures_path / "infection_status_by_time.png", dpi=300) if show_plots: @@ -105,15 +140,14 @@ plt.close() # Long time horizon -g=sns.relplot( - data=prevalence_data.group_by( - "t", "infection_status", "seed" - ).agg( - pl.sum('count').alias('count') - ), - x="t", y="count", - kind="line", - hue="infection_status", +g = sns.relplot( + data=prevalence_data.group_by("t", "infection_status", "seed").agg( + pl.sum("count").alias("count") + ), + x="t", + y="count", + kind="line", + hue="infection_status", alpha=0.3, units="seed", estimator=None, @@ -125,7 +159,12 @@ plt.xlabel("Time") for ax in g.axes.flat: # ax.axvline(x=65, color="red", linestyle="--", label="First case reported (March 6, 2020)") - ax.axvline(x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)") + ax.axvline( + x=75, + color="black", + linestyle="--", + label="First death reported (March 16, 2020)", + ) plt.ylabel("Count") plt.savefig(figures_path / "infection_status_by_time_full.png", dpi=300) if show_plots: @@ -133,11 +172,23 @@ plt.close() # Deaths over time---------------------- -sns.lineplot(data=death_data, x="t_upper", y="cumulative_count", alpha=0.2, units ="seed", estimator=None) +sns.lineplot( + data=death_data, + x="t_upper", + y="cumulative_count", + alpha=0.2, + units="seed", + estimator=None, +) plt.xlabel("Time") plt.ylabel("Cumulative Deaths") plt.yscale("log") -plt.axvline(x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)") +plt.axvline( + x=75, + color="black", + linestyle="--", + label="First death reported (March 16, 2020)", +) plt.savefig(figures_path / "cumulative_deaths_over_time.png", dpi=300) if show_plots: plt.show() @@ -146,18 +197,18 @@ # Prevalence by age and symptom status---------------------------- g = sns.relplot( data=prevalence_data.filter( - ~pl.col('symptom_status').is_in(["NoSymptoms", "Dead", "Resolved"]) - ).group_by( - "t", "age_group", "symptom_status", "seed" - ).agg( - pl.sum('count').alias('count') - ), - x="t", y="count", - kind="line", - col="age_group", row='symptom_status', + ~pl.col("symptom_status").is_in(["NoSymptoms", "Dead", "Resolved"]) + ) + .group_by("t", "age_group", "symptom_status", "seed") + .agg(pl.sum("count").alias("count")), + x="t", + y="count", + kind="line", + col="age_group", + row="symptom_status", col_order=["Age0To17", "Age18to49", "Age50to64", "Age65Plus"], row_order=["Mild", "Severe", "Critical"], - facet_kws={'sharey': 'row', 'sharex': True}, + facet_kws={"sharey": "row", "sharex": True}, hue="symptom_status", alpha=0.2, units="seed", @@ -174,45 +225,59 @@ plt.close() - n_unique_seeds = prevalence_data.select(pl.col("seed").n_unique()).item() -age_group_values = prevalence_data.filter( - pl.col('symptom_status').is_in(["Severe", "Critical"]) - ).group_by( - "t", "age_group", "symptom_status", "seed" - ).agg( - pl.sum('count').alias('count') - ).filter( - pl.col('t') < 85 - ).group_by( - "age_group", "symptom_status", "t" - ).agg( - (pl.len() / n_unique_seeds).alias('proportion_of_simualtions_have_had_cases') +age_group_values = ( + prevalence_data.filter( + pl.col("symptom_status").is_in(["Severe", "Critical"]) ) + .group_by("t", "age_group", "symptom_status", "seed") + .agg(pl.sum("count").alias("count")) + .filter(pl.col("t") < 85) + .group_by("age_group", "symptom_status", "t") + .agg( + (pl.len() / n_unique_seeds).alias( + "proportion_of_simualtions_have_had_cases" + ) + ) +) g = sns.relplot( - data=age_group_values, - x="t", y="proportion_of_simualtions_have_had_cases", - kind="line", + data=age_group_values, + x="t", + y="proportion_of_simualtions_have_had_cases", + kind="line", col="age_group", col_order=["Age0To17", "Age18to49", "Age50to64", "Age65Plus"], col_wrap=2, hue="symptom_status", ) -g.set(ylim=(0,1)) +g.set(ylim=(0, 1)) g.figure.suptitle( - f"Observing symptomatic cases in simulations", - fontsize='x-large', - fontweight='bold' + "Observing symptomatic cases in simulations", + fontsize="x-large", + fontweight="bold", ) g.figure.subplots_adjust(top=0.85) -g.set_axis_labels("Time (days since simulation start)", "Proportion of simulations with at least one case") +g.set_axis_labels( + "Time (days since simulation start)", + "Proportion of simulations with at least one case", +) for ax in g.axes.flat: - ax.axvline(x=65, color="red", linestyle="--", label="First case reported (March 6, 2020)") - ax.axvline(x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)") + ax.axvline( + x=65, + color="red", + linestyle="--", + label="First case reported (March 6, 2020)", + ) + ax.axvline( + x=75, + color="black", + linestyle="--", + label="First death reported (March 16, 2020)", + ) plt.savefig(figures_path / "prevalence_by_age_and_symptom_status.png", dpi=300) if show_plots: plt.show() diff --git a/uv.lock b/uv.lock index 9aa07a0..9eb5abd 100644 --- a/uv.lock +++ b/uv.lock @@ -165,7 +165,7 @@ css = [ [[package]] name = "calibrationtools" version = "0.1.1" -source = { git = "https://github.com/CDCgov/cfa-calibration-tools.git?branch=wtk-store-distances#90abacdb50fd84713cf4dd0746bc34c393a91cd3" } +source = { git = "https://github.com/CDCgov/cfa-calibration-tools.git?branch=wtk-store-distances#2d25eb2ccdadbe6ffeb7c9a5d61d9190121d24cd" } dependencies = [ { name = "cfa-mrp" }, { name = "jsonschema" }, From b8184cc0fb2505ba48fd6ea74241f5f728c917a0 Mon Sep 17 00:00:00 2001 From: KOVALW Date: Wed, 8 Apr 2026 18:55:38 +0000 Subject: [PATCH 06/15] fix derive property error --- scripts/plot_phase_1_projection.py | 2 +- src/reports/aggregated_deaths_report.rs | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/scripts/plot_phase_1_projection.py b/scripts/plot_phase_1_projection.py index 42c8c18..78a07a7 100644 --- a/scripts/plot_phase_1_projection.py +++ b/scripts/plot_phase_1_projection.py @@ -13,7 +13,7 @@ figures_path = Path( "experiments", "phase1", "projection", directory_name, "figures" ) -os.makedirs(figures_path, exist_ok = True) +os.makedirs(figures_path, exist_ok=True) show_plots = False # Reading in the projection data ------------------------------------------------------ diff --git a/src/reports/aggregated_deaths_report.rs b/src/reports/aggregated_deaths_report.rs index 2847d38..753d9b3 100644 --- a/src/reports/aggregated_deaths_report.rs +++ b/src/reports/aggregated_deaths_report.rs @@ -79,7 +79,7 @@ mod test { population_loader::{Age, Person, PersonId}, rate_fns::load_rate_fns, reports::ReportParams, - symptom_status_manager::SymptomStatus, + symptom_status_manager::SymptomData, }; use ixa::{csv, prelude::*}; use std::path::PathBuf; @@ -122,7 +122,15 @@ mod test { let time_of_death = 1.0; context.add_plan(time_of_death, move |context| { - context.set_property::(target, SymptomStatus::Dead); + context.set_property::( + target, + SymptomData::Dead { + mild_time: 0.0, + severe_time: 0.0, + critical_time: 0.0, + dead_time: time_of_death, + }, + ); }); context.execute(); From b540d56474f7ae5f77210e72d8cf27924e701afb Mon Sep 17 00:00:00 2001 From: KOVALW Date: Thu, 9 Apr 2026 13:43:46 +0000 Subject: [PATCH 07/15] add plot projections to makefile --- Makefile | 18 + scripts/phase_1_projection.py | 338 ++++++++++-------- scripts/plot_phase_1_projection.py | 531 ++++++++++++++++------------- 3 files changed, 499 insertions(+), 388 deletions(-) diff --git a/Makefile b/Makefile index 419e012..0b5b9b4 100644 --- a/Makefile +++ b/Makefile @@ -64,10 +64,28 @@ $(TARGET_RESULTS): ./experiments/phase1/input/priors.json ./experiments/phase1/i uv run cargo build -r uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/prod-config.yaml -o ./experiments/phase1/calibration/output_indiana +projections-phase-1: $(TARGET_RESULTS) + uv run python ./scripts/phase_1_projection.py -d output_indiana + +plot-phase-1-projection: + uv run python ./scripts/plot_phase_1_projection.py -d output_indiana + calibrate-phase-1-smc: ./experiments/phase1/input/priors.json ./experiments/phase1/input/default_params.json uv run cargo build -r uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/prod-smc-config.yaml -o ./experiments/phase1/calibration/smc +projections-phase-1-smc: ./experiments/phase1/calibration/smc/results.pkl + uv run python ./scripts/phase_1_projection.py -d smc + +plot-phase-1-projection-smc: projections-phase-1-smc + uv run python ./scripts/plot_phase_1_projection.py -d smc + calibrate-phase-1-dev: ./experiments/phase1/input/priors.json ./experiments/phase1/input/default_params.json uv run cargo build -r uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/dev-config.yaml -o ./experiments/phase1/calibration/dev_$(SIZE) --default-population-size-dev $(SIZE) + +projections-phase-1-dev: ./experiments/phase1/calibration/dev_$(SIZE)/results.pkl + uv run python ./scripts/phase_1_projection.py -d dev_$(SIZE) -f --plot-distances + +plot-phase-1-projection-dev: projections-phase-1-dev + uv run python ./scripts/plot_phase_1_projection.py -d dev_$(SIZE) diff --git a/scripts/phase_1_projection.py b/scripts/phase_1_projection.py index 24c8512..460b57e 100644 --- a/scripts/phase_1_projection.py +++ b/scripts/phase_1_projection.py @@ -1,3 +1,4 @@ +import argparse import asyncio import os import pickle @@ -5,6 +6,7 @@ import time from concurrent.futures import ThreadPoolExecutor from pathlib import Path +from typing import Any, Callable import matplotlib.pyplot as plt import seaborn as sns @@ -19,133 +21,25 @@ from ixa_epi_covid import CovidModel, update_epimodel_output_dir from ixa_epi_covid.config_parser import CovidModelConfig -# Run specific parameters declaration -------------------------------------------------------------------------------- -rerun_particle_count = 100 -directory_name = "output_indiana" -max_workers = 4 -parallel = False -force_overwrite = True -plot_distance_distribution = True - -# Load the calibration -------------------------------------------------------------------------------- -calibration_output_dir = Path( - "experiments", "phase1", "calibration", directory_name -) -if not calibration_output_dir.exists(): - raise FileNotFoundError( - f"Calibration output directory {calibration_output_dir} does not exist. Run the calibration script before running this projection script." - ) -projection_output_dir = Path( - "experiments", "phase1", "projection", directory_name -) -if projection_output_dir.exists(): - if force_overwrite: - shutil.rmtree(projection_output_dir) - else: - raise FileExistsError( - f"Projection output directory {projection_output_dir} already exists. Set force_overwrite to True to overwrite it." - ) - -with open(calibration_output_dir / "config.pkl", "rb") as f: - config: CovidModelConfig = pickle.load(f) - -with open(calibration_output_dir / "results.pkl", "rb") as f: - results: CalibrationResults = pickle.load(f) - -if plot_distance_distribution: - distances = results.flatten_distance_history() - for generation, errs in distances.items(): - sns.histplot(errs, label=f"Generation {generation}") - plt.show() - -# Change parameters for projection -------------------------------------------------------------------------------- -ixa_overrides = { - "first_death_terminates_run": False, - "prevalence_report": {"write": True}, - "max_time": 150.0, # 3.5 months from the first reported death in Indiana -} - -config.update_ixa_params(ixa_overrides) - -mrp_defaults = config.get_mrp_defaults_for_output( - output_dir=projection_output_dir, - outputs_to_read=[], # We do not need to read the outputs from the projection runs, so we can leave this empty -) - -# Re-run particles with new parameters -------------------------------------------------------------------------------- -particles = results.sample_posterior_particles(n=rerun_particle_count) -model = CovidModel() - -# Model Particle Reader setup ------------------------------------------------------------- - -reader = ParticleReader( - particle_param_names=results.fitted_params + ["seed"], - default_params=mrp_defaults, -) - - -def particles_to_params(particle: Particle, reader: ParticleReader = reader): - particle_params = reader.read_particle(particle=particle) - # Make particle-specific output directory and update the output path in the parameters accordingly - simulations_dir = Path( - particle_params["config_inputs"]["output_dir"], "simulations" - ) - # Count existing directories in simulations_dir - if not simulations_dir.exists(): - dir_count = 0 - else: - dir_count = len(os.walk(simulations_dir).__next__()[1]) - output_dir = Path( - simulations_dir, - ".".join( - [ - str(dir_count), - str( - particle_params["ixa_inputs"]["epimodel.GlobalParams"][ - "seed" - ] - ), - ] - ), - ) - output_dir.mkdir(parents=True, exist_ok=False) - - updated_params = update_epimodel_output_dir(particle_params, output_dir) - return updated_params - - -def run_particle(particle: Particle): - particle_params = particles_to_params(particle=particle) - model.simulate(particle_params) - - -def _evaluate_particle_chunk( - particles: list[Particle], -) -> list[float]: - """Evaluate a chunk of proposed particles serially. - - This helper keeps chunk evaluation reusable between the serial and - threaded batch-processing paths. - - Args: - proposed_particles (list[Particle]): Proposed particles to score. - particle_kwargs (dict[str, Any]): Additional keyword arguments - forwarded into particle evaluation. - - Returns: - list[float]: Distances computed for the proposed particles. - """ - - return [run_particle(particle=particle) for particle in particles] - - -async def simulate_particles( +async def run_particles( particles: list[Particle], executor: ThreadPoolExecutor, + worker: Callable[[list[Particle]], Any], chunksize: int = 1, reporter: SamplerReporter | None = None, ): + """ + Async function to call a worker funciton on each member of a list of Particles in parallel + + Args: + particles (list[Particle]): List of particles to run the worker function on + executor (ThreadPoolExecutor): Executor to run the worker function on + worker (Callable[[list[Particle]], Any]): Worker function to run on each particle + chunksize (int, optional): Number of particles to run in each chunk. Defaults to 1. + reporter (SamplerReporter, optional): Reporter to use for progress reporting. Defaults to None, in which case a new SamplerReporter will be created. + + """ if reporter is None: reporter = SamplerReporter() @@ -158,7 +52,6 @@ async def simulate_particles( total=len(particles), ) loop = asyncio.get_running_loop() - worker = _evaluate_particle_chunk particle_chunks = [ particles[index : index + chunksize] for index in range(0, len(particles), chunksize) @@ -180,27 +73,188 @@ async def simulate_particles( reporter.print_run_summary(end - start, process_name="Simulations") -if parallel: - run_coroutine_from_sync( - lambda: simulate_particles( - executor=ThreadPoolExecutor(max_workers=max_workers), - chunksize=1, - reporter=SamplerReporter(verbose=True), - particles=particles, +def main( + subdirectory_name: str, + force_overwrite: bool = True, + max_workers: int = 4, + plot_distances: bool = True, +): + # Run specific parameters declaration -------------------------------------------------------------------------------- + rerun_particle_count = 100 + if max_workers <= 1: + parallel = False + else: + parallel = True + + # Load the calibration -------------------------------------------------------------------------------- + calibration_output_dir = Path( + "experiments", "phase1", "calibration", subdirectory_name + ) + if not calibration_output_dir.exists(): + raise FileNotFoundError( + f"Calibration output directory {calibration_output_dir} does not exist. Run the calibration script before running this projection script." ) + projection_output_dir = Path( + "experiments", "phase1", "projection", subdirectory_name ) -else: - reporter = SamplerReporter(verbose=True) - with reporter.create_task_progress() as progress: - start = time.time() - handle = reporter.start_task( - description="Simulating results from model... ", - progress=progress, - total=len(particles), + if projection_output_dir.exists(): + if force_overwrite: + shutil.rmtree(projection_output_dir) + else: + raise FileExistsError( + f"Projection output directory {projection_output_dir} already exists. Set force_overwrite to True to overwrite it." + ) + + with open(calibration_output_dir / "config.pkl", "rb") as f: + config: CovidModelConfig = pickle.load(f) + + with open(calibration_output_dir / "results.pkl", "rb") as f: + results: CalibrationResults = pickle.load(f) + + if plot_distances: + distances = results.flatten_distance_history() + for generation, errs in distances.items(): + sns.histplot(errs) + plt.title(f"Distance distribution for generation {generation}") + plt.xlabel("Distance") + plt.ylabel("Count") + plt.show() + + # Change parameters for projection -------------------------------------------------------------------------------- + ixa_overrides = { + "first_death_terminates_run": False, + "prevalence_report": {"write": True}, + "max_time": 150.0, # 3.5 months from the first reported death in Indiana + } + + config.update_ixa_params(ixa_overrides) + + mrp_defaults = config.get_mrp_defaults_for_output( + output_dir=projection_output_dir, + outputs_to_read=[], # We do not need to read the outputs from the projection runs, so we can leave this empty + ) + + # Re-run particles with new parameters -------------------------------------------------------------------------------- + particles = results.sample_posterior_particles(n=rerun_particle_count) + model = CovidModel() + + # Model Particle Reader setup ------------------------------------------------------------- + + reader = ParticleReader( + particle_param_names=results.fitted_params + ["seed"], + default_params=mrp_defaults, + ) + + def particles_to_params( + particle: Particle, reader: ParticleReader = reader + ): + particle_params = reader.read_particle(particle=particle) + # Make particle-specific output directory and update the output path in the parameters accordingly + simulations_dir = Path( + particle_params["config_inputs"]["output_dir"], "simulations" + ) + # Count existing directories in simulations_dir + if not simulations_dir.exists(): + dir_count = 0 + else: + dir_count = len(os.walk(simulations_dir).__next__()[1]) + output_dir = Path( + simulations_dir, + ".".join( + [ + str(dir_count), + str( + particle_params["ixa_inputs"]["epimodel.GlobalParams"][ + "seed" + ] + ), + ] + ), ) - for particle in particles: - run_particle(particle=particle) - reporter.advance(handle) + output_dir.mkdir(parents=True, exist_ok=False) - end = time.time() - reporter.print_run_summary(end - start, process_name="Simulations") + updated_params = update_epimodel_output_dir( + particle_params, output_dir + ) + return updated_params + + def run_particle(particle: Particle): + particle_params = particles_to_params(particle=particle) + model.simulate(particle_params) + + def _evaluate_particle_chunk( + particles: list[Particle], + ) -> list[Any]: + """Evaluate a chunk of proposed particles serially. + + This helper keeps chunk evaluation reusable between the serial and + threaded batch-processing paths. + + Args: + proposed_particles (list[Particle]): Proposed particles to score. + particle_kwargs (dict[str, Any]): Additional keyword arguments + forwarded into particle evaluation. + """ + + return [run_particle(particle=particle) for particle in particles] + + if parallel: + run_coroutine_from_sync( + lambda: run_particles( + executor=ThreadPoolExecutor(max_workers=max_workers), + worker=_evaluate_particle_chunk, + chunksize=1, + reporter=SamplerReporter(verbose=True), + particles=particles, + ) + ) + else: + reporter = SamplerReporter(verbose=True) + with reporter.create_task_progress() as progress: + start = time.time() + handle = reporter.start_task( + description="Simulating results from model... ", + progress=progress, + total=len(particles), + ) + for particle in particles: + run_particle(particle=particle) + reporter.advance(handle) + + end = time.time() + reporter.print_run_summary(end - start, process_name="Simulations") + + +parser = argparse.ArgumentParser(description="Run phase 1 projection") +parser.add_argument( + "-d", + "--subdirectory-name", + type=str, + help="Name of the subdirectory in experiments/phase1/calibration/ to read the calibration results from and run the projection for. The projection results will be written to experiments/phase1/projection/{subdirectory_name}/", +) +parser.add_argument( + "-f", + "--force-overwrite", + action="store_true", + help="Whether to force overwrite the projection output directory if it already exists. If not set and the output directory already exists, a FileExistsError will be raised.", +) +parser.add_argument( + "--max-workers", + type=int, + default=4, + help="The maximum number of worker threads to use for running the particles in parallel. If set to 1 or less, the particles will be run serially.", +) +parser.add_argument( + "--plot-distances", + action="store_true", + help="Whether to plot the distance distributions for each generation of the calibration before running the projection.", +) + +if __name__ == "__main__": + args = parser.parse_args() + main( + subdirectory_name=args.subdirectory_name, + force_overwrite=args.force_overwrite, + max_workers=args.max_workers, + plot_distances=args.plot_distances, + ) diff --git a/scripts/plot_phase_1_projection.py b/scripts/plot_phase_1_projection.py index 78a07a7..7c16fd0 100644 --- a/scripts/plot_phase_1_projection.py +++ b/scripts/plot_phase_1_projection.py @@ -1,3 +1,4 @@ +import argparse import os from pathlib import Path @@ -6,279 +7,317 @@ import seaborn as sns from calibrationtools import SamplerReporter -directory_name = "output_indiana" -projections_path = Path( - "experiments", "phase1", "projection", directory_name, "simulations" -) -figures_path = Path( - "experiments", "phase1", "projection", directory_name, "figures" -) -os.makedirs(figures_path, exist_ok=True) -show_plots = False -# Reading in the projection data ------------------------------------------------------ -aggregated_deaths_report_list = [] -imported_cases_timeseries_list = [] -prevalence_report_list = [] -reporter = SamplerReporter(verbose=True) - -with reporter.create_task_progress() as progress: - handle = reporter.start_task( - description="Reading projection results... ", - progress=progress, - total=len(os.listdir(projections_path)), +def main(subdirectory_name: str, show_plots: bool = False): + projections_path = Path( + "experiments", "phase1", "projection", subdirectory_name, "simulations" ) - for particle_dir in projections_path.iterdir(): - if particle_dir.is_dir(): - imported_cases_timeseries = pl.read_csv( - particle_dir / "imported_cases_timeseries.csv" - ) - aggregated_deaths_report = pl.read_csv( - particle_dir / "aggregated_deaths_report.csv" - ) - imported_cases_timeseries = imported_cases_timeseries.with_columns( - pl.col("imported_infections") - .cum_sum() - .over(order_by="time") - .alias("cumulative_imported_infections"), - pl.lit(particle_dir.name).alias("seed"), - ) - aggregated_deaths_report = aggregated_deaths_report.with_columns( - pl.col("count") - .cum_sum() - .over(order_by="t_upper") - .alias("cumulative_count"), - pl.lit(particle_dir.name).alias("seed"), - ) - prevalence_report = ( - pl.read_csv(particle_dir / "person_property_count.csv") - .with_columns( - pl.when(pl.col("age") < 18) - .then(pl.lit("Age0To17")) - .when((pl.col("age") >= 18) & (pl.col("age") < 50)) - .then(pl.lit("Age18to49")) - .when((pl.col("age") >= 50) & (pl.col("age") < 65)) - .then(pl.lit("Age50to64")) - .otherwise(pl.lit("Age65Plus")) - .alias("age_group") + figures_path = Path( + "experiments", "phase1", "projection", subdirectory_name, "figures" + ) + os.makedirs(figures_path, exist_ok=True) + + # Reading in the projection data ------------------------------------------------------ + aggregated_deaths_report_list = [] + imported_cases_timeseries_list = [] + prevalence_report_list = [] + reporter = SamplerReporter(verbose=True) + + with reporter.create_task_progress() as progress: + handle = reporter.start_task( + description="Reading projection results... ", + progress=progress, + total=len(os.listdir(projections_path)), + ) + for particle_dir in projections_path.iterdir(): + if particle_dir.is_dir(): + imported_cases_timeseries = pl.read_csv( + particle_dir / "imported_cases_timeseries.csv" ) - .group_by( - "t", "age_group", "symptom_status", "infection_status" + aggregated_deaths_report = pl.read_csv( + particle_dir / "aggregated_deaths_report.csv" ) - .agg(pl.sum("count").alias("count")) - .sort(["t", "age_group", "symptom_status", "infection_status"]) - .with_columns(pl.lit(particle_dir.name).alias("seed")) - ) - imported_cases_timeseries_list.append(imported_cases_timeseries) - aggregated_deaths_report_list.append(aggregated_deaths_report) - prevalence_report_list.append(prevalence_report) - reporter.advance(handle) + imported_cases_timeseries = ( + imported_cases_timeseries.with_columns( + pl.col("imported_infections") + .cum_sum() + .over(order_by="time") + .alias("cumulative_imported_infections"), + pl.lit(particle_dir.name).alias("seed"), + ) + ) + aggregated_deaths_report = ( + aggregated_deaths_report.with_columns( + pl.col("count") + .cum_sum() + .over(order_by="t_upper") + .alias("cumulative_count"), + pl.lit(particle_dir.name).alias("seed"), + ) + ) + prevalence_report = ( + pl.read_csv(particle_dir / "person_property_count.csv") + .with_columns( + pl.when(pl.col("age") < 18) + .then(pl.lit("Age0To17")) + .when((pl.col("age") >= 18) & (pl.col("age") < 50)) + .then(pl.lit("Age18to49")) + .when((pl.col("age") >= 50) & (pl.col("age") < 65)) + .then(pl.lit("Age50to64")) + .otherwise(pl.lit("Age65Plus")) + .alias("age_group") + ) + .group_by( + "t", "age_group", "symptom_status", "infection_status" + ) + .agg(pl.sum("count").alias("count")) + .sort( + [ + "t", + "age_group", + "symptom_status", + "infection_status", + ] + ) + .with_columns(pl.lit(particle_dir.name).alias("seed")) + ) + imported_cases_timeseries_list.append( + imported_cases_timeseries + ) + aggregated_deaths_report_list.append(aggregated_deaths_report) + prevalence_report_list.append(prevalence_report) + reporter.advance(handle) + death_data = pl.concat(aggregated_deaths_report_list) + imported_data = pl.concat(imported_cases_timeseries_list) + prevalence_data = pl.concat(prevalence_report_list) -death_data = pl.concat(aggregated_deaths_report_list) -imported_data = pl.concat(imported_cases_timeseries_list) -prevalence_data = pl.concat(prevalence_report_list) + # plotting ------------------------------------------------------------------------------ -# plotting ------------------------------------------------------------------------------ + # Imported infections over time---------------------- + sns.scatterplot( + data=imported_data.filter(pl.col("imported_infections") > 0), + x="time", + y="cumulative_imported_infections", + alpha=0.2, + ) + sns.lineplot( + data=imported_data, + x="time", + y="cumulative_imported_infections", + estimator="median", + ) + plt.xlabel("Time") + plt.ylabel("Cumulative Imported Infections") + plt.savefig(figures_path / "imported_infections_over_time.png", dpi=300) + if show_plots: + plt.show() + plt.close() -# Imported infections over time---------------------- -sns.scatterplot( - data=imported_data.filter(pl.col("imported_infections") > 0), - x="time", - y="cumulative_imported_infections", - alpha=0.2, -) -sns.lineplot( - data=imported_data, - x="time", - y="cumulative_imported_infections", - estimator="median", -) -plt.xlabel("Time") -plt.ylabel("Cumulative Imported Infections") -plt.savefig(figures_path / "imported_infections_over_time.png", dpi=300) -if show_plots: - plt.show() -plt.close() + # SIR transmission dynamics---------------------------- -# SIR transmission dynamics---------------------------- + # Short time horizon + g = sns.relplot( + data=prevalence_data.group_by("t", "infection_status", "seed") + .agg(pl.sum("count").alias("count")) + .filter( + (pl.col("t") < 80) + & (pl.col("infection_status").is_in(["Infectious", "Recovered"])) + ), + x="t", + y="count", + kind="line", + hue="infection_status", + alpha=0.3, + units="seed", + estimator=None, + col="infection_status", + col_order=["Infectious", "Recovered"], + # estimator='median', + # errorbar=lambda x: (x.quantile(0.1), x.quantile(0.9)) + ) + g.set(ylim=(0, 100)) + plt.xlabel("Time") + for ax in g.axes.flat: + # ax.axvline(x=65, color="red", linestyle="--", label="First case reported (March 6, 2020)") + ax.axvline( + x=75, + color="black", + linestyle="--", + label="First death reported (March 16, 2020)", + ) + plt.ylabel("Count") + plt.savefig(figures_path / "infection_status_by_time.png", dpi=300) + if show_plots: + plt.show() + plt.close() -# Short time horizon -g = sns.relplot( - data=prevalence_data.group_by("t", "infection_status", "seed") - .agg(pl.sum("count").alias("count")) - .filter( - (pl.col("t") < 80) - & (pl.col("infection_status").is_in(["Infectious", "Recovered"])) - ), - x="t", - y="count", - kind="line", - hue="infection_status", - alpha=0.3, - units="seed", - estimator=None, - col="infection_status", - col_order=["Infectious", "Recovered"], - # estimator='median', - # errorbar=lambda x: (x.quantile(0.1), x.quantile(0.9)) -) -g.set(ylim=(0, 100)) -plt.xlabel("Time") -for ax in g.axes.flat: - # ax.axvline(x=65, color="red", linestyle="--", label="First case reported (March 6, 2020)") - ax.axvline( - x=75, - color="black", - linestyle="--", - label="First death reported (March 16, 2020)", + # Long time horizon + g = sns.relplot( + data=prevalence_data.group_by("t", "infection_status", "seed").agg( + pl.sum("count").alias("count") + ), + x="t", + y="count", + kind="line", + hue="infection_status", + alpha=0.3, + units="seed", + estimator=None, + col="infection_status", + col_order=["Susceptible", "Infectious", "Recovered"], + # estimator='median', + # errorbar=lambda x: (x.quantile(0.1), x.quantile(0.9)) ) -plt.ylabel("Count") -plt.savefig(figures_path / "infection_status_by_time.png", dpi=300) -if show_plots: - plt.show() -plt.close() + plt.xlabel("Time") + for ax in g.axes.flat: + # ax.axvline(x=65, color="red", linestyle="--", label="First case reported (March 6, 2020)") + ax.axvline( + x=75, + color="black", + linestyle="--", + label="First death reported (March 16, 2020)", + ) + plt.ylabel("Count") + plt.savefig(figures_path / "infection_status_by_time_full.png", dpi=300) + if show_plots: + plt.show() + plt.close() -# Long time horizon -g = sns.relplot( - data=prevalence_data.group_by("t", "infection_status", "seed").agg( - pl.sum("count").alias("count") - ), - x="t", - y="count", - kind="line", - hue="infection_status", - alpha=0.3, - units="seed", - estimator=None, - col="infection_status", - col_order=["Susceptible", "Infectious", "Recovered"], - # estimator='median', - # errorbar=lambda x: (x.quantile(0.1), x.quantile(0.9)) -) -plt.xlabel("Time") -for ax in g.axes.flat: - # ax.axvline(x=65, color="red", linestyle="--", label="First case reported (March 6, 2020)") - ax.axvline( + # Deaths over time---------------------- + sns.lineplot( + data=death_data, + x="t_upper", + y="cumulative_count", + alpha=0.2, + units="seed", + estimator=None, + ) + plt.xlabel("Time") + plt.ylabel("Cumulative Deaths") + plt.yscale("log") + plt.axvline( x=75, color="black", linestyle="--", label="First death reported (March 16, 2020)", ) -plt.ylabel("Count") -plt.savefig(figures_path / "infection_status_by_time_full.png", dpi=300) -if show_plots: - plt.show() -plt.close() + plt.savefig(figures_path / "cumulative_deaths_over_time.png", dpi=300) + if show_plots: + plt.show() + plt.close() -# Deaths over time---------------------- -sns.lineplot( - data=death_data, - x="t_upper", - y="cumulative_count", - alpha=0.2, - units="seed", - estimator=None, -) -plt.xlabel("Time") -plt.ylabel("Cumulative Deaths") -plt.yscale("log") -plt.axvline( - x=75, - color="black", - linestyle="--", - label="First death reported (March 16, 2020)", -) -plt.savefig(figures_path / "cumulative_deaths_over_time.png", dpi=300) -if show_plots: - plt.show() -plt.close() + # Prevalence by age and symptom status---------------------------- + g = sns.relplot( + data=prevalence_data.filter( + ~pl.col("symptom_status").is_in(["NoSymptoms", "Dead", "Resolved"]) + ) + .group_by("t", "age_group", "symptom_status", "seed") + .agg(pl.sum("count").alias("count")), + x="t", + y="count", + kind="line", + col="age_group", + row="symptom_status", + col_order=["Age0To17", "Age18to49", "Age50to64", "Age65Plus"], + row_order=["Mild", "Severe", "Critical"], + facet_kws={"sharey": "row", "sharex": True}, + hue="symptom_status", + alpha=0.2, + units="seed", + estimator=None, + # estimator='median', + # errorbar = lambda x: (x.quantile(0.025), x.quantile(0.975)) + ) + g.figure.subplots_adjust(top=0.85) + g.set_axis_labels("Time (days since simulation start)", "Number of people") + g.set_titles("") + plt.savefig( + figures_path / "prevalence_by_age_and_symptom_status.png", dpi=300 + ) + if show_plots: + plt.show() + plt.close() -# Prevalence by age and symptom status---------------------------- -g = sns.relplot( - data=prevalence_data.filter( - ~pl.col("symptom_status").is_in(["NoSymptoms", "Dead", "Resolved"]) + n_unique_seeds = prevalence_data.select(pl.col("seed").n_unique()).item() + + age_group_values = ( + prevalence_data.filter( + pl.col("symptom_status").is_in(["Severe", "Critical"]) + ) + .group_by("t", "age_group", "symptom_status", "seed") + .agg(pl.sum("count").alias("count")) + .filter(pl.col("t") < 85) + .group_by("age_group", "symptom_status", "t") + .agg( + (pl.len() / n_unique_seeds).alias( + "proportion_of_simualtions_have_had_cases" + ) + ) ) - .group_by("t", "age_group", "symptom_status", "seed") - .agg(pl.sum("count").alias("count")), - x="t", - y="count", - kind="line", - col="age_group", - row="symptom_status", - col_order=["Age0To17", "Age18to49", "Age50to64", "Age65Plus"], - row_order=["Mild", "Severe", "Critical"], - facet_kws={"sharey": "row", "sharex": True}, - hue="symptom_status", - alpha=0.2, - units="seed", - estimator=None, - # estimator='median', - # errorbar = lambda x: (x.quantile(0.025), x.quantile(0.975)) -) -g.figure.subplots_adjust(top=0.85) -g.set_axis_labels("Time (days since simulation start)", "Number of people") -g.set_titles("") -plt.savefig(figures_path / "prevalence_by_age_and_symptom_status.png", dpi=300) -if show_plots: - plt.show() -plt.close() + g = sns.relplot( + data=age_group_values, + x="t", + y="proportion_of_simualtions_have_had_cases", + kind="line", + col="age_group", + col_order=["Age0To17", "Age18to49", "Age50to64", "Age65Plus"], + col_wrap=2, + hue="symptom_status", + ) -n_unique_seeds = prevalence_data.select(pl.col("seed").n_unique()).item() + g.set(ylim=(0, 1)) -age_group_values = ( - prevalence_data.filter( - pl.col("symptom_status").is_in(["Severe", "Critical"]) + g.figure.suptitle( + "Observing symptomatic cases in simulations", + fontsize="x-large", + fontweight="bold", + ) + g.figure.subplots_adjust(top=0.85) + g.set_axis_labels( + "Time (days since simulation start)", + "Proportion of simulations with at least one case", ) - .group_by("t", "age_group", "symptom_status", "seed") - .agg(pl.sum("count").alias("count")) - .filter(pl.col("t") < 85) - .group_by("age_group", "symptom_status", "t") - .agg( - (pl.len() / n_unique_seeds).alias( - "proportion_of_simualtions_have_had_cases" + for ax in g.axes.flat: + ax.axvline( + x=65, + color="red", + linestyle="--", + label="First case reported (March 6, 2020)", ) + ax.axvline( + x=75, + color="black", + linestyle="--", + label="First death reported (March 16, 2020)", + ) + plt.savefig( + figures_path / "prevalence_by_age_and_symptom_status.png", dpi=300 ) -) - -g = sns.relplot( - data=age_group_values, - x="t", - y="proportion_of_simualtions_have_had_cases", - kind="line", - col="age_group", - col_order=["Age0To17", "Age18to49", "Age50to64", "Age65Plus"], - col_wrap=2, - hue="symptom_status", -) + if show_plots: + plt.show() + plt.close() -g.set(ylim=(0, 1)) -g.figure.suptitle( - "Observing symptomatic cases in simulations", - fontsize="x-large", - fontweight="bold", +parser = argparse.ArgumentParser( + description="Plot results from phase 1 projection" ) -g.figure.subplots_adjust(top=0.85) -g.set_axis_labels( - "Time (days since simulation start)", - "Proportion of simulations with at least one case", +parser.add_argument( + "-d", + "--subdirectory-name", + type=str, + required=True, + help="Subdirectory name in the projection directory to read the results from", ) -for ax in g.axes.flat: - ax.axvline( - x=65, - color="red", - linestyle="--", - label="First case reported (March 6, 2020)", - ) - ax.axvline( - x=75, - color="black", - linestyle="--", - label="First death reported (March 16, 2020)", - ) -plt.savefig(figures_path / "prevalence_by_age_and_symptom_status.png", dpi=300) -if show_plots: - plt.show() -plt.close() +parser.add_argument( + "-s", + "--show-plots", + action="store_true", + help="Show plots instead of saving them", +) + + +if __name__ == "__main__": + args = parser.parse_args() + main(subdirectory_name=args.subdirectory_name, show_plots=args.show_plots) From 53d80419690edd09353a789dbac0cc936bf01225 Mon Sep 17 00:00:00 2001 From: KOVALW Date: Thu, 9 Apr 2026 13:45:16 +0000 Subject: [PATCH 08/15] use normalized size for dev naming --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 0b5b9b4..2f865bc 100644 --- a/Makefile +++ b/Makefile @@ -82,10 +82,10 @@ plot-phase-1-projection-smc: projections-phase-1-smc calibrate-phase-1-dev: ./experiments/phase1/input/priors.json ./experiments/phase1/input/default_params.json uv run cargo build -r - uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/dev-config.yaml -o ./experiments/phase1/calibration/dev_$(SIZE) --default-population-size-dev $(SIZE) + uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/dev-config.yaml -o ./experiments/phase1/calibration/dev_$(NORMALIZED_SIZE) --default-population-size-dev $(NORMALIZED_SIZE) -projections-phase-1-dev: ./experiments/phase1/calibration/dev_$(SIZE)/results.pkl - uv run python ./scripts/phase_1_projection.py -d dev_$(SIZE) -f --plot-distances +projections-phase-1-dev: ./experiments/phase1/calibration/dev_$(NORMALIZED_SIZE)/results.pkl + uv run python ./scripts/phase_1_projection.py -d dev_$(NORMALIZED_SIZE) -f --plot-distances plot-phase-1-projection-dev: projections-phase-1-dev - uv run python ./scripts/plot_phase_1_projection.py -d dev_$(SIZE) + uv run python ./scripts/plot_phase_1_projection.py -d dev_$(NORMALIZED_SIZE) From 4db2deecb4bb4ad88e344c791424c5f1451a46da Mon Sep 17 00:00:00 2001 From: KOVALW Date: Thu, 9 Apr 2026 14:00:53 +0000 Subject: [PATCH 09/15] Update readme and add MAX_WORKERS --- Makefile | 13 +++++++------ README.md | 28 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 2f865bc..d5449c0 100644 --- a/Makefile +++ b/Makefile @@ -58,34 +58,35 @@ BASE ?= HEAD bench-compare: input/synth_pop_people_WY_10_000.csv input/synth_pop_people_WY_100_000.csv uv run scripts/bench_compare.py $(BASE) +MAX_WORKERS ?= 4 TARGET_RESULTS = ./experiments/phase1/calibration/output_indiana/results.pkl calibrate-phase-1: $(TARGET_RESULTS) $(TARGET_RESULTS): ./experiments/phase1/input/priors.json ./experiments/phase1/input/default_params.json uv run cargo build -r - uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/prod-config.yaml -o ./experiments/phase1/calibration/output_indiana + uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/prod-config.yaml -o ./experiments/phase1/calibration/output_indiana --max-workers $(MAX_WORKERS) projections-phase-1: $(TARGET_RESULTS) - uv run python ./scripts/phase_1_projection.py -d output_indiana + uv run python ./scripts/phase_1_projection.py -d output_indiana --max-workers $(MAX_WORKERS) plot-phase-1-projection: uv run python ./scripts/plot_phase_1_projection.py -d output_indiana calibrate-phase-1-smc: ./experiments/phase1/input/priors.json ./experiments/phase1/input/default_params.json uv run cargo build -r - uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/prod-smc-config.yaml -o ./experiments/phase1/calibration/smc + uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/prod-smc-config.yaml -o ./experiments/phase1/calibration/smc --max-workers $(MAX_WORKERS) projections-phase-1-smc: ./experiments/phase1/calibration/smc/results.pkl - uv run python ./scripts/phase_1_projection.py -d smc + uv run python ./scripts/phase_1_projection.py -d smc --max-workers $(MAX_WORKERS) plot-phase-1-projection-smc: projections-phase-1-smc uv run python ./scripts/plot_phase_1_projection.py -d smc calibrate-phase-1-dev: ./experiments/phase1/input/priors.json ./experiments/phase1/input/default_params.json uv run cargo build -r - uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/dev-config.yaml -o ./experiments/phase1/calibration/dev_$(NORMALIZED_SIZE) --default-population-size-dev $(NORMALIZED_SIZE) + uv run python ./scripts/phase_1_calibration.py -c ./experiments/phase1/input/dev-config.yaml -o ./experiments/phase1/calibration/dev_$(NORMALIZED_SIZE) --default-population-size-dev $(NORMALIZED_SIZE) --max-workers $(MAX_WORKERS) projections-phase-1-dev: ./experiments/phase1/calibration/dev_$(NORMALIZED_SIZE)/results.pkl - uv run python ./scripts/phase_1_projection.py -d dev_$(NORMALIZED_SIZE) -f --plot-distances + uv run python ./scripts/phase_1_projection.py -d dev_$(NORMALIZED_SIZE) --max-workers $(MAX_WORKERS) -f --plot-distances plot-phase-1-projection-dev: projections-phase-1-dev uv run python ./scripts/plot_phase_1_projection.py -d dev_$(NORMALIZED_SIZE) diff --git a/README.md b/README.md index 2bc21f8..d6ea921 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,34 @@ make profile PROFILE_SIZE=10m PROFILE_FEATURES=profiling # both The `profiling` Cargo feature enables ixa's built-in span timing (`open_span`/`Span::drop`). This adds ~25% overhead, so it's off by default for samply runs. The `run`, `run-1m`, and `run-10m` targets enable it for ixa's own profiling output. +### Calibration + +`make calibrate-phase-1-dev` is the easiest way to run the calibration routine of Phase 1, in which we compare the first observed deaths in the model to the first observed death in the State of Indiana. Running this command with setting `SIZE` will generate a toy synthetic population of that size based on Indiana PUMs census data and then run the Phase 1 calibration script. For example, to run routines in popualtions 50K, 100K, and 1 million: + +```bash +make calibrate-phase-1-dev SIZE=50_000 +make calibrate-phase-1-dev SIZE=100_000 +make calibrate-phase-1-dev SIZE=1_000_000 +``` + +By default, the calibration routine uses four parallel worker threads to run simulations. Depending on your computer specs, this can be altered by setting the `MAX_WORKERS` parameter + +```bash +make calibrate-phase-1-dev SIZE=50_000 MAX_WORKERS=10 +``` + +To run the post-calibration projection of the accepted particles on a longer time horizon, use the command `make projections-phase-1-dev`, which also accepts the `SIZE` and `MAX_WORKERS` command and will generate the calibration if it deos not exist. + +To run the whole routine through generating figures, use + +```bash +make plot-phase-1-projection-dev SIZE={n} MAX_WORKERS={m} +``` + +This command can be called without calling the others explicitly. + +Production code follows the same format, but drops the `dev` suffix (for example the calibration command is `make calibrate-phase-1`). To run this, please ensure that you have specified a path to a valid synthetic population in the `.env` file under `SYNTH_POP_FILE`. + ## General Disclaimer This repository was created for use by CDC programs to collaborate on public health related projects in support of the [CDC mission](https://www.cdc.gov/about/organization/mission.htm). GitHub is not hosted by the CDC, but is a third party website used by CDC and its partners to share information and collaborate on software. CDC use of GitHub does not imply an endorsement of any one particular service, product, or enterprise. From ccef91a40d6b5c4b9d29b2b0af1e97535826f0d2 Mon Sep 17 00:00:00 2001 From: Gil Sharon Date: Mon, 4 May 2026 14:58:04 -0400 Subject: [PATCH 10/15] cloud phase3 --- Dockerfile.cloud | 2 + Makefile | 2 +- README.md | 19 + ixa_epi_covid.cloud_config.toml | 67 +++ ixa_epi_covid.mrp.cloud.toml | 36 -- .../src/importation/geographies.py | 2 +- .../src/importation/perkins_et_al_methods.py | 4 +- packages/particle_reader/pyproject.toml | 13 - .../src/particle_reader/__init__.py | 3 - .../src/particle_reader/particle_reader.py | 217 -------- pyproject.toml | 8 +- src/ixa_epi_covid/cloud/__init__.py | 20 - src/ixa_epi_covid/cloud/auto_size.py | 87 ---- src/ixa_epi_covid/cloud/cleanup.py | 229 --------- src/ixa_epi_covid/cloud/mrp_executor.py | 54 -- src/ixa_epi_covid/cloud/runner.py | 294 ----------- src/ixa_epi_covid/cloud/utils.py | 47 -- src/ixa_epi_covid/config_parser.py | 26 +- src/ixa_epi_covid/model_execution.py | 22 +- src/ixa_epi_covid/mrp_runner.py | 96 ++-- src/ixa_epi_covid/phase1/calibrate.py | 124 +---- src/ixa_epi_covid/phase1/core.py | 24 +- tests/cloud/test_cloud_auto_size_probe.py | 95 ++-- tests/cloud/test_cloud_cleanup.py | 47 +- tests/cloud/test_cloud_settings.py | 108 +++- tests/cloud/test_dependency_contract.py | 13 +- tests/cloud/test_mrp_toml_configs.py | 34 +- tests/cloud/test_phase1_auto_size.py | 113 ++--- tests/cloud/test_phase1_core.py | 14 + tests/cloud/test_population_asset_staging.py | 476 ++++-------------- uv.lock | 22 +- 31 files changed, 562 insertions(+), 1756 deletions(-) create mode 100644 ixa_epi_covid.cloud_config.toml delete mode 100644 ixa_epi_covid.mrp.cloud.toml delete mode 100644 packages/particle_reader/pyproject.toml delete mode 100644 packages/particle_reader/src/particle_reader/__init__.py delete mode 100644 packages/particle_reader/src/particle_reader/particle_reader.py delete mode 100644 src/ixa_epi_covid/cloud/__init__.py delete mode 100644 src/ixa_epi_covid/cloud/auto_size.py delete mode 100644 src/ixa_epi_covid/cloud/cleanup.py delete mode 100644 src/ixa_epi_covid/cloud/mrp_executor.py delete mode 100644 src/ixa_epi_covid/cloud/runner.py delete mode 100644 src/ixa_epi_covid/cloud/utils.py diff --git a/Dockerfile.cloud b/Dockerfile.cloud index 04f3e3f..4a7f825 100644 --- a/Dockerfile.cloud +++ b/Dockerfile.cloud @@ -27,6 +27,8 @@ RUN useradd --create-home --shell /bin/bash appuser COPY --from=python-builder /app /app COPY --from=rust-builder /app/target/release/ixa-epi-covid /usr/local/bin/ixa-epi-covid +RUN mkdir -p /app/target/release +COPY --from=rust-builder /app/target/release/ixa-epi-covid /app/target/release/ixa-epi-covid COPY ixa_epi_covid.mrp.task.toml /app/ixa_epi_covid.mrp.task.toml COPY experiments/phase1/input/default_params.json /app/default_params.json diff --git a/Makefile b/Makefile index a06365b..f58f33a 100644 --- a/Makefile +++ b/Makefile @@ -168,7 +168,7 @@ calibrate-phase-1-docker: docker-build-cloud-image # Run phase-1 calibration through the Azure/cloud-backed MRP path. This target # requires the cloudops dependency group, so bootstrap with uv-sync-cloud first. calibrate-phase-1-cloud: uv-sync-cloud build-rust-release - uv run python ./scripts/phase_1_calibration.py -c $(PHASE1_PROD_CONFIG) -o ./experiments/phase1/calibration/output_indiana_cloud --max-workers $(MAX_WORKERS) --cloud $(AUTO_SIZE) --artifacts-dir $(CLOUD_ARTIFACTS_DIR) --repo-root . --dockerfile ./Dockerfile.cloud + uv run python ./scripts/phase_1_calibration.py -c $(PHASE1_PROD_CONFIG) -o ./experiments/phase1/calibration/output_indiana_cloud --max-workers $(MAX_WORKERS) --cloud --cloud-config ixa_epi_covid.cloud_config.toml $(AUTO_SIZE) --artifacts-dir $(CLOUD_ARTIFACTS_DIR) projections-phase-1: $(TARGET_RESULTS) uv run python ./scripts/phase_1_projection.py -d output_indiana --max-workers $(MAX_WORKERS) diff --git a/README.md b/README.md index 1433871..15e9bbf 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,25 @@ This command can be called without calling the others explicitly. Production code follows the same format, but drops the `dev` suffix (for example the calibration command is `make calibrate-phase-1`). To run this, please ensure that you have specified a path to a valid synthetic population in the `.env` file under `SYNTH_POP_FILE`. +Cloud calibration uses the model-facing cloud config: + +```bash +uv run python -m ixa_epi_covid.phase1.calibrate \ + --config_file experiments/phase1/input/prod-config.yaml \ + --output-dir experiments/phase1/calibration/output_indiana_cloud \ + --cloud \ + --cloud-config ixa_epi_covid.cloud_config.toml +``` + +Cleanup uses the shared calibration-tools cleanup CLI: + +```bash +python -m calibrationtools.cloud.cleanup \ + --cloud-config ixa_epi_covid.cloud_config.toml \ + --session-id \ + --dry-run +``` + ## General Disclaimer This repository was created for use by CDC programs to collaborate on public health related projects in support of the [CDC mission](https://www.cdc.gov/about/organization/mission.htm). GitHub is not hosted by the CDC, but is a third party website used by CDC and its partners to share information and collaborate on software. CDC use of GitHub does not imply an endorsement of any one particular service, product, or enterprise. diff --git a/ixa_epi_covid.cloud_config.toml b/ixa_epi_covid.cloud_config.toml new file mode 100644 index 0000000..c37f32d --- /dev/null +++ b/ixa_epi_covid.cloud_config.toml @@ -0,0 +1,67 @@ +[cloud] +keyvault = "cfa-predict" +vm_size = "large" +jobs_per_session = 1 +task_slots_per_node = 50 +pool_max_nodes = 5 +task_timeout_minutes = 60 +pool_ready_timeout_minutes = 20 +pool_auto_scale_evaluation_interval_minutes = 5 +dispatch_buffer = 1000 +print_task_durations = false +max_parallel_output_downloads = 8 + +[cloud.image] +local_image = "ixa-epi-covid-cloud" +repository = "ixa-epi-covid-cloud" +build_context = "." +dockerfile = "Dockerfile.cloud" +task_mrp_config_path = "/app/ixa_epi_covid.mrp.task.toml" + +[cloud.resources] +pool_prefix = "ixa-epi-covid-cloud" +job_prefix = "ixa-epi-covid-cloud" +input_container_prefix = "ixa-epi-covid-cloud-input" +output_container_prefix = "ixa-epi-covid-cloud-output" +logs_container_prefix = "ixa-epi-covid-cloud-logs" +input_mount_path = "/cloud-input" +output_mount_path = "/cloud-output" +logs_mount_path = "/cloud-logs" + +[cloud.output] +filename = "output.csv" +mode = "csv_table" +output_name = "aggregated_deaths_report" +orientation = "columns" + +[cloud.shared_assets.synthetic_population] +source_json_pointer = "/ixa_inputs/epimodel.GlobalParams/synth_population_file" +blob_dir = "shared" +remote_path_var = "SYNTH_POPULATION_PATH" +required = true + +[cloud.task_payload] +task_output_dir = "/tmp/ixa-epi-covid/{run_id}" + +[[cloud.task_payload.transforms]] +name = "set-output-dir" +op = "set" +path = "/config_inputs/output_dir" +value = "{task_output_dir}" + +[[cloud.task_payload.transforms]] +name = "set-synth-population" +op = "set" +path = "/ixa_inputs/epimodel.GlobalParams/synth_population_file" +value = "{SYNTH_POPULATION_PATH}" + +[[cloud.task_payload.transforms]] +name = "set-importation-output" +op = "set" +path = "/ixa_inputs/epimodel.GlobalParams/imported_cases_timeseries/filename" +value = "{task_output_dir}/imported_cases_timeseries.csv" + +[cloud.auto_size] +probe = "local_task" +local_mrp_config_path = "ixa_epi_covid.mrp.toml" +memory_scope = "process_tree" diff --git a/ixa_epi_covid.mrp.cloud.toml b/ixa_epi_covid.mrp.cloud.toml deleted file mode 100644 index 9768ab4..0000000 --- a/ixa_epi_covid.mrp.cloud.toml +++ /dev/null @@ -1,36 +0,0 @@ -input = "experiments/phase1/input/default_params.json" - -[model] -spec = "ixa_epi_covid_phase1" -version = "0.1.0" - -[runtime] -spec = "inline" -callable = "ixa_epi_covid.cloud.mrp_executor:execute_cloud_run" - -[runtime.cloud] -keyvault = "cfa-predict" -local_image = "ixa-epi-covid-cloud" -repository = "ixa-epi-covid-cloud" -task_mrp_config_path = "/app/ixa_epi_covid.mrp.task.toml" -pool_prefix = "ixa-epi-covid-cloud" -job_prefix = "ixa-epi-covid-cloud" -input_container_prefix = "ixa-epi-covid-cloud-input" -output_container_prefix = "ixa-epi-covid-cloud-output" -logs_container_prefix = "ixa-epi-covid-cloud-logs" -input_mount_path = "/cloud-input" -output_mount_path = "/cloud-output" -logs_mount_path = "/cloud-logs" -vm_size = "large" -jobs_per_session = 1 -task_slots_per_node = 50 -pool_max_nodes = 5 -task_timeout_minutes = 60 -pool_ready_timeout_minutes = 20 -pool_auto_scale_evaluation_interval_minutes = 5 -dispatch_buffer = 1000 -print_task_durations = false - -[output] -spec = "filesystem" -dir = "./output" diff --git a/packages/importation/src/importation/geographies.py b/packages/importation/src/importation/geographies.py index bb6731d..a45783d 100644 --- a/packages/importation/src/importation/geographies.py +++ b/packages/importation/src/importation/geographies.py @@ -9,7 +9,7 @@ PACKAGE_DATA_DIR = Path(__file__).resolve().parent / "data" -def get_api_key() -> str: +def get_api_key() -> str | None: """Get the Census API key from the environment variable""" load_dotenv() return os.getenv("CENSUS_API_KEY") diff --git a/packages/importation/src/importation/perkins_et_al_methods.py b/packages/importation/src/importation/perkins_et_al_methods.py index f457b5f..e9150bf 100644 --- a/packages/importation/src/importation/perkins_et_al_methods.py +++ b/packages/importation/src/importation/perkins_et_al_methods.py @@ -233,7 +233,7 @@ def sample_undetected_infections( known_deaths: int, prop_ascf: pl.DataFrame, max_infections: int = 20000, - seed: int = None, + seed: int | None = None, ) -> pl.DataFrame: """ Sample undetected infections from a probability distribution based on known cases, known deaths, @@ -289,7 +289,7 @@ def sample_us_importation_incidence_data( reporting_data: pl.DataFrame, importation_parameters: dict | pl.DataFrame, max_infections: int = 20000, - seed: int = None, + seed: int | None = None, ) -> pl.DataFrame: """ Create synthetic dataset of the total number of infections by sampling undetected infections. diff --git a/packages/particle_reader/pyproject.toml b/packages/particle_reader/pyproject.toml deleted file mode 100644 index eeac2d3..0000000 --- a/packages/particle_reader/pyproject.toml +++ /dev/null @@ -1,13 +0,0 @@ -[project] -name = "particle_reader" -version = "0.1.0" -description = "Library for reading parameters - from the dev branch of calibrationtools" -requires-python = ">=3.12" -dependencies = [ - "numpy>=2.3.4", - "polars>=1.35.1", -] - -[build-system] -requires = ["uv_build>=0.9.21,<0.10.0"] -build-backend = "uv_build" diff --git a/packages/particle_reader/src/particle_reader/__init__.py b/packages/particle_reader/src/particle_reader/__init__.py deleted file mode 100644 index 70f5e76..0000000 --- a/packages/particle_reader/src/particle_reader/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .particle_reader import ParticleReader - -__all__ = ["ParticleReader"] diff --git a/packages/particle_reader/src/particle_reader/particle_reader.py b/packages/particle_reader/src/particle_reader/particle_reader.py deleted file mode 100644 index d244551..0000000 --- a/packages/particle_reader/src/particle_reader/particle_reader.py +++ /dev/null @@ -1,217 +0,0 @@ -import inspect -from typing import Any, Callable, Concatenate - -from calibrationtools.particle import Particle -from mrp.api import apply_dict_overrides - - -def flatten_dict( - structured_dict: dict[str, Any], - parent_key: str = "", - escape_sep: bool = True, -) -> dict[str, Any]: - """ - Flattens a nested dictionary by concatenating keys with a '.' separator. - - Args: - structured_dict (dict[str, Any]): The nested dictionary to flatten. - parent_key (str): The base key to prepend to each key in the flattened dictionary. Defaults to an empty string. - escape_sep (bool): Whether to escape the separator in keys that contain it. If True, occurrences of the separator in keys will be prefixed with a backslash. If False, a ValueError will be raised if any key contains the separator. Defaults to True. - - Returns: - dict[str, Any]: A flattened dictionary where nested keys are concatenated with the specified separator. - Raises: - ValueError: If escape_sep is False and any key in the structured_dict contains the separator - """ - items = [] - for k, v in structured_dict.items(): - if "." in k: - if escape_sep: - k = k.replace(".", "\\.") - else: - raise ValueError( - f"Key '{k}' contains the separator '.' and escape_sep is set to False." - ) - - new_key = ".".join([parent_key, k]) if parent_key else k - if isinstance(v, dict): - items.extend(flatten_dict(v, new_key).items()) - else: - items.append((new_key, v)) - return dict(items) - - -def unflatten_parameter_name( - flattened_name: str, value: Any -) -> dict[str, Any]: - """ - Unflattens a parameter name by splitting it on dots. - - Args: - flattened_name (str): The flattened parameter name (e.g., "offspring_distribution.NegativeBinomial.mean"). - value (Any): The value to assign to the unflattened parameter. - Returns: - dict[str, Any]: A dictionary representing the unflattened parameter name (e.g., {"offspring_distribution": {"NegativeBinomial": {"mean2": value}}}). - """ - name_vec = flattened_name.split(".") - param_vec = [] - i = 0 - # Corrct for any escaped separators introduced during flattening - while i < len(name_vec): - if name_vec[i].endswith("\\"): - param_vec.append(name_vec[i].replace("\\", ".") + name_vec[i + 1]) - i += 2 - else: - param_vec.append(name_vec[i]) - i += 1 - - param_dict = {param_vec[-1]: value} - for key in reversed(param_vec[:-1]): - param_dict = {key: param_dict} - return param_dict - - -class ParticleReader: - """ - ParticleReader is a utility class for converting Particle objects into dictionaries - suitable for use as model parameter inputs. It supports merging particle-provided - values into a nested default parameter structure, and also delegating conversion - to a user-supplied reader function. - Args: - particle_param_names (list[str]): Flat parameter names expected to be present - on Particle instances (e.g. ["transmission.rate", "recovery.mean"]). - default_params (dict[str, Any] | None): Nested default parameter dictionary - (possibly multi-level) that particle values should override. If provided, - ParticleReader attempts to map each flat particle parameter name to a - corresponding flattened key in this defaults dictionary. Defaults to None. - Behavior: - - When default_params is provided, the constructor flattens it (via - flatten_dict) and attempts to match each particle_param_names entry to one - flattened key by using string suffix matching (flat_name.endswith(param_name)). - If no match is found for a parameter, a ValueError is raised. If multiple - flattened keys match the same parameter name, a ValueError is raised to - avoid ambiguity. - - When no default_params are provided, particle parameters are treated as - already representing the final (flat) names. - """ - - def __init__( - self, - particle_param_names: list[str], - default_params: dict[str, Any] | None = None, - ): - self.default_params = default_params or {} - self.particle_param_names = particle_param_names - self.name_key = self._map_particle_params_to_defaults() - - def _map_particle_params_to_defaults(self) -> dict[str, str]: - """ - Creates a mapping from flat particle parameter names to their corresponding flattened keys in the default_params structure. - This mapping is used to guide the unflattening process when merging particle parameters with defaults. - - Raises: - ValueError: If a particle parameter name cannot be uniquely matched to a flattened key in default_params (no matches or multiple matches). - Returns: - dict[str, str]: A mapping from flat particle parameter names to their corresponding flattened keys in the default_params structure. - """ - if self.default_params: - flat_names = flatten_dict(self.default_params) - name_key = {} - for param_name in self.particle_param_names: - found_match_count = 0 - - for flat_name in flat_names.keys(): - if flat_name == param_name: - name_key.update({param_name: flat_name}) - found_match_count = 1 - break - elif flat_name.endswith("." + param_name): - name_key.update({param_name: flat_name}) - found_match_count += 1 - if found_match_count == 0: - raise ValueError( - f"No matching default parameter found for '{param_name}'" - ) - elif found_match_count > 1: - raise ValueError( - f"Multiple matching default parameters found for '{param_name}'" - ) - else: - name_key = { - param_name: param_name - for param_name in self.particle_param_names - } - return name_key - - def _merge_particle_with_defaults( - self, particle: Particle - ) -> dict[str, Any]: - """ - Merges the parameters from a Particle with the default parameters, using the mapping defined in self.name_key to unflatten particle parameter names into the nested structure of default_params. - - Args: - particle (Particle): The particle whose parameters are being merged with defaults. - Returns: - dict[str, Any]: A mapping from flat particle parameter names to their corresponding - flattened keys in the default_params structure, used to guide the unflattening process. - """ - particle_params = {} - for param_name, value in particle.items(): - unflattened = unflatten_parameter_name( - self.name_key[param_name], value - ) - particle_params = apply_dict_overrides( - particle_params, unflattened - ) - merged_params = apply_dict_overrides( - self.default_params, particle_params - ) - return merged_params - - def read_particle( - self, - particle: Particle, - read_fn: Callable[Concatenate[Particle, ...], dict] | None = None, - **kwargs, - ) -> dict[str, Any]: - """ - Read a Particle into a dictionary using either a user-provided reader or the internal default merger. - - If a callable read_fn is provided, it is invoked to produce the particle dictionary. The method inspects - read_fn's signature and will pass this instance's default_params as the keyword default_params if and only if - the callable either accepts arbitrary keyword arguments (**kwargs) or declares a parameter named "default_params". - All additional keyword arguments passed to this method are forwarded to read_fn. - - If read_fn is None, the particle is processed by the instance method _merge_particle_with_defaults and that - result is returned. - - Args: - particle (Particle): The particle object to read/convert into a dict. - read_fn (Callable[Concatenate[Particle, ...], dict] | None): Optional user-supplied function to read the particle. It should - accept the particle as its first argument and return a dict of attributes. If it accepts a parameter - named "default_params" or accepts arbitrary keyword arguments, default_params from this instance will be - supplied automatically. - **kwargs: Additional keyword arguments forwarded to read_fn when provided. - - Returns: - dict[str, Any]: A dictionary representation of the particle produced either by read_fn or by - _merge_particle_with_defaults. - """ - if read_fn is not None: - # Be sure to pass default params to user-defined read_fn if expected - args = inspect.signature(read_fn).parameters - accepts_default = ( - any( - req.kind == inspect.Parameter.VAR_KEYWORD - for req in args.values() - ) - or "default_params" in args - ) - if accepts_default: - return read_fn( - particle, default_params=self.default_params, **kwargs - ) - else: - return read_fn(particle, **kwargs) - else: - return self._merge_particle_with_defaults(particle) diff --git a/pyproject.toml b/pyproject.toml index 3e699c7..36db98f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,6 @@ dependencies = [ "numpy>=2.3.4", "pandas>=2.3.2,<3.0.0", "pandas-stubs>=2.3.2,<3.0.0", - "particle_reader", "polars>=1.35.1", "pyarrow>=23.0.0", "pygris>=0.2.1", @@ -30,24 +29,23 @@ dependencies = [ [project.scripts] ixa_epi_covid_phase1_calibrate = "ixa_epi_covid.phase1.calibrate:main" -ixa_epi_covid_cloud_cleanup = "ixa_epi_covid.cloud.cleanup:main" [build-system] requires = ["uv_build>=0.8.13,<0.9.0"] build-backend = "uv_build" [tool.uv.sources] -calibrationtools = { git = "https://github.com/CDCgov/cfa-calibration-tools.git", branch = "mrp_docker_cloudops" } +calibrationtools = { git = "https://github.com/CDCgov/cfa-calibration-tools.git", branch = "cloud-phase3" } "create-synthetic-population" = { workspace = true } importation = { workspace = true } -"particle-reader" = { workspace = true } [tool.uv] package = true [tool.uv.workspace] members = [ - "packages/*", + "packages/create_synthetic_population", + "packages/importation", ] [dependency-groups] diff --git a/src/ixa_epi_covid/cloud/__init__.py b/src/ixa_epi_covid/cloud/__init__.py deleted file mode 100644 index b95e39f..0000000 --- a/src/ixa_epi_covid/cloud/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -from .cleanup import main as cloud_cleanup_main -from .runner import IxaEpiCovidCloudRunner, resolve_cloud_build_context -from .utils import ( - DEFAULT_CLOUD_RUNTIME_SETTINGS, - CloudRuntimeSettings, - cloud_executor_backend, - cloud_runner_backend, - load_cloud_runtime_settings, -) - -__all__ = [ - "CloudRuntimeSettings", - "DEFAULT_CLOUD_RUNTIME_SETTINGS", - "IxaEpiCovidCloudRunner", - "cloud_cleanup_main", - "cloud_executor_backend", - "cloud_runner_backend", - "load_cloud_runtime_settings", - "resolve_cloud_build_context", -] diff --git a/src/ixa_epi_covid/cloud/auto_size.py b/src/ixa_epi_covid/cloud/auto_size.py deleted file mode 100644 index f0089f0..0000000 --- a/src/ixa_epi_covid/cloud/auto_size.py +++ /dev/null @@ -1,87 +0,0 @@ -from __future__ import annotations - -import argparse -import copy -import json -import resource -import sys -from pathlib import Path -from typing import Any - -from ixa_epi_covid.model_execution import ( - CANONICAL_OUTPUT_FILENAME, - execute_phase1_model, - write_canonical_output_csv, -) - - -def run_probe_simulation( - base_inputs: dict[str, Any], - run_id: str, - output_dir: Path, -) -> None: - """Run one phase-1 simulation for local cloud auto-sizing.""" - model_inputs = copy.deepcopy(base_inputs) - model_inputs["run_id"] = run_id - config_inputs = model_inputs["config_inputs"] - config_inputs["output_dir"] = str(output_dir) - - global_params = model_inputs["ixa_inputs"]["epimodel.GlobalParams"] - for output_name in config_inputs["outputs_to_read"]: - global_params[output_name]["filename"] = str( - output_dir / Path(global_params[output_name]["filename"]).name - ) - global_params["imported_cases_timeseries"]["filename"] = str( - output_dir - / Path(global_params["imported_cases_timeseries"]["filename"]).name - ) - - outputs = execute_phase1_model(model_inputs) - write_canonical_output_csv( - output_dir / CANONICAL_OUTPUT_FILENAME, - outputs, - ) - - -def main() -> None: - parser = argparse.ArgumentParser() - parser.add_argument("--child", action="store_true") - args = parser.parse_args() - if not args.child: - raise SystemExit("cloud auto-size probe helpers are internal") - _run_memory_probe_child() - - -def _run_memory_probe_child() -> None: - request = json.loads(sys.stdin.read()) - if not isinstance(request, dict): - raise ValueError("probe request must be a JSON object") - - base_inputs = request.get("base_inputs") - if not isinstance(base_inputs, dict): - raise ValueError("probe request must include object base_inputs") - - run_id = request.get("run_id") - if not isinstance(run_id, str) or not run_id: - raise ValueError("probe request must include non-empty run_id") - - output_dir_value = request.get("output_dir") - if not isinstance(output_dir_value, str) or not output_dir_value: - raise ValueError("probe request must include non-empty output_dir") - - output_dir = Path(output_dir_value) - output_dir.mkdir(parents=True, exist_ok=True) - run_probe_simulation(base_inputs, run_id, output_dir) - print(json.dumps({"peak_rss_bytes": _peak_rss_bytes()}), flush=True) - - -def _peak_rss_bytes() -> int: - self_rss = int(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss) - child_rss = int(resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss) - if sys.platform == "darwin": - return self_rss + child_rss - return (self_rss + child_rss) * 1024 - - -if __name__ == "__main__": - main() diff --git a/src/ixa_epi_covid/cloud/cleanup.py b/src/ixa_epi_covid/cloud/cleanup.py deleted file mode 100644 index ee96498..0000000 --- a/src/ixa_epi_covid/cloud/cleanup.py +++ /dev/null @@ -1,229 +0,0 @@ -from __future__ import annotations - -import subprocess -import sys -from pathlib import Path - -from calibrationtools.cloud.cleanup import ( - CleanupListing as _CleanupListing, -) -from calibrationtools.cloud.cleanup import CleanupPlan as _CleanupPlan -from calibrationtools.cloud.cleanup import CleanupResult as _CleanupResult -from calibrationtools.cloud.cleanup import build_parser as _build_parser -from calibrationtools.cloud.cleanup import ( - delete_acr_image_tag as _delete_acr_image_tag, -) -from calibrationtools.cloud.cleanup import ( - discover_cleanup_listing as _discover_cleanup_listing, -) -from calibrationtools.cloud.cleanup import ( - discover_cleanup_plan as _discover_cleanup_plan, -) -from calibrationtools.cloud.cleanup import ( - ensure_az_login_with_identity as _ensure_az_login_with_identity, -) -from calibrationtools.cloud.cleanup import execute_cleanup as _execute_cleanup -from calibrationtools.cloud.cleanup import ( - format_cleanup_listing, - format_cleanup_plan, -) -from calibrationtools.cloud.cleanup import ( - list_acr_repository_tags as _list_acr_repository_tags, -) -from calibrationtools.cloud.cleanup import parse_args as _parse_args -from calibrationtools.cloud.tooling import create_cloud_client, require_tool - -from ..mrp_runner import DEFAULT_CLOUD_MRP_CONFIG_PATH -from .utils import CloudRuntimeSettings, load_cloud_runtime_settings - -_AZ_NOT_LOGGED_IN = object() -_AZ_LOGGED_IN_IDENTITY: object | str | None = _AZ_NOT_LOGGED_IN - - -def build_parser(): - return _build_parser( - default_config_path=DEFAULT_CLOUD_MRP_CONFIG_PATH, - description=( - "Clean Azure assets created by one ixa_epi_covid cloud session. " - "Use --list for read-only discovery across the project naming " - "scope, or pass --session-slug to inspect or delete one session." - ), - ) - - -def parse_args(argv: list[str] | None = None): - return _parse_args( - argv, - default_config_path=DEFAULT_CLOUD_MRP_CONFIG_PATH, - description=( - "Clean Azure assets created by one ixa_epi_covid cloud session. " - "Use --list for read-only discovery across the project naming " - "scope, or pass --session-slug to inspect or delete one session." - ), - ) - - -def discover_cleanup_listing( - client, - settings: CloudRuntimeSettings, - *, - config_path: Path, - session_slug: str | None, - image_tag: str | None, - include_acr: bool, - allow_acr_errors: bool = False, -) -> _CleanupListing: - return _discover_cleanup_listing( - client, - settings, - config_path=config_path, - session_slug=session_slug, - image_tag=image_tag, - include_acr=include_acr, - allow_acr_errors=allow_acr_errors, - list_acr_repository_tags_fn=list_acr_repository_tags, - ) - - -def discover_cleanup_plan( - client, - settings: CloudRuntimeSettings, - *, - config_path: Path, - session_slug: str, - image_tag: str | None, - include_acr: bool, -) -> _CleanupPlan: - return _discover_cleanup_plan( - client, - settings, - config_path=config_path, - session_slug=session_slug, - image_tag=image_tag, - include_acr=include_acr, - list_acr_repository_tags_fn=list_acr_repository_tags, - ) - - -def execute_cleanup( - client, - plan: _CleanupPlan, - *, - include_acr: bool, -) -> _CleanupResult: - return _execute_cleanup( - client, - plan, - include_acr=include_acr, - delete_acr_image_tag_fn=delete_acr_image_tag, - ) - - -def list_acr_repository_tags( - registry_name: str, - repository_name: str, - *, - managed_identity_resource_id: str | None = None, -) -> list[str]: - return _list_acr_repository_tags( - registry_name, - repository_name, - managed_identity_resource_id=managed_identity_resource_id, - ensure_az_login_with_identity_func=ensure_az_login_with_identity, - require_tool_func=require_tool, - subprocess_run=subprocess.run, - ) - - -def delete_acr_image_tag( - registry_name: str, - repository_name: str, - image_tag: str, - *, - managed_identity_resource_id: str | None = None, -) -> None: - _delete_acr_image_tag( - registry_name, - repository_name, - image_tag, - managed_identity_resource_id=managed_identity_resource_id, - ensure_az_login_with_identity_func=ensure_az_login_with_identity, - require_tool_func=require_tool, - subprocess_run=subprocess.run, - ) - - -def ensure_az_login_with_identity( - *, - managed_identity_resource_id: str | None = None, -) -> None: - global _AZ_LOGGED_IN_IDENTITY - _AZ_LOGGED_IN_IDENTITY = _ensure_az_login_with_identity( - managed_identity_resource_id=managed_identity_resource_id, - current_identity=_AZ_LOGGED_IN_IDENTITY, - not_logged_in_sentinel=_AZ_NOT_LOGGED_IN, - require_tool_func=require_tool, - subprocess_run=subprocess.run, - ) - - -def main(argv: list[str] | None = None) -> int: - args = parse_args(argv) - config_path = Path(args.config) - settings = load_cloud_runtime_settings(config_path) - client = create_cloud_client(keyvault=settings.keyvault) - include_acr = not args.skip_acr - - if args.list: - listing = discover_cleanup_listing( - client, - settings, - config_path=config_path, - session_slug=args.session_slug, - image_tag=args.image_tag, - include_acr=include_acr, - allow_acr_errors=True, - ) - print(format_cleanup_listing(listing, include_acr=include_acr)) - return 0 - - plan = discover_cleanup_plan( - client, - settings, - config_path=config_path, - session_slug=args.session_slug, - image_tag=args.image_tag, - include_acr=include_acr, - ) - print(format_cleanup_plan(plan, include_acr=include_acr)) - - if not args.yes: - print( - "\nDry run only. Re-run with --yes to delete the resources above." - ) - return 0 - - if plan.is_empty: - print("\nNo matching Azure resources were found.") - return 0 - - result = execute_cleanup(client, plan, include_acr=include_acr) - print("\nDeleted resources:") - if result.deleted: - for item in result.deleted: - print(f" - {item}") - else: - print(" - none") - - if result.failures: - print("\nCleanup finished with errors:", file=sys.stderr) - for failure in result.failures: - print(f" - {failure}", file=sys.stderr) - return 1 - - print("\nCleanup finished successfully.") - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/src/ixa_epi_covid/cloud/mrp_executor.py b/src/ixa_epi_covid/cloud/mrp_executor.py deleted file mode 100644 index 1f6b692..0000000 --- a/src/ixa_epi_covid/cloud/mrp_executor.py +++ /dev/null @@ -1,54 +0,0 @@ -from __future__ import annotations - -from dataclasses import replace - -from calibrationtools.cloud.executor import ( - execute_cloud_run as _execute_cloud_run, -) -from calibrationtools.cloud.executor import read_run_json as _read_run_json - -from .utils import cloud_executor_backend - -create_cloud_client = cloud_executor_backend.create_cloud_client -add_batch_task_with_short_id = ( - cloud_executor_backend.add_batch_task_with_short_id -) -wait_for_task_completion = cloud_executor_backend.wait_for_task_completion -cancel_batch_task = cloud_executor_backend.cancel_batch_task -format_task_failure_message = ( - cloud_executor_backend.format_task_failure_message -) -format_task_timing_summary = cloud_executor_backend.format_task_timing_summary -suppress_cloudops_info_output = ( - cloud_executor_backend.suppress_cloudops_info_output -) - - -def _current_cloud_executor_backend(): - return replace( - cloud_executor_backend, - create_cloud_client=create_cloud_client, - add_batch_task_with_short_id=add_batch_task_with_short_id, - wait_for_task_completion=wait_for_task_completion, - cancel_batch_task=cancel_batch_task, - format_task_failure_message=format_task_failure_message, - format_task_timing_summary=format_task_timing_summary, - suppress_cloudops_info_output=suppress_cloudops_info_output, - ) - - -def execute_cloud_run(run_json): - return _execute_cloud_run( - run_json, - output_filename="output.csv", - backend=_current_cloud_executor_backend(), - ) - - -def main() -> int: - execute_cloud_run(_read_run_json()) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/src/ixa_epi_covid/cloud/runner.py b/src/ixa_epi_covid/cloud/runner.py deleted file mode 100644 index f541024..0000000 --- a/src/ixa_epi_covid/cloud/runner.py +++ /dev/null @@ -1,294 +0,0 @@ -from __future__ import annotations - -from dataclasses import replace -from pathlib import Path -from threading import BoundedSemaphore -from typing import Any - -from calibrationtools.cloud.config import DEFAULT_POLL_INTERVAL_SECONDS -from calibrationtools.cloud.runner import CloudMRPRunner -from calibrationtools.cloud.runner import ( - resolve_cloud_build_context as _resolve_cloud_build_context, -) -from calibrationtools.cloud.tooling import upload_files_quietly -from mrp import run as mrp_run - -from ..mrp_runner import DEFAULT_CLOUD_MRP_CONFIG_PATH, read_phase1_output_dir -from .utils import cloud_runner_backend, load_cloud_runtime_settings - -create_cloud_client = cloud_runner_backend.create_cloud_client -git_short_sha = cloud_runner_backend.git_short_sha -make_session_slug = cloud_runner_backend.make_session_slug -build_local_image = cloud_runner_backend.build_local_image -upload_local_image = cloud_runner_backend.upload_local_image -create_pool_with_blob_mounts = ( - cloud_runner_backend.create_pool_with_blob_mounts -) -wait_for_pool_ready = cloud_runner_backend.wait_for_pool_ready -add_batch_task_with_short_id = ( - cloud_runner_backend.add_batch_task_with_short_id -) -cancel_batch_task = cloud_runner_backend.cancel_batch_task -format_task_failure_message = cloud_runner_backend.format_task_failure_message -format_task_timing_summary = cloud_runner_backend.format_task_timing_summary -make_resource_name = cloud_runner_backend.make_resource_name -parse_generation_from_run_id = ( - cloud_runner_backend.parse_generation_from_run_id -) -suppress_cloudops_info_output = ( - cloud_runner_backend.suppress_cloudops_info_output -) - -_DEFAULT_REPO_ROOT = Path(__file__).resolve().parents[3] -_DEFAULT_DOCKERFILE_RELATIVE_PATH = Path("Dockerfile.cloud") -_CLOUD_TASK_EXE_FILE = "/usr/local/bin/ixa-epi-covid" -_CLOUD_TASK_OUTPUT_ROOT = Path("/tmp/ixa-epi-covid") -_MAX_PARALLEL_OUTPUT_DOWNLOADS = 8 - - -class _SharedCloudClientProxy: - """Per-run proxy that reuses the shared Azure service clients. - - The base cloud runner creates a fresh ``CloudClient`` for each submission, - wait loop, and download. At higher concurrency that fans out into many - simultaneous auth/client bootstrap calls. Reuse the already-initialized - service clients from ``self.client`` instead, while keeping per-run - ``logs_folder`` and ``save_logs_to_blob`` fields isolated on the proxy. - """ - - def __init__(self, shared_client: Any) -> None: - self._shared_client = shared_client - self.batch_service_client = shared_client.batch_service_client - self.batch_mgmt_client = shared_client.batch_mgmt_client - self.blob_service_client = shared_client.blob_service_client - self.compute_mgmt_client = getattr( - shared_client, - "compute_mgmt_client", - None, - ) - self.cred = shared_client.cred - self.full_container_name = getattr( - shared_client, - "full_container_name", - None, - ) - self.save_logs_to_blob = getattr( - shared_client, - "save_logs_to_blob", - None, - ) - self.logs_folder = getattr( - shared_client, - "logs_folder", - "stdout_stderr", - ) - - def download_file(self, *args: Any, **kwargs: Any) -> Any: - return self._shared_client.download_file(*args, **kwargs) - - def __getattr__(self, name: str) -> Any: - return getattr(self._shared_client, name) - - -def _current_cloud_runner_backend(): - return replace( - cloud_runner_backend, - create_cloud_client=create_cloud_client, - git_short_sha=git_short_sha, - make_session_slug=make_session_slug, - build_local_image=build_local_image, - upload_local_image=upload_local_image, - create_pool_with_blob_mounts=create_pool_with_blob_mounts, - wait_for_pool_ready=wait_for_pool_ready, - add_batch_task_with_short_id=add_batch_task_with_short_id, - cancel_batch_task=cancel_batch_task, - format_task_failure_message=format_task_failure_message, - format_task_timing_summary=format_task_timing_summary, - make_resource_name=make_resource_name, - parse_generation_from_run_id=parse_generation_from_run_id, - suppress_cloudops_info_output=suppress_cloudops_info_output, - ) - - -def resolve_cloud_build_context( - repo_root: str | Path | None = None, - dockerfile: str | Path | None = None, -) -> tuple[Path, Path]: - return _resolve_cloud_build_context( - default_repo_root=_DEFAULT_REPO_ROOT, - default_dockerfile_relative_path=_DEFAULT_DOCKERFILE_RELATIVE_PATH, - repo_root=repo_root, - dockerfile=dockerfile, - missing_dockerfile_message=( - "Cloud mode requires Dockerfile.cloud. " - "Looked at {dockerfile}; pass --repo-root and --dockerfile " - "when running from an installed wheel." - ), - ) - - -class _Phase1CloudMRPRunner(CloudMRPRunner): - """Cloud MRP runner with shared synthetic-population staging.""" - - def __init__( - self, - config_path: str | Path = DEFAULT_CLOUD_MRP_CONFIG_PATH, - *, - generation_count: int, - max_concurrent_simulations: int, - synth_population_path: str | Path, - repo_root: str | Path | None = None, - dockerfile: str | Path | None = None, - print_task_durations: bool = False, - task_slots_per_node_override: int | None = None, - auto_size_summary: Any | None = None, - ) -> None: - self._shared_population_local_path = Path(synth_population_path) - if not self._shared_population_local_path.exists(): - raise FileNotFoundError( - "Synthetic population file required for cloud mode was not " - f"found: {self._shared_population_local_path}" - ) - self._max_parallel_output_downloads = min( - max_concurrent_simulations, - _MAX_PARALLEL_OUTPUT_DOWNLOADS, - ) - self._output_download_semaphore = BoundedSemaphore( - self._max_parallel_output_downloads - ) - - resolved_repo_root, resolved_dockerfile = resolve_cloud_build_context( - repo_root=repo_root, - dockerfile=dockerfile, - ) - self._shared_population_blob_dir = "shared" - self._shared_population_blob_name = ( - self._shared_population_local_path.name - ) - - settings_loader = load_cloud_runtime_settings - if task_slots_per_node_override is not None: - - def settings_loader(config_path: str | Path): - settings = load_cloud_runtime_settings(config_path) - return replace( - settings, - task_slots_per_node=task_slots_per_node_override, - ) - - runner_kwargs: dict[str, Any] = {} - if auto_size_summary is not None: - runner_kwargs["auto_size_summary"] = auto_size_summary - - super().__init__( - config_path, - generation_count=generation_count, - max_concurrent_simulations=max_concurrent_simulations, - repo_root=resolved_repo_root, - dockerfile=resolved_dockerfile, - settings_loader=settings_loader, - read_output_dir=read_phase1_output_dir, - output_filename="output.csv", - print_task_durations=print_task_durations, - backend=_current_cloud_runner_backend(), - poll_interval_seconds=DEFAULT_POLL_INTERVAL_SECONDS, - mrp_run_func=mrp_run, - **runner_kwargs, - ) - self._create_cloud_client = self._create_shared_cloud_client - self._shared_population_remote_path = ( - f"{self.session.input_mount_path.rstrip('/')}/" - f"{self._shared_population_blob_dir}/" - f"{self._shared_population_blob_name}" - ) - self._stage_shared_population() - - def _create_shared_cloud_client( - self, - *, - keyvault: str, - ) -> _SharedCloudClientProxy: - del keyvault - return _SharedCloudClientProxy(self.client) - - def _stage_shared_population(self) -> None: - with self._suppress_cloudops_info_output(): - upload_files_quietly( - self.client, - files=self._shared_population_blob_name, - container_name=self.session.input_container, - local_root_dir=str( - self._shared_population_local_path.parent.resolve() - ), - location_in_blob=self._shared_population_blob_dir, - ) - - def _resolve_input_payload( - self, - params: dict[str, Any], - *, - input_path: str | Path | None, - run_id: str, - ) -> dict[str, Any]: - payload = super()._resolve_input_payload( - params, - input_path=input_path, - run_id=run_id, - ) - task_output_dir = _CLOUD_TASK_OUTPUT_ROOT / run_id - try: - payload["config_inputs"]["exe_file"] = _CLOUD_TASK_EXE_FILE - payload["config_inputs"]["output_dir"] = str(task_output_dir) - payload["ixa_inputs"]["epimodel.GlobalParams"][ - "synth_population_file" - ] = self._shared_population_remote_path - payload["ixa_inputs"]["epimodel.GlobalParams"][ - "imported_cases_timeseries" - ]["filename"] = str( - task_output_dir / "imported_cases_timeseries.csv" - ) - except KeyError as exc: - raise ValueError( - "Phase-1 cloud payload is missing one of " - "config_inputs.exe_file, config_inputs.output_dir, " - "ixa_inputs.epimodel.GlobalParams.synth_population_file, or " - "ixa_inputs.epimodel.GlobalParams." - "imported_cases_timeseries.filename" - ) from exc - return payload - - def _download_output_blocking( - self, - run_id: str, - output_dir: Path, - ) -> float: - # Bound host-side blob downloads so high cloud concurrency does not - # stampede local file handles and sockets when many tasks complete at - # once. - with self._output_download_semaphore: - return super()._download_output_blocking(run_id, output_dir) - - -def IxaEpiCovidCloudRunner( - config_path: str | Path = DEFAULT_CLOUD_MRP_CONFIG_PATH, - *, - generation_count: int, - max_concurrent_simulations: int, - synth_population_path: str | Path, - repo_root: str | Path | None = None, - dockerfile: str | Path | None = None, - print_task_durations: bool = False, - task_slots_per_node_override: int | None = None, - auto_size_summary: Any | None = None, -): - return _Phase1CloudMRPRunner( - config_path, - generation_count=generation_count, - max_concurrent_simulations=max_concurrent_simulations, - synth_population_path=synth_population_path, - repo_root=repo_root, - dockerfile=dockerfile, - print_task_durations=print_task_durations, - task_slots_per_node_override=task_slots_per_node_override, - auto_size_summary=auto_size_summary, - ) diff --git a/src/ixa_epi_covid/cloud/utils.py b/src/ixa_epi_covid/cloud/utils.py deleted file mode 100644 index be1157c..0000000 --- a/src/ixa_epi_covid/cloud/utils.py +++ /dev/null @@ -1,47 +0,0 @@ -from __future__ import annotations - -from pathlib import Path - -from calibrationtools.cloud.backend import ( - DEFAULT_CLOUD_EXECUTOR_BACKEND, - DEFAULT_CLOUD_RUNNER_BACKEND, -) -from calibrationtools.cloud.config import CloudRuntimeSettings -from calibrationtools.cloud.config import ( - load_cloud_runtime_settings as _load_cloud_runtime_settings, -) - -DEFAULT_CLOUD_RUNTIME_SETTINGS = CloudRuntimeSettings( - keyvault="cfa-predict", - local_image="ixa-epi-covid-cloud", - repository="ixa-epi-covid-cloud", - task_mrp_config_path="/app/ixa_epi_covid.mrp.task.toml", - pool_prefix="ixa-epi-covid-cloud", - job_prefix="ixa-epi-covid-cloud", - input_container_prefix="ixa-epi-covid-cloud-input", - output_container_prefix="ixa-epi-covid-cloud-output", - logs_container_prefix="ixa-epi-covid-cloud-logs", - task_slots_per_node=50, - dispatch_buffer=1000, -) - - -def load_cloud_runtime_settings( - config_path: str | Path, -) -> CloudRuntimeSettings: - return _load_cloud_runtime_settings( - config_path, - defaults=DEFAULT_CLOUD_RUNTIME_SETTINGS, - ) - - -cloud_runner_backend = DEFAULT_CLOUD_RUNNER_BACKEND -cloud_executor_backend = DEFAULT_CLOUD_EXECUTOR_BACKEND - -__all__ = [ - "CloudRuntimeSettings", - "DEFAULT_CLOUD_RUNTIME_SETTINGS", - "cloud_executor_backend", - "cloud_runner_backend", - "load_cloud_runtime_settings", -] diff --git a/src/ixa_epi_covid/config_parser.py b/src/ixa_epi_covid/config_parser.py index e7c510d..1c21ab7 100644 --- a/src/ixa_epi_covid/config_parser.py +++ b/src/ixa_epi_covid/config_parser.py @@ -8,6 +8,21 @@ class CovidModelConfig: + config_file: str | Path + config: dict[str, Any] + ixa_default_params_file: str + ixa_defaults: dict[str, Any] + exe_file: str + force_overwrite: bool + state: str + year: int + symptomatic_reporting_prob: float + priors_file: str + generation_particle_count: int + tolerance_values: list[float] + target_data: Any + use_env_synth_pop_file: bool + """ A class to handle the configuration for the COVID model calibration process. It reads a YAML config file, validates it, and provides methods to access the configuration parameters and generate default parameters for the MRP model based on the configuration. The initialization also handles the generation of the default ixa parameters and some convenience methods for @@ -19,12 +34,17 @@ class CovidModelConfig: """ def __init__( - self, config_file: str | Path, ixa_overrides: dict = {}, **kwargs + self, + config_file: str | Path, + ixa_overrides: dict[str, Any] | None = None, + **kwargs: Any, ): with open(config_file, "r") as f: - self.config = yaml.safe_load(f) + loaded_config = yaml.safe_load(f) + if not isinstance(loaded_config, dict): + raise ValueError("Config file must contain a mapping.") - self.config = apply_dict_overrides(self.config, kwargs) + self.config = apply_dict_overrides(loaded_config, kwargs) self._validate_config() self.config_file = config_file diff --git a/src/ixa_epi_covid/model_execution.py b/src/ixa_epi_covid/model_execution.py index 6b18fc9..22e9928 100644 --- a/src/ixa_epi_covid/model_execution.py +++ b/src/ixa_epi_covid/model_execution.py @@ -176,12 +176,26 @@ def phase1_report_to_rows(report: pl.DataFrame) -> dict[str, list[Any]]: def phase1_rows_to_report( - report: pl.DataFrame | dict[str, list[Any]], + report: pl.DataFrame | dict[str, list[Any]] | list[dict[str, Any]], ) -> pl.DataFrame: """Normalize a phase-1 report payload into a Polars DataFrame.""" - if isinstance(report, pl.DataFrame): - return report - return pl.DataFrame(report) + frame = report if isinstance(report, pl.DataFrame) else pl.DataFrame(report) + casts = [] + if "t_lower" in frame.columns: + casts.append(pl.col("t_lower").cast(pl.Float64)) + if "t_upper" in frame.columns: + casts.append(pl.col("t_upper").cast(pl.Float64)) + if "count" in frame.columns: + casts.append(pl.col("count").cast(pl.Int64)) + if not casts: + return frame + try: + return frame.with_columns(casts) + except Exception as exc: + raise ValueError( + "Phase-1 report columns t_lower, t_upper, and count must be " + "numeric or numeric strings." + ) from exc def write_canonical_output_csv( diff --git a/src/ixa_epi_covid/mrp_runner.py b/src/ixa_epi_covid/mrp_runner.py index 29d69f8..f4994a2 100644 --- a/src/ixa_epi_covid/mrp_runner.py +++ b/src/ixa_epi_covid/mrp_runner.py @@ -1,12 +1,16 @@ from __future__ import annotations import io +from dataclasses import dataclass from pathlib import Path from typing import Any import polars as pl -from calibrationtools.json_utils import to_jsonable -from calibrationtools.mrp_csv_runner import extract_csv_from_output_text +from calibrationtools.mrp_csv_runner import ( + MRPOutputRunner, + extract_csv_from_output_text, +) +from calibrationtools.output_contracts import OutputContract from mrp import run as mrp_run from .model_execution import ( @@ -18,13 +22,17 @@ _REPO_ROOT = Path(__file__).resolve().parents[2] DEFAULT_MRP_CONFIG_PATH = _REPO_ROOT / "ixa_epi_covid.mrp.toml" DEFAULT_DOCKER_MRP_CONFIG_PATH = _REPO_ROOT / "ixa_epi_covid.mrp.docker.toml" -DEFAULT_CLOUD_MRP_CONFIG_PATH = _REPO_ROOT / "ixa_epi_covid.mrp.cloud.toml" +DEFAULT_CLOUD_CONFIG_PATH = _REPO_ROOT / "ixa_epi_covid.cloud_config.toml" +# Backward-compatible alias for callers that imported the old name before +# calibrationtools moved cloud settings out of the MRP controller config. +DEFAULT_CLOUD_MRP_CONFIG_PATH = DEFAULT_CLOUD_CONFIG_PATH _OUTPUT_HEADER_FIELDS = ("t_lower", "t_upper", "count") +Phase1Output = dict[str, dict[str, list[Any]]] def read_phase1_output_dir( output_dir: Path, -) -> dict[str, dict[str, list[Any]]]: +) -> Phase1Output: output_path = Path(output_dir) / CANONICAL_OUTPUT_FILENAME if not output_path.exists(): raise FileNotFoundError( @@ -35,60 +43,21 @@ def read_phase1_output_dir( } -class IxaEpiCovidMRPRunner: - """Thin MRP runner for the phase-1 single-report task contract.""" +@dataclass(frozen=True) +class Phase1OutputContract(OutputContract[Phase1Output]): + """Parse the canonical phase-1 report from MRP stdout or output files.""" - def __init__( - self, - config_path: str | Path = DEFAULT_MRP_CONFIG_PATH, - *, - mrp_run_func=None, - ) -> None: - self.config_path = Path(config_path) - self._mrp_run = mrp_run if mrp_run_func is None else mrp_run_func - - def read_output_dir( - self, - output_dir: str | Path, - ) -> dict[str, dict[str, list[Any]]]: - return read_phase1_output_dir(Path(output_dir)) - - def simulate( - self, - params: dict[str, Any], - *, - input_path: str | Path | None = None, - output_dir: str | Path | None = None, - run_id: str | None = None, - ) -> dict[str, dict[str, list[Any]]]: - if input_path is not None: - overrides: dict[str, Any] = {"input": str(input_path)} - if output_dir is None: - overrides["output"] = {"spec": "stdout"} - else: - overrides = { - "input": to_jsonable(params), - "output": {"spec": "stdout"}, - } - - run_kwargs: dict[str, Any] = {} - if output_dir is not None: - run_kwargs["output_dir"] = str(output_dir) - - result = self._mrp_run( - self.config_path, - overrides, - **run_kwargs, - ) - if not result.ok: - prefix = f"run {run_id}: " if run_id else "" - raise RuntimeError(prefix + result.stderr.decode()) + @property + def output_filename(self) -> str: + return CANONICAL_OUTPUT_FILENAME - if output_dir is not None: - return self.read_output_dir(output_dir) + def read_output_dir(self, output_dir: Path) -> Phase1Output: + return read_phase1_output_dir(output_dir) + def read_stdout(self, stdout: str | bytes) -> Phase1Output: + stdout_text = stdout.decode() if isinstance(stdout, bytes) else stdout csv_text = extract_csv_from_output_text( - result.stdout.decode(), + stdout_text, header_fields=_OUTPUT_HEADER_FIELDS, ) return { @@ -96,3 +65,22 @@ def simulate( pl.read_csv(io.StringIO(csv_text)) ) } + + +PHASE1_OUTPUT_CONTRACT = Phase1OutputContract() + + +class IxaEpiCovidMRPRunner(MRPOutputRunner[Phase1Output]): + """Compatibility wrapper for the phase-1 single-report MRP contract.""" + + def __init__( + self, + config_path: str | Path = DEFAULT_MRP_CONFIG_PATH, + *, + mrp_run_func=None, + ) -> None: + super().__init__( + config_path, + output_contract=PHASE1_OUTPUT_CONTRACT, + mrp_run_func=mrp_run if mrp_run_func is None else mrp_run_func, + ) diff --git a/src/ixa_epi_covid/phase1/calibrate.py b/src/ixa_epi_covid/phase1/calibrate.py index 368ef74..4ad737c 100644 --- a/src/ixa_epi_covid/phase1/calibrate.py +++ b/src/ixa_epi_covid/phase1/calibrate.py @@ -2,7 +2,6 @@ import argparse import json -import sys import timeit import warnings from pathlib import Path @@ -17,20 +16,17 @@ ) from calibrationtools.cloud.auto_size import ( CloudSizing, - resolve_cloud_auto_size, - run_local_memory_probe, + print_cloud_auto_size_summary, + resolve_cloud_sizing_from_config, ) +from calibrationtools.cloud.runner import create_cloud_mrp_runner_from_config from ixa_epi_covid import IxaEpiCovidDirectRunner -from ixa_epi_covid.cloud.runner import ( - IxaEpiCovidCloudRunner, - resolve_cloud_build_context, -) -from ixa_epi_covid.cloud.utils import load_cloud_runtime_settings from ixa_epi_covid.model_execution import PHASE1_OUTPUT_NAME from ixa_epi_covid.mrp_runner import ( - DEFAULT_CLOUD_MRP_CONFIG_PATH, + DEFAULT_CLOUD_CONFIG_PATH, DEFAULT_DOCKER_MRP_CONFIG_PATH, + PHASE1_OUTPUT_CONTRACT, IxaEpiCovidMRPRunner, ) @@ -73,6 +69,12 @@ def parse_args(argv: list[str] | None = None) -> argparse.Namespace: type=Path, help="Run simulations through the given MRP config path.", ) + parser.add_argument( + "--cloud-config", + type=Path, + default=DEFAULT_CLOUD_CONFIG_PATH, + help="Cloud config used by --cloud and --auto-size.", + ) parser.add_argument( "--config_file", "-c", @@ -142,18 +144,6 @@ def parse_args(argv: list[str] | None = None) -> argparse.Namespace: "Disable local input/output artifact staging. Not valid with --cloud." ), ) - parser.add_argument( - "--repo-root", - type=Path, - default=None, - help="Docker build context root for cloud mode.", - ) - parser.add_argument( - "--dockerfile", - type=Path, - default=None, - help="Dockerfile path for cloud mode.", - ) return parser.parse_args(argv) @@ -205,74 +195,19 @@ def resolve_cloud_sizing( base_inputs: dict[str, Any], ) -> CloudSizing: max_concurrent_simulations = resolve_max_concurrent_simulations(args) - if not args.auto_size or not args.cloud: - return resolve_cloud_auto_size( - auto_size=args.auto_size, - cloud=args.cloud, - max_concurrent_simulations=max_concurrent_simulations, - max_concurrent_simulations_explicit=( - _max_concurrent_simulations_was_explicit(args) - ), - ) - - settings = load_cloud_runtime_settings(DEFAULT_CLOUD_MRP_CONFIG_PATH) - return resolve_cloud_auto_size( + return resolve_cloud_sizing_from_config( + cloud_config_path=getattr( + args, + "cloud_config", + DEFAULT_CLOUD_CONFIG_PATH, + ), + base_inputs=base_inputs, auto_size=args.auto_size, cloud=args.cloud, max_concurrent_simulations=max_concurrent_simulations, max_concurrent_simulations_explicit=( _max_concurrent_simulations_was_explicit(args) ), - vm_size=settings.vm_size, - pool_max_nodes=settings.pool_max_nodes, - measure_task_peak_rss_bytes=( - lambda: run_local_memory_probe( - "ixa_epi_covid.cloud.auto_size", - base_inputs, - ) - ), - ) - - -def _format_bytes(size: int) -> str: - if size >= 1024**3: - return f"{size / 1024**3:.1f} GiB" - if size >= 1024**2: - return f"{size / 1024**2:.1f} MiB" - return f"{size} bytes" - - -def print_cloud_auto_size_summary(sizing: CloudSizing) -> None: - summary = sizing.summary - if summary is None: - return - - cap_note = "" - if summary.task_slots_per_node < summary.memory_task_slots_per_node: - cap_note = ( - f", capped_from_ram_slots={summary.memory_task_slots_per_node}" - ) - - print( - ( - "[cloud-run] auto-size simulation RAM " - f"measured_peak_rss=" - f"{summary.measured_task_peak_rss_bytes} bytes " - f"({_format_bytes(summary.measured_task_peak_rss_bytes)}), " - f"vm_size={summary.vm_size}, " - f"vm_ram={summary.vm_memory_bytes} bytes " - f"({_format_bytes(summary.vm_memory_bytes)}), " - f"reserve={summary.reserve:.0%}, " - f"batch_slot_limit={summary.max_task_slots_per_node}, " - f"task_slots_per_node={summary.task_slots_per_node}" - f"{cap_note}, " - f"max_concurrent_simulations_per_node=" - f"{summary.task_slots_per_node}, " - f"max_concurrent_simulations_total=" - f"{sizing.max_concurrent_simulations}" - ), - file=sys.stderr, - flush=True, ) @@ -280,7 +215,7 @@ def resolve_model_runner( args: argparse.Namespace, *, generation_count: int, - synth_population_file: str | Path, + base_inputs: dict[str, Any], cloud_sizing: CloudSizing | None = None, ): if args.cloud: @@ -290,19 +225,14 @@ def resolve_model_runner( resolve_max_concurrent_simulations(args) ) ) - repo_root, dockerfile = resolve_cloud_build_context( - repo_root=args.repo_root, - dockerfile=args.dockerfile, - ) - return IxaEpiCovidCloudRunner( - DEFAULT_CLOUD_MRP_CONFIG_PATH, + return create_cloud_mrp_runner_from_config( + getattr(args, "cloud_config", DEFAULT_CLOUD_CONFIG_PATH), generation_count=generation_count, max_concurrent_simulations=( cloud_sizing.max_concurrent_simulations ), - synth_population_path=synth_population_file, - repo_root=repo_root, - dockerfile=dockerfile, + output_contract=PHASE1_OUTPUT_CONTRACT, + base_inputs=base_inputs, print_task_durations=args.print_task_durations, task_slots_per_node_override=( cloud_sizing.task_slots_per_node_override @@ -323,6 +253,7 @@ def run_phase1_calibration( max_concurrent_simulations: int = DEFAULT_MAX_CONCURRENT_SIMULATIONS, default_population_size_dev: str = DEFAULT_DEV_POPULATION_SIZE, mrp_config: str | Path | None = None, + cloud_config: str | Path = DEFAULT_CLOUD_CONFIG_PATH, docker: bool = False, cloud: bool = False, auto_size: bool = False, @@ -330,8 +261,6 @@ def run_phase1_calibration( print_task_progress: bool = False, artifacts_dir: str | Path | None = None, no_artifacts: bool = False, - repo_root: str | Path | None = None, - dockerfile: str | Path | None = None, ): args = argparse.Namespace( config_file=Path(config_file), @@ -340,6 +269,7 @@ def run_phase1_calibration( max_concurrent_simulations=max_concurrent_simulations, default_population_size_dev=default_population_size_dev, mrp_config=Path(mrp_config) if mrp_config is not None else None, + cloud_config=Path(cloud_config), docker=docker, cloud=cloud, auto_size=auto_size, @@ -349,8 +279,6 @@ def run_phase1_calibration( if artifacts_dir is not None else None, no_artifacts=no_artifacts, - repo_root=Path(repo_root) if repo_root is not None else None, - dockerfile=Path(dockerfile) if dockerfile is not None else None, ) return _run_calibration_from_args(args) @@ -402,7 +330,7 @@ def _run_calibration_from_args(args: argparse.Namespace): model_runner = resolve_model_runner( args, generation_count=len(config.tolerance_values), - synth_population_file=synth_population_file, + base_inputs=mrp_defaults, cloud_sizing=cloud_sizing, ) diff --git a/src/ixa_epi_covid/phase1/core.py b/src/ixa_epi_covid/phase1/core.py index 778ba4f..095b168 100644 --- a/src/ixa_epi_covid/phase1/core.py +++ b/src/ixa_epi_covid/phase1/core.py @@ -7,16 +7,16 @@ import shutil import tempfile import warnings +from collections.abc import Mapping from pathlib import Path -from typing import Any, Callable +from typing import Any, Callable, Protocol import polars as pl -from calibrationtools import Particle +from calibrationtools import Particle, ParticleReader from create_synthetic_population.run import ( run as create_synthetic_population_run, ) from dotenv import load_dotenv -from particle_reader import ParticleReader from requests.exceptions import HTTPError from us import states @@ -38,6 +38,14 @@ ) +class Phase1Config(Protocol): + use_env_synth_pop_file: bool + state: str + year: int + target_data: Any + tolerance_values: list[float] + + def load_phase1_config( config_file: str | Path, *, @@ -52,19 +60,19 @@ def load_phase1_config( def resolve_synth_population_file( - config: CovidModelConfig, + config: Phase1Config, *, default_population_size_dev: str = DEFAULT_DEV_POPULATION_SIZE, - env: dict[str, str] | None = None, + env: Mapping[str, str] | None = None, create_population_func: Callable[[list[str]], Any] | None = None, ) -> Path: """Resolve the synth-population CSV needed by phase-1 calibration.""" load_dotenv() - env = os.environ if env is None else env + env_map = os.environ if env is None else env if create_population_func is None: create_population_func = create_synthetic_population_run - synth_pop_file_env = env.get("SYNTH_POP_FILE") + synth_pop_file_env = env_map.get("SYNTH_POP_FILE") if synth_pop_file_env and config.use_env_synth_pop_file: env_path = Path(synth_pop_file_env) if not env_path.exists(): @@ -160,7 +168,7 @@ def format_synth_population_summary( def build_runtime_ixa_overrides( - config: CovidModelConfig, + config: Phase1Config, *, synth_population_file: str | Path, ) -> dict[str, Any]: diff --git a/tests/cloud/test_cloud_auto_size_probe.py b/tests/cloud/test_cloud_auto_size_probe.py index f187673..79d2ab7 100644 --- a/tests/cloud/test_cloud_auto_size_probe.py +++ b/tests/cloud/test_cloud_auto_size_probe.py @@ -1,67 +1,64 @@ -import polars as pl +from pathlib import Path -from ixa_epi_covid.cloud import auto_size -from ixa_epi_covid.model_execution import CANONICAL_OUTPUT_FILENAME +from calibrationtools.cloud import auto_size +from calibrationtools.cloud.config import CloudAutoSizeMemoryScope +REPO_ROOT = Path(__file__).resolve().parents[2] -def test_auto_size_probe_runs_phase1_model_and_writes_canonical_output( - monkeypatch, - tmp_path, -): - calls: dict[str, object] = {} - report = pl.DataFrame( - { - "t_lower": [0.0], - "t_upper": [1.0], - "count": [1], - } - ) - - def fake_execute_phase1_model(model_inputs): - calls["model_inputs"] = model_inputs - return {"aggregated_deaths_report": report} - - monkeypatch.setattr( - auto_size, - "execute_phase1_model", - fake_execute_phase1_model, - ) +def test_auto_size_uses_configured_local_task_probe(monkeypatch, tmp_path): + synth_population = tmp_path / "synth.csv" + synth_population.write_text("person_id\n1\n", encoding="utf-8") base_inputs = { "config_inputs": { - "exe_file": "./target/release/ixa-epi-covid", - "output_dir": "original-output", - "outputs_to_read": ["aggregated_deaths_report"], + "output_dir": str(tmp_path / "output"), }, "ixa_inputs": { "epimodel.GlobalParams": { - "seed": 1, - "aggregated_deaths_report": { - "filename": "aggregated_deaths_report.csv", - }, + "synth_population_file": str(synth_population), "imported_cases_timeseries": { - "filename": "imported_cases_timeseries.csv", + "filename": str(tmp_path / "imported_cases_timeseries.csv"), }, } }, } + calls: dict[str, object] = {} + + def fake_run_local_task_memory_probe( + cloud_config_path, + local_mrp_config_path, + probe_inputs, + *, + memory_scope, + ): + calls["cloud_config_path"] = cloud_config_path + calls["local_mrp_config_path"] = local_mrp_config_path + calls["probe_inputs"] = probe_inputs + calls["memory_scope"] = memory_scope + return 512 * 1024 * 1024 - auto_size.run_probe_simulation( - base_inputs, - "auto-size-probe", - tmp_path, + monkeypatch.setattr( + auto_size, + "run_local_task_memory_probe", + fake_run_local_task_memory_probe, ) - model_inputs = calls["model_inputs"] - assert model_inputs["config_inputs"]["output_dir"] == str(tmp_path) - assert model_inputs["ixa_inputs"]["epimodel.GlobalParams"][ - "aggregated_deaths_report" - ]["filename"] == str(tmp_path / "aggregated_deaths_report.csv") - assert model_inputs["ixa_inputs"]["epimodel.GlobalParams"][ - "imported_cases_timeseries" - ]["filename"] == str(tmp_path / "imported_cases_timeseries.csv") - assert ( - (tmp_path / CANONICAL_OUTPUT_FILENAME) - .read_text(encoding="utf-8") - .startswith("t_lower,t_upper,count") + sizing = auto_size.resolve_cloud_sizing_from_config( + cloud_config_path=REPO_ROOT / "ixa_epi_covid.cloud_config.toml", + base_inputs=base_inputs, + auto_size=True, + cloud=True, + max_concurrent_simulations=10, + max_concurrent_simulations_explicit=True, + ) + + assert calls["cloud_config_path"] == ( + REPO_ROOT / "ixa_epi_covid.cloud_config.toml" + ) + assert calls["local_mrp_config_path"] == ( + REPO_ROOT / "ixa_epi_covid.mrp.toml" ) + assert calls["probe_inputs"] is base_inputs + assert calls["memory_scope"] is CloudAutoSizeMemoryScope.PROCESS_TREE + assert sizing.max_concurrent_simulations == 10 + assert sizing.task_slots_per_node_override is not None diff --git a/tests/cloud/test_cloud_cleanup.py b/tests/cloud/test_cloud_cleanup.py index 8ee0e78..a1543f1 100644 --- a/tests/cloud/test_cloud_cleanup.py +++ b/tests/cloud/test_cloud_cleanup.py @@ -1,31 +1,7 @@ from pathlib import Path -from ixa_epi_covid.cloud import cleanup - - -def test_ensure_az_login_with_identity_passes_resource_id(monkeypatch): - cleanup._AZ_LOGGED_IN_IDENTITY = cleanup._AZ_NOT_LOGGED_IN - captured: dict[str, object] = {} - - def fake_ensure_az_login_with_identity(**kwargs): - captured.update(kwargs) - return "logged-in" - - monkeypatch.setattr( - cleanup, - "_ensure_az_login_with_identity", - fake_ensure_az_login_with_identity, - ) - - cleanup.ensure_az_login_with_identity( - managed_identity_resource_id="/subscriptions/test/resourceGroups/rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-id" - ) - - assert ( - captured["managed_identity_resource_id"] - == "/subscriptions/test/resourceGroups/rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-id" - ) - assert cleanup._AZ_LOGGED_IN_IDENTITY == "logged-in" +import pytest +from calibrationtools.cloud import cleanup as shared_cleanup def test_makefile_population_rule_uses_packaged_entrypoint(): @@ -35,3 +11,22 @@ def test_makefile_population_rule_uses_packaged_entrypoint(): assert "uv run python -m create_synthetic_population.run" in makefile assert "scripts/create_synthetic_population.py" not in makefile + + +def test_shared_cleanup_parser_uses_session_id_and_dry_run(): + args = shared_cleanup.parse_args( + ["--session-id", "session-1", "--dry-run"], + default_config_path=Path("ixa_epi_covid.cloud_config.toml"), + ) + + assert args.config == Path("ixa_epi_covid.cloud_config.toml") + assert args.session_id == "session-1" + assert args.dry_run is True + + +def test_shared_cleanup_parser_rejects_legacy_yes_flag(): + with pytest.raises(SystemExit): + shared_cleanup.parse_args( + ["--session-id", "session-1", "--yes"], + default_config_path=Path("ixa_epi_covid.cloud_config.toml"), + ) diff --git a/tests/cloud/test_cloud_settings.py b/tests/cloud/test_cloud_settings.py index 617b5a7..d357765 100644 --- a/tests/cloud/test_cloud_settings.py +++ b/tests/cloud/test_cloud_settings.py @@ -1,42 +1,106 @@ -import pytest +from pathlib import Path -from ixa_epi_covid.cloud.utils import ( - DEFAULT_CLOUD_RUNTIME_SETTINGS, - load_cloud_runtime_settings, +import pytest +from calibrationtools.cloud.config import ( + CloudAutoSizeMemoryScope, + CloudOutputMode, + CSVTableOrientation, + DEFAULT_INPUT_MOUNT_PATH, + load_cloud_model_config, ) -def test_load_cloud_runtime_settings_layers_defaults(tmp_path): - config_path = tmp_path / "cloud.toml" +def _write_cloud_config( + tmp_path: Path, + *, + jobs_key: str = "jobs_per_session", + jobs_value: int = 3, +) -> Path: + (tmp_path / "Dockerfile.cloud").write_text( + "FROM scratch\n", + encoding="utf-8", + ) + config_path = tmp_path / "cloud_config.toml" config_path.write_text( - """ - [runtime.cloud] - repository = "custom-repository" - jobs_per_session = 3 - """, + f""" +[cloud] +keyvault = "cfa-predict" +vm_size = "large" +{jobs_key} = {jobs_value} +task_slots_per_node = 50 +pool_max_nodes = 5 +dispatch_buffer = 1000 + +[cloud.image] +local_image = "ixa-epi-covid-cloud" +repository = "custom-repository" +build_context = "." +dockerfile = "Dockerfile.cloud" +task_mrp_config_path = "/app/ixa_epi_covid.mrp.task.toml" + +[cloud.resources] +pool_prefix = "ixa-epi-covid-cloud" +job_prefix = "ixa-epi-covid-cloud" +input_container_prefix = "ixa-epi-covid-cloud-input" +output_container_prefix = "ixa-epi-covid-cloud-output" +logs_container_prefix = "ixa-epi-covid-cloud-logs" + +[cloud.output] +filename = "output.csv" +csv_value_column = "count" +csv_value_type = "int" +""", encoding="utf-8", ) + return config_path + + +def test_load_cloud_model_config_uses_model_facing_runtime_settings(tmp_path): + config_path = _write_cloud_config(tmp_path) - settings = load_cloud_runtime_settings(config_path) + settings = load_cloud_model_config(config_path).runtime_settings - assert settings.keyvault == DEFAULT_CLOUD_RUNTIME_SETTINGS.keyvault + assert settings.keyvault == "cfa-predict" + assert settings.input_mount_path == DEFAULT_INPUT_MOUNT_PATH assert settings.repository == "custom-repository" assert settings.jobs_per_session == 3 -def test_load_cloud_runtime_settings_accepts_legacy_jobs_per_generation( +def test_load_cloud_model_config_accepts_legacy_jobs_per_generation( tmp_path, ): - config_path = tmp_path / "cloud.toml" - config_path.write_text( - """ - [runtime.cloud] - jobs_per_generation = 2 - """, - encoding="utf-8", + config_path = _write_cloud_config( + tmp_path, + jobs_key="jobs_per_generation", + jobs_value=2, ) with pytest.deprecated_call(): - settings = load_cloud_runtime_settings(config_path) + settings = load_cloud_model_config(config_path).runtime_settings assert settings.jobs_per_session == 2 + + +def test_packaged_cloud_config_loads(): + config_path = ( + Path(__file__).resolve().parents[2] / "ixa_epi_covid.cloud_config.toml" + ) + + config = load_cloud_model_config(config_path) + + assert config.runtime_settings.repository == "ixa-epi-covid-cloud" + assert config.runtime_settings.jobs_per_session == 1 + assert config.runtime_settings.max_parallel_output_downloads == 8 + assert config.output.filename == "output.csv" + assert config.output.mode is CloudOutputMode.CSV_TABLE + assert config.output.output_name == "aggregated_deaths_report" + assert config.output.orientation is CSVTableOrientation.COLUMNS + assert config.shared_assets[0].name == "synthetic_population" + assert config.auto_size.probe == "local_task" + assert config.auto_size.local_mrp_config_path == ( + Path(__file__).resolve().parents[2] / "ixa_epi_covid.mrp.toml" + ) + assert ( + config.auto_size.memory_scope + is CloudAutoSizeMemoryScope.PROCESS_TREE + ) diff --git a/tests/cloud/test_dependency_contract.py b/tests/cloud/test_dependency_contract.py index 4d0a9bf..b063ac8 100644 --- a/tests/cloud/test_dependency_contract.py +++ b/tests/cloud/test_dependency_contract.py @@ -14,9 +14,15 @@ def test_dependency_contract_imports(): from calibrationtools.cloud.runner import ( CloudMRPRunner, create_cloud_mrp_runner, + create_cloud_mrp_runner_from_config, resolve_cloud_build_context, ) - from calibrationtools.mrp_csv_runner import CSVOutputMRPRunner + from calibrationtools.cloud.task_payload import apply_task_payload_transforms + from calibrationtools.mrp_csv_runner import CSVOutputMRPRunner, MRPOutputRunner + from calibrationtools.output_contracts import ( + CSVTableOutputContract, + OutputContract, + ) signature = inspect.signature(ABCSampler) @@ -25,7 +31,12 @@ def test_dependency_contract_imports(): assert CloudMRPRunner is not None assert execute_cloud_run is not None assert create_cloud_mrp_runner is not None + assert create_cloud_mrp_runner_from_config is not None assert resolve_cloud_build_context is not None + assert MRPOutputRunner is not None + assert OutputContract is not None + assert CSVTableOutputContract is not None + assert apply_task_payload_transforms is not None for parameter in ( "max_concurrent_simulations", "print_generation_progress", diff --git a/tests/cloud/test_mrp_toml_configs.py b/tests/cloud/test_mrp_toml_configs.py index 3c0530a..7cbfe05 100644 --- a/tests/cloud/test_mrp_toml_configs.py +++ b/tests/cloud/test_mrp_toml_configs.py @@ -1,6 +1,13 @@ import tomllib from pathlib import Path +from calibrationtools.cloud.config import ( + CloudAutoSizeMemoryScope, + CloudOutputMode, + CSVTableOrientation, + load_cloud_model_config, +) + REPO_ROOT = Path(__file__).resolve().parents[2] @@ -9,16 +16,29 @@ def _load_config(name: str) -> dict: return tomllib.load(fp) -def test_only_cloud_controller_mrp_config_uses_inline_runtime(): - cloud_config = _load_config("ixa_epi_covid.mrp.cloud.toml") +def test_cloud_config_uses_model_facing_schema(): + cloud_config = load_cloud_model_config( + REPO_ROOT / "ixa_epi_covid.cloud_config.toml" + ) - assert cloud_config["runtime"]["spec"] == "inline" + assert cloud_config.build_context == REPO_ROOT + assert cloud_config.dockerfile == REPO_ROOT / "Dockerfile.cloud" + assert cloud_config.runtime_settings.task_mrp_config_path == ( + "/app/ixa_epi_covid.mrp.task.toml" + ) + assert cloud_config.runtime_settings.max_parallel_output_downloads == 8 + assert cloud_config.output.filename == "output.csv" + assert cloud_config.output.mode is CloudOutputMode.CSV_TABLE + assert cloud_config.output.output_name == "aggregated_deaths_report" + assert cloud_config.output.orientation is CSVTableOrientation.COLUMNS + assert cloud_config.auto_size.probe == "local_task" + assert cloud_config.auto_size.local_mrp_config_path == ( + REPO_ROOT / "ixa_epi_covid.mrp.toml" + ) assert ( - cloud_config["runtime"]["callable"] - == "ixa_epi_covid.cloud.mrp_executor:execute_cloud_run" + cloud_config.auto_size.memory_scope + is CloudAutoSizeMemoryScope.PROCESS_TREE ) - assert "command" not in cloud_config["runtime"] - assert "args" not in cloud_config["runtime"] def test_local_task_and_docker_mrp_configs_remain_process_backed(): diff --git a/tests/cloud/test_phase1_auto_size.py b/tests/cloud/test_phase1_auto_size.py index 327c7bd..5f981a4 100644 --- a/tests/cloud/test_phase1_auto_size.py +++ b/tests/cloud/test_phase1_auto_size.py @@ -10,6 +10,7 @@ def _args(**overrides): values = { "auto_size": False, "cloud": False, + "cloud_config": calibrate.DEFAULT_CLOUD_CONFIG_PATH, "artifacts_dir": None, "no_artifacts": False, "max_concurrent_simulations": None, @@ -35,30 +36,14 @@ def test_resolve_cloud_sizing_uses_cloud_config_and_probe(monkeypatch): summary=object(), ) - monkeypatch.setattr( - calibrate, - "load_cloud_runtime_settings", - lambda config_path: SimpleNamespace( - vm_size="large", - pool_max_nodes=2, - ), - ) - - def fake_probe(module_name, base_inputs): - calls["probe_module"] = module_name - calls["probe_inputs"] = base_inputs - return 123_456 - - def fake_resolve_cloud_auto_size(**kwargs): - calls["auto_size_kwargs"] = kwargs - assert kwargs["measure_task_peak_rss_bytes"]() == 123_456 + def fake_resolve_cloud_sizing_from_config(**kwargs): + calls.update(kwargs) return returned_sizing - monkeypatch.setattr(calibrate, "run_local_memory_probe", fake_probe) monkeypatch.setattr( calibrate, - "resolve_cloud_auto_size", - fake_resolve_cloud_auto_size, + "resolve_cloud_sizing_from_config", + fake_resolve_cloud_sizing_from_config, ) base_inputs = {"seed": 1} @@ -68,15 +53,12 @@ def fake_resolve_cloud_auto_size(**kwargs): ) assert sizing is returned_sizing - assert calls["probe_module"] == "ixa_epi_covid.cloud.auto_size" - assert calls["probe_inputs"] is base_inputs - assert calls["auto_size_kwargs"]["vm_size"] == "large" - assert calls["auto_size_kwargs"]["pool_max_nodes"] == 2 - assert calls["auto_size_kwargs"]["max_concurrent_simulations"] == 10 - assert ( - calls["auto_size_kwargs"]["max_concurrent_simulations_explicit"] - is True - ) + assert calls["cloud_config_path"] == calibrate.DEFAULT_CLOUD_CONFIG_PATH + assert calls["base_inputs"] is base_inputs + assert calls["auto_size"] is True + assert calls["cloud"] is True + assert calls["max_concurrent_simulations"] == 10 + assert calls["max_concurrent_simulations_explicit"] is True def test_resolve_artifacts_dir_defaults_to_shared_artifacts_dir(): @@ -109,21 +91,7 @@ def test_resolve_artifacts_dir_rejects_conflicting_flags(tmp_path): def test_resolve_cloud_sizing_preserves_explicit_concurrency(monkeypatch): calls: dict[str, object] = {} - monkeypatch.setattr( - calibrate, - "load_cloud_runtime_settings", - lambda config_path: SimpleNamespace( - vm_size="large", - pool_max_nodes=5, - ), - ) - monkeypatch.setattr( - calibrate, - "run_local_memory_probe", - lambda module_name, base_inputs: 123_456, - ) - - def fake_resolve_cloud_auto_size(**kwargs): + def fake_resolve_cloud_sizing_from_config(**kwargs): calls.update(kwargs) return SimpleNamespace( max_concurrent_simulations=12, @@ -133,8 +101,8 @@ def fake_resolve_cloud_auto_size(**kwargs): monkeypatch.setattr( calibrate, - "resolve_cloud_auto_size", - fake_resolve_cloud_auto_size, + "resolve_cloud_sizing_from_config", + fake_resolve_cloud_sizing_from_config, ) calibrate.resolve_cloud_sizing( @@ -156,21 +124,7 @@ def test_resolve_cloud_sizing_uses_default_as_implicit_concurrency( ): calls: dict[str, object] = {} - monkeypatch.setattr( - calibrate, - "load_cloud_runtime_settings", - lambda config_path: SimpleNamespace( - vm_size="large", - pool_max_nodes=5, - ), - ) - monkeypatch.setattr( - calibrate, - "run_local_memory_probe", - lambda module_name, base_inputs: 123_456, - ) - - def fake_resolve_cloud_auto_size(**kwargs): + def fake_resolve_cloud_sizing_from_config(**kwargs): calls.update(kwargs) return SimpleNamespace( max_concurrent_simulations=25, @@ -180,8 +134,8 @@ def fake_resolve_cloud_auto_size(**kwargs): monkeypatch.setattr( calibrate, - "resolve_cloud_auto_size", - fake_resolve_cloud_auto_size, + "resolve_cloud_sizing_from_config", + fake_resolve_cloud_sizing_from_config, ) calibrate.resolve_cloud_sizing( @@ -196,7 +150,9 @@ def fake_resolve_cloud_auto_size(**kwargs): assert calls["max_concurrent_simulations_explicit"] is False -def test_resolve_model_runner_passes_auto_size_to_cloud_runner(monkeypatch): +def test_resolve_model_runner_passes_base_inputs_to_cloud_factory( + monkeypatch, +): calls: dict[str, object] = {} sizing = SimpleNamespace( max_concurrent_simulations=12, @@ -204,42 +160,40 @@ def test_resolve_model_runner_passes_auto_size_to_cloud_runner(monkeypatch): summary=object(), ) - monkeypatch.setattr( - calibrate, - "resolve_cloud_build_context", - lambda repo_root=None, dockerfile=None: ("repo", "dockerfile"), - ) - - def fake_cloud_runner(config_path, **kwargs): + def fake_cloud_runner_factory(config_path, **kwargs): calls["config_path"] = config_path calls.update(kwargs) return "runner" monkeypatch.setattr( calibrate, - "IxaEpiCovidCloudRunner", - fake_cloud_runner, + "create_cloud_mrp_runner_from_config", + fake_cloud_runner_factory, ) + base_inputs = {"seed": 1} runner = calibrate.resolve_model_runner( argparse.Namespace( cloud=True, + cloud_config=calibrate.DEFAULT_CLOUD_CONFIG_PATH, mrp_config=None, docker=False, - repo_root=None, - dockerfile=None, print_task_durations=True, max_concurrent_simulations=None, max_workers=None, ), generation_count=2, - synth_population_file="population.csv", + base_inputs=base_inputs, cloud_sizing=sizing, ) assert runner == "runner" - assert calls["config_path"] == calibrate.DEFAULT_CLOUD_MRP_CONFIG_PATH + assert calls["config_path"] == calibrate.DEFAULT_CLOUD_CONFIG_PATH + assert calls["generation_count"] == 2 assert calls["max_concurrent_simulations"] == 12 + assert calls["output_contract"] is calibrate.PHASE1_OUTPUT_CONTRACT + assert calls["base_inputs"] is base_inputs + assert calls["print_task_durations"] is True assert calls["task_slots_per_node_override"] == 4 assert calls["auto_size_summary"] is sizing.summary @@ -248,16 +202,15 @@ def test_resolve_model_runner_defaults_to_direct_runner(): runner = calibrate.resolve_model_runner( argparse.Namespace( cloud=False, + cloud_config=calibrate.DEFAULT_CLOUD_CONFIG_PATH, mrp_config=None, docker=False, - repo_root=None, - dockerfile=None, print_task_durations=False, max_concurrent_simulations=None, max_workers=None, ), generation_count=2, - synth_population_file="population.csv", + base_inputs={"seed": 1}, ) assert isinstance(runner, calibrate.IxaEpiCovidDirectRunner) diff --git a/tests/cloud/test_phase1_core.py b/tests/cloud/test_phase1_core.py index f0ce162..ac914da 100644 --- a/tests/cloud/test_phase1_core.py +++ b/tests/cloud/test_phase1_core.py @@ -135,3 +135,17 @@ def test_script_wrapper_exports_packaged_entrypoint(): from ixa_epi_covid.phase1.calibrate import run_phase1_calibration assert module.main is run_phase1_calibration + + +def test_phase1_rows_to_report_casts_csv_table_strings(): + report = core.phase1_rows_to_report( + { + "t_lower": ["0.0"], + "t_upper": ["1.0"], + "count": ["2"], + } + ) + + assert report["t_lower"].to_list() == [0.0] + assert report["t_upper"].to_list() == [1.0] + assert report["count"].to_list() == [2] diff --git a/tests/cloud/test_population_asset_staging.py b/tests/cloud/test_population_asset_staging.py index bdc6999..c536882 100644 --- a/tests/cloud/test_population_asset_staging.py +++ b/tests/cloud/test_population_asset_staging.py @@ -1,417 +1,143 @@ -import time -import tomllib -from concurrent.futures import ThreadPoolExecutor -from contextlib import nullcontext from dataclasses import replace from pathlib import Path -from threading import Event, Lock -from types import SimpleNamespace -import pytest - -from ixa_epi_covid.cloud.runner import ( - _MAX_PARALLEL_OUTPUT_DOWNLOADS, - _Phase1CloudMRPRunner, +from calibrationtools.cloud.config import load_cloud_model_config +from calibrationtools.cloud.task_payload import ( + CloudTaskContext, + apply_task_payload_transforms, + bind_shared_assets_to_session, + resolve_shared_assets, + resolve_task_output_dir, ) -from ixa_epi_covid.cloud.utils import DEFAULT_CLOUD_RUNTIME_SETTINGS +REPO_ROOT = Path(__file__).resolve().parents[2] -def test_cloud_runner_rejects_missing_population_before_provisioning( - monkeypatch, - tmp_path, -): - monkeypatch.setattr( - "calibrationtools.cloud.runner.CloudMRPRunner.__init__", - lambda *args, **kwargs: (_ for _ in ()).throw( - AssertionError("cloud resources should not be initialized") - ), - ) - dockerfile = tmp_path / "Dockerfile.cloud" - dockerfile.write_text("FROM scratch\n", encoding="utf-8") - with pytest.raises(FileNotFoundError): - _Phase1CloudMRPRunner( - generation_count=1, - max_concurrent_simulations=1, - synth_population_path=tmp_path / "missing.csv", - repo_root=tmp_path, - dockerfile=dockerfile, - ) +def _base_inputs(synth_population: Path) -> dict: + return { + "config_inputs": { + "output_dir": "/tmp/local-output", + }, + "ixa_inputs": { + "epimodel.GlobalParams": { + "synth_population_file": str(synth_population), + "imported_cases_timeseries": { + "filename": "/tmp/local-output/imported_cases_timeseries.csv", + }, + }, + }, + } -def test_cloud_runner_stages_shared_population_and_rewrites_payload( - monkeypatch, - tmp_path, -): +def test_shared_population_asset_resolves_from_base_inputs(tmp_path): synth_population = tmp_path / "synth.csv" synth_population.write_text("person_id\n1\n", encoding="utf-8") - dockerfile = tmp_path / "Dockerfile.cloud" - dockerfile.write_text("FROM scratch\n", encoding="utf-8") - uploads: list[dict[str, object]] = [] - - monkeypatch.setattr( - "ixa_epi_covid.cloud.runner.resolve_cloud_build_context", - lambda repo_root=None, dockerfile=None: (tmp_path, Path(dockerfile)), - ) - - def fake_super_init( - self, - config_path, - *, - generation_count, - max_concurrent_simulations, - repo_root, - dockerfile, - settings_loader, - read_output_dir, - output_filename, - print_task_durations, - backend, - poll_interval_seconds, - mrp_run_func, - ): - self.session = SimpleNamespace( - input_mount_path="/cloud-input", - input_container="input-container", - ) - self.client = object() - self._suppress_cloudops_info_output = nullcontext - - monkeypatch.setattr( - "calibrationtools.cloud.runner.CloudMRPRunner.__init__", - fake_super_init, - ) - monkeypatch.setattr( - "ixa_epi_covid.cloud.runner.upload_files_quietly", - lambda client, **kwargs: uploads.append(kwargs), + cloud_config = load_cloud_model_config( + REPO_ROOT / "ixa_epi_covid.cloud_config.toml" ) - runner = _Phase1CloudMRPRunner( - generation_count=1, - max_concurrent_simulations=1, - synth_population_path=synth_population, - repo_root=tmp_path, - dockerfile=dockerfile, + assets = resolve_shared_assets( + cloud_config.shared_assets, + base_payload=_base_inputs(synth_population), + config_dir=cloud_config.config_path.parent.resolve(), ) - assert len(uploads) == 1 - assert uploads[0]["container_name"] == "input-container" - assert uploads[0]["location_in_blob"] == "shared" - assert uploads[0]["files"] == "synth.csv" + assert len(assets) == 1 + asset = assets[0] + assert asset.name == "synthetic_population" + assert asset.source_path == synth_population.resolve() + assert asset.remote_blob_dir == "shared/synthetic_population" + assert asset.remote_path_var == "SYNTH_POPULATION_PATH" - payload = runner._resolve_input_payload( - { - "config_inputs": { - "exe_file": "./target/release/ixa-epi-covid", - "output_dir": "/tmp/original-output", - }, - "ixa_inputs": { - "epimodel.GlobalParams": { - "imported_cases_timeseries": { - "filename": "/tmp/original-output/imported_cases_timeseries.csv" - }, - "synth_population_file": "local.csv", - } - }, - }, - input_path=None, - run_id="gen_0_particle_0_attempt_0", - ) - assert ( - payload["config_inputs"]["exe_file"] == "/usr/local/bin/ixa-epi-covid" - ) - assert ( - payload["config_inputs"]["output_dir"] - == "/tmp/ixa-epi-covid/gen_0_particle_0_attempt_0" - ) - assert ( - payload["ixa_inputs"]["epimodel.GlobalParams"]["synth_population_file"] - == "/cloud-input/shared/synth.csv" - ) - assert ( - payload["ixa_inputs"]["epimodel.GlobalParams"][ - "imported_cases_timeseries" - ]["filename"] - == "/tmp/ixa-epi-covid/gen_0_particle_0_attempt_0/imported_cases_timeseries.csv" - ) - - -def test_task_mrp_config_uses_packaged_python(): - config_path = ( - Path(__file__).resolve().parents[2] / "ixa_epi_covid.mrp.task.toml" - ) - with config_path.open("rb") as fp: - config = tomllib.load(fp) - - assert config["runtime"]["command"] == "/app/.venv/bin/python" - - -def test_cloud_runner_applies_task_slots_override_to_settings_loader( - monkeypatch, - tmp_path, -): +def test_shared_population_asset_binds_to_session_mount_path(tmp_path): synth_population = tmp_path / "synth.csv" synth_population.write_text("person_id\n1\n", encoding="utf-8") - dockerfile = tmp_path / "Dockerfile.cloud" - dockerfile.write_text("FROM scratch\n", encoding="utf-8") - loaded_settings = [] - - monkeypatch.setattr( - "ixa_epi_covid.cloud.runner.resolve_cloud_build_context", - lambda repo_root=None, dockerfile=None: (tmp_path, Path(dockerfile)), + cloud_config = load_cloud_model_config( + REPO_ROOT / "ixa_epi_covid.cloud_config.toml" ) - monkeypatch.setattr( - "ixa_epi_covid.cloud.runner.load_cloud_runtime_settings", - lambda config_path: replace( - DEFAULT_CLOUD_RUNTIME_SETTINGS, - task_slots_per_node=50, - ), + assets = resolve_shared_assets( + cloud_config.shared_assets, + base_payload=_base_inputs(synth_population), + config_dir=cloud_config.config_path.parent.resolve(), ) - def fake_super_init( - self, - config_path, - *, - generation_count, - max_concurrent_simulations, - repo_root, - dockerfile, - settings_loader, - read_output_dir, - output_filename, - print_task_durations, - backend, - poll_interval_seconds, - mrp_run_func, - auto_size_summary=None, - ): - loaded_settings.append(settings_loader(config_path)) - self.session = SimpleNamespace( - input_mount_path="/cloud-input", - input_container="input-container", - ) - self.client = object() - self._suppress_cloudops_info_output = nullcontext - - monkeypatch.setattr( - "calibrationtools.cloud.runner.CloudMRPRunner.__init__", - fake_super_init, - ) - monkeypatch.setattr( - "ixa_epi_covid.cloud.runner.upload_files_quietly", - lambda client, **kwargs: None, + bound_assets = bind_shared_assets_to_session( + assets, + session_id="session-1", + input_mount_path="/cloud-input", ) - _Phase1CloudMRPRunner( - generation_count=1, - max_concurrent_simulations=40, - synth_population_path=synth_population, - repo_root=tmp_path, - dockerfile=dockerfile, - task_slots_per_node_override=9, + assert bound_assets[0].remote_blob_dir == ( + "shared/synthetic_population/session-1" + ) + assert bound_assets[0].remote_mount_path == ( + "/cloud-input/shared/synthetic_population/session-1/synth.csv" ) - - assert loaded_settings[0].task_slots_per_node == 9 -def test_cloud_runner_limits_parallel_output_downloads( - monkeypatch, - tmp_path, -): +def test_task_payload_transforms_set_cloud_task_paths(tmp_path): synth_population = tmp_path / "synth.csv" synth_population.write_text("person_id\n1\n", encoding="utf-8") - dockerfile = tmp_path / "Dockerfile.cloud" - dockerfile.write_text("FROM scratch\n", encoding="utf-8") - start_event = Event() - active_downloads = 0 - max_active_downloads = 0 - lock = Lock() - - monkeypatch.setattr( - "ixa_epi_covid.cloud.runner.resolve_cloud_build_context", - lambda repo_root=None, dockerfile=None: (tmp_path, Path(dockerfile)), - ) - - def fake_super_init( - self, - config_path, - *, - generation_count, - max_concurrent_simulations, - repo_root, - dockerfile, - settings_loader, - read_output_dir, - output_filename, - print_task_durations, - backend, - poll_interval_seconds, - mrp_run_func, - ): - self.session = SimpleNamespace( - input_mount_path="/cloud-input", - input_container="input-container", - ) - self.client = object() - self._suppress_cloudops_info_output = nullcontext - - monkeypatch.setattr( - "calibrationtools.cloud.runner.CloudMRPRunner.__init__", - fake_super_init, + cloud_config = load_cloud_model_config( + REPO_ROOT / "ixa_epi_covid.cloud_config.toml" ) - monkeypatch.setattr( - "ixa_epi_covid.cloud.runner.upload_files_quietly", - lambda client, **kwargs: None, + assets = resolve_shared_assets( + cloud_config.shared_assets, + base_payload=_base_inputs(synth_population), + config_dir=cloud_config.config_path.parent.resolve(), ) - - def fake_super_download(self, run_id, output_dir): - nonlocal active_downloads, max_active_downloads - with lock: - active_downloads += 1 - max_active_downloads = max( - max_active_downloads, - active_downloads, - ) - time.sleep(0.05) - with lock: - active_downloads -= 1 - return 0.01 - - monkeypatch.setattr( - "calibrationtools.cloud.runner.CloudMRPRunner._download_output_blocking", - fake_super_download, + bound_assets = bind_shared_assets_to_session( + assets, + session_id="session-1", + input_mount_path="/cloud-input", ) - - runner = _Phase1CloudMRPRunner( - generation_count=1, - max_concurrent_simulations=40, - synth_population_path=synth_population, - repo_root=tmp_path, - dockerfile=dockerfile, + base_context = CloudTaskContext( + run_id="gen_0_particle_0_attempt_0", + session_id="session-1", + job_name="generation-0", + input_mount_path="/cloud-input", + output_mount_path="/cloud-output", + logs_mount_path="/cloud-logs", + task_output_dir="/cloud-output/gen_0_particle_0_attempt_0", + shared_assets=bound_assets, + ) + context = replace( + base_context, + task_output_dir=resolve_task_output_dir( + cloud_config.task_payload, + base_context, + default_task_output_dir=base_context.task_output_dir, + ), ) - def run_download(index: int) -> float: - start_event.wait(timeout=1) - return runner._download_output_blocking( - f"gen_0_particle_{index}_attempt_0", - tmp_path / f"run-{index}", - ) - - with ThreadPoolExecutor(max_workers=16) as pool: - futures = [pool.submit(run_download, index) for index in range(16)] - start_event.set() - for future in futures: - assert future.result() == 0.01 - - assert runner._max_parallel_output_downloads == min( - 40, - _MAX_PARALLEL_OUTPUT_DOWNLOADS, + payload = apply_task_payload_transforms( + _base_inputs(synth_population), + cloud_config.task_payload, + context, ) - assert max_active_downloads == runner._max_parallel_output_downloads - - -def test_cloud_runner_reuses_shared_client_services_per_proxy( - monkeypatch, - tmp_path, -): - synth_population = tmp_path / "synth.csv" - synth_population.write_text("person_id\n1\n", encoding="utf-8") - dockerfile = tmp_path / "Dockerfile.cloud" - dockerfile.write_text("FROM scratch\n", encoding="utf-8") - - class FakeSharedClient: - def __init__(self) -> None: - self.batch_service_client = object() - self.batch_mgmt_client = object() - self.blob_service_client = object() - self.compute_mgmt_client = object() - self.cred = object() - self.full_container_name = "example/image:tag" - self.save_logs_to_blob = None - self.logs_folder = "stdout_stderr" - self.download_calls: list[dict[str, object]] = [] - - def download_file(self, *args, **kwargs): - self.download_calls.append( - { - "args": args, - "kwargs": kwargs, - } - ) - shared_client = FakeSharedClient() - - monkeypatch.setattr( - "ixa_epi_covid.cloud.runner.resolve_cloud_build_context", - lambda repo_root=None, dockerfile=None: (tmp_path, Path(dockerfile)), - ) - - def fake_super_init( - self, - config_path, - *, - generation_count, - max_concurrent_simulations, - repo_root, - dockerfile, - settings_loader, - read_output_dir, - output_filename, - print_task_durations, - backend, - poll_interval_seconds, - mrp_run_func, - ): - self.session = SimpleNamespace( - input_mount_path="/cloud-input", - input_container="input-container", - ) - self.client = shared_client - self._suppress_cloudops_info_output = nullcontext - - monkeypatch.setattr( - "calibrationtools.cloud.runner.CloudMRPRunner.__init__", - fake_super_init, + assert ( + payload["config_inputs"]["output_dir"] + == "/tmp/ixa-epi-covid/gen_0_particle_0_attempt_0" ) - monkeypatch.setattr( - "ixa_epi_covid.cloud.runner.upload_files_quietly", - lambda client, **kwargs: None, + assert ( + payload["ixa_inputs"]["epimodel.GlobalParams"][ + "synth_population_file" + ] + == "/cloud-input/shared/synthetic_population/session-1/synth.csv" ) - - runner = _Phase1CloudMRPRunner( - generation_count=1, - max_concurrent_simulations=40, - synth_population_path=synth_population, - repo_root=tmp_path, - dockerfile=dockerfile, + assert ( + payload["ixa_inputs"]["epimodel.GlobalParams"][ + "imported_cases_timeseries" + ]["filename"] + == "/tmp/ixa-epi-covid/gen_0_particle_0_attempt_0/imported_cases_timeseries.csv" ) - proxy_a = runner._create_cloud_client(keyvault="ignored") - proxy_b = runner._create_cloud_client(keyvault="ignored") - assert proxy_a is not proxy_b - assert proxy_a.batch_service_client is shared_client.batch_service_client - assert proxy_b.blob_service_client is shared_client.blob_service_client - - proxy_a.logs_folder = "run-a" - proxy_b.logs_folder = "run-b" - assert shared_client.logs_folder == "stdout_stderr" - assert proxy_a.logs_folder == "run-a" - assert proxy_b.logs_folder == "run-b" - - proxy_a.download_file( - src_path="example.txt", - dest_path="out.txt", - container_name="container", +def test_cloud_config_limits_parallel_output_downloads(): + cloud_config = load_cloud_model_config( + REPO_ROOT / "ixa_epi_covid.cloud_config.toml" ) - assert shared_client.download_calls == [ - { - "args": (), - "kwargs": { - "src_path": "example.txt", - "dest_path": "out.txt", - "container_name": "container", - }, - } - ] + + assert cloud_config.runtime_settings.max_parallel_output_downloads == 8 diff --git a/uv.lock b/uv.lock index c82b840..b800a17 100644 --- a/uv.lock +++ b/uv.lock @@ -10,7 +10,6 @@ members = [ "create-synthetic-population", "importation", "ixa-epi-covid", - "particle-reader", ] [[package]] @@ -502,7 +501,7 @@ css = [ [[package]] name = "calibrationtools" version = "0.1.1" -source = { git = "https://github.com/CDCgov/cfa-calibration-tools.git?branch=mrp_docker_cloudops#e2e039e0c2ffa5a69abe22b03d28f610601f6d5b" } +source = { git = "https://github.com/CDCgov/cfa-calibration-tools.git?branch=cloud-phase3#5d2d5c185040f76c08bcf885ee9f4dbe3f4fdc8b" } dependencies = [ { name = "cfa-mrp" }, { name = "jsonschema" }, @@ -1344,7 +1343,6 @@ dependencies = [ { name = "numpy" }, { name = "pandas" }, { name = "pandas-stubs" }, - { name = "particle-reader" }, { name = "polars" }, { name = "pyarrow" }, { name = "pygris" }, @@ -1363,7 +1361,7 @@ cloudops = [ [package.metadata] requires-dist = [ - { name = "calibrationtools", git = "https://github.com/CDCgov/cfa-calibration-tools.git?branch=mrp_docker_cloudops" }, + { name = "calibrationtools", git = "https://github.com/CDCgov/cfa-calibration-tools.git?branch=cloud-phase3" }, { name = "census", specifier = ">=0.8.25" }, { name = "cfa-mrp", specifier = ">=0.0.4" }, { name = "create-synthetic-population", editable = "packages/create_synthetic_population" }, @@ -1374,7 +1372,6 @@ requires-dist = [ { name = "numpy", specifier = ">=2.3.4" }, { name = "pandas", specifier = ">=2.3.2,<3.0.0" }, { name = "pandas-stubs", specifier = ">=2.3.2,<3.0.0" }, - { name = "particle-reader", editable = "packages/particle_reader" }, { name = "polars", specifier = ">=1.35.1" }, { name = "pyarrow", specifier = ">=23.0.0" }, { name = "pygris", specifier = ">=0.2.1" }, @@ -2374,21 +2371,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl", hash = "sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c", size = 107025 }, ] -[[package]] -name = "particle-reader" -version = "0.1.0" -source = { editable = "packages/particle_reader" } -dependencies = [ - { name = "numpy" }, - { name = "polars" }, -] - -[package.metadata] -requires-dist = [ - { name = "numpy", specifier = ">=2.3.4" }, - { name = "polars", specifier = ">=1.35.1" }, -] - [[package]] name = "pexpect" version = "4.9.0" From 08cfbd1b4a1c8fa127c250437a8adfb09831a62a Mon Sep 17 00:00:00 2001 From: Gil Sharon Date: Mon, 4 May 2026 19:29:55 +0000 Subject: [PATCH 11/15] update makefile for cloud --- Makefile | 46 +++++++++++++++++++++++++++++-- tests/cloud/test_cloud_cleanup.py | 17 ++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index f58f33a..fb41225 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,8 @@ CLEAN_SIZE_PATTERN := $(if $(filter command line environment environment overrid .PHONY: run run-small run-large run-xl profile profile-small profile-large profile-xl .PHONY: bench bench-compare build-rust-release docker-build-cloud-image .PHONY: calibrate-phase-1 calibrate-phase-1-docker calibrate-phase-1-cloud +.PHONY: cloud-list cloud-cleanup-plan cloud-cleanup +.PHONY: cloud-cleanup-user-plan cloud-cleanup-user .PHONY: projections-phase-1 plot-phase-1-projection .PHONY: calibrate-phase-1-smc projections-phase-1-smc plot-phase-1-projection-smc .PHONY: calibrate-phase-1-dev projections-phase-1-dev plot-phase-1-projection-dev @@ -45,6 +47,11 @@ help: ' calibrate-phase-1 Run phase-1 production calibration' \ ' calibrate-phase-1-docker Run phase-1 calibration via local Docker MRP' \ ' calibrate-phase-1-cloud Run phase-1 calibration via Azure/cloud MRP' \ + ' cloud-list List current user Azure cloud resources' \ + ' cloud-cleanup-plan Dry-run cleanup for SESSION_ID=...' \ + ' cloud-cleanup Delete cloud resources for SESSION_ID=...' \ + ' cloud-cleanup-user-plan Dry-run cleanup for CLOUD_USER' \ + ' cloud-cleanup-user Delete all cloud sessions for CLOUD_USER' \ ' projections-phase-1 Run phase-1 projections' \ ' plot-phase-1-projection Plot phase-1 projections' \ ' calibrate-phase-1-smc Run phase-1 SMC calibration' \ @@ -58,7 +65,10 @@ help: ' STATE=WY Synthetic population state' \ ' SIZE=1000 Synthetic population size' \ ' BASE=HEAD Benchmark comparison base ref' \ - ' MAX_WORKERS=4 Calibration/projection worker count' + ' MAX_WORKERS=4 Calibration/projection worker count' \ + ' SESSION_ID=... Cloud cleanup session ID' \ + ' CLOUD_USER= Cloud cleanup username filter' \ + ' CLOUD_CONFIG=... Cloud cleanup/calibration config path' # Run the Python test suite test: @@ -141,11 +151,24 @@ bench-compare: input/synth_pop_people_WY_10_000.csv input/synth_pop_people_WY_10 MAX_WORKERS ?= 4 AUTO_SIZE ?= +CLOUD_CONFIG ?= ixa_epi_covid.cloud_config.toml +CURRENT_CLOUD_USER := $(shell python3 -c 'import getpass, os, re; user = os.environ.get("USER") or os.environ.get("LOGNAME") or getpass.getuser(); print(re.sub("-+", "-", re.sub("[^a-z0-9-]+", "-", user.lower())).strip("-"))') +CLOUD_USER ?= $(CURRENT_CLOUD_USER) +CLOUD_CLEANUP_ACR ?= --skip-acr +CLOUD_CLEANUP_FILTERS = $(if $(SESSION_ID),--session-id $(SESSION_ID)) $(if $(CLOUD_USER),--user $(CLOUD_USER)) $(if $(IMAGE_TAG),--image-tag $(IMAGE_TAG)) $(CLOUD_CLEANUP_ACR) PHASE1_PROD_CONFIG ?= ./experiments/phase1/input/prod-config.yaml PHASE1_DEV_CONFIG ?= ./experiments/phase1/input/dev-config.yaml CLOUD_ARTIFACTS_DIR ?= ./experiments/phase1/calibration/cloud_artifacts TARGET_RESULTS = ./experiments/phase1/calibration/output_indiana/results.pkl +define require_session_id +$(if $(SESSION_ID),,$(error SESSION_ID is required, e.g. make $@ SESSION_ID=)) +endef + +define require_user +$(if $(CLOUD_USER),,$(error CLOUD_USER is required, e.g. make $@ CLOUD_USER=)) +endef + build-rust-release: uv run cargo build -r @@ -168,7 +191,26 @@ calibrate-phase-1-docker: docker-build-cloud-image # Run phase-1 calibration through the Azure/cloud-backed MRP path. This target # requires the cloudops dependency group, so bootstrap with uv-sync-cloud first. calibrate-phase-1-cloud: uv-sync-cloud build-rust-release - uv run python ./scripts/phase_1_calibration.py -c $(PHASE1_PROD_CONFIG) -o ./experiments/phase1/calibration/output_indiana_cloud --max-workers $(MAX_WORKERS) --cloud --cloud-config ixa_epi_covid.cloud_config.toml $(AUTO_SIZE) --artifacts-dir $(CLOUD_ARTIFACTS_DIR) + uv run python ./scripts/phase_1_calibration.py -c $(PHASE1_PROD_CONFIG) -o ./experiments/phase1/calibration/output_indiana_cloud --max-workers $(MAX_WORKERS) --cloud --cloud-config $(CLOUD_CONFIG) $(AUTO_SIZE) --artifacts-dir $(CLOUD_ARTIFACTS_DIR) + +cloud-list: uv-sync-cloud + uv run python -m calibrationtools.cloud.cleanup --config $(CLOUD_CONFIG) --list $(CLOUD_CLEANUP_FILTERS) + +cloud-cleanup-plan: uv-sync-cloud + $(call require_session_id) + uv run python -m calibrationtools.cloud.cleanup --config $(CLOUD_CONFIG) --session-id $(SESSION_ID) --user $(CLOUD_USER) --dry-run $(if $(IMAGE_TAG),--image-tag $(IMAGE_TAG)) $(CLOUD_CLEANUP_ACR) + +cloud-cleanup: uv-sync-cloud + $(call require_session_id) + uv run python -m calibrationtools.cloud.cleanup --config $(CLOUD_CONFIG) --session-id $(SESSION_ID) --user $(CLOUD_USER) $(if $(IMAGE_TAG),--image-tag $(IMAGE_TAG)) $(CLOUD_CLEANUP_ACR) + +cloud-cleanup-user-plan: uv-sync-cloud + $(call require_user) + uv run python -m calibrationtools.cloud.cleanup --config $(CLOUD_CONFIG) --user $(CLOUD_USER) --all-sessions-for-user --dry-run $(if $(IMAGE_TAG),--image-tag $(IMAGE_TAG)) $(CLOUD_CLEANUP_ACR) + +cloud-cleanup-user: uv-sync-cloud + $(call require_user) + uv run python -m calibrationtools.cloud.cleanup --config $(CLOUD_CONFIG) --user $(CLOUD_USER) --all-sessions-for-user $(if $(IMAGE_TAG),--image-tag $(IMAGE_TAG)) $(CLOUD_CLEANUP_ACR) projections-phase-1: $(TARGET_RESULTS) uv run python ./scripts/phase_1_projection.py -d output_indiana --max-workers $(MAX_WORKERS) diff --git a/tests/cloud/test_cloud_cleanup.py b/tests/cloud/test_cloud_cleanup.py index a1543f1..9e504a9 100644 --- a/tests/cloud/test_cloud_cleanup.py +++ b/tests/cloud/test_cloud_cleanup.py @@ -13,6 +13,23 @@ def test_makefile_population_rule_uses_packaged_entrypoint(): assert "scripts/create_synthetic_population.py" not in makefile +def test_makefile_cloud_cleanup_targets_use_shared_cli(): + makefile = (Path(__file__).resolve().parents[2] / "Makefile").read_text( + encoding="utf-8" + ) + + assert "cloud-list:" in makefile + assert "cloud-cleanup-plan:" in makefile + assert "cloud-cleanup:" in makefile + assert "calibrationtools.cloud.cleanup" in makefile + assert "CURRENT_CLOUD_USER := $(shell python3 -c" in makefile + assert "CLOUD_USER ?= $(CURRENT_CLOUD_USER)" in makefile + assert "--user $(CLOUD_USER)" in makefile + assert "--dry-run" in makefile + assert "--yes" not in makefile + assert "ixa_epi_covid.cloud.cleanup" not in makefile + + def test_shared_cleanup_parser_uses_session_id_and_dry_run(): args = shared_cleanup.parse_args( ["--session-id", "session-1", "--dry-run"], From 1ecd5877f48f14a1e98f3c653e37d403e3ccd5a3 Mon Sep 17 00:00:00 2001 From: Gil Sharon Date: Mon, 4 May 2026 16:37:18 -0400 Subject: [PATCH 12/15] fix cloud interface --- .gitignore | 4 + .pre-commit-config.yaml | 2 + .../raw_perkins_et_al_importation_data.csv | 2495 +++++++++++++++++ .../data/state_population_data_2020.csv | 53 + .../src/importation/perkins_et_al_methods.py | 2 +- packages/importation/tests/test_etl.py | 14 +- src/ixa_epi_covid/model_execution.py | 4 +- tests/cloud/test_cloud_auto_size_probe.py | 4 +- tests/cloud/test_cloud_cleanup.py | 9 - tests/cloud/test_cloud_settings.py | 28 - tests/cloud/test_dependency_contract.py | 9 +- tests/cloud/test_importation_offline_data.py | 3 +- tests/cloud/test_mrp_toml_configs.py | 3 + tests/cloud/test_population_asset_staging.py | 12 +- 14 files changed, 2584 insertions(+), 58 deletions(-) create mode 100644 packages/importation/src/importation/data/raw_perkins_et_al_importation_data.csv create mode 100644 packages/importation/src/importation/data/state_population_data_2020.csv diff --git a/.gitignore b/.gitignore index 1ce4010..24d59f5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ **/profiling.json experiments/**/simulations/ +experiments/**/calibration/ +.codex # IDE and Platform .vscode @@ -45,6 +47,8 @@ experiments/**/simulations/ # !your_data_directory/ !input/people_test.csv !input/symptom_delay_median_iqr.csv +!packages/importation/src/importation/data/ +!packages/importation/src/importation/data/*.csv !tests/data/* diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 79104f6..39ed156 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,8 +11,10 @@ repos: - id: check-yaml - id: check-toml - id: end-of-file-fixer + exclude: \.patch$ - id: mixed-line-ending - id: trailing-whitespace + exclude: \.patch$ ##### # Python - repo: https://github.com/astral-sh/ruff-pre-commit diff --git a/packages/importation/src/importation/data/raw_perkins_et_al_importation_data.csv b/packages/importation/src/importation/data/raw_perkins_et_al_importation_data.csv new file mode 100644 index 0000000..c66e5d1 --- /dev/null +++ b/packages/importation/src/importation/data/raw_perkins_et_al_importation_data.csv @@ -0,0 +1,2495 @@ +id,case_in_country,reporting date,summary,location,country,gender,age,symptom_onset,If_onset_approximated,hosp_visit_date,international_traveler,domestic_traveler,exposure_start,exposure_end,traveler,visiting Wuhan,from Wuhan,death,recovered,symptom,source,link +1,,2020-01-20T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Shenzhen (from Wuhan): male, 66, shenzheng residence, visited relatives in Wuhan on 12/29/2019, symptoms onset on 01/03/2020, returned to Shenzhen and seek medical care on 01/04/2020, hospitalized on 01/11/2020, sample sent to China CDC for testing on 01/18/2020, confirmed on 01/19/2020. 8 others under medical observation, contact tracing ongoing.","Shenzhen, Guangdong",China,male,66.0,2020-01-03T00:00:00.000000,0,2020-01-11,,,2019-12-29T00:00:00.000000,2020-01-04,,1,0,0,0,,Shenzhen Municipal Health Commission,http://wjw.sz.gov.cn/wzx/202001/t20200120_18987787.htm +2,,2020-01-20T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Shanghai (from Wuhan): female, 56, Wuhan residence, arrived in Shanghai from Wuhan on 01/12/2020, symptom onset and visited fever clinic on 01/15/2020, laboratory confirmed on 01/20/2020",Shanghai,China,female,56.0,2020-01-15T00:00:00.000000,0,2020-01-15,,,,2020-01-12,,0,1,0,0,,Official Weibo of Shanghai Municipal Health Commission,https://www.weibo.com/2372649470/IqogQhgfa?from=page_1001062372649470_profile&wvr=6&mod=weibotime&type=comment +3,,2020-01-21T00:00:00.000000,"First confirmed imported cases in Zhejiang: patient is male, 46, lives in Wuhan, self-driving from Wuhan to Hangzhou on 01/03/2020, symptom onset 01/04/2020, hospitalized on 01/17/2020, sample deliver to China CDC for testing on 01/20/2020, test positive on 01/21/2020.",Zhejiang,China,male,46.0,2020-01-04T00:00:00.000000,0,2020-01-17,,,,2020-01-03,,0,1,0,0,,Health Commission of Zhejiang Province,http://www.zjwjw.gov.cn/art/2020/1/21/art_1202101_41786033.html +4,,2020-01-21T00:00:00.000000,"new confirmed imported COVID-19 pneumonia in Tianjin: female, age 60, recently visited Wuhan, visited fever clinic on 01/19/2020 in Tianjin then quarantined immediately.",Tianjin,China,female,60.0,,,2020-01-19,,,,,,1,0,0,0,,人民日报官方微博,https://m.weibo.cn/status/4463235401268457? +5,,2020-01-21T00:00:00.000000,"new confirmed imported COVID-19 pneumonia in Tianjin: male, age 58, visited fever clinic on 01/14/2020.",Tianjin,China,male,58.0,,,2020-01-14,,,,,,0,0,0,0,,人民日报官方微博,https://m.weibo.cn/status/4463235401268457? +6,,2020-01-21T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Chongqing (from Wuhan): female, age 44, symptoms onset on 01/15/2020, laboratory confirmed on 01/21/2020.",Chongqing,China,female,44.0,2020-01-15T00:00:00.000000,0,,,,,,,0,1,0,0,,Chongqing Municipal Health Commission,http://wsjkw.cq.gov.cn/tzgg/20200121/249730.html +7,,2020-01-21T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Sichuan (from Wuhan): Male, 34 years old, works in Wuhan, symptoms onset on 01/11/2020 in Chengdu.",Sichuan,China,male,34.0,2020-01-11T00:00:00.000000,0,,,,,,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4463300522087848? +8,,2020-01-21T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Beijing: male, 37, visited Wuhan on 01/10/2020, return to Beijing on 01/11/2020, symptoms onset on 01/14/2020, hospitalized on 01/20/2020.",Beijing,China,male,37.0,2020-01-14T00:00:00.000000,0,2020-01-20,,,2020-01-10T00:00:00.000000,2020-01-11,,1,0,0,0,,Beijing Municipal Health Commission,http://wjw.beijing.gov.cn/xwzx_20031/wnxw/202001/t20200121_1620353.html +9,,2020-01-21T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Beijing: male, 39, visited Wuhan on 01/03/2020, return to Beijing on 01/04/2020, symptoms onset on 01/09/2020, hospitalized on 01/14/2020.",Beijing,China,male,39.0,2020-01-09T00:00:00.000000,0,2020-01-14,,,2020-01-03T00:00:00.000000,2020-01-04,,1,0,0,0,,Beijing Municipal Health Commission,http://wjw.beijing.gov.cn/xwzx_20031/wnxw/202001/t20200121_1620353.html +10,,2020-01-21T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Beijing: male, 56, visited Wuhan on 01/08/2020, return to Beijing on 01/16/2020, symptoms onset on 01/16/2020, hospitalized on 01/20/2020.",Beijing,China,male,56.0,2020-01-16T00:00:00.000000,0,2020-01-20,,,2020-01-08T00:00:00.000000,2020-01-16,,1,0,0,0,,Beijing Municipal Health Commission,http://wjw.beijing.gov.cn/xwzx_20031/wnxw/202001/t20200121_1620353.html +11,,2020-01-21T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Beijing: female, 18, visited Wuhan on 01/12/2020, return to Beijing on 01/17/2020, symptoms onset on 01/19/2020, hospitalized on 01/20/2020.",Beijing,China,female,18.0,2020-01-19T00:00:00.000000,0,2020-01-20,,,2020-01-12T00:00:00.000000,2020-01-17,,1,0,0,0,,Beijing Municipal Health Commission,http://wjw.beijing.gov.cn/xwzx_20031/wnxw/202001/t20200121_1620353.html +12,,2020-01-21T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Beijing: female, 32, visited Wuhan on 01/13/2020, return to Beijing on 01/17/2020, symptoms onset while in Wuhan, hospitalized on 01/20/2020.",Beijing,China,female,32.0,2020-01-15T00:00:00.000000,0,2020-01-20,,,2020-01-13T00:00:00.000000,2020-01-17,,1,0,0,0,,Beijing Municipal Health Commission,http://wjw.beijing.gov.cn/xwzx_20031/wnxw/202001/t20200121_1620353.html +13,,2020-01-21T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Shandong: male, 37, visited clinic on 01/17/2020, travelled to Wuhan within to weeks of symptom onset.",Shandong,China,male,37.0,,,2020-01-17,,,,,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463323540564718? +14,,2020-01-21T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Yunnan: male, 51, Wuhan resident, visited Yunan on 01/15/2020, symptom onset on 01/16/2020 and hospitalized.",Yunnan,China,male,51.0,2020-01-16T00:00:00.000000,0,,,,,2020-01-15,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4463321081961974? +15,,2020-01-22T00:00:00.000000,"Second confirmed imported COVID-19 pneumonia patient in Sichuan: male, 57, Wuhan resident, visited Sichuan on 01/15/2020, symptom onset on 01/16/2020 and hospitalized.",Sichuan,China,male,57.0,2020-01-16T00:00:00.000000,0,,,,,2020-01-15,,0,1,0,0,,央视新闻,https://www.weibo.com/2656274875/IqzRU3150?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579669764455 +16,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Jiangxi: male, 56, visited Wuhan on 12/20/2019, return to Jiangxi on 01/09/2020, symptoms onset on 01/10/2020.",Jiangxi,China,male,56.0,2020-01-10T00:00:00.000000,0,,,,2019-12-20T00:00:00.000000,2020-01-09,,1,0,0,0,,央视新闻,https://www.weibo.com/2656274875/IqAcyp3Jr?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579669997545 +17,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Jiangxi: male, 50, visited Wuhan for poultry trading, return to Jiangxi on 01/02/2020, symptoms onset on 01/10/2020.",Jiangxi,China,male,50.0,2020-01-10T00:00:00.000000,0,,,,,2020-01-02,,1,0,0,0,,央视新闻,https://www.weibo.com/2656274875/IqAcyp3Jr?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579669997545 +18,,2020-01-22T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Macau: female, 52, Wuhan resident, symptom onset one week before 01/21/2020, hospitalized on 01/22/2020",Macau,China,female,52.0,2020-01-14T00:00:00.000000,0,2020-01-22,,,,,,0,1,0,0,,央视新闻,https://www.weibo.com/2656274875/IqDIS0pET?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579670405515 +19,,2020-01-22T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Liaoning: male, 33, works in Wuhan, symptom onset on 01/11/2020, visit clinic in Liaoning Dalian on 01/17/2020.",Liaoning,China,male,33.0,2020-01-11T00:00:00.000000,0,2020-01-17,,,,,,1,0,0,0,,央视新闻,https://www.weibo.com/2656274875/IqFFYc2Gv?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579699253938 +20,,2020-01-22T00:00:00.000000,"Second confirmed imported COVID-19 pneumonia patient in Liaoning: male, 40, works in Wuhan, visit Fushun, Liaoning on 01/12/2020, symptom onset on 01/14/2020, visit clinic in Fushun Dalian on 01/19/2020.",Liaoning,China,male,40.0,2020-01-14T00:00:00.000000,0,2020-01-19,,,,2020-01-12,,1,0,0,0,,央视新闻,https://www.weibo.com/2656274875/IqFFYc2Gv?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579699253938 +21,,2020-01-22T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Fujian: male, 70, works in Wuhan, return to Fujian on 01/17/2020, visit clinic on 01/20/2020.",Fujian,China,male,70.0,,,2020-01-20,,,,2020-01-17,,1,0,0,0,,人民日报,https://www.weibo.com/2803301701/IqGpc5njk?from=page_1002062803301701_profile&wvr=6&mod=weibotime&type=comment#_rnd1579700150699 +22,,2020-01-22T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Guizhou: male, 51, lives in Wuhan, symptom onset on 01/14/2020, visit clinic on 01/14/2020.",Guizhou,China,male,51.0,2020-01-14T00:00:00.000000,0,2020-01-14,,,,,,0,1,0,0,,人民日报,https://www.weibo.com/2803301701/IqGtrCQPF?from=page_1002062803301701_profile&wvr=6&mod=weibotime&type=comment#_rnd1579700189479 +23,,2020-01-22T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Shanxi: male, visited Wuhan from 01/12/2020 to 01/15/2020, symptom onset on 01/19/2020, visit clinic on 01/20/2020, 6 contacts traced.",Shanxi,China,male,,2020-01-19T00:00:00.000000,0,2020-01-20,,,2020-01-12T00:00:00.000000,2020-01-15,,1,0,0,0,,央视新闻,https://www.weibo.com/2656274875/IqGCB0OTO?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579700655907 +24,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Sichuan: female, 28, visited Chengdu from Wuhan on 01/17/2020, symptoms onset on 01/19/2020.",Sichuan,China,female,28.0,2020-01-19T00:00:00.000000,0,,,,,2020-01-17,,1,0,0,0,,央视新闻,https://www.weibo.com/2656274875/IqGDxbyp4?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579700789935 +25,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Sichuan: male, 37, visited Chengdu from Wuhan on 01/18/2020, symptoms onset on 01/20/2020.",Sichuan,China,male,37.0,2020-01-20T00:00:00.000000,0,,,,,2020-01-18,,1,0,0,0,,央视新闻,https://www.weibo.com/2656274875/IqGDxbyp4?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579700789935 +26,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Sichuan: male, 19, visited Chengdu from Wuhan on 01/13/2020, symptoms onset on 01/20/2020.",Sichuan,China,male,19.0,2020-01-20T00:00:00.000000,0,,,,,2020-01-13,,1,0,0,0,,央视新闻,https://www.weibo.com/2656274875/IqGDxbyp4?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579700789935 +27,,2020-01-22T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Ningxia: male, 29, works in Wuhan. Ningxia and visit clinic on 01/19/2020.",Ningxia,China,male,29.0,,,2020-01-19,,,,,,1,0,0,0,,央视新闻,https://www.weibo.com/2656274875/IqGRMsgUh?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579701110319 +28,,2020-01-22T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Guangxi: female, 66, lives in Wuhan. arrived in Beihai, Guangxi on 01/16/2020, and visited clinic on 01/17/2020 due to symptoms.",Guangxi,China,female,66.0,2020-01-17T00:00:00.000000,0,2020-01-17,,,,2020-01-16,,0,1,0,0,,央视新闻,https://www.weibo.com/2803301701/IqGTwh0C1?from=page_1002062803301701_profile&wvr=6&mod=weibotime&type=comment#_rnd1579701274138 +29,,2020-01-22T00:00:00.000000,"Second confirmed imported COVID-19 pneumonia patient in Guangxi: male, 46, in contact with individuals from Wuhan before symptom onset. symptom onset on 01/20/2020.",Guangxi,China,male,46.0,2020-01-20T00:00:00.000000,0,,,,,,,0,0,0,0,,央视新闻,https://www.weibo.com/2803301701/IqGTwh0C1?from=page_1002062803301701_profile&wvr=6&mod=weibotime&type=comment#_rnd1579701274138 +30,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Henan: female, 32, Wuhan resident, visited Sanmenxi, Henan on 01/18/2020.",Henan,China,female,32.0,,,,,,,2020-01-18,,0,1,0,0,,央视新闻,https://www.weibo.com/2803301701/IqGV4lCay?from=page_1002062803301701_profile&wvr=6&mod=weibotime&type=comment#_rnd1579701703144 +31,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Henan: male, 28, Henan resident, visited Wuhan on 01/09/2020 to treat diabetes, returned to Henan on 01/19/2020.",Henan,China,male,28.0,,,,,,2020-01-09T00:00:00.000000,2020-01-19,,1,0,0,0,,央视新闻,https://www.weibo.com/2803301701/IqGV4lCay?from=page_1002062803301701_profile&wvr=6&mod=weibotime&type=comment#_rnd1579701703144 +32,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Henan: male, 55, lives in Wuhan, visited Henan on 01/11/2020, symptom onset durnig the visit.",Henan,China,male,55.0,,,,,,,2020-01-11,,0,1,0,0,,央视新闻,https://www.weibo.com/2803301701/IqGV4lCay?from=page_1002062803301701_profile&wvr=6&mod=weibotime&type=comment#_rnd1579701703144 +33,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Henan: male, 68, lives in Wuhan, visited Henan on 01/11/2020, went to clinic on 01/13/2020.",Henan,China,male,68.0,,,2020-01-13,,,,2020-01-11,,0,1,0,0,,央视新闻,https://www.weibo.com/2803301701/IqGV4lCay?from=page_1002062803301701_profile&wvr=6&mod=weibotime&type=comment#_rnd1579701703144 +34,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Shandong: male, 38, works in Zhejiang (not Wuhan!), have close contact with COVID-19 patients in Zhejiang, visit relative in Weihai, Shandong on 01/18/2020, symptom onset on 01/20/2020 and hospitalized.",Shandong,China,male,38.0,2020-01-20T00:00:00.000000,0,,,,,,,0,0,0,0,,人民日报,https://wap.peopleapp.com/article/5068189/4962549 +35,,2020-01-22T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Hebei: male, 72, Wuhan resident. visited relative in Shijiazhuang, Hebei on 01/18/2020, symptom onset on 01/19/2020 and hospitalized, 6 contacts traced.",Hebei,China,male,72.0,2020-01-19T00:00:00.000000,0,,,,,2020-01-18,,0,1,0,0,,人民日报,https://www.weibo.com/2803301701/IqIgXzszS?filter=hot&root_comment_id=0&type=comment#_rnd1579733299141 +36,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Beijing: male, 45, visited Wuhan on 01/11/2020, returned to Beijing on 01/14/2020, symptom onset on 01/19/2020, visit clinic on 01/21/2020.",Beijing,China,male,45.0,2020-01-19T00:00:00.000000,0,2020-01-21,,,2020-01-11T00:00:00.000000,2020-01-14,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463681624289721? +37,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Beijing: male, 42, visited Wuhan on 01/11/2020 and 01/18/2020 twice, returned to Beijing on 01/19/2020, symptom onset on 01/20/2020.",Beijing,China,male,42.0,2020-01-20T00:00:00.000000,0,,,,2020-01-11T00:00:00.000000,2020-01-18,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463681624289721? +38,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Beijing: female,33, Wuhan resident, visiting Beijing, seek care on 01/20/2020 after symptom onset.",Beijing,China,female,33.0,,,2020-01-20,,,,,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4463681624289721? +39,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Beijing: female,33, Wuhan resident, visiting Beijing on 01/18/2020, seek care on 01/20/2020 after symptom onset.",Beijing,China,female,33.0,,,2020-01-20,,,,2020-01-18,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4463681624289721? +40,,2020-01-22T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Jiangsu: male,37, returned to Jiangsu from Wuhan on 01/10/2020.",Jiangsu,China,male,37.0,,,,,,,2020-01-10,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463686238777844? +41,,2020-01-23T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Heilongjiang: male, 69, returned to Mudanjiang, Heilongjiang from Wuhan on 01/12/2020, symptom onset after return and has been hospitalized.",Heilongjiang,China,male,69.0,,,,,,,2020-01-12,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463700323132715? +42,,2020-01-23T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Guangxi: male, 63, Wuhan resident, symptom onset on 01/14/2020, arrived in Beihai, Guangxi on 01/20/2020, hospitalized on 01/21/2020, tested postive on 01/22/2020.",Guangxi,China,male,63.0,2020-01-14T00:00:00.000000,0,2020-01-21,,,,2020-01-20,,0,1,0,0,,央视新闻,https://www.weibo.com/2656274875/IqJdjB2oy?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579750975842 +43,,2020-01-23T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Guangxi: female, 62, Wuhan resident, symptom onset on 01/09/2020, arrived in Beihai, Guangxi on 01/15/2020, hospitalized on 01/21/2020, tested postive on 01/22/2020.",Guangxi,China,female,62.0,2020-01-09T00:00:00.000000,0,2020-01-21,,,,2020-01-15,,0,1,0,0,,央视新闻,https://www.weibo.com/2656274875/IqJdjB2oy?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579750975842 +44,,2020-01-23T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Guangxi: male, 49, lives in Wuhan,arrived in Liuzhou, Guangxi on 01/20/2020, symptom onset on 01/21/2020, hospitalized on 01/21/2020, tested postive on 01/22/2020.",Guangxi,China,male,49.0,2020-01-21T00:00:00.000000,0,2020-01-21,,,,2020-01-20,,0,1,0,0,,央视新闻,https://www.weibo.com/2656274875/IqJdjB2oy?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1579750975842 +45,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Chengdu, Sichuan: male, 50, return to Chengdu from Wuhan on 01/12/2020, symptom onset on 01/18/2020 and hospitalized.",Sichuan,China,male,50.0,2020-01-18T00:00:00.000000,0,,,,,2020-01-12,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463841306422942? +46,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Chengdu, Sichuan: male, 48, return to Chengdu from Wuhan on 01/10/2020, symptom onset on 01/18/2020 and hospitalized.",Sichuan,China,male,48.0,2020-01-18T00:00:00.000000,0,,,,,2020-01-10,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463841306422942? +47,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Dazhou, Sichuan: male, 36, return to Dazhou from Wuhan on 01/17/2020, symptom onset on 01/18/2020 and hospitalized.",Sichuan,China,male,36.0,2020-01-18T00:00:00.000000,0,,,,,2020-01-17,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463841306422942? +48,,2020-01-22T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Jilin: female, 36, return to Changchun, Jilin from Wuhan on 01/19/2020 and visit clinic due to symptom onset.",Jilin,China,female,36.0,2020-01-19T00:00:00.000000,0,,,,,2020-01-19,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463853884470907? +49,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 61, symptom onset on 12/20/2019, hospitalized on 12/27/2019, death on 01/09/2020.","Wuhan, Hubei",China,male,61.0,2019-12-20T00:00:00.000000,0,2019-12-27,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +50,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 69, symptom onset on 12/30/2020, hospitalized on 01/03/2020, death on 01/15/2020.","Wuhan, Hubei",China,male,69.0,2019-12-30T00:00:00.000000,0,2020-01-03,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +51,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 89, pneumonia confirmed on 01/08/2020, death on 01/18/2020.","Wuhan, Hubei",China,male,89.0,2020-01-08T00:00:00.000000,0,,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +52,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 89, symptom onset on 01/13/2020, hospitalized on 01/13/2020, death on 01/19/2020.","Wuhan, Hubei",China,male,89.0,2020-01-13T00:00:00.000000,0,2020-01-13,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +53,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 66, symptom onset on 01/10/2020, hospitalized on 01/16/2020, death on 01/20/2020.","Wuhan, Hubei",China,male,66.0,2020-01-10T00:00:00.000000,0,2020-01-16,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +54,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 75, symptom onset on 01/06/2020, hospitalized on 01/11/2020, death on 01/20/2020.","Wuhan, Hubei",China,male,75.0,2020-01-12T00:00:00.000000,0,2020-01-11,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +55,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: female, 48, symptom onset on 12/10/2019, death on 01/20/2020.","Wuhan, Hubei",China,female,48.0,2019-12-10T00:00:00.000000,0,,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +56,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 82, symptom onset on 01/09/2020, hospitalized on 01/14/2020, death on 01/21/2020.","Wuhan, Hubei",China,male,82.0,2020-01-09T00:00:00.000000,0,2020-01-14,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +57,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 66, coughing on 12/22/2019, hospitalized on 12/31/2019, death on 01/21/2020.","Wuhan, Hubei",China,male,66.0,2019-12-22T00:00:00.000000,0,2019-12-31,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +58,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 81, symptom onset on 01/15/2020, hospitalized on 01/18/2020, death on 01/22/2020.","Wuhan, Hubei",China,male,81.0,2020-01-15T00:00:00.000000,0,2020-01-18,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +59,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: female, 82, hospitalized on 01/06/2020, death on 01/22/2020.","Wuhan, Hubei",China,female,82.0,,,2020-01-06,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +60,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 65, symptom onset on 01/05/2020, hospitalized on 01/11/2020, death on 01/21/2020.","Wuhan, Hubei",China,male,65.0,2020-01-05T00:00:00.000000,0,2020-01-11,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +61,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: female, 80, symptom onset on 01/11/2020, hospitalized on 01/18/2020, death on 01/22/2020.","Wuhan, Hubei",China,female,80.0,2020-01-09T00:00:00.000000,0,2020-01-18,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +62,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 53, symptom onset on early January, hospitalized on 01/13/2020, death on 01/21/2020.","Wuhan, Hubei",China,male,53.0,,,2020-01-13,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +63,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 86, symptom onset on 01/02/2020, hospitalized on 01/09/2020, death on 01/21/2020.","Wuhan, Hubei",China,male,86.0,2020-01-02T00:00:00.000000,,2020-01-09,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +64,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: female, 70, hospitalized on 01/13/2020, death on 01/21/2020.","Wuhan, Hubei",China,female,70.0,,,2020-01-13,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +65,,2020-01-22T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 84, symptom onset on 01/06/2020, hospitalized on 01/09/2020, death on 01/22/2020.","Wuhan, Hubei",China,male,84.0,2020-01-06T00:00:00.000000,0,2020-01-09,,,,,,0,1,1,0,,National Health Commission,http://www.nhc.gov.cn/yjb/s3578/202001/5d19a4f6d3154b9fae328918ed2e3c8a.shtml +66,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Liaoning: female, 50, return to Shenyang, Liaoning from Wuhan on 01/15/2020, symptom onset on 01/16/2020 and hospitalized, 37 contacts traced.",Liaoning,China,female,50.0,2020-01-16T00:00:00.000000,0,,,,,2020-01-15,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463859978946325? +67,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Hunan: male, 40, symptom onset on 01/05/2020, hospitalized on 01/20/2020, prior exposure to Wuhan.",Hunan,China,male,40.0,2020-01-05T00:00:00.000000,0,2020-01-20,,,,,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463860260361454? +68,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Hunan: male, 45, symptom onset on 01/16/2020, hospitalized on 01/21/2020, prior exposure to Wuhan.",Hunan,China,male,45.0,2020-01-16T00:00:00.000000,0,2020-01-21,,,,,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463860260361454? +69,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Hunan: female, 66, symptom onset on 01/17/2020, hospitalized on 01/21/2020, prior exposure to Wuhan.",Hunan,China,female,66.0,2020-01-17T00:00:00.000000,0,2020-01-21,,,,,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463860260361454? +70,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Hunan: male, 59, symptom onset on 01/16/2020, hospitalized on 01/21/2020, prior exposure to Wuhan.",Hunan,China,male,59.0,2020-01-16T00:00:00.000000,0,2020-01-21,,,,,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463860260361454? +71,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Hunan: female, 23, symptom onset on 01/16/2020, hospitalized on 01/21/2020, prior exposure to Wuhan.",Hunan,China,female,23.0,2020-01-16T00:00:00.000000,0,2020-01-21,,,,,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463874360972840? +72,,2020-01-22T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Guizhou: female, 50, contact individuals from Wuhan in Changsha, hunan between 01/10/2020 and 01/12/2020, symptom onset on 01/14/2020, hospitalized on 01/22/2020.",Guizhou,China,female,50.0,2020-01-14T00:00:00.000000,0,2020-01-22,,,2020-01-10T00:00:00.000000,2020-01-12,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4463876156726203? +73,,2020-01-23T00:00:00.000000,"First confirmed COVID-19 pneumonia patient in Gansu: male, 43, lives in Lanzhou, Gansu, visited Hunan, Jiangxi since 01/11/2020, met with individual from Wuhan during the visit, return to Lanzhou Gansu on 01/17/2020, symptom onset on 01/18/2020, visit clinic on 01/21/2020, tested positive on 01/23/2020.",Gansu,China,male,43.0,2020-01-18T00:00:00.000000,0,2020-01-21,,,2020-01-11T00:00:00.000000,2020-01-17,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4463886797528385? +74,,2020-01-23T00:00:00.000000,"new confirmed COVID-19 pneumonia patient in Heilongjiang: male, 49, lives in Heilongjiang, returned from Wuhan to Heilongjiang on 01/23/2020, symptom onset on 01/23/2020.",Heilongjiang,China,male,49.0,2020-01-23T00:00:00.000000,0,,,,,2020-01-23,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463892727709344? +75,,2020-01-23T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/23-No.1 in Shanxi: male, 42, lives in Xianyang, Shanxi, visited Wuhan from 01/12/2020 to 01/15/2020, returned to Xian, Shanxi on 01/15/2020, symptom onset on 01/20/2020, visited clinic on 01/21/2020",Shanxi (陕西),China,male,42.0,2020-01-20T00:00:00.000000,0,2020-01-21,,,2020-01-12T00:00:00.000000,2020-01-15,,1,0,0,0,,人民日报,https://www.weibo.com/2803301701/IqPMidEzh?from=page_1002062803301701_profile&wvr=6&mod=weibotime&type=comment#_rnd1579799658694 +76,,2020-01-23T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/23-No.2 in Shanxi: female, 32, resident of Xian, Shanxi, visited Wuhan from 01/12/2020 to 01/14/2020, returned to Xian, Shanxi on 01/14/2020, symptom onset on 01/16/2020, visited clinic on 01/20/2020.",Shanxi (陕西),China,female,32.0,2020-01-16T00:00:00.000000,0,2020-01-20,,,2020-01-12T00:00:00.000000,2020-01-14,,1,0,0,0,,人民日报,https://www.weibo.com/2803301701/IqPMidEzh?from=page_1002062803301701_profile&wvr=6&mod=weibotime&type=comment#_rnd1579799658694 +77,,2020-01-23T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/23-No.3 in Shanxi: male, 22, resident of Xian, Shanxi, visited Wuhan from 01/15/2020 to 01/17/2020, returned to Xian, Shanxi on 01/17/2020, symptom onset on 01/20/2020, visited clinic on 01/21/2020.",Shanxi (陕西),China,male,22.0,2020-01-20T00:00:00.000000,0,2020-01-21,,,2020-01-15T00:00:00.000000,2020-01-17,,1,0,0,0,,人民日报,https://www.weibo.com/2803301701/IqPMidEzh?from=page_1002062803301701_profile&wvr=6&mod=weibotime&type=comment#_rnd1579799658694 +78,,2020-01-23T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Xinjiang: male, 47, visited Wuhan on 01/15/2020, returned to Xinjiang on 01/20/2020, symptom onset around return, tested positive on 01/23/2020.",Xinjiang,China,male,47.0,,,,,,2020-01-15T00:00:00.000000,2020-01-20,,1,0,0,0,,央视新闻,https://www.weibo.com/2656274875/IqPPzg76l?ref=home&rid=3_0_202_2667274531628325700_0_0_0&type=comment#_rnd1579802134846 +79,,2020-01-23T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Xinjiang: male, 52, works in Wuhan, returned to Xinjiang on 01/19/2020, symptom onset around return, tested positive on 01/23/2020.",Xinjiang,China,male,52.0,,,,,,,2020-01-19,,1,0,0,0,,央视新闻,https://www.weibo.com/2656274875/IqPPzg76l?ref=home&rid=3_0_202_2667274531628325700_0_0_0&type=comment#_rnd1579802134846 +80,,2020-01-23T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Xinjiang: male, 53, Wuhan resident, visited Kunming on 01/16/2020, symptom onset after return.",Yunnan,China,male,53.0,,,,,,,2020-01-16,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4464047963266414? +81,,2020-01-23T00:00:00.000000,"new confirmed COVID-19 pneumonia in Tianjin, male, 46.",Tianjin,China,male,46.0,,,,,,,,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4464091609170082? +82,,2020-01-23T00:00:00.000000,"new death from COVID-19 pneumonia, female, 85, death on 01/21/2020",Hubei,China,female,85.0,,,,,,,,,0,0,1,0,,央视新闻,https://m.weibo.cn/status/4464187650423052? +83,,2020-01-23T00:00:00.000000,"new death from COVID-19 pneumonia, female, 69, symptom onset on 01/14/2020, hospitalized on 01/20/2020, death on 01/22/2020",Hubei,China,female,69.0,2020-01-14T00:00:00.000000,0,2020-01-20,,,,,,0,0,1,0,,央视新闻,https://m.weibo.cn/status/4464187650423052? +84,,2020-01-23T00:00:00.000000,"new death from COVID-19 pneumonia, male, 36, symptom onset on 01/06/2020, hospitalized on 01/09/2020, death on 01/23/2020",Hubei,China,male,36.0,2020-01-06T00:00:00.000000,0,2020-01-09,,,,,,0,0,1,0,,央视新闻,https://m.weibo.cn/status/4464187650423052? +85,,2020-01-23T00:00:00.000000,"new death from COVID-19 pneumonia, male, 73, symptom onset on 12/29/2019, hospitalized on 01/05/2020, death on 01/22/2020",Hubei,China,male,73.0,2019-12-29T00:00:00.000000,0,2020-01-05,,,,,,0,0,1,0,,央视新闻,https://m.weibo.cn/status/4464187650423052? +86,,2020-01-23T00:00:00.000000,"new death from COVID-19 pneumonia, female, 70, symptom onset on 01/15/2020, hospitalized on 01/18/2020, death on 01/22/2020",Hubei,China,female,70.0,2020-01-15T00:00:00.000000,0,2020-01-18,,,,,,0,0,1,0,,央视新闻,https://m.weibo.cn/status/4464187650423052? +87,,2020-01-23T00:00:00.000000,"new death from COVID-19 pneumonia, male, 81, symptom onset on 01/09/2020, hospitalized on 01/13/2020, death on 01/21/2020",Hubei,China,male,81.0,2020-01-09T00:00:00.000000,0,2020-01-13,,,,,,0,0,1,0,,央视新闻,https://m.weibo.cn/status/4464187650423052? +88,,2020-01-23T00:00:00.000000,"new death from COVID-19 pneumonia, female, 65, hospitalized on 01/15/2020, death on 01/23/2020",Hubei,China,female,65.0,,,2020-01-15,,,,,,0,0,1,0,,央视新闻,https://m.weibo.cn/status/4464187650423052? +89,,2020-01-23T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Liaoning: male, 42, arrived in Liaoning from Wuhan on 01/18/2020, symptom onset on 01/19/2020, hospitalized on 01/22/2020.",Liaoning,China,male,42.0,2020-01-19T00:00:00.000000,0,2020-01-22,,,,2020-01-18,,1,0,0,0,,人民日报,https://m.weibo.cn/status/4464215920401389? +90,,2020-01-24T00:00:00.000000,"First confirmed imported COVID-19 pneumonia patient in Inner Mongolia: male, 30, Wuhan resident, arrived in Inner Mongolia from Wuhan on 01/21/2020, hospitalized on 01/20/2020.",Inner Mongolia,China,male,30.0,,,2020-01-20,,,,2020-01-21,,0,1,0,0,,新浪,https://news.sina.com.cn/o/2020-01-24/doc-iihnzahk6106154.shtml +91,,2020-01-24T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Tianjin: female, 29, works in Wuhan, arrived in Tianjin from Wuhan on 01/23/2020, symptom onset on 01/24/2020 hospitalized on 01/24/2020.",Tianjin,China,female,29.0,2020-01-24T00:00:00.000000,0,2020-01-24,,,,2020-01-23,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464245485576951? +92,,2020-01-24T00:00:00.000000,"new recovered imported COVID-19 pneumonia patient in Beijing: female, returned to Beijing from Wuhan on 01/08/2020, symptom onset afterwards, recovered on 01/24/2020.",Beijing,China,female,,,,,,,,2020-01-08,,1,0,0,0,,人民日报,https://m.weibo.cn/status/4464259805726673? +93,,2020-01-24T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/24-No.1 in Shanxi: male, 49, works in Wuhan, arrived in Ankang, Shanxi from Wuhan on 01/19/2020, symptom onset on 01/19/2020 hospitalized on 01/19/2020.",Shaanxi,China,male,49.0,2020-01-19T00:00:00.000000,0,2020-01-19,,,,2020-01-19,,1,0,0,0,,人民日报,https://m.weibo.cn/status/4464334383801217? +94,,2020-01-24T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/24-No.2 in Shanxi: male, 23, studied in Wuhan, arrived in Yanan, Shanxi from Wuhan on 01/22/2020, hospitalized on 01/22/2020.",Shaanxi,China,male,23.0,,,2020-01-22,,,,2020-01-22,,1,0,0,0,,人民日报,https://m.weibo.cn/status/4464334383801217? +95,,2020-01-24T00:00:00.000000,"First recovered imported COVID-19 pneumonia patient in Shanghai: female, 56, lives in Wuhan, symptom onset on 01/10/2020 while in Wuhan, arrived in Shanghai on 01/12/2020, visit clinic on 01/15/2020.",Shanghai,China,female,56.0,2020-01-10T00:00:00.000000,0,2020-01-15,,,,2020-01-12,,0,1,0,0,,人民日报,https://m.weibo.cn/status/4464354512805408? +96,,2020-01-24T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Tianjin: male, 39, visited Wuhan recently.",Tianjin,China,male,39.0,,,,,,,,,1,0,0,0,,人民日报,https://m.weibo.cn/status/4464377615340049? +97,,2020-01-24T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: female, 39, visited Wuhan from 12/17/2019 to 01/15/2020, returned to Xishuangbannan, Yunnan on 01/15/2020, hospitalized on 01/22/2020.",Yunnan,China,female,39.0,,,2020-01-22,,,2019-12-17T00:00:00.000000,2020-01-15,,1,0,0,0,,人民日报,https://m.weibo.cn/status/4464403249912789? +98,,2020-01-24T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: female, 34, Wuhan resident, visited Lijiang, Yunnan on 01/20/2020, hospitalized on 01/23/2020.",Yunnan,China,female,34.0,,,2020-01-23,,,,2020-01-20,,0,1,0,0,,人民日报,https://m.weibo.cn/status/4464403249912789? +99,,2020-01-24T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: male, 49, resident of Huangshi, Hubei, arrived in Qunming, Yunnan on 01/21/2020, hospitalized on 01/23/2020.",Yunnan,China,male,49.0,,,2020-01-23,,,,,,0,0,0,0,,人民日报,https://m.weibo.cn/status/4464403249912789? +100,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 70, symptom onset on 01/15/2020, hospitalized on 01/19/2020, death on 01/23/2020","Wuhan, Hubei",China,male,70.0,2020-01-15T00:00:00.000000,0,2020-01-19,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +101,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: female, 76, symptom onset on 01/08/2020, death on 01/24/2020","Wuhan, Hubei",China,female,76.0,2020-01-08T00:00:00.000000,0,,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +102,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 72, symptom onset on 01/11/2020, hospitalized on 01/18/2020, death on 01/23/2020","Wuhan, Hubei",China,male,72.0,2020-01-11T00:00:00.000000,0,2020-01-18,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +103,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 79, symptom onset on 01/11/2020, hospitalized on 01/17/2020, death on 01/24/2020","Wuhan, Hubei",China,male,79.0,2020-01-11T00:00:00.000000,0,2020-01-17,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +104,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 55, symptom onset on 01/09/2020, hospitalized on 01/19/2020, death on 01/24/2020","Wuhan, Hubei",China,male,55.0,2020-01-09T00:00:00.000000,0,2020-01-19,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +105,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 87, symptom onset on 01/12/2020, hospitalized on 01/19/2020, death on 01/23/2020","Wuhan, Hubei",China,male,87.0,2020-01-12T00:00:00.000000,0,2020-01-19,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +106,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: female, 66, symptom onset on 01/09/2020, hospitalized on 01/19/2020, death on 01/21/2020","Wuhan, Hubei",China,female,66.0,2020-01-09T00:00:00.000000,0,2020-01-19,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +107,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 58, symptom onset on 01/03/2020, hospitalized on 01/18/2020, death on 01/24/2020","Wuhan, Hubei",China,male,58.0,2020-01-03T00:00:00.000000,0,2020-01-18,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +108,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 66, hospitalized on 01/11/2020, death on 01/21/2020","Wuhan, Hubei",China,male,66.0,,,2020-01-11,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +109,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 78, symptom onset on 01/13/2020, hospitalized on 01/23/2020, death on 01/24/2020","Wuhan, Hubei",China,male,78.0,2020-01-13T00:00:00.000000,0,2020-01-23,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +110,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 67, symptom onset on 01/10/2020, hospitalized on 01/15/2020, death on 01/24/2020","Wuhan, Hubei",China,male,67.0,2020-01-10T00:00:00.000000,0,2020-01-15,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +111,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 65, symptom onset on 01/12/2020, hospitalized on 01/16/2020, death on 01/23/2020","Wuhan, Hubei",China,male,65.0,2020-01-12T00:00:00.000000,0,2020-01-16,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +112,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: male, 58, symptom onset on 12/23/2019, hospitalized on 01/01/2020, death on 01/23/2020","Wuhan, Hubei",China,male,58.0,2019-12-23T00:00:00.000000,0,2020-01-01,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +113,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: female, 67, symptom onset on 01/05/2020, hospitalized on 01/12/2020, death on 01/23/2020","Wuhan, Hubei",China,female,67.0,2020-01-05T00:00:00.000000,0,2020-01-12,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +114,,2020-01-24T00:00:00.000000,"Death from COVID-19 pneumonia in Wuhan: female, 82, symptom onset on 01/10/2020, hospitalized on 01/17/2020, death on 01/23/2020","Wuhan, Hubei",China,female,82.0,2020-01-10T00:00:00.000000,0,2020-01-17,,,,,,0,1,1,0,,央视新闻,https://m.weibo.cn/status/4464497211305006? +115,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Wuhan: female, 49, returned to Guangxi from Wuhan on 01/15/2020, symptom onset on 01/21/2020, hospitalized on 01/22/2020.","Hechi, Guangxi",China,female,49.0,2020-01-21T00:00:00.000000,0,2020-01-22,,,,2020-01-15,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464573899858585? +116,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Wuhan: female, 2, returned to Guangxi from Wuhan on 01/21/2020, symptom onset on 01/22/2020, hospitalized on 01/23/2020.","Hechi, Guangxi",China,female,2.0,2020-01-22T00:00:00.000000,0,2020-01-23,,,,2020-01-21,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464573899858585? +117,,2020-01-25T00:00:00.000000,"new recovered imported COVID-19 pneumonia patient in Beijing: male, returned to Beijing from Wuhan on 01/08/2020, symptom onset afterwards, recovered on 01/25/2020.",Beijing,China,male,,,,,,,,2020-01-08,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464576223073059? +118,,2020-01-21T00:00:00.000000,"confirmed imported COVID-19 pneumonia patient No.1 in Tianjin: female, 59, travel history to Wuhan, symptom onset on 01/14/2020, confirmed on 01/21/2020",Tianjin,China,female,59.0,2020-01-14T00:00:00.000000,0,,,,,,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463235401268457? +119,,2020-01-21T00:00:00.000000,"confirmed imported COVID-19 pneumonia patient No.2 in Tianjin: male, 57, works on Tianjin high speed railroad, travel history to Wuhan, symptom onset on 01/18/2020, confirmed on 01/21/2020",Tianjin,China,male,57.0,2020-01-18T00:00:00.000000,0,,,,,,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463235401268457? +120,,2020-01-22T00:00:00.000000,"confirmed imported COVID-19 pneumonia patient No.3 in Tianjin: female, 68, works in Wuhan, symptom onset on 01/14/2020, confirmed on 01/21/2020",Tianjin,China,female,68.0,2020-01-14T00:00:00.000000,0,,,,,,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463540671056698? +121,,2020-01-22T00:00:00.000000,"confirmed imported COVID-19 pneumonia patient No.4 in Tianjin: male, 40, works in Wuhan, symptom onset on 01/14/2020, confirmed on 01/21/2020",Tianjin,China,male,40.0,2020-01-14T00:00:00.000000,0,,,,,,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4463540671056698? +122,,2020-01-23T00:00:00.000000,"confirmed imported COVID-19 pneumonia patient No.5 in Tianjin: male, 46, works on Tianjin high speed railroad, symptom onset on 01/15/2020, visit clinic on 01/17/2020, confirmed on 01/23/2020",Tianjin,China,male,46.0,2020-01-15T00:00:00.000000,0,2020-01-17,,,,,,0,0,0,0,,央视新闻,https://m.weibo.cn/search?containerid=231522type%3D1%26t%3D10%26q%3D%23%E5%A4%A9%E6%B4%A5%E7%B4%AF%E8%AE%A1%E7%A1%AE%E8%AF%8A6%E4%BE%8B%23&extparam=%23%E5%A4%A9%E6%B4%A5%E7%B4%AF%E8%AE%A1%E7%A1%AE%E8%AF%8A6%E4%BE%8B%23&luicode=10000011&lfid=1076032803301701 +123,,2020-01-24T00:00:00.000000,"confirmed imported COVID-19 pneumonia patient No.6 in Tianjin: male, 56, works on Tianjin high speed railroad, symptom onset on 01/19/2020, visit clinic on 01/23/2020, confirmed on 01/24/2020.",Tianjin,China,male,56.0,2020-01-19T00:00:00.000000,0,2020-01-23,,,,,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4464245485576951?, https://m.weibo.cn/status/4464629113599955? +124,,2020-01-24T00:00:00.000000,"confirmed imported COVID-19 pneumonia patient No.7 in Tianjin: female, 29, works in Wuhan, visited Tianjin on 01/23/2020, symptom onset on 01/24/2020, visit clinic on 01/24/2020, confirmed on 01/24/2020",Tianjin,China,female,29.0,2020-01-24T00:00:00.000000,0,2020-01-24,,,,2020-01-23,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464245485576951? +125,,2020-01-24T00:00:00.000000,"confirmed imported COVID-19 pneumonia patient No.8 in Tianjin: male, 29, works on Tianjin high speed railroad, visited Wuhan from 01/19/2020 to 01/22/2020. and symptom onset on 01/23/2020, hospitalized on 01/24/2020, confirmed on 01/24/2020.",Tianjin,China,male,29.0,2020-01-23T00:00:00.000000,0,2020-01-24,,,2020-01-19T00:00:00.000000,2020-01-22,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464377615340049? +126,,2020-01-25T00:00:00.000000,"confirmed imported COVID-19 pneumonia patient No.9 in Tianjin: male, 57, return to Tianjin from Wuhan on 01/17/2020, symptom onset on 01/24/2020, visited clinic on 01/24/2020, hospitalized on 01/25/2020. Have close contact with patient No. 3, confirmed on 01/25/2020.",Tianjin,China,male,57.0,2020-01-24T00:00:00.000000,,2020-01-24,,,,2020-01-17,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464629113599955? +127,,2020-01-25T00:00:00.000000,"confirmed imported COVID-19 pneumonia patient No.10 in Tianjin: male, 30, Beijing resident, visited Wuhan from 01/18/2020 to 01/20/2020, arrived in Tianjin on 01/24/2020, symptom onset on 01/24/2020, visited fever clinic on 01/24/2020, confirmed on 01/25/2020",Tianjin,China,male,30.0,2020-01-24T00:00:00.000000,0,2020-01-24,,,2020-01-18T00:00:00.000000,2020-01-20,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464681265155125? +128,,2020-01-25T00:00:00.000000,"confirmed imported COVID-19 pneumonia patient in Gansu: female, 33, works in Wuhan, arrived in Gansu on 01/18/2020, symptom onset on 01/18/2020, visit clinic on 01/23/2020, hospitalized on 01/23/2020.",Gansu,China,female,33.0,2020-01-18T00:00:00.000000,0,2020-01-23,,,,2020-01-18,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464630291922122? +129,,2020-01-25T00:00:00.000000,"confirmed imported COVID-19 pneumonia patient in Gansu: female, 20, lives in Wuhan, arrived in Gansu on 01/18/2020, symptom onset on 01/19/2020, visit clinic on 01/24/2020, hospitalized on 01/24/2020.",Gansu,China,female,20.0,2020-01-19T00:00:00.000000,0,2020-01-24,,,,2020-01-18,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4464630291922122? +130,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/25-No.1 in Shaanxi: female, 24, works in Wuhan, symptom onset on 01/19/2020, returned to Shanxi from Wuhan on 01/21/2020, confirmed on 01/25/2020",Shaanxi,China,female,24.0,2020-01-19T00:00:00.000000,0,,,,,2020-01-21,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464630291922122? +131,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/25-No.2 in Shaanxi: male, 28, works in Wuhan, visited Shanxi from Wuhan on 01/20/2020, symptom onset on 01/21/2020, visited clinic on 01/23/2020, confirmed on 01/25/2020",Shaanxi,China,male,28.0,2020-01-21T00:00:00.000000,0,2020-01-23,,,,2020-01-20,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464630291922122? +132,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/25-No.3 in Shaanxi: male, 41, resident of Ankang, Shanxi, visited Wuhan from 01/06/2020 to 01/07/2020, symptom onset on 01/14/2020, visited clinic on 01/23/2020, confirmed on 01/25/2020",Shaanxi,China,male,41.0,2020-01-14T00:00:00.000000,0,2020-01-23,,,2020-01-06T00:00:00.000000,2020-01-07,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464630291922122? +133,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/25-No.4 in Shaanxi: male, 46, Wuhan resident, arrived in Shanxi on 01/20/2020, symptom onset on 01/23/2020, confirmed on 01/25/2020",Shaanxi,China,male,46.0,2020-01-23T00:00:00.000000,0,,,,,2020-01-20,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4464630291922122? +134,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/25-No.5 in Shaanxi: female, 45, wife of patient 01/25-No.4 Wuhan resident, arrived in Shanxi on 01/20/2020, symptom onset on 01/23/2020, confirmed on 01/25/2020",Shaanxi,China,female,45.0,2020-01-23T00:00:00.000000,0,,,,,2020-01-20,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4464630291922122? +135,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/25-No.6 in Shaanxi: female, 9, daughter of patient 01/25-No.4 and 01/25-No.5, Wuhan resident, arrived in Shanxi on 01/20/2020, symptom onset on 01/21/2020, confirmed on 01/25/2020",Shaanxi,China,female,9.0,2020-01-21T00:00:00.000000,0,,,,,2020-01-20,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4464630291922122? +136,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/25-No.7 in Shaanxi: male, 40, Xian resident, works in Wuhan, arrived in Shanxi from Wuhan on 01/23/2020, symptom onset on 01/23/2020, visit clinic on 01/23/2020, confirmed on 01/25/2020",Shaanxi,China,male,40.0,2020-01-23T00:00:00.000000,0,2020-01-23,,,,2020-01-23,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464630291922122? +137,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/25-No.8 in Shaanxi: male, 28, Xian resident, visited Wuhan from 01/09/2020 to 01/22/2020, symptom onset on 01/20/2020, visit clinic on 01/23/2020, confirmed on 01/25/2020",Shaanxi,China,male,28.0,2020-01-20T00:00:00.000000,0,2020-01-23,,,2020-01-09T00:00:00.000000,2020-01-22,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464630291922122? +138,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/25-No.9 in Shaanxi: male, 27, Xianyang resident, works in Wuhan, returned to Shanxi on 01/18/2020, symptom onset on 01/21/2020, visit clinic on 01/21/2020, confirmed on 01/25/2020",Shaanxi,China,male,27.0,2020-01-21T00:00:00.000000,0,2020-01-21,,,,2020-01-18,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464630291922122? +139,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/25-No.10 in Shaanxi: male, 15, Shangluo resident, symptom onset in Wuhan on 01/21/2020, returned to Shanxi and visit clinic on 01/23/2020, confirmed on 01/25/2020",Shaanxi,China,male,15.0,2020-01-21T00:00:00.000000,0,2020-01-23,,,,2020-01-23,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464630291922122? +140,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: female, 42, Works in Wuhan, returned to Yunnan on 01/18/2020, visited clinic on 01/23/2020",Yunnan,China,female,42.0,,,2020-01-23,,,,2020-01-18,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464694486320817? +141,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: male, 24, Works in Wuhan, returned to Yunnan on 01/21/2020, visited clinic on 01/22/2020",Yunnan,China,male,24.0,,,2020-01-22,,,,2020-01-21,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464694486320817? +142,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: female, 32, lives in Wuhan, returned to Yunnan on 01/16/2020, visited clinic on 01/24/2020",Yunnan,China,female,32.0,,,2020-01-24,,,,2020-01-16,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4464694486320817? +143,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: male, 34, resident of Wuhan, arrived in Yunnan on 01/20/2020, visited clinic on 01/23/2020",Yunnan,China,male,34.0,,,2020-01-23,,,,2020-01-20,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4464694486320817? +144,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: male, 63, resident of Wuhan, arrived in Yunnan on 01/21/2020, visited clinic on 01/23/2020",Yunnan,China,male,63.0,,,2020-01-23,,,,2020-01-21,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4464694486320817? +145,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: male, 58, resident of Guangdong, visited Wuhan from 01/09/2020 to 01/20/2020, visited clinic on 01/24/2020",Yunnan,China,male,58.0,,,2020-01-24,,,2020-01-09T00:00:00.000000,2020-01-20,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464694486320817? +146,,2020-01-21T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient (medical doctor No.1) in Beijing: male, traveled to Wuhan from 01/08/2020 to 01/16/2020, symptom onset on 01/16/2020, visited clinic on 01/20/2020, confirmed on 01/21/2020",Beijing,China,male,,2020-01-16T00:00:00.000000,0,2020-01-20,,,2020-01-08T00:00:00.000000,2020-01-16,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464865911441959? +147,,2020-01-21T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient (medical doctor No.2) in Beijing: male, traveled to Wuhan from 01/10/2020 to 01/11/2020, symptom onset on 01/14/2020, visited clinic on 01/20/2020, confirmed on 01/21/2020",Beijing,China,male,,2020-01-14T00:00:00.000000,0,2020-01-20,,,2020-01-10T00:00:00.000000,2020-01-11,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464865911441959? +148,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient (medical doctor No.3) in Beijing: male, sit next to medical doctor No.2 during a conference on 01/14/2020, symptom onset on 01/18/2020, visited clinic on 01/20/2020, confirmed on 01/25/2020",Beijing,China,male,,2020-01-18T00:00:00.000000,0,2020-01-20,,,2020-01-14T00:00:00.000000,2020-01-14,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4464865911441959? +149,,2020-01-25T00:00:00.000000,"new confirmed COVID-19 pneumonia patient in Xinjiang: male, 49, have contacted friend from Wuhan before infection, symptom onset on 01/21/2020, visit clinic on 01/21/2020, confirmed on 01/25/2020",Xinjiang,China,male,49.0,2020-01-21T00:00:00.000000,0,2020-01-21,,,,,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4464913298579676 +150,,2020-01-25T00:00:00.000000,"new confirmed COVID-19 pneumonia patient in Ningxia: male, 33, visited Wuhan from 01/11/2020 to 01/22/2020, returned to Ningxia on 01/22/2020, symptom onset on 01/22/2020, hospitalized on 01/24/2020, confirmed on 01/25/2020.",Ningxia,China,male,33.0,2020-01-22T00:00:00.000000,0,2020-01-24,,,2020-01-11T00:00:00.000000,2020-01-22,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464922761558095? +151,,2020-01-25T00:00:00.000000,"confirmed COVID-19 pneumonia patient No.11 in Tianjin: female, 55, symptom onset on 01/23/2020, hospitalized on 01/23/2020, confirmed on 01/26/2020",Tianjin,China,female,55.0,2020-01-23T00:00:00.000000,0,2020-01-23,,,,,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4464681265155125? +152,,2020-01-25T00:00:00.000000,"confirmed COVID-19 pneumonia patient No.12 in Tianjin: female, 79, symptom onset on 01/24/2020, hospitalized on 01/24/2020, confirmed on 01/26/2020",Tianjin,China,female,79.0,2020-01-24T00:00:00.000000,0,2020-01-24,,,,,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4464681265155125? +153,,2020-01-25T00:00:00.000000,"confirmed COVID-19 pneumonia patient No.13 in Tianjin: female, 19, symptom onset on 01/19/2020, hospitalized on 01/20/2020, confirmed on 01/26/2020",Tianjin,China,female,19.0,2020-01-19T00:00:00.000000,0,2020-01-20,,,,,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4464681265155125? +154,,2020-01-25T00:00:00.000000,"new confirmed COVID-19 pneumonia patient in Macau: female, 58, Wuhan resident, visited Macao on 01/23/2020, symptom onset on 01/23/2020, hospitalized on 01/23/2020, confirmed on 01/26/2020",Macau,China,female,58.0,2020-01-23T00:00:00.000000,0,2020-01-23,,,,2020-01-23,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4464933322145082? +155,,2020-01-25T00:00:00.000000,"new confirmed COVID-19 pneumonia patient in Macau: female, 39, Wuhan resident, visited Macao on 01/22/2020, symptom onset on 01/25/2020, hospitalized on 01/25/2020, confirmed on 01/26/2020",Macau,China,female,39.0,2020-01-25T00:00:00.000000,0,2020-01-25,,,,2020-01-22,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4464933322145082? +156,,2020-01-25T00:00:00.000000,"new confirmed COVID-19 pneumonia patient in Macau: female, 21, Wuhan resident, visited Macao on 01/23/2020, symptom onset on 01/25/2020, hospitalized on 01/25/2020, confirmed on 01/26/2020",Macau,China,female,21.0,2020-01-25T00:00:00.000000,0,2020-01-25,,,,2020-01-23,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4464933322145082? +157,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/26-No.1 in Shaanxi: female, 30, Xian resident, close contact with 01/23-No.2 symptom onset during quarantine, confirmed on 01/26/2020",Shaanxi,China,female,30.0,,,,,,,,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4464954491480577? +158,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/26-No.2 in Shaanxi: female, 64, healthcare worker in Wuhan, symptom onset on 01/10/2020 in Wuhan, arrived in Xian on 01/14/2020, visited clinic on 01/20/2020, confirmed on 01/26/2020",Shaanxi,China,female,64.0,2020-01-10T00:00:00.000000,0,2020-01-20,,,,2020-01-14,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464954491480577? +159,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/26-No.3 in Shaanxi: male, 44, lives in Jingzhou, Hubei. symptom onset on 01/18/2020, visited Wuhan from 01/20/2020 to 01/21/2020, visited clinic on 01/24/2020, confirmed on 01/26/2020.",Shaanxi,China,male,44.0,2020-01-18T00:00:00.000000,0,2020-01-24,,,2020-01-20T00:00:00.000000,2020-01-21,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4464954491480577? +160,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/26-No.4 in Shaanxi: female, 70, Wuhan resident. have contact with 01/25-No.4, 01/25-No.5, 01/25-No.6, symptom onset on 01/23/2020, confirmed on 01/26/2020.",Shaanxi,China,female,70.0,2020-01-23T00:00:00.000000,0,,,,,,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4464954491480577? +161,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/26-No.5 in Shaanxi: female, 52, Tongchuan, Shanxi resident. have contact with 01/26-No.4, confirmed on 01/26/2020.",Shaanxi,China,female,52.0,,,,,,,2020-01-23,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4464954491480577? +162,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/26-No.6 in Shaanxi: female, 32, Xian, Shanxi resident. visited Hangzhou from 01/12/2020 to 01/14/2020, have contact with patient from Wuhan while in Hangzhou, returned to Xihan on 01/14/2020, symptom onset on 01/17/2020, visited clinic on 01/22/2020, confirmed on 01/26/2020.",Shaanxi,China,female,32.0,2020-01-17T00:00:00.000000,0,2020-01-22,,,2020-01-12T00:00:00.000000,2020-01-14,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4464954491480577? +163,,2020-01-25T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/26-No.7 in Shaanxi: male, 33, Xian, Shanxi resident. close contact with 01/23-No.2 symptom onset during quarantine, confirmed on 01/26/2020",Shaanxi,China,male,33.0,,,,,,,,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4464954491480577? +164,,2020-01-26T00:00:00.000000,"confirmed COVID-19 pneumonia patient No.14 in Tianjin: male, 71, Wuhan resident, visited Malaysia from 01/19/2020 to 01/25/2020, arrived in Tianjin on 01/25/2020, symptom onset on 01/25/2020, hospitalized on 01/25/2020, confirmed on 01/26/2020",Tianjin,China,male,71.0,2020-01-25T00:00:00.000000,0,2020-01-25,,,,2020-01-19,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4465066470424159? +165,,2020-01-26T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: male, 31, Wuhan resident, visited Kunming, Yunnan on 01/20/2020, screened and isolated by local health authorities on 01/24/2020, hospitalized on 01/24/2020",Yunnan,China,male,31.0,,,2020-01-24,,,,2020-01-20,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4465089497103961? +166,,2020-01-26T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: female, 48, Wuhan resident, visited Tengchong, Yunnan on 01/22/2020, screened and isolated by local health authorities on 01/23/2020, hospitalized on 01/24/2020",Yunnan,China,female,48.0,,,2020-01-24,,,,2020-01-22,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4465089497103961? +167,,2020-01-26T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: female, 19, works in Wuhan, visited Kunming, Yunnan on 01/15/2020, hospitalized on 01/24/2020",Yunnan,China,female,19.0,,,2020-01-24,,,,2020-01-15,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4465089497103961? +168,,2020-01-26T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: female, 68, Wuhan resident, left Wuhan on 01/20/2020, arrived in Ruili, Yunnan on 01/23/2020, hospitalized on 01/24/2020",Yunnan,China,female,68.0,,,2020-01-24,,,,2020-01-20,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4465089497103961? +169,,2020-01-26T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient in Yunnan: female, 68, Wuhan resident, left Wuhan on 01/20/2020, arrived in Ruili, Yunnan on 01/23/2020, hospitalized on 01/24/2020",Yunnan,China,male,71.0,,,2020-01-24,,,,2020-01-20,,0,1,0,0,,央视新闻,https://m.weibo.cn/status/4465089497103961? +170,,2020-01-27T00:00:00.000000,,Beijing,China,male,35.0,2020-01-18T00:00:00.000000,0,2020-01-21,,,,,,0,,0,0,,央视新闻,https://m.weibo.cn/status/4465361728673224? +171,,2020-01-27T00:00:00.000000,,Beijing,China,female,4.0,2020-01-18T00:00:00.000000,0,2020-01-21,,,,,,0,,0,0,,央视新闻,https://m.weibo.cn/status/4465361728673224? +172,,2020-01-27T00:00:00.000000,,Beijing,China,male,38.0,2020-01-22T00:00:00.000000,0,2020-01-25,,,,,,1,,0,0,,央视新闻,https://m.weibo.cn/status/4465361728673224? +173,,2020-01-27T00:00:00.000000,,Beijing,China,female,69.0,2020-01-10T00:00:00.000000,0,2020-01-22,,,,,,1,,0,0,,央视新闻,https://m.weibo.cn/status/4465361728673224? +174,,2020-01-26T00:00:00.000000,"new confirmed COVID-19 pneumonia patient No.15 in Tianjin: male, 50, Tianjin resident, arrived in Tianjin from Wuhan on 01/23/2020, symptom onset on 01/25/2020, visited clinic on 01/26/2020, confirmed on 01/26/2020",Tianjin,China,male,50.0,2020-01-25T00:00:00.000000,0,2020-01-26,,,,2020-01-23,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4465317616829488? +175,,2020-01-26T00:00:00.000000,"new confirmed COVID-19 pneumonia patient No.16 in Tianjin: male, 78, Tianjin resident, close contact with patient No. 5, fever on 01/21/2020, visited clinic on 01/23/2020 and 01/24/2020 seperately, tested negative, fever again on 01/26/2020, visited clinic on 01/26/2020, tested positive.",Tianjin,China,male,78.0,2020-01-21T00:00:00.000000,0,2020-01-23,,,,,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4465317616829488? +176,,2020-01-26T00:00:00.000000,"new confirmed COVID-19 pneumonia patient No.17 in Tianjin: male, 49, Tianjin resident, close contact with patient No. 5, fever on 01/26/2020, visited clinic on 01/26/2020",Tianjin,China,male,49.0,2020-01-26T00:00:00.000000,0,2020-01-26,,,,,,0,0,0,0,,央视新闻,https://m.weibo.cn/status/4465317616829488? +177,,2020-01-26T00:00:00.000000,"new confirmed COVID-19 pneumonia patient in Guizhou: male, Guizhou resident, 34, travel history to Wuhan",Guizhou,China,male,34.0,,,,,,,,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4465268958842261? +178,,2020-01-26T00:00:00.000000,"new confirmed COVID-19 pneumonia patient in Jilin: male, Jilin resident, stopped in Wuhan on 01/19/2020 (connection flight), symptom onset on 01/25/2020, visited hospital on 01/25/2020",Jilin,China,male,,2020-01-25T00:00:00.000000,0,2020-01-25,,,2020-01-19T00:00:00.000000,2020-01-19,,1,0,0,0,,央视新闻,https://m.weibo.cn/status/4465271530230929? +179,,2020-01-26T00:00:00.000000,"new confirmed COVID-19 pneumonia patient in Yunnan: female, 55, Wuhan resident, arrived in Yunnan on 01/22/2020, hospitalized on 01/24/2020.",Yunnan,China,female,55.0,,,2020-01-24,,,,2020-01-22,,0,1,0,0,,人民日报,https://m.weibo.cn/status/4465271752620554? +180,,2020-01-26T00:00:00.000000,"new confirmed COVID-19 pneumonia patient in Yunnan: female, 36, Wuhan resident, arrived in Yunnan on 01/22/2020, hospitalized on 01/24/2020.",Yunnan,China,female,36.0,,,2020-01-24,,,,2020-01-22,,0,1,0,0,,人民日报,https://m.weibo.cn/status/4465271752620554? +181,,2020-01-26T00:00:00.000000,"new confirmed COVID-19 pneumonia patient in Yunnan: male, 65, Wuhan resident, arrived in Yunnan on 01/13/2020, hospitalized on 01/21/2020.",Yunnan,China,male,65.0,,,2020-01-21,,,,2020-01-13,,0,1,0,0,,人民日报,https://m.weibo.cn/status/4465271752620554? +182,,2020-01-26T00:00:00.000000,"new recovered COVID-19 pneumonia patient in Jiangxi: male, 38, Jiangxi resident, visited Wuhan from 01/03/2020 to 01/05/2020, symptom onset afterwards, hospitalized and confirmed on 01/23/2020",Jiangxi,China,male,38.0,,,2020-01-23,,,2020-01-03T00:00:00.000000,2020-01-05,,1,0,0,0,,人民日报,https://m.weibo.cn/status/4465313322604123? +183,,2020-01-27T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/27-No.1 in Shaanxi: female, 36, Wuhan resident, flight to Xian, Shanxi on 01/21/2020, symptom onset on the plane, visited hospital on 01/25/2020, confirmed on 01/27/2020.",Shaanxi,China,female,36.0,2020-01-21T00:00:00.000000,0,2020-01-25,,,,2020-01-21,,0,1,0,0,,Health Commission of Shanxi,http://sxwjw.shaanxi.gov.cn/art/2020/1/27/art_9_67483.html +184,,2020-01-27T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/27-No.2 in Shaanxi: male, 18, student in Wuhan and resident in Yanan, Shanxi, symptom onset on 01/20/2020, flight to Xian, Shanxi on 01/22/2020 from Wuhan, visit hosipital on 01/23/2020, confirmed on 01/27/2020",Shaanxi,China,male,18.0,2020-01-20T00:00:00.000000,0,2020-01-23,,,,2020-01-22,,0,1,0,0,,Health Commission of Shanxi,http://sxwjw.shaanxi.gov.cn/art/2020/1/27/art_9_67483.html +185,,2020-01-27T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/27-No.3 in Shaanxi: male, 50, resident of Hanzhong, Wuhan, visited Wuhan from 01/13/2020 to 01/17/2020, symptom onset on 01/18/2020, visit clinic on 01/22/2020, confirmed on 01/27/2020",Shaanxi,China,male,50.0,2020-01-18T00:00:00.000000,0,2020-01-22,,,2020-01-13T00:00:00.000000,2020-01-17,,1,0,0,0,,Health Commission of Shanxi,http://sxwjw.shaanxi.gov.cn/art/2020/1/27/art_9_67483.html +186,,2020-01-27T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/27-No.4 in Shaanxi: female, 40, wife of patient 01/27-No.3, resident of Hanzhong, Wuhan, visited Wuhan from 01/13/2020 to 01/17/2020, symptom onset on 01/18/2020, visit clinic on 01/22/2020, confirmed on 01/27/2020",Shaanxi,China,female,40.0,2020-01-18T00:00:00.000000,0,2020-01-22,,,2020-01-13T00:00:00.000000,2020-01-17,,1,0,0,0,,Health Commission of Shanxi,http://sxwjw.shaanxi.gov.cn/art/2020/1/27/art_9_67483.html +187,,2020-01-27T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/27-No.5 in Shaanxi: female, 63, lives in Wuhan, symptom onset on 01/10/2020, visited Xian, Shanxi on 01/15/2020, visit clinic on 01/24/2020, confirmed on 01/27/2020",Shaanxi,China,female,63.0,2020-01-10T00:00:00.000000,0,2020-01-24,,,,2020-01-15,,0,1,0,0,,Health Commission of Shanxi,http://sxwjw.shaanxi.gov.cn/art/2020/1/27/art_9_67483.html +188,,2020-01-27T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/27-No.6 in Shaanxi: female, 47, Xian resident, lives in Wuhan, symptom onset on 01/21/2020 in Wuhan, visited Xian, Shanxi on 01/23/2020, visit clinic on 01/23/2020, confirmed on 01/27/2020",Shaanxi,China,female,47.0,2020-01-21T00:00:00.000000,0,2020-01-23,,,,2020-01-23,,0,1,0,0,,Health Commission of Shanxi,http://sxwjw.shaanxi.gov.cn/art/2020/1/27/art_9_67483.html +189,,2020-01-27T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/27-No.7 in Shaanxi: female, 42, Xian resident, lives in Xian, visited Wuhan on 01/19/2020, symptom onset on 01/23/2020 in Xiaogan, Hubei, visited clinic there, returned to Xian, Shanxi on 01/24/2020, visit clinic on 01/24/2020, confirmed on 01/27/2020.",Shaanxi,China,female,42.0,2020-01-23T00:00:00.000000,0,2020-01-24,,,2020-01-19T00:00:00.000000,2020-01-19,,1,0,0,0,,Health Commission of Shanxi,http://sxwjw.shaanxi.gov.cn/art/2020/1/27/art_9_67483.html +190,,2020-01-27T00:00:00.000000,"new confirmed COVID-19 pneumonia patient 01/27-No.8 in Shaanxi: male, 48, lives in Xian, symptom onset on 01/17/2020, visited clinic on 01/19/2020, confirmed on 01/27/2020",Shaanxi,China,male,48.0,2020-01-17T00:00:00.000000,0,2020-01-19,,,,,,0,0,0,0,,Health Commission of Shanxi,http://sxwjw.shaanxi.gov.cn/art/2020/1/27/art_9_67483.html +191,,2020-01-27T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/27-No.9 in Shaanxi: male, 39, return from Wuhan on 01/22/2020, lives in Xian, symptom onset on 01/23/2020, visited clinic on 01/23/2020, confirmed on 01/27/2020.",Shaanxi,China,male,39.0,2020-01-23T00:00:00.000000,0,2020-01-23,,,,2020-01-22,,1,0,0,0,,Health Commission of Shanxi,http://sxwjw.shaanxi.gov.cn/art/2020/1/27/art_9_67483.html +192,,2020-01-27T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/27-No.10 in Shaanxi: female, 41, return from Wuhan on 01/18/2020, lives in Xian, symptom onset on 01/22/2020, visited clinic on 01/22/2020, confirmed on 01/27/2020.",Shaanxi,China,female,41.0,2020-01-22T00:00:00.000000,0,2020-01-22,,,,2020-01-18,,1,0,0,0,,Health Commission of Shanxi,http://sxwjw.shaanxi.gov.cn/art/2020/1/27/art_9_67483.html +193,,2020-01-27T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/27-No.11 in Shaanxi: male, 31, lives in Hubei, symptom onset at the end of December, visited Shanxi on 01/21/2020, visited clinic on 01/21/2020, confirmed on 01/27 2020.",Shaanxi,China,male,31.0,,,2020-01-21,,,,2020-01-21,,0,1,0,0,,Health Commission of Shanxi,http://sxwjw.shaanxi.gov.cn/art/2020/1/27/art_9_67483.html +194,,2020-01-27T00:00:00.000000,"new confirmed imported COVID-19 pneumonia patient 01/27-No.12 in Shaanxi: male, 27, works in Wuhan, visited Shanxi on 01/18/2020, symptom onset on 01/22/2020, visit hospital on 01/24/2020, confirmed on 01/27/2020",Shaanxi,China,male,27.0,2020-01-22T00:00:00.000000,0,2020-01-24,,,,2020-01-18,,0,1,0,0,,Health Commission of Shanxi,http://sxwjw.shaanxi.gov.cn/art/2020/1/27/art_9_67483.html +195,,2020-01-27T00:00:00.000000,"new recovered COVID-19 pneumonia patient in Hubei, Huanggang: female, 28, HCW, symptom onset on 01/07/2020, hospitalized on 01/10/2020, recovered on 01/23/2020.",Hubei,China,female,28.0,2020-01-07T00:00:00.000000,0,2020-01-10,,,,,,0,1,0,1,"feaver, cough, difficult in breathing",人民日报,https://m.weibo.cn/status/4465382079294013? +196,,2020-01-27T00:00:00.000000,"new recovered COVID-19 pneumonia patient in Hubei, Huanggang: female, 51, hospitalized on 01/11/2020, recovered on 01/22/2020.",Hubei,China,female,51.0,,,2020-01-11,,,,,,0,1,0,1,"feaver, cough, difficult in breathing",人民日报,https://m.weibo.cn/status/4465382079294013? +197,,2020-01-27T00:00:00.000000,"new recovered COVID-19 pneumonia patient in Shandong, male, 37, resident of Wuhan, works in Qingdao, Shandong, symptom onset on 01/17/2020, hospitalized on 01/17/2020, recovered on 01/21/2020.",Shandong,China,male,37.0,,,2020-01-17,,,,,,0,1,0,1,fever,人民日报,https://m.weibo.cn/status/4465385308652598? +198,1,2020-01-25T00:00:00.000000,"new confirmed COVID-19 patient in Bordeaux, France: 1/25-No.1, male, 48, French citizen of Chinese origin, visited Wuhan as part of business trip, took plane from Wuhan to Netherlands to France on 1/22/2020, symptom onset on 1/23/2020, went to clinic 1/23/2020, confirmed 1/24/2020. report date 1/25/2020.",Bordeaux,France,male,48.0,2020-01-23T00:00:00.000000,0,2020-01-23,,,,2020-01-22,1,1,0,0,0,,CNBC,https://www.cnbc.com/2020/01/25/reuters-america-update-2-coronavirus-patients-arrived-in-france-without-symptoms.html +199,2,2020-01-25T00:00:00.000000,"new confirmed COVID-19 patient in Paris, France: male, 31, Wuhan resident, arrived in France 01/18/2020, symptom onset on 01/19/2020, hospitalized 01/25/2020.",Paris,France,male,31.0,2020-01-19T00:00:00.000000,0,2020-01-25,,,,2020-01-18,1,0,1,0,1581465600,,CGTN,https://newseu.cgtn.com/news/2020-01-26/Coronavirus-patients-treated-in-hospital-in-France-doing-well--Nyjdge1t96/index.html +200,3,2020-01-25T00:00:00.000000,"new confirmed COVID-19 patient in Paris, France: female, 30, Wuhan resident, arrived in France 01/18/2020, symptom onset on 01/23/2020, hospitalized 01/25/2020.",Paris,France,female,30.0,2020-01-23T00:00:00.000000,0,2020-01-25,,,,2020-01-19,1,0,1,0,1581465600,,CGTN,https://newseu.cgtn.com/news/2020-01-26/Coronavirus-patients-treated-in-hospital-in-France-doing-well--Nyjdge1t96/index.html +201,4,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Paris, France: 1/28-No.1, male, 80, hospitalized in Paris on 1/25/2020 for fever, ""severe"", visiting France from Hubei province, arrived on 1/23/2020",Paris,France,male,80.0,2020-01-25T00:00:00.000000,1,2020-01-25,,,,2020-01-23,1,0,1,1581638400,0,,The Local,https://www.thelocal.de/20200128/number-of-german-coronavirus-patients-jumps-to-four +202,5,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Paris, France: female, daughter of 1/28-No.1, hospitalized, arrived in Paris 1/23/2020",Paris,France,female,,,,,,,,2020-01-23,1,1,0,0,0,,The Local,https://www.thelocal.fr/20200131/coronavirus-in-france-what-you-need-to-know +203,6,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Paris, France: doctor infected by patient 1/25-No.1, hospitalized",Paris,France,,,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.fr/20200131/coronavirus-in-france-what-you-need-to-know +204,7,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in France: 9, in contact with Briton who had been in Singapore and was positive",France,France,,9.0,,,,,,2020-01-24T00:00:00.000000,2020-01-28,,0,0,0,0,,Bloomberg,https://www.bloomberg.com/news/articles/2020-02-08/five-britons-on-ski-holiday-in-french-alps-contract-coronavirus +205,8,2020-02-08T00:00:00.000000,new confirmed COVID-19 patient in France: in contact with Briton who had been in Singapore and was positive,France,France,,,,,,,,2020-01-24T00:00:00.000000,2020-01-28,,0,0,0,0,,Bloomberg,https://www.bloomberg.com/news/articles/2020-02-08/five-britons-on-ski-holiday-in-french-alps-contract-coronavirus +206,9,2020-02-08T00:00:00.000000,new confirmed COVID-19 patient in France: in contact with Briton who had been in Singapore and was positive,France,France,,,,,,,,2020-01-24T00:00:00.000000,2020-01-28,,0,0,0,0,,Bloomberg,https://www.bloomberg.com/news/articles/2020-02-08/five-britons-on-ski-holiday-in-french-alps-contract-coronavirus +207,10,2020-02-08T00:00:00.000000,new confirmed COVID-19 patient in France: in contact with Briton who had been in Singapore and was positive,France,France,,,,,,,,2020-01-24T00:00:00.000000,2020-01-28,,0,0,0,0,,Bloomberg,https://www.bloomberg.com/news/articles/2020-02-08/five-britons-on-ski-holiday-in-french-alps-contract-coronavirus +208,11,2020-02-08T00:00:00.000000,new confirmed COVID-19 patient in France: in contact with Briton who had been in Singapore and was positive,France,France,,,,,,,,2020-01-24T00:00:00.000000,2020-01-28,,0,0,0,0,,Bloomberg,https://www.bloomberg.com/news/articles/2020-02-08/five-britons-on-ski-holiday-in-french-alps-contract-coronavirus +209,12,2020-02-15T00:00:00.000000,new confirmed COVID-19 patient in France: in contact with Briton who had been in Singapore and was positive,France,France,,,,,,,,2020-01-24T00:00:00.000000,2020-01-28,,0,0,0,0,,Metro,https://metro.co.uk/2020/02/15/sixth-brit-visited-french-ski-chalet-tests-positive-coronavirus-12247228/ +210,13,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in France: female, 33, Chinese woman who recently returned from China, hospitalized in Paris",Paris,France,female,33.0,,,,,,,,1,0,0,0,0,,French Ministry of Health,https://solidarites-sante.gouv.fr/soins-et-maladies/maladies/maladies-infectieuses/coronavirus/coronavirus-questions-reponses +211,14,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in France: male, 63, recently travelled to Lombardy, Italy, hospitalized in Annecy",Annecy,France,male,63.0,,,,,,,,1,0,0,0,0,,French Ministry of Health,https://solidarites-sante.gouv.fr/soins-et-maladies/maladies/maladies-infectieuses/coronavirus/coronavirus-questions-reponses +212,15,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in France: male, 55, hospitalized in Amiens",Amiens,France,male,55.0,,,,,,,,,0,0,0,0,,French Ministry of Health,https://solidarites-sante.gouv.fr/soins-et-maladies/maladies/maladies-infectieuses/coronavirus/coronavirus-questions-reponses +213,16,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in France: male, 36, back from Lombardy, hospitalized in Strasbourg",Strasbourg,France,male,36.0,,,,,,,,1,0,0,0,0,,French Ministry of Health,https://solidarites-sante.gouv.fr/soins-et-maladies/maladies/maladies-infectieuses/coronavirus/coronavirus-questions-reponses +214,17,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in France: male, 60, hospitalized in Paris, died 2/26",Paris,France,male,60.0,,,,,,,,,0,0,1582675200,0,,French Ministry of Health,https://solidarites-sante.gouv.fr/soins-et-maladies/maladies/maladies-infectieuses/coronavirus/coronavirus-questions-reponses +215,18,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in France: female, 60, married to case 14",Annecy,France,female,60.0,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471495 +216,19,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Paris, contact of case 15",Paris,France,,,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471496 +217,20,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Paris, contact of case 15",Paris,France,,,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471497 +218,21,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Saint-Mande, contact of case 15",Saint-Mande,France,,,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471498 +219,22,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Saint-Mande, contact of case 15",Saint-Mande,France,,,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471499 +220,23,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Saint-Mande, contact of case 15",Saint-Mande,France,,,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471500 +221,24,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Saint-Mande, contact of case 15",Saint-Mande,France,,,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471501 +222,25,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Saint-Mande, contact of case 15",Saint-Mande,France,,,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471502 +223,26,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Dijon, contact of case 15",Dijon,France,,,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471503 +224,27,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Dijon, contact of case 15",Dijon,France,,,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471504 +225,28,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Dijon, contact of case 15",Dijon,France,,,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471505 +226,29,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Lille, male, contact of case 15",Lile,France,male,,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471506 +227,30,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Nantes, female, 58, doctor of case 15, hospitalized during journey that she spent in La Baule-Escoublac",Nantes,France,female,58.0,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471507 +228,31,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Montpellier, male, 31, recently returned from Lombardy, Italy by plane, hospitalized 2/27",Montpellier,France,male,31.0,,,2020-02-27,,,,,1,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471508 +229,32,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Paris, returning from Italy",Paris,France,,,,,,,,,,1,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471509 +230,33,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Brest, male, 72, returning from cruise in Egypt",Brest,France,male,72.0,,,,,,,,1,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471510 +231,34,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Dijon, male, elderly person returning from a trip from Egypt",Dijon,France,male,,,,,,,,,1,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471511 +232,35,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Lyon, male, 50, hospitalized 2/26",Lyon,France,male,50.0,,,2020-02-26,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471512 +233,36,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Annecy, 60s, friend of case 14 and 18",Annecy,France,,65.0,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471513 +234,37,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: Annecy, 30s, female, daughter of case 14 and 18",Annecy,France,female,35.0,,,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471514 +235,38,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in France: male, stayed in Munich from 2/18-2/22, in solitary confinement at home, symptom onset 2/24, Bois-Guillaume",Bois-Guillaume,France,male,,2020-02-24T00:00:00.000000,0,,,,,,,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471515 +236,39,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in France: female, 23, Nice, from Cannes, infected after journey in Milan",Nice,France,female,23.0,,,,,,,,1,0,0,0,0,,nice matin,https://www.nicematin.com/sante/un-premier-cas-de-coronavirus-confirme-dans-les-alpes-maritimes-471516 +237,40,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in France: female, Landes, tested 2/27, will be transferred 2/29 to hospital",Landes,France,female,,,,2020-02-29,,,,,,0,0,0,0,,Sudouest,https://www.sudouest.fr/2020/02/28/landes-premier-cas-de-coronavirus-confirme-dans-le-departement-7255476-3452.php +238,41,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in France: Paris, male, works at CDG airport",Paris,France,male,,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757664 +239,42,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in France: Paris, caregiver at hospital where infected patient from Oise tested positive",Paris,France,,,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757665 +240,43,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in France: Paris, caregiver at hospital where infected patient from Oise tested positive",Paris,France,,,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757666 +241,44,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in France: Paris, caregiver at hospital where infected patient from Oise tested positive",Paris,France,,,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757667 +242,45,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in France: Pays de la Loire, female, 27, stayed in Milan",Pays de la Loire,France,female,27.0,,,,,,,,1,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757668 +243,46,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in France: Pays de la Loire, female, 58, contact of patient hospitalized in Brittany",Pays de la Loire,France,female,58.0,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757669 +244,47,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in France: Pays de la Loire, female, 25, daughter of case 45, contact of patient hospitalized in Brittany",Pays de la Loire,France,female,25.0,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757670 +245,48,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in France: Pays de la Loire, male, 25, married to case 46, contact of patient hospitalized in Brittany",Pays de la Loire,France,male,25.0,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757671 +246,49,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in France: Nice, male, transferred from Monaco to France",Pays,France,male,,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757672 +247,50,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in France: northern Islands of Guadeloupe, female",Nice,France,female,,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757673 +248,51,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in France: northern Islands of Guadeloupe, male",Guadeloupe,France,male,,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757674 +249,52,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in France: northern Islands of Guadeloupe, male",Guadeloupe,France,male,,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757675 +250,53,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in France: Lyon,",Guadeloupe,France,,,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757676 +251,54,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in France: Lyon,",Lyon,France,,,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757677 +252,55,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in France: Lyon,",Lyon,France,,,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757678 +253,56,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in France: Lyon,",Lyon,France,,,,,,,,,,,0,0,0,0,,Ouest,https://www.ouest-france.fr/pays-de-la-loire/angers-49000/coronavirus-trois-cas-averes-hospitalises-au-chu-d-angers-6757679 +254,1,2020-01-15T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, in his 30s, Kanagawa resident, symptom onset 1/3/2020 in Wuhan (fever), returned to Japan 1/6/2020 and hospitalized, went to medical institution on 1/6/2020 and hospitalized 1/10/2020, recovered and discharged on 1/15/2020, in close contact with infected people",Kanagawa,Japan,male,35.0,2020-01-03T00:00:00.000000,0,2020-01-06,,,,2020-01-06,1,1,0,0,1579046400,fever,HK World-Japan,https://www3.nhk.or.jp/nhkworld/en/news/20200116_23/ +255,2,2020-01-24T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, in his 40s, Wuhan resident, arrived in Japan 1/19/2020, symptom onset 1/14/2020 (fever, sore throat), went to medical institution on 1/15 and 1/17, hospitalized 1/22/2020, confirmed 1/24/2020",Tokyo,Japan,male,45.0,2020-01-14T00:00:00.000000,0,2020-01-15,,,,2020-01-19,1,0,1,0,0,,NHK World-Japan,https://www3.nhk.or.jp/nhkworld/en/news/20200124_14/ +256,3,2020-01-25T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, in her 30s, Wuhan resident, arrived in Japan 01/18/2020, symptom onset on 01/21/2020 (fever, coughing), confirmed 1/23/2020 but not hospitalized (only minor symptoms), visited medical institution in Tokyo on 1/23/2020",Tokyo,Japan,female,35.0,2020-01-21T00:00:00.000000,0,2020-01-23,,,,2020-01-18,1,0,1,0,0,,The Japan Times,https://www.japantimes.co.jp/news/2020/01/25/national/japan-confirms-third-case-new-coronavirus/#.Xi9IJs5Kg2w +257,4,2020-01-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, in his 40s, Wuhan resident, arrived in Japan 1/22/2020, symptom onset 1/23/2020 (fever), hospitalized 1/24/2020, Aichi Prefecture",Aichi Prefecture,Japan,male,45.0,2020-01-23T00:00:00.000000,0,2020-01-24,,,,2020-01-22,1,0,1,0,0,,HK World-Japan,https://www3.nhk.or.jp/nhkworld/en/news/20200126_31/ +258,5,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, in his 40s, Wuhan resident, developed pneumonia and in hospital in Aichi, arrived 1/20/2020, symptom onset 1/22/2020 (fever), visited medical institution in Aichi Prefecture on 1/26/2020",Aichi Prefecture,Japan,male,45.0,2020-01-22T00:00:00.000000,0,2020-01-26,,,,2020-01-20,1,0,1,0,0,fever,Kyodo News,https://english.kyodonews.net/news/2020/01/e8f47252a245-urgent-japan-sees-1st-coronavirus-case-not-linked-to-recent-travel-to-china.html +259,6,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: 1/28-No.1, male, in his 60s, lives in Nara Prefecture, did not travel to Wuhan but drove buses with tour groups from Wuhan from 1/8/2020-1/16/2020, first Japanese confirmed, diagnosed with pneumonia 1/25/2020 and hospitalized on 1/17/2020, symptom onset 1/14/2020 (cough, chills, joint pain)",Nara Prefecture,Japan,male,65.0,2020-01-14T00:00:00.000000,0,2020-01-17,,,2020-01-08T00:00:00.000000,2020-01-16,0,0,0,0,0,"cough, chills, joint pain",Kyodo News,https://english.kyodonews.net/news/2020/01/e8f47252a245-urgent-japan-sees-1st-coronavirus-case-not-linked-to-recent-travel-to-china.html +260,7,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, in her 40s, Wuhan resident, diagnosed with pneumonia at medical institution in Hokkaido on 1/27/2020, arrived in Japan 1/21/2020, developed fever, confirmed 1/28/2020, symptom onset 1/26/2020 (cough, fever)",Hokkaido,Japan,female,45.0,2020-01-26T00:00:00.000000,0,2020-01-27,,,,2020-01-21,1,1,1,0,0,"fever, cough",Kyodo News,https://english.kyodonews.net/news/2020/01/e8f47252a245-urgent-japan-sees-1st-coronavirus-case-not-linked-to-recent-travel-to-china.html +261,8,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, in her 40s, living in Osaka Prefecture, tour guide on bus driven by 1/28-No.1 full of Wuhan tourists from 1/12/2020-1/17/2020, never went to Wuhan herself, symptom onset 1/20/2020 (fever), first visited medical institution 1/20/2020",Osaka Prefecture,Japan,female,45.0,2020-01-20T00:00:00.000000,0,2020-01-20,,,2020-01-12T00:00:00.000000,2020-01-17,0,0,0,0,0,"fever, cough",NHK World-Japan,https://www3.nhk.or.jp/nhkworld/en/news/20200130_02/ +262,9,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, in his 50s, arrived on first evacuation flight from China on 1/29/2020 from Wuhan, treated in special medical faculity, symptoms (throat pain, fever), Wuhan resident, symptom onset 1/29/2020",Tokyo,Japan,male,55.0,2020-01-29T00:00:00.000000,0,,,,,2020-01-29,1,0,1,0,0,"throat pain, fever",Bangkok Post,https://www.bangkokpost.com/world/1846939/three-japanese-returnees-from-wuhan-infected-with-coronavirus +263,10,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, in his 50s, foreign national, lives in Mie, stayed in Wuhan from 12/24/2020, returned to Japan 1/13/2020, symptom onset 1/25/2020 (fever), requested medical help on 1/27/2020",Mie,Japan,male,55.0,2020-01-25T00:00:00.000000,0,2020-01-27,,,2019-12-24T00:00:00.000000,2020-01-13,1,1,0,0,0,fever,NHK World-Japan,https://www3.nhk.or.jp/nhkworld/en/news/20200131_01/ +264,11,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, in her 30s, Hunan resident, stayed in Wuhan 1/19/2020, arrived in Japan 1/20/2020, symptom onset 1/24/2020 (fever, cough), consulted medical institution on 1/24/2020, returned on 1/27/2020, hospitalized 1/30/2020",Japan,Japan,female,35.0,2020-01-24T00:00:00.000000,0,2020-01-24,,,2020-01-19T00:00:00.000000,2020-01-20,1,1,0,0,0,"fever, cough",NHK World-Japan,https://www3.nhk.or.jp/nhkworld/en/news/20200131_01/ +265,12,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, in her 20s, Chinese student who lives in Kyoto, arrived in Japan 1/22/2020 from Wuhan, hospitalized 1/28/2020 (fever), stayed in Wuhan 1/16-1/22 and contacted person with cough on 1/17-1/18, symptom onset 1/23/2020 (cough, fever)",Kyoto,Japan,female,25.0,2020-01-23T00:00:00.000000,0,2020-01-28,,,2020-01-17T00:00:00.000000,2020-01-18,1,1,0,0,0,fever,NHK World-Japan,https://www3.nhk.or.jp/nhkworld/en/news/20200131_01/ +266,13,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, in her 20s, tour guide, no symptoms, on a bus driven by 1/28-No.1, lives in Chiba Prefecture, symptom onset 1/20/2020 (cough, runny nose), went to medical instution on 1/29/2020, joined tour on 1/17-1/22 as bus guide",Haneda,Japan,female,25.0,2020-01-20T00:00:00.000000,0,2020-01-29,,,2020-01-17T00:00:00.000000,2020-01-22,0,1,0,0,0,,Nippon,https://www.nippon.com/en/news/ntv20200131003/coronavirus-3-new-cases-in-japan-total-now-17.html?cx_recs_click=true +267,14,2020-02-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, in his 40s, evacuated from Wuhan 1/31/2020",Japan,Japan,male,45.0,,,,,,,2020-01-31,1,1,0,0,0,,Reuters,https://www.reuters.com/article/us-china-health-japan/japan-confirms-three-more-citizens-evacuated-from-wuhan-test-positive-for-coronavirus-idUSKBN1ZW03V +268,15,2020-02-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, in his 40s, symptom onset 1/26/2020 (fever, coughing), evacuated from Wuhan 1/29/2020, hospitalized 1/29/2020",Japan,Japan,male,45.0,2020-01-26T00:00:00.000000,0,2020-01-30,,,,2020-01-31,1,1,0,0,0,"fever, cough",Reuters,https://www.reuters.com/article/us-china-health-japan/japan-confirms-three-more-citizens-evacuated-from-wuhan-test-positive-for-coronavirus-idUSKBN1ZW03V +269,16,2020-02-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 30s, returned to Wuhan on third flight 1/31/2020, no symptoms",Japan,Japan,male,35.0,,,,,,,2020-01-31,1,1,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202001.html +270,17,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 30s, lives in Wuhan, symptom onset 1/30 (fever, runny nose), consulted medical instution in Chiba prefecture 1/31/2020, hospitalized",Chiba Prefecture,Japan,female,35.0,2020-01-30T00:00:00.000000,0,2020-01-31,,,,,1,0,1,0,0,"fever, runny nose",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202001.html +271,18,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 50s, lives in Chiba prefecture, returned to Japan on 1/30 on second charter flight, symptom onset 1/31/2020 (fever, cough) at consultation, left for Wuhan 1/10/2020, had dinner with relative with cough on 1/19/2020",Chiba Prefecture,Japan,female,55.0,2020-01-31T00:00:00.000000,0,2020-01-31,,,2020-01-19T00:00:00.000000,2020-01-19,1,1,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202001.html +272,19,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, lives in Hubei, came to Japan on 1/22/2020, symptom onset 1/25/2020 (fever), went to medical instutition on 1/26/2020, returned to China on 1/30, same bus tour as fourth confirmed case in Japan",Japan,Japan,male,55.0,2020-01-25T00:00:00.000000,0,2020-01-26,,,,2020-01-22,1,0,1,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202001.html +273,20,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, in his 40s, from Chiba prefecture, resident of Wuhan, wife (17th case) tested positive earlier, visited medical institution on 2/4/2020, arrived in Japan 1/21/2020 (no symptoms), symptom onset 1/24/2020 (fever, cough), went to medical institution 1/27/2020",Chiba Prefecture,Japan,male,45.0,2020-01-24T00:00:00.000000,0,2020-01-27,,,,,1,0,1,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202001.html +274,21,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, in his 20s, in Kyoto, hospitalized 1/31/2020 after symptom onset 1/24/2020 (fever), quarantined at hospital, had not traveled to China, went to hospital 1/27/2020 and 1/29/2020 but no symptoms of pneumonia",Kyoto,Japan,male,25.0,2020-01-24T00:00:00.000000,0,2020-01-27,,,,,0,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202001.html +275,22,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, lives in Wuhan",Japan,Japan,male,55.0,,,,,,,,1,0,1,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +276,23,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 20s, lives in Wuhan",Japan,Japan,male,25.0,,,,,,,,1,0,1,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +277,24,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 40s, lives in Saitama, returned to Japan on second charter flight 1/30, returned home 2/1, symptom onset 2/8 (fever), went to medical instutition 2/10",Japan,Japan,male,45.0,2020-02-08T00:00:00.000000,0,2020-02-10,,,,2020-01-30,1,1,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +278,25,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, lives in Wuhan, returned to Japan on first charter flight 1/30, symptom onset 2/7 (fever, cough), hospitalized 2/7",Japan,Japan,male,55.0,2020-02-07T00:00:00.000000,0,2020-02-07,,,,2020-01-30,1,0,1,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +279,26,,,Japan,Japan,,,,,,,,,,0,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +280,27,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 80s, lives in Kanagawa, symptom onset 1/22 (fatigue), visited doctor 1/28, died 2/13",Kanagawa,Japan,female,85.0,2020-01-22T00:00:00.000000,0,2020-01-28,,,,,,0,0,1581552000,0,fatigue,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +281,28,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 70s, lives in Tokyo, symptom onset 1/29 (fever), went to medical instution 1/29, returned 2/3, went to other medical instutition 2/6 and hospitalized",Tokyo,Japan,male,75.0,2020-01-29T00:00:00.000000,0,2020-01-29,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +282,29,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, lives in Wakayama Prefecture, symptom onset 1/31 (fever, abdominal pain, diarrhea), visited doctor 2/8, hospitalization 2/10",Wakayama Prefecture,Japan,male,55.0,2020-01-31T00:00:00.000000,0,2020-02-08,,,,,,0,0,0,0,"fever, abdominal pain, diarrhea",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +283,30,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 20s, lives in Chiba Prefecture, symptom onset 2/2 (fever, cough), visited medical instutition 2/10, hospitalized for pneumonia 2/10",Chiba Prefecture,Japan,male,25.0,2020-02-02T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +284,31,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 70s, symptom onset 2/1 (cold, fever), visited medical institution 2/6",Japan,Japan,male,75.0,2020-02-01T00:00:00.000000,0,2020-02-06,,,,,,0,0,1582848000,0,"cold, fever, pneumonia",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +285,32,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 60s, lives in Okinawa Prefecture, symptom onset 2/5 (cough, joint pain), visited medical institution 2/12",Okinawa Prefecture,Japan,female,65.0,2020-02-05T00:00:00.000000,0,2020-02-12,,,,,,0,0,0,0,"cough, joint pain",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +286,33,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 50s, lives in Tokyo, symptom onset 2/4 (vomiting, diarrhea, fever, cough), went to medical instutition on 2/7",Tokyo,Japan,female,55.0,2020-02-04T00:00:00.000000,0,2020-02-07,,,,,,0,0,0,0,"vomiting, diarrhea, fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +287,34,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 70s, lives in Tokyo, symptom onset 1/20 (fever, loss of appetite), visited doctor on 1/21, home medical treatment 1/22-1/26, symptoms worsened 1/27, contacted tourist from Wuhan on 1/15",Tokyo,Japan,male,75.0,2020-01-20T00:00:00.000000,0,2020-01-21,,,,,,0,0,0,0,"fever, loss of appetite",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +288,35,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, Aichi Prefecture, symptoms 2/3 (fever), visited doctor 2/8, went to medical instutition 2/13, went to Hawaii 1/28-2/7",Aichi Prefecture,Japan,male,65.0,2020-02-03T00:00:00.000000,0,2020-02-08,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +289,36,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, Hokkaido, symptom onset 1/31 (fever, cough, malaise), visited medical instutition on 2/3, returned 2/4, hospitalized 2/11",Hokkaido,Japan,male,55.0,2020-01-31T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, cough, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +290,37,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 30s, Kanagawa Prefecture, symptom onset 2/11 (fever), hospitalized 2/10,",Kanagawa,Japan,male,35.0,2020-02-11T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +291,38,2020-02-15T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, lives in Wakayama Prefecture, symptom onset 2/4 (fever), went to doctor 2/6, hospitalized 2/14, worked at medical instution where case 29 worked",Wakayama Prefecture,Japan,male,55.0,2020-02-04T00:00:00.000000,0,2020-02-06,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +292,39,2020-02-15T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 50s, Wakayama, symptom onset 2/7 (fever, cough), married to case 38",Wakayama Prefecture,Japan,female,55.0,2020-02-07T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +293,40,2020-02-15T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, Wakayama Prefecture, contact of case 29, 50, 51",Wakayama Prefecture,Japan,male,65.0,,,,,,,,,0,0,0,0,"fever, headache",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +294,41,2020-02-15T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 60s, went to Hawaii 1/28-2/7, symptom onset 2/13 (fever, headache), went to medical instutition 2/14, lives in Aichi Prefecture, contact of case 35 and 44",Aichi Prefecture,Japan,female,65.0,2020-02-13T00:00:00.000000,0,2020-02-14,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +295,42,2020-02-15T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 60s, Tokyo, contact of case 28",Tokyo,Japan,female,65.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +296,43,2020-02-15T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 40s, Tokyo, contact of case 45",Tokyo,Japan,male,45.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +297,44,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, symptoms (fatigue, difficulty breathing), went to party 1/18, from Tokyo",Tokyo,Japan,male,65.0,,,,,,,,,0,0,0,0,"fatigue, difficulty breathing",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +298,45,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 30s, went to party 1/18, from Tokyo, symptom onset 2/3 (fever, malaise), home medical treatment 2/4, visited again 2/5, again on 2/8,",Tokyo,Japan,male,35.0,2020-02-03T00:00:00.000000,0,2020-02-04,,,,,,0,0,0,0,"fever, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +299,46,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, lives in Aichi Prefecture, symptom onset 2/15 (fever), went to get medical help 2/15, contact of case 43 and 53",Aichi Prefecture,Japan,male,65.0,2020-02-15T00:00:00.000000,0,2020-02-15,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +300,47,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, symptom onset 2/6 (fever, malaise), visited medical instutition 2/7, 2/10, 2/12, 2/13",Nara Prefecture,Japan,male,65.0,2020-02-06T00:00:00.000000,0,2020-02-07,,,,,,0,0,0,0,"fever, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +301,48,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, lives in Aichi Prefecture, symptom onset 2/17 (fever, malaise), consulted medical instutition 2/17, contact of case 44",Aichi Prefecture,Japan,male,65.0,2020-02-17T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,"fever, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +302,49,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 80s, lives in Wakayama, contact of case 40, inspected as contact 2/16, hospitalized 2/17",Wakayama Prefecture,Japan,female,85.0,,,2020-02-17,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +303,50,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 50s, lives in Wakayama, inspected as contact 2/16, hospitalized 2/17",Wakayama Prefecture,Japan,female,55.0,,,2020-02-17,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +304,51,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, lives in Wakayama, symptom onset 2/3 (fever), went to medical institution 2/4, 2/13",Wakayama Prefecture,Japan,male,55.0,2020-02-03T00:00:00.000000,0,2020-02-04,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +305,52,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, lives in Wakayama, symptom onset 2/7 (fever), went to medical institution 2/7, 2/14",Wakayama Prefecture,Japan,male,55.0,2020-02-07T00:00:00.000000,0,2020-02-07,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +306,53,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 40s, lives in Kanagawa Prefecture symptom onset 2/14 (fever, vomiting, diarrhea), went to medical consultation 2/14, worked at a hospital where infected patient was from 2/1-2/5",Wakayama Prefecture,Japan,female,45.0,2020-02-14T00:00:00.000000,0,2020-02-14,,,,,,0,0,0,0,"fever, vomiting, diarrhea",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +307,54,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, lives in Wakayama, hospitalized 2/11, symptom onset 2/16 (fever)",Wakayama Prefecture,Japan,male,65.0,2020-02-16T00:00:00.000000,0,2020-02-11,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +308,55,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 30s, lives in Wakayama, symptom onset 2/16 (fever), hospitalized 2/17",Wakayama Prefecture,Japan,male,35.0,2020-02-16T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +309,56,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 80s, lives in Tokyo, symptom onset 2/9 (fever, pneumonia)",Tokyo,Japan,male,85.0,2020-02-09T00:00:00.000000,0,,,,,,,0,0,1582675200,0,"fever, pneumonia",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +310,57,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 20s, symptom onset 2/7 (fever), Tokyo",Japan,Japan,male,25.0,2020-02-07T00:00:00.000000,0,,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +311,58,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, symptom onset 2/5 (fever, cough, sputum, malaise), Tokyo",Japan,Japan,male,55.0,2020-02-05T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, cough, sputum, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +312,59,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, lives in Aichi Prefecture, contact with case 44 and case 53",Aichi Prefecture,Japan,male,65.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09643.html +313,60,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 80s, lives in Sagamihara City",Sagamihara,Japan,male,85.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09643.html +314,61,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 70s, lives in Sagamihara City, admitted to medical instutution 2/10, surgery 2/12, symptom onset 2/14 (fever, cough), infection found in same room 2/18",Sagamihara,Japan,male,75.0,2020-02-14T00:00:00.000000,0,,,,2020-02-10T00:00:00.000000,2020-02-18,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09643.html +315,62,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, lives in Kanagawa Prefecture, symptom onset 2/3 (fever), went to medical instutition 2/5, again 2/8, 2/10, hospitalized 2/13",Kanagawa,Japan,male,65.0,2020-02-03T00:00:00.000000,0,2020-02-05,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09643.html +316,63,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 40s, Sapporo, symptom onset 2/8 (fatigue, muscle pain, joint pain, fever), visited medical instutition 2/13, 2/15, 2/17, admitted 2/19",Sapporo,Japan,male,45.0,2020-02-08T00:00:00.000000,0,2020-02-13,,,,,,0,0,0,0,"fatigue, muscle pain, joint pain, fever",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09643.html +317,64,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, Hokkaido, symptom onset 2/3 (fever, sore throat), visited medical instutition 2/7, 2/13, 2/14, hospitalized 2/18",Hokkaido,Japan,male,65.0,2020-02-03T00:00:00.000000,0,2020-02-07,,,,,,0,0,0,0,"fever, sore throat",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09643.html +318,65,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, Okinawa, symptom onset 2/11 (fever, breathlessness, malaise), consultation 2/18",Okinawa Prefecture,Japan,male,65.0,2020-02-11T00:00:00.000000,0,2020-02-18,,,,,,0,0,0,0,"fever, breathlessness, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09643.html +319,66,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 70s, Tokyo, symptom onset 2/4 (cough, malaise, shortness of breath)",Tokyo,Japan,male,75.0,2020-02-04T00:00:00.000000,0,,,,,,,0,0,0,0,"cough, malaise, shortness of breath",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09643.html +320,67,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 70s, Tokyo, symptom onset 2/4 (cough, malaise, shortness of breath)",Tokyo,Japan,female,75.0,2020-02-04T00:00:00.000000,0,,,,,,,0,0,0,0,"cough, malaise, shortness of breath",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09643.html +321,68,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 70s, Tokyo, symptom onset 2/3 (cough, sputum, dyspnea)",Tokyo,Japan,female,75.0,2020-02-03T00:00:00.000000,0,,,,,,,0,0,0,0,"cough, sputum, dyspnea",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09643.html +322,69,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 50s, Nagoya City, symptom onset 2/17 (fever, malaise), went to medical instutition 2/17, again 2/18 and hospitalized, has traveled to Wuhan before onset",Nagoya City,Japan,female,55.0,2020-02-17T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,"fever, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09643.html +323,70,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, lives in Wuhan, charter flight 2/17 to Japan",Japan,Japan,male,55.0,,,,,,,2020-02-17,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +324,71,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, Fukuoka Prefecture, symptom onset 2/13 (fever, pneumonia), went to medical institution 2/13, returned 2/19",Fukuoka Prefecture,Japan,male,65.0,2020-02-13T00:00:00.000000,0,2020-02-13,,,,,,0,0,0,0,"fever, pneumonia",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +325,72,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 40s, Hokkaido,",Hokkaido,Japan,male,45.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +326,73,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 70s, Chiba, symptom onset 2/14 (fever), went to medical instutition 2/15, transferred to airport 2/16, went to tour 2/16-2/18, visited medical instution 2/18, visited other instutition 2/19, hospitalized 2/20",Chiba Prefecture,Japan,female,75.0,2020-02-14T00:00:00.000000,0,2020-02-15,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +327,74,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 80s, Okinawa, symptom onset 2/6 (fever, malaise, diarrhea, cough), hospitalized 2/17",Okinawa Prefecture,Japan,male,85.0,2020-02-06T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,"fever, malaise, diarrhea, cough",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +328,75,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in Japan:,Japan,Japan,,,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +329,76,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in Japan:,Japan,Japan,,,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +330,77,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 80s, Nagoya, symptom onset 2/19 (fever), medical consultation 2/19, hospitalized,",Nagoya City,Japan,male,85.0,2020-02-19T00:00:00.000000,0,2020-02-19,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +331,78,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 80s, Sagamihara, hospitalized 1/11, symptom onset 2/14 (fever)",Sagamihara,Japan,male,85.0,2020-02-14T00:00:00.000000,0,,,,2020-01-11T00:00:00.000000,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +332,79,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 60s, Fukuoka Prefecture",Fukuoka Prefecture,Japan,female,65.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +333,80,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, under 10 years, Hokkaido, symptom onset 2/15 (fever), medical consultation 2/17, 2/18, 2/19",Hokkaido,Japan,male,5.0,2020-02-15T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,-2209161600,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +334,81,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 10s, Hokkaido, symptom onset 2/18, went to medical instutition 2/19,",Hokkaido,Japan,male,15.0,2020-02-18T00:00:00.000000,0,2020-02-19,,,,,,0,0,0,-2209161600,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +335,82,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 40s, Hokkaido, symptom onset 2/16 (fever), went to medical instutition 2/18",Hokkaido,Japan,female,45.0,2020-02-16T00:00:00.000000,0,2020-02-18,,,,,,0,0,0,-2209161600,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +336,83,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, Ishikawa, symptom onset 2/16 (fever), went to medical institution 2/16, again on 2/17, 2/19, 2/20",Ishikawa,Japan,male,55.0,2020-02-16T00:00:00.000000,0,2020-02-16,,,,,,0,0,0,-2209161600,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +337,84,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Japan: under 10 years, Saitama Prefecture, returned home with father on 2nd charter flight out of Wuhan on 1/30, negative on arrival, returned home with father 2/1, father had fever 2/8, 2/10-2/19 symptom onset (cough, fever)",Saitama Prefecture,Japan,,5.0,2020-02-14T00:00:00.000000,0,,,,,2020-01-30,,1,0,0,-2209161600,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +338,85,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 50s, Tokyo, symptom onset 2/10 (fever, cough, sputum)",Tokyo,Japan,female,55.0,2020-02-10T00:00:00.000000,0,,,,,,,0,0,0,-2209161600,"fever, cough, sputum",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +339,86,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 70s, Tokyo, symptom onset 2/1 (fever, cough, malaise)",Tokyo,Japan,female,75.0,2020-02-01T00:00:00.000000,0,,,,,,,0,0,0,-2209161600,"fever, cough, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +340,87,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 50s, Tokyo, symptom onset 2/4 (fatigue)",Tokyo,Japan,female,55.0,2020-02-04T00:00:00.000000,0,,,,,,,0,0,0,-2209161600,fatigue,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +341,88,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, Chiba, symptom onset 2/6 (fatigue, loss of appetite), went to check-up on 2/9, visited another medical instutition 2/19, re-examined 2/20, admitted 2/21",Chiba Prefecture,Japan,male,65.0,2020-02-06T00:00:00.000000,0,2020-02-09,,,,,,0,0,0,-2209161600,"fatigue, loss of appetite",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +342,89,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 80s, Sagamihara City, admitted to medical institution 1/27, symptoms relieved and discharged 2/5, symptom onset 2/18, transported 2/19",Sagamihara,Japan,male,85.0,2020-02-18T00:00:00.000000,0,2020-02-19,,,,,,0,0,0,-2209161600,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +343,90,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 70s, Nagoya City, symptom onset 2/19 (fever, cough), went to medical consultation 2/21",Nagoya City,Japan,male,75.0,2020-02-19T00:00:00.000000,0,2020-02-21,,,,,,0,0,0,-2209161600,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +344,91,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 20s, Nagoya City, symptom onset 2/20 (fever, cough, breathlessness), visited medical center 2/21",Nagoya City,Japan,female,25.0,2020-02-20T00:00:00.000000,0,2020-02-21,,,,,,0,0,0,-2209161600,"fever, cough, breathlessness",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09652.html +345,92,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 20s, Kumamoto city, symptom onset 2/17 (cough, fever, headache, nausea, vomiting, diarrhea), visited doctor 2/18, another doctor 2/19",Kumamoto City,Japan,female,25.0,2020-02-17T00:00:00.000000,0,2020-02-18,,,,,,0,0,0,0,"cough, fever, headache, nausea, vomiting, diarrhea",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +346,93,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, Kumamoto city, symptom onset 2/20 (cough, fever), admitted to infectious disease institution 2/21",Kumamoto City,Japan,male,55.0,2020-02-20T00:00:00.000000,0,2020-02-21,,,,,,0,0,0,0,"cough, fever",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +347,94,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, kumamoto prefecture, symptom onset 2/15 (fatigue, cold, fever, vomiting), visited doctor 2/19, went again 2/21, visited Hokkaido 2/2-2/10",Kumamoto Prefecture,Japan,male,65.0,2020-02-15T00:00:00.000000,0,2020-02-19,,,,,,0,0,0,0,"fatigue, cold, fever, vomiting",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +348,95,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 40s, Wakayama, symptom onset 2/2 (fever, fatigue, cough, diarrhea), went to doctor 2/2, again 2/3, again 2/6, 2/17",Wakayama Prefecture,Japan,male,45.0,2020-02-02T00:00:00.000000,0,2020-02-02,,,,,,0,0,0,0,"fever, fatigue, cough, diarrhea",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +349,96,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 60s, Chiba, symptom onset 2/12 (nausea), went to doctor, worked 2/13-2/19, cough appeared 2/18, went back to doctor 2/18, fever 2/21",Chiba Prefecture,Japan,female,65.0,2020-02-12T00:00:00.000000,0,2020-02-12,,,,,,0,0,0,0,nausea,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +350,97,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 50s, symptom onset 2/16 (fatigue, joint pain, fever), came home 2/18, went to doctor 2/19, moved to another hospital 2/21",Japan,Japan,female,55.0,2020-02-16T00:00:00.000000,0,2020-02-19,,,,,,0,0,0,0,"fatigue, joint pain, fever",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +351,98,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 70s, Hokkaido, symptom onset 2/6 (cough, sputum), fever 2/9, sore throat and malaise 2/10, hospitalized 2/10",Hokkaido,Japan,female,75.0,2020-02-06T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,0,"cough, sputum",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +352,99,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 80s, Hokkaido, symptom onset 2/3 (difficulty breathing), hospitalized 2/3",Hokkaido,Japan,male,85.0,2020-02-03T00:00:00.000000,0,2020-02-03,,,,,,0,0,1582761600,0,difficulty breathing,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +353,100,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 70s, Hokkaido, symptom onset 2/16 (fever, cough, malaise), fever 2/17, fever 2/19, went to doctor 2/20",Hokkaido,Japan,male,75.0,2020-02-16T00:00:00.000000,0,2020-02-20,,,,,,0,0,0,0,"fever, cough, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +354,101,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 50s, Hokkaido, symptom onset 2/17, went to doctor 2/19",Hokkaido,Japan,female,55.0,2020-02-17T00:00:00.000000,0,2020-02-19,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +355,102,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, Hokkaido, symptom onset 2/10 (fever), went to doctor 2/10, fever 2/17, went to another doctor 2/19",Hokkaido,Japan,male,65.0,2020-02-10T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +356,103,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 50s, Hokkaido, symptom onset 2/15 (fatigue), visited doctor 2/16 due to malaise and headache, another doctor 2/19",Hokkaido,Japan,female,55.0,2020-02-15T00:00:00.000000,0,2020-02-16,,,,,,0,0,0,0,"fatigue, malaise, headache",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +357,104,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 10s, Hokkaido, symptom onset 2/6 (fever), went to doctor 2/7, another doctor 2/10, fever, sore throat, and malaise 2/18, visited another doctor 2/20, went to Tokyo 2/3-2/6",Hokkaido,Japan,female,15.0,2020-02-06T00:00:00.000000,0,2020-02-07,,,,,,0,0,0,0,"fever, sore throat, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +358,105,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 50s, Hokkaido, symptom onset 2/13 (sore throat), cough and fever 2/15, went to doctor 2/15, again 2/17, another doctor 2/20, a third doctor 2/21",Hokkaido,Japan,female,55.0,2020-02-13T00:00:00.000000,0,2020-02-15,,,,,,0,0,0,0,"sore throat, cough, fever",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +359,106,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, symptom onset 2/12 (fever, cough), Tokyo",Tokyo,Japan,male,65.0,2020-02-12T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +360,107,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 60s, symptom onset 2/19 (fever, nasal discharge, headache), went to doctor 2/21, Nagoya City",Nagoya City,Japan,female,65.0,2020-02-19T00:00:00.000000,0,2020-02-21,,,,,,0,0,0,0,"fever, nasal discharge, headache",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +361,108,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 40s, symptom onset 2/20 (fever), went to doctor 2/21, Nagoya City",Nagoya City,Japan,female,46.0,2020-02-20T00:00:00.000000,0,2020-02-21,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +362,109,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, symptom onset 2/20 (fever, cough, malaise), went to doctor 2/21, Nagoya City",Nagoya City,Japan,male,65.0,2020-02-20T00:00:00.000000,0,2020-02-21,,,,,,0,0,0,0,"fever, cough, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +363,110,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 60s, symptom onset 2/20 (fever), went to doctor 2/21, Nagoya City",Nagoya City,Japan,male,65.0,2020-02-20T00:00:00.000000,0,2020-02-21,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +364,111,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 60s, returned home after disembarking from Diamond Princess 2/19, symptom onset 2/21 (fever), visited center 2/22, Tochigi prefecture",Japan,Japan,female,65.0,2020-02-21T00:00:00.000000,0,2020-02-22,,,,,1,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +365,112,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, lives in Sagamihara City, symptom onset 2/16 (fever), visited doctor 2/17 for fever and headache, fever 2/18, returned 2/19, visited another doctor 2/21 and hospitalized",Sagamihara,Japan,male,55.0,2020-02-16T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +366,113,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 50s, Hokkaido, symptom onset 2/17 (fever, difficulty breathing), went to doctor 2/18 and 2/19, fever 2/21 so visited second doctor, third doctor 2/21",Hokkaido,Japan,male,55.0,2020-02-17T00:00:00.000000,0,2020-02-18,,,,,,0,0,0,0,"fever, difficulty breathing",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +367,114,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 70s, Sapporo City",Sapporo,Japan,male,75.0,,0,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +368,115,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: female, 70s, symptom onset 2/22 (fever), visited doctor 2/22, Nagoya City",Nagoya City,Japan,female,75.0,2020-02-22T00:00:00.000000,0,2020-02-22,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +369,116,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 70s, symptom onset 2/21 (fever, cough), visited doctor 2/22, Nagoya City",Nagoya City,Japan,male,75.0,2020-02-21T00:00:00.000000,0,2020-02-22,,,,,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +370,117,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: male, 40s, symptom onset 2/12 (joint pain, muscle pain), business trip to Hiroshima 2/12, business trip to Gifu 2/13, cough and malaise 2/14, returned home from Gifu 2/14, worked in Tokyo 2/17-2/18, fever 2/18, visited doctor 2/18, re-examined 2/19, visited another hospital and hospitalized 2/21, Chiba",Chiba Prefecture,Japan,male,45.0,2020-02-12T00:00:00.000000,0,2020-02-18,,,,,,0,0,0,0,"joint pain, muscle pain, cough, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +371,118,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 30s",Hokkaido,Japan,male,35.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +372,119,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 60s",Hokkaido,Japan,female,65.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +373,120,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 20s",Hokkaido,Japan,male,25.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +374,121,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 70s",Hokkaido,Japan,male,75.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +375,122,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 30s",Hokkaido,Japan,female,35.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +376,123,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 80s",Hokkaido,Japan,male,85.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +377,124,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 40s",Hokkaido,Japan,female,45.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +378,125,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 20s",Hokkaido,Japan,female,25.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +379,126,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Ishikawa Prefecture, female, 50s",Ishikawa,Japan,female,55.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +380,127,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sagamihara City, male, 50s, symptom onset 2/16, went to doctor 2/17 due to fever and headache, went to doctor again on 2/19 due to fever and malaise, went to another doctor 2/21 due to severe fever and headache",Sagamihara,Japan,male,55.0,2020-02-16T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,"fever, headache",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +381,128,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Ishikawa Prefecture, male, 60s, symptom onset 2/16 (fever, sore throat), visited doctor 2/17, visited another doctor 2/19 and 2/22, visited fourth doctor 2/23",Ishikawa,Japan,male,65.0,2020-02-16T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,"fever, sore throat",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +382,129,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sapporo City, female, 70s, symptom onset 2/21 (fever, cough), visited medical institution 2/22, visited hospital 2/23",Sapporo,Japan,female,75.0,2020-02-21T00:00:00.000000,0,2020-02-22,,,,,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +383,130,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sapporo City, male, 50s, symptom onset 2/14 (chills), visited doctor 2/17, slight fever, runny nose, nausea 2/17, re-examined 2/19 and 2/21, went to hospital 2/23",Sapporo,Japan,male,55.0,2020-02-14T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,chills,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +384,131,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 20s, symptom onset 2/18 (fever), went to doctor 2/23",Hokkaido,Japan,female,25.0,2020-02-18T00:00:00.000000,0,2020-02-23,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +385,132,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 50s, symptom onset 2/17 (cough), fever 2/20, went to doctor 2/20, went to second doctor 2/23",Hokkaido,Japan,male,55.0,2020-02-17T00:00:00.000000,0,2020-02-20,,,,,,0,0,0,0,cough,Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +386,133,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kanagawa Prefecture, male, 50s, symptom onset 2/14 (fever), went to doctor 2/17, visited second doctor 2/19, fever, respiratory distress, and malaise increased 2/23, went to second doctor 2/23, transferred to third institution and hospitalized",Kanagawa,Japan,male,55.0,2020-02-14T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,"fever, respiratory distress",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +387,134,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Tokyo, male, 40s, symptom onset 2/13 (Fever, malaise)",Tokyo,Japan,male,45.0,2020-02-13T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +388,135,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Tokyo, male, 50s, symptom onset 2/19 (Fever, malaise)",Tokyo,Japan,male,55.0,2020-02-19T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +389,136,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Tokyo, male, 30s, symptom onset 2/18 (fever, sore throat)",Tokyo,Japan,male,35.0,2020-02-18T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, sore throat",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +390,137,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sagamihara City, female, 50s, symptom onset 2/20 (mild cough, sputum, throat discomfort), husband diagnosed 2/22",Sagamihara,Japan,female,55.0,2020-02-20T00:00:00.000000,0,,,,,,,0,0,0,0,"mild cough, sputum, throat discomfort",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +391,138,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sagamihara City, female, 20s, symptom onset 2/21 (cough, sneeze), father diagnosed 2/22",Sagamihara,Japan,female,25.0,2020-02-21T00:00:00.000000,0,,,,,,,0,0,0,0,"cough, sneeze",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +392,139,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sagamihara City, female, 20s, symptom onset 2/19, visited doctor 2/19, re-examined 2/20 due to fever, chills, joint pain, heavy head, throat discomfort",Sagamihara,Japan,female,25.0,2020-02-19T00:00:00.000000,0,2020-02-19,,,,,,0,0,0,0,"fever, chills, joint pain, heavy head",Ministry of Health,https://www.mhlw.go.jp/stf/newpage_09713.html +393,140,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagano Prefecture, male, 60s, stayed in Hokkaido 2/14-2/17, stayed in Tokyo 2/17-2/19, symptom onset 2/20 (fatigue), fever on 2/21, went to doctor on 2/21, went to health center 2/23, fever 2/24, hospitalized 2/24",Nagano Prefecture,Japan,male,65.0,2020-02-20T00:00:00.000000,0,2020-02-21,,,,,,0,0,0,0,"fatigue, fever",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +394,141,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kumamoto City, male, 50s, sore throat since 2/20, went to public health center 2/24",Kumamoto City,Japan,male,55.0,2020-02-20T00:00:00.000000,0,2020-02-24,,,,,,0,0,0,0,sore throat,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +395,142,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kumamoto City, female, 60s, symptom onset 2/25 (fever), went to health center 2/25",Kumamoto City,Japan,female,65.0,2020-02-25T00:00:00.000000,0,2020-02-25,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +396,143,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sapporo City, female, 60s, symptom onset 2/17 (fever), visited doctor 2/17, re-examined 2/18, visited again 2/21, medical examination 2/24",Sapporo,Japan,female,65.0,2020-02-17T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +397,144,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Ishikawa Prefecture, female, 50s",Ishikawa,Japan,female,55.0,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +398,145,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya City, female, 70s, fever 2/20, hospitalized 2/21",Nagoya City,Japan,female,75.0,2020-02-20T00:00:00.000000,0,2020-02-21,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +399,146,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya City, female, 70s, fever and cough 2/23, went to doctor 2/23",Nagoya City,Japan,female,75.0,2020-02-23T00:00:00.000000,0,2020-02-23,,,,,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +400,147,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya City, female, 40s, fever and runny nose 2/23, went to doctor 2/23",Nagoya City,Japan,female,45.0,2020-02-23T00:00:00.000000,0,2020-02-23,,,,,,0,0,0,0,"fever, runny nose",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +401,148,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Chiba Prefecture, male, 50s, fever 2/22, visited doctor 2/25, on Diamond Princess 2/12-2/18 as part of diaster team doctor",Chiba Prefecture,Japan,male,55.0,2020-02-22T00:00:00.000000,0,2020-02-25,,,2020-02-12T00:00:00.000000,2020-02-18,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +402,149,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Chiba Prefecture, male, 60s, fever 2/22, went to doctor 2/24, hospitalized 2/25, passenger on cruise ship diamond princess, tested negative 2/16, disembarked 2/20",Chiba Prefecture,Japan,male,65.0,2020-02-22T00:00:00.000000,0,2020-02-24,,,,2020-02-20,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +403,150,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Chiba Prefecture, male, 70s, fever 2/12, on Diamond Princess and tested negative 2/14, disembarked 2/21, fever 2/21 during follow-up at health center, visited doctor 2/25 and hospitalized",Chiba Prefecture,Japan,male,75.0,2020-02-12T00:00:00.000000,0,,,,,2020-02-21,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +404,151,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 20s, headache and fever 2/17, fever and malaise 2/18, went to doctor 2/18, again 2/20, hospitalized 2/24",Hokkaido,Japan,male,25.0,2020-02-17T00:00:00.000000,0,2020-02-18,,,,,,0,0,0,0,"headache, fever, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +405,152,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 20s, sore throat 2/19, fever 2/21, went to doctor 2/24, traveling to Osaka early February",Hokkaido,Japan,female,25.0,2020-02-19T00:00:00.000000,0,2020-02-24,,,,,,0,0,0,0,"sore throat, fever",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +406,153,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 70s, during hospitalization, fever 2/23",Hokkaido,Japan,male,75.0,2020-02-23T00:00:00.000000,0,,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +407,154,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, symptom onset 2/16 (cough), hospitalized 2/17, died 2/25",Hokkaido,Japan,,,2020-02-16T00:00:00.000000,0,2020-02-17,,,,,,0,0,1582588800,0,cough,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +408,155,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 70s, fever and malaise 2/17, went to doctor 2/20, emergency transport to hospital 2/24",Hokkaido,Japan,female,75.0,2020-02-17T00:00:00.000000,0,2020-02-20,,,,,,0,0,0,0,"fever, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +409,156,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 70s, fever and cough 2/16, went to doctor 2/16, returned 2/25",Hokkaido,Japan,female,75.0,2020-02-16T00:00:00.000000,0,2020-02-16,,,,,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +410,157,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 40s, visited doctor due to fever and cough 2/24",Hokkaido,Japan,male,45.0,2020-02-24T00:00:00.000000,0,2020-02-24,,,,,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +411,158,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kanagawa, male, 60s, identified as close contact and tested 2/25, hospitalized 2/26, now has fever, cough, malaise",Kanagawa,Japan,male,65.0,,,2020-02-26,,,,,,0,0,0,0,"fever, cough, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +412,159,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Osaka, female, 40s, went to doctor 2/6 with cough, again 2/13, 2/19 throat discomfort and chest pain, went to doctor 2/21, 2/22, 2/25",Osaka Prefecture,Japan,female,45.0,2020-02-06T00:00:00.000000,0,2020-02-06,,,,,,0,0,0,0,"throat discomfort, cough, chest pain",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +413,160,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Tokyo, male, 80s, symptom onset 2/22 (fever, cough, sputum, dyspnea)",Tokyo,Japan,male,85.0,2020-02-22T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, cough, sputum, dyspnea",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +414,161,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Tokyo, male, 70s, symptom onset 2/12 (fever, cough, sputum, dyspnea)",Tokyo,Japan,male,75.0,2020-02-12T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, cough, sputum, dyspnea",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +415,162,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Tokyo, male, 70s, symptom onset 2/14 (fever, cough, sputum)",Tokyo,Japan,male,75.0,2020-02-14T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, cough, sputum",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +416,163,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya City, male, 50s, fever and thirst 2/24, went to doctor 2/25",Nagoya City,Japan,male,55.0,2020-02-24T00:00:00.000000,0,2020-02-25,,,,,,0,0,0,0,"fever, thirst",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +417,164,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya City, male, 60s, fever and went to doctor 2/25",Nagoya City,Japan,male,65.0,2020-02-25T00:00:00.000000,0,2020-02-25,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +418,165,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya City, male, 70s, fever, cough, runny nose 2/24, went to doctor 2/25",Nagoya City,Japan,male,75.0,2020-02-24T00:00:00.000000,0,2020-02-25,,,,,,0,0,0,0,"fever, cough, runny nose",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +419,166,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya City, male, 70s, fever, cough, malaise 2/23, went to doctor 2/25",Nagoya City,Japan,male,75.0,2020-02-23T00:00:00.000000,0,2020-02-25,,,,,,0,0,0,0,"fever, cough, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +420,167,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya City, female, 70s, fever, cough, sore throat, runny nose and went to doctor 2/24",Nagoya City,Japan,female,75.0,2020-02-24T00:00:00.000000,0,2020-02-24,,,,,,0,0,0,0,"fever, cough, sore throat, runny nose",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +421,168,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Gifu Prefecture, male, 50s, malaise and fever 2/14, went to doctor 2/15, went back to doctor due to headache 2/20, visited another doctor 2/21, visited doctor again 2/25",Gifu Prefecture,Japan,male,55.0,2020-02-14T00:00:00.000000,0,2020-02-15,,,,,,0,0,0,0,"malaise, fever, headache",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +422,169,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Gifu Prefecture, female, 50s, throat pain and chills 2/23, sample collected as close contact with another patient 2/26, contact with case 168 from 2/20-2/24, on 2/24 left for Osaka by train and returned to Gifu on 2/25",Gifu Prefecture,Japan,female,55.0,2020-02-23T00:00:00.000000,0,2020-02-26,,,2020-02-20T00:00:00.000000,2020-02-24,,0,0,0,0,"throat pain, chills",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +423,170,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Ishikawa Prefecture, male, 50s, fever 2/16, visited doctor 2/17, visited another doctor 2/22",Ishikawa,Japan,male,55.0,2020-02-16T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +424,171,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kanagawa Prefecture, male, 50s, visited doctor 2/20 with fever, headache, malaise, re-examined 2/21 and 2/25",Kanagawa,Japan,male,55.0,2020-02-20T00:00:00.000000,0,2020-02-20,,,,,,0,0,0,0,"fever, headache, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +425,172,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Tokyo, female, 60, fever, cough, sputum 2/10",Tokyo,Japan,female,60.0,2020-02-10T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, cough, sputum",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +426,173,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Osaka, male, 40s, fever, cough 2/20, headache 2/21, visited doctor 2/26,",Osaka Prefecture,Japan,male,45.0,2020-02-20T00:00:00.000000,0,2020-02-26,,,,,,0,0,0,0,"fever, cough, headache",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +427,174,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 50s, close contact of another case, detected as contact 2/24, fever 2/25, health observation started 2/25",Hokkaido,Japan,male,55.0,2020-02-25T00:00:00.000000,0,2020-02-25,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +428,175,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 50s, detected as close contact of another case 2/24, cough and malaise 2/25, health observation started 2/25",Hokkaido,Japan,male,55.0,2020-02-25T00:00:00.000000,0,2020-02-25,,,,,,0,0,0,0,"cough, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +429,176,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 30s, fever 2/17, went to doctor 2/18, went to another doctor 2/20, went back to first doctor 2/22, admitted to hospital 2/24",Hokkaido,Japan,male,35.0,2020-02-17T00:00:00.000000,0,2020-02-18,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +430,177,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 70s, fatigue 2/16, fever 2/18, went to doctor 2/20, consulted second doctor 2/24, close contact with other infected patients",Hokkaido,Japan,male,75.0,2020-02-16T00:00:00.000000,0,2020-02-20,,,,,,0,0,0,0,"fatigue, fever",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +431,178,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 60s, fever 2/18, went to doctor 2/22, sore throat, joint pain, dyspnea 2/23, hospitalized 2/24",Hokkaido,Japan,male,65.0,2020-02-18T00:00:00.000000,0,2020-02-22,,,,,,0,0,0,0,"sore throat, fever, joint pain, dyspnea",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +432,179,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 40s, vomiting 2/15, cough symptoms 2/16, fever and sore throat 2/17, went to doctor 2/17 and 2/18, consulted second and third doctors 2/24",Hokkaido,Japan,male,45.0,2020-02-15T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,"vomiting, cough, fever, sore throat",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +433,180,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 40s, fever 2/21, went to doctor 2/21, consulted second doctor 2/22, third doctor 2/23 and 2/25, hospitalized 2/27",Hokkaido,Japan,male,45.0,2020-02-21T00:00:00.000000,0,2020-02-21,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +434,181,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, under 10, fever 2/21, cough 2/22, went to doctor 2/24 and 2/25",Hokkaido,Japan,male,5.0,2020-02-21T00:00:00.000000,0,2020-02-24,,,,,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +435,182,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 30s, fever, headache, malaise, joint pain 2/24, went to doctor 2/25",Hokkaido,Japan,male,35.0,2020-02-24T00:00:00.000000,0,2020-02-25,,,,,,0,0,0,0,"fever, headache, malaise, joint pain",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +436,183,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, under 10, fever and cough 2/21, went to doctor 2/22, 2/24, 2/25",Hokkaido,Japan,male,5.0,2020-02-21T00:00:00.000000,0,2020-02-22,,,,,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +437,184,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 80s, fever and cough 2/24, went to doctor 2/24",Hokkaido,Japan,male,85.0,2020-02-24T00:00:00.000000,0,2020-02-24,,,,,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +438,185,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 30s, cough symptoms 2/20, fever and joint pain 2/23, went to doctor 2/23 and 2/25",Hokkaido,Japan,male,35.0,2020-02-20T00:00:00.000000,0,2020-02-23,,,,,,0,0,0,0,"cough, fever, joint pain",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +439,186,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 80s, cough 2/22, fever 2/23, hospitalized 2/24",Hokkaido,Japan,male,85.0,2020-02-22T00:00:00.000000,0,2020-02-24,,,,,,0,0,0,0,"cough, fever",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +440,187,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 60s, fever, malaise, sore throat 2/22, went to doctor 2/22 and 2/25,",Hokkaido,Japan,male,65.0,2020-02-22T00:00:00.000000,0,2020-02-22,,,,,,0,0,0,0,"fever, malaise, sore throat",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +441,188,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 40s, cough and sore throat 2/24, close contact with another patient in Hokkaido",Hokkaido,Japan,female,45.0,2020-02-24T00:00:00.000000,0,,,,,,,0,0,0,0,"cough, sore throat",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +442,189,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya, female, 60s, fever and went to doctor 2/26",Nagoya City,Japan,female,65.0,2020-02-26T00:00:00.000000,0,2020-02-26,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +443,190,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya, male, 60s, fever, cough, headache, went to doctor 2/26",Nagoya City,Japan,male,65.0,2020-02-26T00:00:00.000000,0,2020-02-26,,,,,,0,0,0,0,"fever, cough, headache",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +444,191,2020-02-28T00:00:00.000000,new confirmed COVID-19 patient in Japan:,Japan,Japan,,,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +445,192,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sagamihara city, female, 40s, chills, headache, fatigue 2/18, went to doctor 2/25",Sagamihara City,Japan,female,45.0,2020-02-18T00:00:00.000000,,2020-02-25,,,,,,0,0,0,0,"chills, headache, fatigue",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +446,193,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sagamihara city, male, 20s, fever 2/20",Sagamihara City,Japan,male,25.0,2020-02-20T00:00:00.000000,,,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +447,194,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Shizuoka city, male, 60s, returned home from Diamond Princess 2/20",Shizuoka City,Japan,male,65.0,,,,,,,,1,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +448,195,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 80s, cough and sputum 2/21, went to doctor 2/24, fever 2/25",Hokkaido,Japan,female,85.0,2020-02-21T00:00:00.000000,,2020-02-24,,,,,,0,0,0,0,"cough, sputum",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +449,196,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, under 10, fever 2/18, went to doctor 2/18, 2/19, 2/21, 2/23, 2/27",Hokkaido,Japan,male,5.0,2020-02-18T00:00:00.000000,,2020-02-18,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +450,197,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 80s, fever 2/25, fatigue and difficulty walking 2/26, hospitalized 2/26",Hokkaido,Japan,male,85.0,2020-02-25T00:00:00.000000,,2020-02-26,,,,,,0,0,0,0,"fever, fatigue, difficulty walking",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +451,198,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 60s, cough 2/19, went to doctor 2/26",Hokkaido,Japan,female,65.0,2020-02-19T00:00:00.000000,,2020-02-26,,,,,,0,0,0,0,cough,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +452,199,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 60s, fever 2/21, went to doctor 2/25 and 2/26",Hokkaido,Japan,male,65.0,2020-02-21T00:00:00.000000,,2020-02-25,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +453,200,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 60s, chills 2/18, fever and malaise 2/19, went to doctor 2/22, fever 2/25",Hokkaido,Japan,male,65.0,2020-02-18T00:00:00.000000,,2020-02-22,,,,,,0,0,0,0,"chills, fever, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +454,201,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 60s, sputum and cough 2/19, fever, cough, breathing difficulty 2/24, visited doctor 2/24, 2/25",Hokkaido,Japan,female,65.0,2020-02-19T00:00:00.000000,,2020-02-24,,,,,,0,0,0,0,"sputum, cough, fever, cough, difficulty breathing",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +455,202,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 40s, fever 2/12, admitted to hospital 2/18",Hokkaido,Japan,male,45.0,2020-02-12T00:00:00.000000,,2020-02-18,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +456,203,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 70s, fever 2/20, hospitalized 2/24",Hokkaido,Japan,male,75.0,2020-02-20T00:00:00.000000,,2020-02-24,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +457,204,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sapporo, female, 60s, went to doctor 2/26",Sapporo,Japan,female,65.0,,,2020-02-26,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +458,205,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sapporo, male, 60s, visited doctor due to fever and cough 2/20, re-examined 2/21, 2/22, 2/25, 2/26",Sapporo,Japan,male,65.0,2020-02-20T00:00:00.000000,,2020-02-20,,,,,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +459,206,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sapporo, male, 60s, fever 2/18, visited doctor 2/21, 2/25, 2/26",Sapporo,Japan,male,65.0,2020-02-18T00:00:00.000000,,2020-02-21,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +460,207,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya city, male, 60s, fever and went to doctor 2/27",Nagoya City,Japan,male,65.0,2020-02-27T00:00:00.000000,,2020-02-27,,,,,,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +461,208,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Osaka, female, 40s, headache so went to doctor 2/19, fever 2/25, visited doctor and hospitalized 2/27",Osaka Prefecture,Japan,female,45.0,2020-02-25T00:00:00.000000,,2020-02-19,,,,,,0,0,0,0,"headache, fever",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +462,209,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kochi prefecture, female, 30s, sore throat 2/13, went to doctor 2/14, low fever, cough, runny nose 2/18, visited doctor 2/19, 2/21, 2/28",Kochi Prefecture,Japan,female,35.0,2020-02-13T00:00:00.000000,,2020-02-14,,,,,,0,0,0,0,"sore throat, fever, cough, runny nose",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +463,210,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Niigata City, male, 60s, fever and cough 2/25, fever and went to doctor 2/26, fever, malaise, loss of appetite 2/28, returned to doctor 2/28",Niigata City,Japan,male,65.0,2020-02-25T00:00:00.000000,,2020-02-26,,,,,,0,0,0,0,"fever, cough, malaise, loss of appetite",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +464,211,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sendai city, male, 70s, left Diamond Princess 2/20, slight fever and sore throat, hospitalization 2/28",Sendai City,Japan,male,75.0,,,2020-02-28,,,,,1,0,0,0,0,"fever, sore throat",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +465,212,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Tokyo, female, 20s, fever and cough 2/24",Tokyo,Japan,female,25.0,2020-02-24T00:00:00.000000,,,,,,,,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +466,213,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 90s, cough and nasal discharge 2/20, went to doctor 2/20, fever 2/26 and went back to doctor, difficulty breathing, malaise 2/27 so hospitalized",Hokkaido,Japan,female,95.0,2020-02-20T00:00:00.000000,,2020-02-20,,,,,,0,0,0,0,"cough, nasal discharge, fever, difficulty breathing",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +467,214,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 60s, cough, general malaise, joint muscle pain 2/21, went to doctor 2/26",Hokkaido,Japan,female,65.0,2020-02-21T00:00:00.000000,,2020-02-26,,,,,,0,0,0,0,"cough, general malaise, joint muscle pain",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +468,215,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 30s, visited doctor 2/19 due to fever, headache, malaise, visited again 2/24, 2/25, 2/27",Hokkaido,Japan,female,35.0,2020-02-19T00:00:00.000000,,2020-02-19,,,,,,0,0,0,0,"fever, headache, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +469,216,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 20s, visited doctor 2/21, 2/23, 2/26, 2/28",Hokkaido,Japan,female,25.0,,,2020-02-21,,,,,,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +470,217,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya City, female, 70s, fever, cough, vomiting and hospitalization 2/23",Nagoya City,Japan,female,75.0,2020-02-23T00:00:00.000000,,2020-02-23,,,,,,0,0,0,0,"fever, cough, vomiting, hospitalization",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202002.html +471,218,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kitakyushu City, male, 60s, cough 2/19, fever with cough 2/21, went to doctor 2/25 and hospitalized, transferred to second institution 2/29",Kitakyushu City,Japan,male,65.0,2020-02-19T00:00:00.000000,0,2020-02-25,,,,,0,0,0,0,0,"cough, fever",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +472,219,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kanagawa Prefecture, female, 70s, went to doctor 2/25 with fever and pneumonia",Kanagawa,Japan,female,75.0,2020-02-25T00:00:00.000000,0,2020-02-25,,,,,0,0,0,0,0,"fever, pneumonia",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +473,220,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kanagawa Prefecture, female, 50s, headache so went to doctor 2/14, tested as a close contact 2/27, hospitalized 2/29 with fever, cough, pneumonia",Kanagawa,Japan,female,55.0,2020-02-14T00:00:00.000000,0,2020-02-14,,,,,0,0,0,0,0,"headache, fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +474,221,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Funabashi City, male, 20s, fever 2/22, diarrhea and nausea 2/27, difficulty breathing, coughing, loss of appetite 2/29, admitted to hospital 3/1, grandmother was found positive on 2/27, mother was positive 2/28",Funabashi City,Japan,male,25.0,2020-02-22T00:00:00.000000,0,2020-03-01,,,,,0,0,0,0,0,"fever, diarrhea, nausea, difficulty breathing, coughing, loss of appetite",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +475,222,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, female, 20s, fever, cough, malaise 2/24, went to doctor 2/25, consulted second doctor 2/26, emergency transport to hospital 2/27",Hokkaido,Japan,female,25.0,2020-02-24T00:00:00.000000,0,2020-02-25,,,,,0,0,0,0,0,"fever, cough, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +476,223,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 40s, fever 2/20, went to doctor 2/21, hospitalized 2/28, close contact of another patient",Hokkaido,Japan,male,45.0,2020-02-20T00:00:00.000000,0,2020-02-21,,,,,0,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +477,224,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Tokyo, female, 50s, cough on 2/12",Tokyo,Japan,female,55.0,2020-02-12T00:00:00.000000,0,,,,,,0,0,0,0,0,cough,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +478,225,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Tokyo, male, 70s, fever, difficulty breathing on 2/26",Tokyo,Japan,male,75.0,2020-02-26T00:00:00.000000,0,,,,,,0,0,0,0,0,"fever, difficulty breathing",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +479,226,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sagamihara City, male, 50s, malaise 2/19, fever and joint pain 2/23, visited doctor 2/25, visited outpatient clinic 2/27",Sagamihara City,Japan,male,55.0,2020-02-19T00:00:00.000000,0,2020-02-25,,,,,0,0,0,0,0,"malaise, fever, joint pain",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +480,227,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sagamihara City, female, 50s, malaise 2/19, fever, joint pain, sputum 2/22, vomiting, diarrhea 2/24, visited doctor 2/25, visited outpatient clinic 2/27",Sagamihara City,Japan,female,55.0,2020-02-19T00:00:00.000000,0,2020-02-25,,,,,0,0,0,0,0,"malaise, fever, joint pain, sputum, vomiting, diarrhea",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +481,228,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kochi Prefecture, female, 60s, cough, malaise 2/25, fatigue 2/26, identified as close contact and hospitalized 2/29",Kochi Prefecture,Japan,female,65.0,2020-02-25T00:00:00.000000,0,2020-02-29,,,,,0,0,0,0,0,"cough, malaise, fatigue",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +482,229,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya City, female, 80s, had contact with infected patient, fever 2/24, hospitalized with pneumonia 2/25",Nagoya City,Japan,female,85.0,2020-02-24T00:00:00.000000,0,2020-02-25,,,,,0,0,0,0,0,"pneumonia, fever",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +483,230,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya City, female, 50s, had contact with infected patient, fever 2/26, hospitalized with pneumonia 2/27",Nagoya City,Japan,female,55.0,2020-02-26T00:00:00.000000,0,2020-02-27,,,,,0,0,0,0,0,"pneumonia, fever",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +484,231,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nagoya City, female, 60s, fever 2/27, whole body pain, hospitalization with pneumonia 2/29",Nagoya City,Japan,female,65.0,2020-02-27T00:00:00.000000,0,2020-02-29,,,,,0,0,0,0,0,"fever, whole body pain, pneumonia",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +485,232,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Nishimiya City, male, 40s, fever 2/25, consulted doctor 2/26 and 2/27, returned to hospital 2/29",Nishimiya City,Japan,male,45.0,2020-02-25T00:00:00.000000,0,2020-02-26,,,,,0,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +486,233,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kochi City, female, 30s, coughing 2/24, fever 2/25 and consulted doctor, re-examined 2/27, 2/29",Kochi Prefecture,Japan,female,35.0,2020-02-24T00:00:00.000000,0,2020-02-25,,,,,0,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +487,234,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Niigata Prefecture, male, 40s, fever so visited doctor 2/25, follow-up 2/26, hospitalized 3/1",Niigata City,Japan,male,45.0,2020-02-25T00:00:00.000000,0,2020-02-25,,,,,0,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +488,235,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 60s, fever 2/19, went to doctor 2/24, difficulty breathing 2/28 so admitted to hospital, transferred 2/29",Hokkaido,Japan,male,65.0,2020-02-19T00:00:00.000000,0,2020-02-24,,,,,0,0,0,0,0,"fever, difficulty breathing",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +489,236,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 60s, fever 2/22, went to doctor 2/24, fatigue and diarrhea 2/27, went to second doctor 2/29",Hokkaido,Japan,male,65.0,2020-02-22T00:00:00.000000,0,2020-02-24,,,,,0,0,0,0,0,"fever, fatigue, diarrhea",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +490,237,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Hokkaido, male, 50s, fever, runy nose, sore throat, malaise, joint pain 2/21, went to doctor 2/22, hospitalized 2/28, close contact with another patient",Hokkaido,Japan,male,55.0,2020-02-21T00:00:00.000000,0,2020-02-22,,,,,0,0,0,0,0,"fever, runny nose, sore throat, malaise, joint pain",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +491,238,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Asakihawa City, female, 40s, fatigue 2/24, fever and joint pain 2/25, went to doctor 2/26, went again and confirmed pneumonia 2/28",Asakihawa City,Japan,female,45.0,2020-02-24T00:00:00.000000,0,2020-02-26,,,,,0,0,0,0,0,"fatigue, fever, joint pain, pneumonia",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +492,239,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sapporo City, male, 50s, fatigue 2/15, visited doctor 2/19 due to fever, and again 2/21, 2/25, 2/29",Sapporo,Japan,male,55.0,2020-02-15T00:00:00.000000,0,2020-02-19,,,,,0,0,0,0,0,"fatigue, fever",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +493,240,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Osaka Prefecture, male, 50s, fever 2/22, visited doctor 2/25, visited second doctor 2/29",Osaka Prefecture,Japan,male,55.0,2020-02-22T00:00:00.000000,0,2020-02-25,,,,,0,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +494,241,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Osaka Prefecture, female, 40s, fever 2/24, visited doctor 2/25, 2/29, cough and throat discomfort 3/1, had contact with infected case on 2/22",Osaka Prefecture,Japan,female,45.0,2020-02-24T00:00:00.000000,0,2020-02-25,,,,,0,0,0,0,0,"fever, cough, throat discomfort",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +495,242,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Oita City, female, 30s, fever, headache, malaise 2/23, visited doctor 2/24, 3/2",Oita City,Japan,female,35.0,2020-02-23T00:00:00.000000,0,2020-02-24,,,,,0,0,0,0,0,"fever, headache, malaise",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +496,243,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kobe City, male, 40s, visited doctor 2/27 with fever, again 2/29, admitted to hospital 3/2 with fever, malaise, pneumonia",Kobe City,Japan,male,45.0,2020-02-27T00:00:00.000000,0,2020-02-27,,,,,0,0,0,0,0,"fever, malaise, pneumonia",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +497,244,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sapporo City, female, 30s, fever, headache, cough 2/29, went to emergency safety center 3/1, visited doctor 3/2, hospitalized 3/3",Sapporo,Japan,female,35.0,2020-02-29T00:00:00.000000,0,2020-03-01,,,,,0,0,0,0,0,"fever, headache, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +498,245,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Sapporo City, female, 60s, visited doctor 2/27 with breathing difficulty, re-examined 2/28 with fever but no pneumonia, consulted docto 3/1, hospitalized with pneumonia 32",Sapporo,Japan,female,65.0,2020-02-27T00:00:00.000000,0,2020-02-27,,,,,0,0,0,0,0,"difficulty breathing, fever",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +499,246,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Niigata City, female, 60s, chills and cough 2/22, fever 2/23",Niigata City,Japan,female,65.0,2020-02-22T00:00:00.000000,0,,,,,,0,0,0,0,0,"chills, cough, fever",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +500,247,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Niigata City, female, 50s, fever 2/23",Niigata City,Japan,female,55.0,2020-02-23T00:00:00.000000,0,,,,,,0,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +501,248,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Niigata City, male, 40s, fever 2/24",Niigata City,Japan,male,45.0,2020-02-24T00:00:00.000000,0,,,,,,0,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +502,249,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kyoto, female, 50s, fever 2/21, visited hospital 2/24",Kyoto,Japan,female,55.0,2020-02-21T00:00:00.000000,0,2020-02-24,,,,,0,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +503,250,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Tokyo, female, 50s, fever, cough on 2/23",Tokyo,Japan,female,55.0,2020-02-23T00:00:00.000000,0,,,,,,0,0,0,0,0,"fever, cough",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +504,251,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Osaka, male, 50s, fever 2/23, went to doctor 2/27, pneumonia 3/2",Osaka Prefecture,Japan,male,55.0,2020-02-23T00:00:00.000000,0,2020-02-27,,,,,0,0,0,0,0,"fever, pneumonia",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +505,252,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Osaka, female, 40s, low back pain 2/26, fever 3/1, runny nose 3/2, went to doctor 3/2",Osaka Prefecture,Japan,female,45.0,2020-02-26T00:00:00.000000,0,2020-03-02,,,,,0,0,0,0,0,"back pain, fever, runny nose",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +506,253,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Aichi Prefecture, female, 70s, fever 2/24, diagosed with cold at hospital 2/28, admitted to hospital 3/2",Aichi Prefecture,Japan,female,75.0,2020-02-24T00:00:00.000000,0,2020-02-28,,,,,0,0,0,0,0,"fever, cold",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +507,254,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Aichi Prefecture, male, 80s, fever 2/28, admitted to hospital 3/2",Aichi Prefecture,Japan,male,85.0,2020-02-28T00:00:00.000000,0,2020-03-02,,,,,0,0,0,0,0,fever,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +508,255,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Aichi Prefecture, female, 20s, fever, cough, sore throat 2/28 so went to doctor, diagnosed with pneumonia 3/2",Aichi Prefecture,Japan,female,25.0,2020-02-28T00:00:00.000000,0,2020-02-28,,,,,0,0,0,0,0,"fever, cough, sore throat, pneumonia",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +509,256,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Aichi Prefecture, male, 70s, fever, cough, runny nose 2/26, visited doctor 2/27, 2/29",Aichi Prefecture,Japan,male,75.0,2020-02-26T00:00:00.000000,0,2020-02-27,,,,,0,0,0,0,0,"fever, cough, runny nose",Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +510,257,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Japan: Kobe City, male, 40s, fever 2/27, visited doctor 2/28, admitted to hospital 3/2 with fever, malaise, pneumonia",Aichi Prefecture,Japan,male,45.0,2020-02-27T00:00:00.000000,0,2020-02-28,,,,,0,0,0,0,0,,Ministry of Health,https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html +620,1,2020-01-24T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: male, 40, Wuhan resident, arrived in Johor from Singapore on 1/22/2020, symptom onset 1/23/2020 (fever and cough), hospitalized 1/23/2020",Johor,Malaysia,male,40.0,2020-01-23T00:00:00.000000,0,2020-01-23,,,,,1,0,1,0,1581120000,,Reuters,https://www.reuters.com/article/us-china-health-malaysia/malaysia-confirms-fourth-case-of-coronavirus-infection-idUSKBN1ZO065 +621,2,2020-01-25T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: female, 65, wife of Singapore 1/24-No.1, treated in isolation wards in Selangor, light symptoms (dry cough), took plane from Guangzhou to Singapore on 1/20/2020.",Johor,Malaysia,female,65.0,2020-01-24T00:00:00.000000,1,,,,,,1,0,0,0,1581638400,,Straits Times,https://www.straitstimes.com/asia/se-asia/malaysia-confirms-first-cases-of-wuhan-coronavirus-infection +622,3,2020-01-25T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: male, 11, grandson of Singapore 1/24-No.1, treated in isolation wards in Selangor, light symptoms (dry cough), took plane from Guangzhou to Singapore on 1/20/2020.",Johor,Malaysia,male,11.0,2020-01-24T00:00:00.000000,1,,,,,,1,0,0,0,1581638400,,Straits Times,https://www.straitstimes.com/asia/se-asia/malaysia-confirms-first-cases-of-wuhan-coronavirus-infection +623,4,2020-01-25T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: male, 2, grandson of Singapore 1/24-No.1, treated in isolation wards in Selangor, light symptoms (dry cough), took plane from Guangzhou to Singapore on 1/20/2020.",Johor,Malaysia,male,2.0,2020-01-24T00:00:00.000000,1,,,,,,1,0,0,0,1581638400,,Straits Times,https://www.straitstimes.com/asia/se-asia/malaysia-confirms-first-cases-of-wuhan-coronavirus-infection +624,5,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: female, 4, hospitalized in Langkawi, arrived on 1/20, developed fever, cough, flu, went to hospital 1/26",Langkawi,Malaysia,female,4.0,,,2020-01-26,,,,2020-01-20,,0,0,0,1580774400,"fever, cough, flu",The Star Online,https://www.thestar.com.my/news/nation/2020/01/29/coronavirus-three-new-cases-confirmed-bringing-total-to-seven-cases-in-m039sia +625,6,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: female, daughter-in-law of Singapore 1/24-No.1,",Johor,Malaysia,female,36.0,,,,,,,2020-01-23,,0,0,0,1581638400,,The Star Online,https://www.thestar.com.my/news/nation/2020/01/29/coronavirus-three-new-cases-confirmed-bringing-total-to-seven-cases-in-m039sia +626,7,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: 1/29-No.1, male, 52, hospitalized in Johor",Johor,Malaysia,male,52.0,,,,,,,,,0,0,0,1581984000,,The Star Online,https://www.thestar.com.my/news/nation/2020/01/29/coronavirus-three-new-cases-confirmed-bringing-total-to-seven-cases-in-m039sia +627,8,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: female, 49, hospitalized in Johor, married to 1/29-No.1",Johor,Malaysia,female,49.0,,,,,,,,,0,0,0,1580860800,,The Star Online,https://www.thestar.com.my/news/nation/2020/01/29/coronavirus-three-new-cases-confirmed-bringing-total-to-seven-cases-in-m039sia +628,9,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: 2/4-No.1, male, 41, Malaysian citizen, travelled to Singapore from 1/16-1/23 with colleagues from China, including one from Wuhan, from Selangor, went to hospital 1/29 for fever and cough, referred to hospital on 2/2",Malaysia,Malaysia,male,41.0,,,2020-01-29,,,2020-01-16T00:00:00.000000,2020-01-23,1,0,0,0,1581897600,,Straits Times,https://www.straitstimes.com/asia/se-asia/woman-from-wuhan-is-latest-coronavirus-case-in-malaysia-bringing-total-to-15 +629,10,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: male, 63, Chinese national from Wuhan, been in Malaysia since 1/18, symptom onset 1/23 (fever), went to hospital, still fever on 2/2, admitted into hospital",Malaysia,Malaysia,male,63.0,2020-01-23T00:00:00.000000,0,,,,,2020-01-18,1,0,1,0,1581206400,fever,Straits Times,https://www.straitstimes.com/asia/se-asia/woman-from-wuhan-is-latest-coronavirus-case-in-malaysia-bringing-total-to-16 +630,11,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: male, 45, flown back from Wuhan on 2/4, now in hospital",Malaysia,Malaysia,male,45.0,,,,,,,2020-02-04,1,1,0,0,1581984000,,Straits Times,https://www.straitstimes.com/asia/se-asia/woman-from-wuhan-is-latest-coronavirus-case-in-malaysia-bringing-total-to-17 +631,12,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: male, 9, flown back from Wuhan on 2/4, now in hospital",Malaysia,Malaysia,male,9.0,,,,,,,2020-02-04,1,1,0,0,1581984000,,Straits Times,https://www.straitstimes.com/asia/se-asia/woman-from-wuhan-is-latest-coronavirus-case-in-malaysia-bringing-total-to-18 +632,13,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: female, 40, sister of 2/4-No.1, symptom onset 2/1 (fever, sore throat, cough), visited clinic",Malaysia,Malaysia,female,40.0,2020-02-01T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, sore throat, cough",Straits Times,https://www.straitstimes.com/asia/se-asia/woman-from-wuhan-is-latest-coronavirus-case-in-malaysia-bringing-total-to-19 +633,14,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: 2/6-No.1, female, 37, tourist from Wuhan, arrived on 1/25, visited hospital 2/1 (mild fever), went to hospital 2/5",Malaysia,Malaysia,female,37.0,,,2020-02-01,,,,2020-01-25,1,0,1,0,0,mild fever,Straits Times,https://www.straitstimes.com/asia/se-asia/woman-from-wuhan-is-latest-coronavirus-case-in-malaysia-bringing-total-to-20 +634,15,2020-02-07T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: female, 59, from Wuhan, holidaying in Johor Baru, arrived in Singapore on 1/17, went to Johor Baru 1/21, symptom onset 1/26 (fever)",Johor,Malaysia,female,59.0,2020-01-26T00:00:00.000000,0,,,,,2020-01-17,1,0,1,0,1581724800,fever,Straits Times,https://www.straitstimes.com/asia/se-asia/woman-from-wuhan-is-latest-coronavirus-case-in-malaysia-bringing-total-to-21 +635,16,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: female, 67, from Wuhan, mother of a friend of 2/6-No.1, arrived for holiday on 1/25",Malaysia,Malaysia,female,67.0,,,,,,,2020-01-25,1,0,1,0,1582761600,,Straits Times,https://www.straitstimes.com/asia/se-asia/woman-from-wuhan-is-latest-coronavirus-case-in-malaysia-bringing-total-to-22 +636,17,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: female, 65, mother-in-law of 2/4-No.1, exposed 1/26-1/28",Malaysia,Malaysia,female,65.0,,,,,,2020-01-26T00:00:00.000000,2020-01-28,,0,0,0,1582070400,,Straits Times,https://www.straitstimes.com/asia/se-asia/woman-from-wuhan-is-latest-coronavirus-case-in-malaysia-bringing-total-to-23 +637,18,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: male, 31, travelled to Macau for work then returned to Malaysia on 2/1, symptom onset 2/3 (cough), went to clinic, referred to hospital 2/7",Malaysia,Malaysia,male,31.0,2020-02-03T00:00:00.000000,0,,,,,2020-02-01,1,0,0,0,1582070400,cough,Straits Times,https://www.straitstimes.com/asia/se-asia/woman-from-wuhan-is-latest-coronavirus-case-in-malaysia-bringing-total-to-24 +638,19,2020-02-13T00:00:00.000000,"new confimed COVID-19 patient in Malaysia: female, 39, from Wuhan, daughter of case 16",Malaysia,Malaysia,female,39.0,,,,,,,,1,0,1,0,0,,The Star Online,https://www.thestar.com.my/news/nation/2020/02/16/three-more-covid-19-positive-cases +639,20,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: male, 27, Chinese national, found to have a fever on 2/13/2020, referred to hospital 2/13",Malaysia,Malaysia,male,27.0,2020-02-13T00:00:00.000000,0,2020-02-13,,,,,1,0,0,0,1582156800,fever,The Star Online,https://www.thestar.com.my/news/nation/2020/02/16/three-more-covid-19-positive-cases +640,21,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: female, 32, Chinese national, went to China 1/22-1/30 to visit family, symptom onset 2/13 (sore throat), referred to hospital",Malaysia,Malaysia,female,32.0,2020-02-13T00:00:00.000000,0,,,,2020-01-22T00:00:00.000000,2020-01-30,1,0,0,0,1582156800,sore throat,The Star Online,https://www.thestar.com.my/news/nation/2020/02/16/three-more-covid-19-positive-cases +641,22,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: female, 83, American, passenger of cruise ship that docked in Cambodia 2/13, flew to Malaysia 2/14",Malaysia,Malaysia,female,83.0,,,,,,,2020-02-13,1,0,0,0,1582761600,,The Star Online,https://www.thestar.com.my/news/nation/2020/02/16/three-more-covid-19-positive-cases +642,23,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Malaysia: female, 53, returned to Malaysia from Japan on 2/23",Malaysia,Malaysia,female,53.0,,,,,,,2020-02-23,1,0,0,0,0,,Straits Times,https://www.straitstimes.com/asia/se-asia/malaysia-confirms-1st-case-of-coronavirus-with-travel-history-to-japan +643,1,2020-01-25T00:00:00.000000,"new confirmed COVID-19 patient in Nepal: male, 32, studying in Wuhan, arrived in Nepal 1/13/2020 from China, visited Kathmandu hospital (fever, breathing problems) 1/13/2020, discharged, symptom onset 1/3 (cough), discharged 1/17",Kathmandu,Nepal,male,32.0,2020-01-03T00:00:00.000000,0,2020-01-13,,,,2020-01-13,1,0,1,0,1579219200,,South China Morning Post,https://www.scmp.com/news/china/society/article/3047625/china-coronavirus-nepal-reports-first-case-infection-virus +644,1,2020-01-24T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 1/24-No.1, male, 66, Wuhan resident, arrived in Singapore 1/20/2020, symptom onset 1/21/2020 (fever and cough), hospitalized 1/22/2020, confirmed 1/23/2020.",Singapore,Singapore,male,66.0,2020-01-21T00:00:00.000000,0,2020-01-22,,,,2020-01-20,1,0,1,0,1582070400,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-pneumonia-cases-outbreak-singapore-confirmed-cases-12319272 +645,2,2020-01-24T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 53, Wuhan resident, arrived in Singapore 1/21/2020, symptom onset 1/21/2020 (fever, cough, chills), hospitalized 1/22/2020, confirmed 1/23/2020.",Singapore,Singapore,female,53.0,2020-01-21T00:00:00.000000,0,2020-01-22,,,,2020-01-21,1,0,1,0,1581033600,"fever, cough, chills",Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-pneumonia-cases-outbreak-singapore-confirmed-cases-12319273 +646,3,2020-01-24T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 37, son of 1/24-No.1, suspected case 1/23/2020, Wuhan resident, arrived in Singapore 1/20/2020, confirmed 1/24/2020, in isolation.",Singapore,Singapore,male,37.0,,,,,,,2020-01-22,1,0,1,0,1582243200,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-pneumonia-cases-outbreak-singapore-confirmed-cases-12319274 +647,4,2020-01-26T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 1/26-No.1, male, 36, Wuhan resident, arrived in Sentosa,Singapore 1/22/2020, symptom onset 1/23/2020 (cough), went to hospital on 1/24/2020.",Singapore,Singapore,male,36.0,2020-01-23T00:00:00.000000,0,2020-01-24,,,,2020-01-22,1,0,1,0,1581465600,,South China Morning Post,https://www.scmp.com/news/asia/southeast-asia/article/3047663/china-coronavirus-singapore-and-malaysia-both-report +648,5,2020-01-27T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 56, Wuhan resident, arrived in Singapore 1/18/2020 asymptomatic, symptom onset 1/24/2020, hospitalized 1/26/2020.",Singapore,Singapore,female,56.0,2020-01-24T00:00:00.000000,0,2020-01-26,,,,2020-01-18,1,0,1,0,1581984000,,Straits Times,https://www.straitstimes.com/singapore/wuhan-virus-singapore-confirms-5th-case-patient-from-wuhan-stayed-at-her-familys-home-in +649,6,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 56, Wuhan resident, arrived in Singapore 1/19/2020, symptom onset 1/25/2020 (cough), hospitalized 1/26/2020, tested positive 1/27/2020.",Singapore,Singapore,male,56.0,2020-01-25T00:00:00.000000,0,2020-01-26,,,,2020-01-19,1,0,1,0,1582156800,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-pneumonia-cases-outbreak-singapore-confirmed-cases-12319274 +650,7,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 35, Wuhan resident, arrived in Singapore 1/23/2020, symptom onset 1/24/2020, hospitalized 1/24/2020, tested positive 1/27/2020, discharged 2/4/2020",Singapore,Singapore,male,35.0,2020-01-24T00:00:00.000000,0,2020-01-24,,,,2020-01-23,1,0,1,0,1580774400,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-pneumonia-cases-outbreak-singapore-confirmed-cases-12319274 +651,8,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 56, married to 1/29-No.2, arrived in Singapore 1/19/2020, warded in isolation rooms, symptom onset 1/24/2020, went to hospital on 1/27/2020, confirmed 1/28/2020, Church cluster",Singapore,Singapore,female,56.0,2020-01-24T00:00:00.000000,0,2020-01-27,,,,2020-01-19,1,1,0,0,1581984000,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-singapore-new-confirmed-cases-10-total-12364556 +652,9,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 56, married to 1/29-No.1, arrived in Singapore 1/19/2020, warded in isolation rooms, symptom onset 1/24/2020, went to hospital 1/27/2020, confirmed 1/29/2020, church cluster",Singapore,Singapore,male,56.0,2020-01-24T00:00:00.000000,0,2020-01-27,,,,2020-01-19,1,1,0,0,1582416000,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-singapore-new-confirmed-cases-10-total-12364557 +653,10,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 56, arrived in Singapore 1/20/2020, warded, symptom onset 1/21/2020, admitted to NCID 1/28/2020, confirmed 1/29/2020.",Singapore,Singapore,male,56.0,2020-01-21T00:00:00.000000,0,2020-01-28,,,,2020-01-20,1,1,0,0,1581206400,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-singapore-new-confirmed-cases-10-total-12364558 +654,11,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 31, from Wuhan, arrived in Singapore 1/22/2020, travelling companion of 1/26-No.1, no symptoms on flight, quarantined from 1/26/2020, symptom onset 1/27/2020, confirmed 1/29/2020",Singapore,Singapore,female,31.0,2020-01-27T00:00:00.000000,0,,,,,2020-01-22,1,0,1,0,1581206400,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-singapore-new-confirmed-cases-13-12369838 +655,12,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 37, from Wuhan, arrived in Singapore 1/22/2020 with family, also asymptomatic during flight, symptom onset 1/26/2020, went to hospital on 1/29/2020",Singapore,Singapore,female,37.0,2020-01-26T00:00:00.000000,0,2020-01-29,,,,2020-01-22,1,0,1,0,1581465600,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-singapore-new-confirmed-cases-13-12369839 +656,13,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 1/30-No.1, female, 73, from Wuhan, arrived in Singapore with family 1/21/2020, tested positive on 1/30/2020, symptom onset 1/28/2020",Singapore,Singapore,female,73.0,2020-01-28T00:00:00.000000,0,,,,,2020-01-21,1,0,1,0,1581465600,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-singapore-new-confirmed-cases-13-12369840 +657,14,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 31, Chinese national, evacuated from Wuhan on 1/26/2020, asymptomatic on flight by symptom onset 1/28/2020, went to clinic on 1/30/2020",Singapore,Singapore,male,31.0,2020-01-28T00:00:00.000000,0,2020-01-30,,,,2020-01-26,1,1,0,0,1581897600,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-confirmed-imported-cases-of-novel-coronavirus-infection-in-singapore +658,15,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 47, Singaporean, evacuated from Wuhan on 1/30/2020, found to have a fever on arrival at Changi airport, tested positive 1/31/2020, now in isolation",Singapore,Singapore,female,47.0,2020-01-30T00:00:00.000000,0,2020-01-30,,,,2020-01-30,1,1,0,0,1581897600,fever,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-confirmed-imported-cases-of-novel-coronavirus-infection-in-singapore +659,16,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 38, male, Chinese national, arrived in Singapore from Wuhan 1/22/2020, asymptomatic during flight, symptom onset 1/23/2020, stayed home until 1/29/2020 when he took a taxi to SGH, conformed 1/31/2020",Singapore,Singapore,male,38.0,2020-01-23T00:00:00.000000,0,2020-01-29,,,,2020-01-22,1,1,0,0,1582156800,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-confirmed-imported-cases-of-novel-coronavirus-infection-in-singapore +660,17,2020-02-01T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 47, Singaporean, evacuated from Wuhan on 1/30/2020, found to have a fever on arrival at Changi airport, tested positive 1/31/2020, now in isolation",Singapore,Singapore,female,47.0,2020-01-30T00:00:00.000000,0,2020-01-30,,,,2020-01-30,1,1,0,0,1581379200,fever,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-confirmed-imported-cases-of-novel-coronavirus-infection-in-singapore +661,18,2020-02-01T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 31, Chinese national, arrived in Singapore from Wuhan 1/22/2020, tested positive 2/1/2020",Singapore,Singapore,female,31.0,,,,,,,2020-01-22,1,1,0,0,1582761600,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-confirmed-imported-cases-of-novel-coronavirus-infection-in-singapore +662,19,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 2/4-No.1, female, 28, Singaporean, symptom onset 1/29/2020 (fever, sore throat), went to clinic 1/29/2020, hospital 1/30/2020 but discharged after found to not have pneumonia, stayed at home from 1/31/2020 to 2/2/2020 before being admitted to hospital on 2/3/3030, no recent travel history to China, work at shop tour group visited, group visited store 1/23",Singapore,Singapore,female,28.0,2020-01-29T00:00:00.000000,0,2020-02-03,,,2020-01-23T00:00:00.000000,2020-01-23,,0,0,0,1582329600,"fever, sore throat",Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-coronavirus-singapore-community-spread-tourists-12389314 +663,20,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 2/4-No.2, female, 48, Singaporean, symptom onset 1/25/2020, admitted 2/3/2020 to NCID, no recent travel history to China, work at shop tour group visited, group visited store 1/23",Singapore,Singapore,female,48.0,2020-01-25T00:00:00.000000,0,2020-02-03,,,2020-01-23T00:00:00.000000,2020-01-23,,0,0,0,1582934400,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-coronavirus-singapore-community-spread-tourists-12389314 +664,21,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 44, Indonesian national, symptom onset 2/2/2020, did not leave house until admitted to hospital 2/3/2020, no recent travel history to China, domestic helpers of 2/4-No.1",Singapore,Singapore,female,44.0,2020-02-02T00:00:00.000000,0,2020-02-03,,,2020-01-23T00:00:00.000000,,,0,0,0,1581984000,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-coronavirus-singapore-community-spread-tourists-12389314 +665,22,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: Singaporeans, evacuated from Wuhan 1/30/2020, no symptoms on boarding, tested positive 2/3/2020 despite having no symptoms",Singapore,Singapore,,,,,,,,,2020-01-30,1,1,0,0,1581206400,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-coronavirus-singapore-community-spread-tourists-12389314 +666,23,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: Singaporeans, evacuated from Wuhan 1/30/2020, no symptoms on boarding, tested positive 2/3/2020 despite having no symptoms",Singapore,Singapore,,,,,,,,,2020-01-30,1,1,0,0,1582243200,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-coronavirus-singapore-community-spread-tourists-12389314 +667,24,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 2/4-No.2, female, 32, no recent travel history to China, tour guide for group of Chinese tourists, in Singapore 1/22-1/23 and 1/27, asymptomatic on arrival to NCID",Singapore,Singapore,female,32.0,,,,,,2020-01-22T00:00:00.000000,2020-01-27,,0,0,0,1581724800,,Channel News Asia,https://www.channelnewsasia.com/news/singapore/wuhan-virus-coronavirus-singapore-community-spread-tourists-12389314 +668,25,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, husband of 2/4-No.2, had not been to China recently, at NCID, symptom onset 1/24/2020 (fever), visited clinic with wife on 1/30/2020, went to NCID on 2/3/2020",Singapore,Singapore,male,,2020-01-24T00:00:00.000000,0,2020-02-03,,,,,,0,0,0,1581465600,fever,Straits Times,https://www.straitstimes.com/singapore/health/coronavirus-4-more-confirmed-cases-in-singapore-28-cases-so-far +669,26,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 42, Chinese national, arrived in Singapore from Wuhan on 1/21/2020, daughter of 1/30-No.1,",Singapore,Singapore,female,42.0,,,,,,,2020-01-21,1,1,0,0,1581206400,,Straits Times,https://www.straitstimes.com/singapore/health/coronavirus-4-more-confirmed-cases-in-singapore-28-cases-so-far +670,27,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 6 months, son of 2/4-No.1, now in isolation room in hospital",Singapore,Singapore,male,0.5,,,,,,2020-01-23T00:00:00.000000,2020-02-03,,0,0,0,1582243200,,Straits Times,https://www.straitstimes.com/singapore/health/coronavirus-4-more-confirmed-cases-in-singapore-28-cases-so-far +671,28,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 45, married fo 2/4-No.1, warded in isolationi at NCID, symptom onset 2/1, visited clinic 2/2, isolated 2/4",Singapore,Singapore,male,45.0,2020-02-01T00:00:00.000000,0,2020-02-02,,,2020-01-23T00:00:00.000000,2020-02-03,,0,0,0,1582329600,,Straits Times,https://www.straitstimes.com/singapore/health/coronavirus-4-more-confirmed-cases-in-singapore-28-cases-so-far +672,29,2020-02-06T00:00:00.000000,"new confimed COVID-19 patient in Singapore: male, 41, Singapore citizen, no recent travel history, admitted to hospital on 2/3, symptom onset 1/28/2020 (fever), visited clinic 1/29/2020 and 1/30/2020",Singapore,Singapore,male,41.0,2020-01-28T00:00:00.000000,0,2020-01-29,,,,,,0,0,0,1581465600,fever,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-confirmed-cases-of-novel-coronavirus-infection-in-singapore#_ftn1 +673,30,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 2/6-No.1, male, 27, Singapore citizen, no recent travel history, attended business meeting 1/20-1/22 with people from Hubei and confirmed cases from Malaysia and South Korea, now in NCID, symptom onset 1/21, visited clinic 1/28, another clinic 2/3, admitted to NCID 2/6",Singapore,Singapore,male,27.0,2020-01-21T00:00:00.000000,0,2020-01-28,,,2020-01-20T00:00:00.000000,2020-01-22,,0,0,0,1581638400,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-confirmed-cases-of-novel-coronavirus-infection-in-singapore#_ftn1 +674,31,2020-02-07T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 53, Singapore citizen, no recent travel history to China, but went to Malaysia on 1/6, 1/11, 1/17, currently in isolation roomin hospital, symptom onset 1/23, visited clinic 1/23, visited another clinic 1/28, admitted to hospital 2/1, Church cluster",Singapore,Singapore,male,53.0,2020-01-23T00:00:00.000000,0,2020-01-23,,,,,,0,0,0,1581897600,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/three-more-confirmed-cases-of-novel-coronavirus-infection-in-singapore +675,32,2020-02-07T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 42, Singapore citizen, no recent travel, warded in NCID, symptom onset 2/2, admitted to hospital 2/5",Singapore,Singapore,female,42.0,2020-02-02T00:00:00.000000,0,2020-02-05,,,,,,0,0,0,1582070400,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/three-more-confirmed-cases-of-novel-coronavirus-infection-in-singapore +676,33,2020-02-07T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 39, no recent travel, went to Malaysia 1/22-1/29, now in hospital, symptom onset 1/30, went to ER 2/2, church cluster",Singapore,Singapore,female,39.0,2020-01-30T00:00:00.000000,0,2020-02-02,,,,,,0,0,0,1582070400,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/three-more-confirmed-cases-of-novel-coronavirus-infection-in-singapore +677,34,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 40, symptom onset 1/27, visited clinic 1/27, 2/1, close contact of 2/4-No.1 and 2/4-No.2, home quarantine 2/4, admitted to NCID 2/6",Singapore,Singapore,female,40.0,2020-01-27T00:00:00.000000,0,2020-01-27,,,,2020-02-04,,0,0,0,1581465600,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/seven-more-confirmed-cases-of-novel-coronavirus-infection-in-singapore +678,35,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 64, in hospital, symptom onset 1/30, visited clinic 1/31, admitted to hospital 2/6",Singapore,Singapore,male,64.0,2020-01-30T00:00:00.000000,0,2020-01-31,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/seven-more-confirmed-cases-of-novel-coronavirus-infection-in-singapore +679,36,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 2/8-No.1, female, 38, in isolation, symptom onset 1/24, visited clinic 2/1, admitted to hospital 2/4, attended same private business meeting as case 30 (2/6-No.1)and 39 (2/8-No.2) from 1/20-1/22",Singapore,Singapore,female,38.0,2020-01-24T00:00:00.000000,0,2020-02-01,,,2020-01-20T00:00:00.000000,2020-01-22,,0,0,0,1581379200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/seven-more-confirmed-cases-of-novel-coronavirus-infection-in-singapore +680,37,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 53, symptom onset 1/30, visited clinic 2/1, 2/3, admitted to hospital 2/6, transferred to NCID 2/8",Singapore,Singapore,male,53.0,2020-01-30T00:00:00.000000,0,2020-02-01,,,,,,0,0,0,1583107200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/seven-more-confirmed-cases-of-novel-coronavirus-infection-in-singapore +681,38,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 52, symptom onset 2/3, visited clinic 2/4, admitted to NCID 2/7",Singapore,Singapore,female,52.0,2020-02-03T00:00:00.000000,0,2020-02-04,,,,,,0,0,0,1581984000,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/seven-more-confirmed-cases-of-novel-coronavirus-infection-in-singapore +682,39,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 2/8-No.2, male, 51, travelled to malaysia from 1/23 to 2/2, symptom onset 1/29, visited clinic 2/3, 2/5, admitted to NCID 2/6, attended same private business meeting as case 30 (2/6-No.1) and 36 (2/8-No.2) from 1/20 to 1/22",Singapore,Singapore,male,51.0,2020-01-29T00:00:00.000000,0,2020-02-03,,,2020-01-20T00:00:00.000000,2020-01-22,,0,0,0,1581811200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/seven-more-confirmed-cases-of-novel-coronavirus-infection-in-singapore +683,40,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 36, symptom onset 1/30, visited clinic 1/30, close contact of case 19 and 20 (2/4-No.1 and 2), placed under home quarantine on 2/4, admitted to NCID 2/7",Singapore,Singapore,male,36.0,2020-01-30T00:00:00.000000,0,2020-01-30,,,,2020-02-04,,0,0,0,1581465600,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/seven-more-confirmed-cases-of-novel-coronavirus-infection-in-singapore +684,41,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 71, symptom onset 2/1, clinic 2/1, 2/5, went to clinic 2/6, hospital 2/7",Singapore,Singapore,male,71.0,2020-02-01T00:00:00.000000,0,2020-02-01,,,,,,0,0,0,0,,The Star Online,https://www.thestar.com.my/news/regional/2020/02/09/singapore-confirms-three-more-coronavirus-cases-total-now-at-43-says-singapore-health-ministry +685,42,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 39, symptom onset 2/1, clinic 2/3, hospital 2/5",Singapore,Singapore,male,39.0,2020-02-01T00:00:00.000000,0,2020-02-03,,,,,,0,0,0,0,,The Star Online,https://www.thestar.com.my/news/regional/2020/02/09/singapore-confirms-three-more-coronavirus-cases-total-now-at-43-says-singapore-health-ministry +686,43,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 54, in Malaysia 1/26, symptom onset 1/30, visited clinics on 1/30, 2/5, 2/6, hospital 2/6",Singapore,Singapore,male,54.0,2020-01-30T00:00:00.000000,0,2020-01-30,,,,,,0,0,0,0,,The Star Online,https://www.thestar.com.my/news/regional/2020/02/09/singapore-confirms-three-more-coronavirus-cases-total-now-at-43-says-singapore-health-ministry +687,44,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 37, male, symptom onset 1/31/2020, clinic 2/2, hospital 2/6",Singapore,Singapore,male,37.0,2020-01-31T00:00:00.000000,0,2020-02-02,,,,,,0,0,0,1582070400,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/one-more-case-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed-10feb +688,45,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 2, female, evacuated from Wuhan on 1/30, without symptoms on board, quarantined upon landing, went to hospital on 2/7",Singapore,Singapore,female,2.0,,,,,,,2020-01-30,1,1,0,0,1581638400,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/one-more-case-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed-10feb +689,46,2020-02-11T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 35, male, lives in Johor Bahru, symptom onset 2/5, went to clinic 2/9, transferred to hospital 2/9",Singapore,Singapore,male,35.0,2020-02-05T00:00:00.000000,0,2020-02-09,,,,,,0,0,0,1582502400,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +690,47,2020-02-11T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 39, symptom onset 2/6, went to clinic 2/7, NCID 2/10, works at same location as case 42",Singapore,Singapore,male,39.0,2020-02-06T00:00:00.000000,0,2020-02-07,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +691,48,2020-02-12T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 34, in Malaysia on 1/26, symptom onset 2/1, went to clinic on 2/2, 2/4, 2/7, 2/9, 2/10, went to NCID 2/10",Singapore,Singapore,male,34.0,2020-02-01T00:00:00.000000,0,2020-02-02,,,,,,0,0,0,1581897600,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +692,49,2020-02-12T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 46, symptom onset 2/3, went to clinic 2/8, ED on 2/8, 2/10",Singapore,Singapore,male,46.0,2020-02-03T00:00:00.000000,0,2020-02-08,,,,,,0,0,0,1582675200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +693,50,2020-02-12T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 62, symptom onset 2/7, went to clinics on 2/7, 2/10, 2/11, admitted to NCID 2/11",Singapore,Singapore,male,62.0,2020-02-07T00:00:00.000000,0,2020-02-07,,,,,,0,0,0,1582243200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +694,51,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 48, symptom onset 2/3, went to clinic 2/5, 2/10",Singapore,Singapore,male,48.0,2020-02-04T00:00:00.000000,0,2020-02-05,,,,,,0,0,0,1582243200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +695,52,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 37, Bangladesh national, symptom onset 2/7, close contact of cases 42, 47, went to hospital on 2/11",Singapore,Singapore,male,37.0,2020-02-07T00:00:00.000000,0,2020-02-11,,,,,,0,0,0,1582848000,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +696,53,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 54, symptom onset 2/10, went to NCID 2/12",Singapore,Singapore,male,54.0,2020-02-10T00:00:00.000000,0,2020-02-12,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +697,54,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 54, linked to Grace Assembly of God, symptom onset 2/10, went to clinic 2/11, went to NCID 2/12",Singapore,Singapore,female,55.0,2020-02-10T00:00:00.000000,0,2020-02-11,,,,,,0,0,0,1583020800,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +698,55,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 30, family member of case 50, symptom onset 1/30, went to clinic on 1/30, 2/3, NCID on 2/12",Singapore,Singapore,male,30.0,2020-01-30T00:00:00.000000,0,2020-01-30,,,,,,0,0,0,1582070400,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +699,56,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 30, linked to cluster at Aerospace Heights construction site, close contact of case 47, symptom onset 2/12",Singapore,Singapore,male,30.0,2020-02-12T00:00:00.000000,0,,,,,,,0,0,0,1582675200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +700,57,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 26, symptom onset 2/11, NCID on 2/11",Singapore,Singapore,male,26.0,2020-02-11T00:00:00.000000,0,2020-02-11,,,,,,0,0,0,1582243200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +701,58,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 55, symptom onset 2/10, went to NCID 2/12, linked to cluster at Grace Assemly of God",Singapore,Singapore,male,55.0,2020-02-10T00:00:00.000000,0,2020-02-12,,,,,,0,0,0,1582588800,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +702,59,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 61, symptom onset 2/7, went to clinic 2/10, hospital on 2/12, NCID on 2/13",Singapore,Singapore,male,61.0,2020-02-07T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,1582675200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +703,60,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 51, linked to cluster at Grace Assembly of God, symptom onset 2/8, clinic on 2/8, went to NCID on 2/12",Singapore,Singapore,female,51.0,2020-02-08T00:00:00.000000,0,2020-02-08,,,,,,0,0,0,1583020800,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +704,61,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 57, symptom onset 2/6, went to clinic on 2/6 and 2/8, went to hospital on 2/9 and 2/11 and 2/12",Singapore,Singapore,male,57.0,2020-02-06T00:00:00.000000,0,2020-02-06,,,,,,0,0,0,1583280000,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +705,62,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 44, symptom onset 2/9, clinic on 2/9, went to hospital on 2/12",Singapore,Singapore,female,44.0,2020-02-09T00:00:00.000000,0,2020-02-09,,,,,,0,0,0,1582588800,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +706,63,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 54, linked to Grace Assembly of God, symptom onset 2/10, went to clinic on 2/13, send to NCID",Singapore,Singapore,female,54.0,2020-02-10T00:00:00.000000,0,2020-02-13,,,,,,0,0,0,1582243200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +707,64,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 50, symptom onset 2/3, went to clinics on 2/5, 2/7, 2/10, 2/13, ED on 2/13",Singapore,Singapore,male,50.0,2020-02-03T00:00:00.000000,0,2020-02-05,,,,,,0,0,0,1582502400,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +708,65,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 61, family member of case 50 and case 55, sent to NCID on 2/12",Singapore,Singapore,female,61.0,,,2020-02-12,,,,,,0,0,0,1581897600,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +709,66,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 28, linked to cluster at Grace Assemly of God, symptom onset 1/29, went to clinic on 2/2, 2/5, 2/12, referred to NCID 2/12",Singapore,Singapore,male,28.0,2020-01-29T00:00:00.000000,0,2020-02-02,,,,,,0,0,0,1582156800,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +710,67,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 56, linked to cluster at Grace Assembly of God, family member of case 61, symptom onset 2/9, sent to NCID on 2/13",Singapore,Singapore,female,56.0,2020-02-09T00:00:00.000000,0,2020-02-13,,,,,,0,0,0,1583107200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-two-new-cases-of-novel-coronavirus-infection-confirmed +711,68,2020-02-15T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 79, family member of case 66, symptom onset 1/30, went to NCID 2/14",Singapore,Singapore,female,79.0,2020-01-30T00:00:00.000000,0,2020-02-14,,,,,,0,0,0,1582934400,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-nine-new-cases-of-covid-19-infection-confirmed +712,69,2020-02-15T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 26, male, linked to cluster at Seletar Aerospace Heights construction site, close contact of cases 42, 47, 52, 56, quarantined from 2/11, symptom onset 2/11, went to NCID 2/14",Singapore,Singapore,male,26.0,2020-02-11T00:00:00.000000,0,2020-02-14,,,,,,0,0,0,1583107200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-nine-new-cases-of-covid-19-infection-confirmed +713,70,2020-02-15T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 27, family member of case 66, symptom onset 2/3, treatment at clinic 2/3, NCID 2/14",Singapore,Singapore,female,27.0,2020-02-03T00:00:00.000000,0,2020-02-03,,,,,,0,0,0,1582243200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-nine-new-cases-of-covid-19-infection-confirmed +714,71,2020-02-15T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 25, contact of case 66 and 70, symptom onset 2/1, went to clinic 2/10, went to hospital 2/13, NCID 2/15",Singapore,Singapore,male,25.0,2020-02-01T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-nine-new-cases-of-covid-19-infection-confirmed +715,72,2020-02-15T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 40, male, non-medical contact of case 59, symptom onset 2/10, treatment at clinic 2/11 and 2/13, sent to NCID 2/14",Singapore,Singapore,male,40.0,2020-02-10T00:00:00.000000,0,2020-02-11,,,,,,0,0,0,1582761600,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/two-more-cases-discharged-nine-new-cases-of-covid-19-infection-confirmed +716,73,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 43, male, linked to cluster at Grace Assembly of God, symptom onset 2/9, went to clinic 2/10, close contact of cases 51, home quarantine order on 2/13",Singapore,Singapore,male,43.0,2020-02-09T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,1582675200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/one-more-case-discharged-three-new-cases-of-covid-19-infection-confirmed +717,74,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 29, male, linked to cluster at Grace Assembly of God, symptom onset 2/12, went to urgent care center 2/12 and 2/15",Singapore,Singapore,male,29.0,2020-02-12T00:00:00.000000,0,2020-02-12,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/one-more-case-discharged-three-new-cases-of-covid-19-infection-confirmed +718,75,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 71, female, family member of case 41, under quarantine since 2/7",Singapore,Singapore,female,71.0,,,,,,,,,0,0,0,1582934400,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/one-more-case-discharged-three-new-cases-of-covid-19-infection-confirmed +719,76,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 1, male, evacuated from Wuhan 2/9",Singapore,Singapore,male,1.0,,,,,,,2020-02-09,1,0,0,0,1581984000,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/five-more-cases-discharged-two-new-cases-of-covid-19-infection-confirmed +720,77,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 35, male, contact of case 50, symptom onset 2/10, went to clinic 2/10 and 2/11, went to hospital 2/12, transferred to NCID 2/12",Singapore,Singapore,male,35.0,,,,,,,,,0,0,0,1582588800,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/five-more-cases-discharged-two-new-cases-of-covid-19-infection-confirmed +721,78,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 57, female, linked to cluster at Grace Assembly of God, symptom onset 2/9, went to clinics 2/10 and 2/17, went to NCID 2/17",Singapore,Singapore,female,57.0,2020-02-09T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,1582761600,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/five-more-cases-discharged-four-new-cases-of-covid-19-infection-confirmed +722,79,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 35, female, family member of case 72, symptom onset 2/12, home quarantine 2/15, went to NCID 2/17",Singapore,Singapore,female,35.0,2020-02-12T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,1582848000,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/five-more-cases-discharged-four-new-cases-of-covid-19-infection-confirmed +723,80,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 38, female, linked to case 66, symptom onset 2/4, went to clinic 2/4 and 2/10",Singapore,Singapore,female,38.0,2020-02-04T00:00:00.000000,0,2020-02-04,,,,,,0,0,0,1582761600,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/five-more-cases-discharged-four-new-cases-of-covid-19-infection-confirmed +724,81,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 50, male, linked to cluster at Grace Assembly of God, symptom onset 2/16, went to NCID on 2/17",Singapore,Singapore,male,50.0,2020-02-16T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,1582588800,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/five-more-cases-discharged-four-new-cases-of-covid-19-infection-confirmed +725,82,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 57, female, symptom onset 2/9, went to clinic 2/10 and 2/14 and 2/12, hospital on 2/13 and 2/15, admitted 2/15",Singapore,Singapore,female,57.0,2020-02-09T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/five-more-cases-discharged-three-new-cases-of-covid-19-infection-confirmed +726,83,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 54, male, travels frequently to Malaysia, symptom onset 1/28, went to clinic on 2/1, 2/5, 2/6, 2/10, NCID 2/18",Singapore,Singapore,male,54.0,2020-01-28T00:00:00.000000,0,2020-02-01,,,,,,0,0,0,1582243200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/five-more-cases-discharged-three-new-cases-of-covid-19-infection-confirmed +727,84,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 35, female, linked to case 66, symptom onset 2/4, went to clinic 2/4 and 2/5, referred to NCID on 2/18",Singapore,Singapore,female,35.0,2020-02-04T00:00:00.000000,0,2020-02-04,,,,,,0,0,0,1582243200,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/five-more-cases-discharged-three-new-cases-of-covid-19-infection-confirmed +728,85,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 36, male, symptom onset 2/14, went to clinic 2/14, 2/16, 2/19, went to hospital 2/19",Singapore,Singapore,male,36.0,2020-02-14T00:00:00.000000,0,2020-02-14,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/news-highlights/details/five-more-cases-discharged-three-new-cases-of-covid-19-infection-confirmed +729,86,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 24, linked to case 82, symptom onset 2/14, went to clinics 2/16, 2/18, hospital on 2/19",Singapore,Singapore,male,24.0,2020-02-14T00:00:00.000000,0,2020-02-16,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +730,87,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 32, evacuated from Wuhan 2/9",Singapore,Singapore,male,32.0,,,,,,,2020-02-09,1,1,0,0,1582502400,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +731,88,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 30, symptom onset 2/16, went to clinic 2/17, identified as contact of case 66, went to NCID 2/21",Singapore,Singapore,female,30.0,2020-02-16T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,1583107200,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +732,89,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 41, symptom onset 2/3, went to clinics 2/3, 2/7, 2/10, 2/17, 2/21",Singapore,Singapore,male,41.0,2020-02-03T00:00:00.000000,0,2020-02-03,,,,,,0,0,0,1582848000,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +733,90,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: 75, female, linked to cluster at The Life Church and Missions Singapore, symptom onset 2/9, went to clinic 2/9, 2/17, 2/23, went to hospital 2/23",Singapore,Singapore,female,75.0,2020-02-09T00:00:00.000000,0,2020-02-09,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +734,91,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 58, linked to case 66, symptom onset 1/23, went to clinic on 2/1, 2/6, 2/10, referred to NCID on 2/18",Singapore,Singapore,female,58.0,2020-01-23T00:00:00.000000,0,2020-02-01,,,,,,0,0,0,1582588800,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +735,92,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 47, symptom onset 2/17, went to clinic 2/21, 2/24, went to hospital 2/24",Singapore,Singapore,male,47.0,2020-02-17T00:00:00.000000,0,2020-02-21,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +736,93,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 38, symptom onset 2/17, went to clinic 2/18, 2/23, hospitalized 2/25",Singapore,Singapore,male,38.0,2020-02-17T00:00:00.000000,0,2020-02-18,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +737,94,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 64, symptom onset 2/11, went to clinic 2/17, 2/20, 2/24, went to hospital 2/24",Singapore,Singapore,female,64.0,2020-02-11T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +738,95,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 44, linked to case 93, symptom onset 2/22, went to clinics 2/25, 2/26, referred to NCID on 2/26",Singapore,Singapore,male,44.0,2020-02-22T00:00:00.000000,0,2020-02-25,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +739,96,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 12, linked to case 94, symptom onset 2/21, went to clinic 2/22, referred to KKH on 2/26",Singapore,Singapore,male,12.0,2020-02-21T00:00:00.000000,0,2020-02-22,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +740,97,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 44, contact of case 93 and 95, symptom onset 2/20, went to clinic 2/20, referred to NCID on 2/27",Singapore,Singapore,female,44.0,2020-02-20T00:00:00.000000,0,2020-02-20,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +741,98,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 24, linked to cases 93, 95, 97, symptom onset 2/27, went to clinic 2/27",Singapore,Singapore,male,24.0,2020-02-27T00:00:00.000000,0,2020-02-27,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +742,99,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 27, symptom onset 2/21, went to clinic on 2/25 and 2/28, referred to NCID on 2/28 as close contact of cas e93",Singapore,Singapore,male,27.0,2020-02-21T00:00:00.000000,0,2020-02-25,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +743,100,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 20, symptom onset 2/27, went to clinic on 2/28, identified as close contact of case 93 so referred to NCID 2/28",Singapore,Singapore,male,20.0,2020-02-27T00:00:00.000000,0,2020-02-28,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +744,101,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 61, linked to case 93, symptom onset 2/25, went to hospital on 2/28 with case 102, linked to case 103",Singapore,Singapore,male,61.0,2020-02-25T00:00:00.000000,0,2020-02-28,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +745,102,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 41, worker for case 101, symptom onset 2/25, went to clinic 2/27, went to hospital 2/28 with case 101",Singapore,Singapore,female,41.0,2020-02-25T00:00:00.000000,0,2020-02-27,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +746,103,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 37, family member of case 93 and linked to case 101, issued home quarantine on 2/26, onset 2/20, went to clinic 2/25",Singapore,Singapore,female,37.0,2020-02-20T00:00:00.000000,0,2020-02-25,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +747,104,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 25, worker of case 103, issued home quarantine on 2/26, onset 2/23",Singapore,Singapore,female,25.0,2020-02-23T00:00:00.000000,0,,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +748,105,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 49, issued home quarantine 2/27, symptom onset 2/26, went to clinic on 2/26",Singapore,Singapore,male,49.0,2020-02-26T00:00:00.000000,0,2020-02-26,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +749,106,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 54, symptom onset 2/23, went to clinic 2/24, 2/26, 2/28, hospitalized 2/29",Singapore,Singapore,male,54.0,2020-02-26T00:00:00.000000,0,2020-02-24,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +750,107,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 68, linked to case 94, symptom onset 2/16, went to clinics on 2/20, 2/23, 2/25, went to hospital 2/27",Singapore,Singapore,female,68.0,2020-02-23T00:00:00.000000,0,2020-02-20,,,,,,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +751,108,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 34, employed by case 101, works in same household as case 102, symptom onset 2/25, went to hospital 2/28",Singapore,Singapore,female,34.0,2020-02-25T00:00:00.000000,0,2020-02-28,,,,,0,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +752,109,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 70, symptom onset 2/25, went to clinic 2/27 and 2/28, went to hospital 2/29",Singapore,Singapore,male,70.0,2020-02-25T00:00:00.000000,0,2020-02-27,,,,,0,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +753,110,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 33, symptom onset 2/22, went to clinic 2/23, identified as contact of cas 93 so referred to NCID on 2/27",Singapore,Singapore,male,33.0,2020-02-22T00:00:00.000000,0,2020-02-23,,,,,0,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +754,111,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: male, 43, was in Malaysia from 2/18-2/21, symptom onset 2/24, went to clinic 2/24 and 228, went to hospital 2/27, 3/3",Singapore,Singapore,male,43.0,2020-02-24T00:00:00.000000,0,2020-02-24,,,,,0,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +755,112,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Singapore: female, 62, linked to case 94",Singapore,Singapore,female,62.0,,,,,,,,0,0,0,0,0,,Ministry of Health Singapore,https://www.moh.gov.sg/covid-19 +756,1,2020-01-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 35, Wuhan resident, arrived in Incheon international airport on 1/19/2020, isolated on entering South Korea with symptoms, symptom onset 1/18/2020 (high fever, chills, muscle pain), discharged 2/6",South Korea,South Korea,female,35.0,,0,2020-01-19,,,,2020-01-19,1,0,1,0,1580947200,"high fever, chills, muscle pain",Nikkei Asian Review,https://asia.nikkei.com/Spotlight/Coronavirus-outbreak/South-Korea-confirms-first-case-of-new-coronavirus-in-Chinese-visitor +757,2,2020-01-24T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 55, arrived at Gimpo International Airport 1/22/2020, works in Wuhan, visited Chinese clinic 1/19/2020 after suffering from sore throat and other symptoms, symptom onset 1/10/2020, confirmed 1/23/2020, recovered 2/4/2020",South Korea,South Korea,male,55.0,2020-01-10T00:00:00.000000,0,2020-01-19,,,,2020-01-22,1,1,0,0,1580774400,"fever, sore throat",Korea Bio Med,http://www.koreabiomed.com/news/articleView.html?idxno=7256 +758,3,2020-01-25T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: 1/25-No.1, male, 54, visited Wuhan, arrived on 1/20/2020, symptom onset 1/22/2020 (fever, chills, muscle cramps), contacted health authorities and placed in isolation 1/25/2020, worked at ""The Place"" clothing store",South Korea,South Korea,male,54.0,2020-01-22T00:00:00.000000,0,2020-01-25,,,,2020-01-20,1,0,1,0,0,"fever, chills, muscle cramps",Yonnhap News Agency,https://en.yna.co.kr/view/AEN20200126000754320 +759,4,2020-01-27T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: 1/27-No.1, male, 55, visited Wuhan, arrived in Korea on 1/20/2020, treated at clinic on 1/21/2020 for cold symptoms, symptom onset 1/25/2020 (high fever, aching muscles).",South Korea,South Korea,male,55.0,2020-01-21T00:00:00.000000,0,2020-01-21,,,,2020-01-20,1,1,0,0,0,"high fever, aching muscles",Straits Times,https://www.straitstimes.com/asia/east-asia/wuhan-virus-south-korea-reports-fourth-coronavirus-case +760,5,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: 1/30-No.1, male, 32, visited Wuhan and returned to 1/24/2020, no symptom on arrival",South Korea,South Korea,male,32.0,,,,,,,2020-01-24,1,1,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a20501000000&bid=0015 +761,6,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: 1/30-No.2, male, 56, in contact with third confirmed patient 1/25-No.1 on 1/22/2020, did not travel to Wuhan, receiving treatment at hospital",South Korea,South Korea,male,56.0,,,,,,2020-01-22T00:00:00.000000,2020-01-22,,0,0,0,1582070400,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a20501000000&bid=0016 +762,7,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 28, Korean, entered Incheon airport 1/23/2020 from Qingdao, Wuhan, symptom onset 1/26/2020 (cough), worked at ""The Place"" clothing store",South Korea,South Korea,male,28.0,2020-01-26T00:00:00.000000,0,,,,,2020-01-23,1,1,0,0,0,cough,KCDC,https://www.cdc.go.kr/board/board.es?mid=a20501000000&bid=0017 +763,8,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 62, Korean, developed symptoms during stay in Wuhan on 1/21/2020",South Korea,South Korea,female,62.0,2020-01-21T00:00:00.000000,0,,,,2020-01-21T00:00:00.000000,2020-01-21,1,1,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a20501000000&bid=0018 +764,9,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 28, Korean, informed as the contact of fifth patient 1/30-No.1, confirmed 1/30/2020, stayed home after onset of symptom",South Korea,South Korea,female,28.0,,,,,,,,,0,0,0,1582502400,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a20501000000&bid=0019 +765,10,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 52, Korean, confirmed on 1/31/2020, related to sixth patient 1/30-No.2, symptom onset on 1/29/2020 (headache)",South Korea,South Korea,female,52.0,2020-01-29T00:00:00.000000,0,,,,,,,0,0,0,1582070400,headache,KCDC,https://www.cdc.go.kr/board/board.es?mid=a20501000000&bid=0020 +766,11,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 25, Korean, confirmed on 1/31/2020, related to sixth patient 1/30-No.2, symptom onset on 1/30/2020 (sore body)",South Korea,South Korea,male,25.0,2020-01-30T00:00:00.000000,0,,,,,,,0,0,0,0,sore body,KCDC,https://www.cdc.go.kr/board/board.es?mid=a20501000000&bid=0021 +767,12,2020-02-01T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: 2/1-No.1, male, 48, male, worked as tour guide in Japan, came into contact with Japanese national also diagnosed, arrived 1/19/2020 at Gimpo airport, symptom-free upon arrival, hospitalized 2/1/2020,",South Korea,South Korea,male,48.0,2020-02-01T00:00:00.000000,1,2020-02-01,,,,,,0,0,0,1581984000,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a20501000000&bid=0022 +768,13,2020-02-02T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 28, brought back from Wuhan on 1/31/2020, no symptoms upon arrival, symptom onset 2/1/2020, transported to hospital for quarantine",South Korea,South Korea,male,28.0,2020-02-01T00:00:00.000000,0,,,,,2020-01-31,1,1,0,0,1582502400,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a20501000000&bid=0023 +769,14,2020-02-02T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 40, married to 2/1-No.1, admitted to Seoul hospital",Seoul,South Korea,female,40.0,,,,,,,,,0,0,0,1581984000,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a20501000000&bid=0024 +770,15,2020-02-02T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: 2/2-No.1 male, 43, went to Wuhan, returned 1/20/2020, worked as aircraft contactor of 1/27-No.1, self-isolating since 1/29/2020",South Korea,South Korea,male,43.0,,,,,,,2020-01-20,1,1,0,0,1582502400,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a20501000000&bid=0025 +771,16,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: 2/4-No.1, female, 42, flew back to South Korea on 1/19/2020 after traveling for five days in Thailand, symptom onset 1/25/2020 (chills)",South Korea,South Korea,female,42.0,2020-01-25T00:00:00.000000,0,,,,2020-01-15T00:00:00.000000,2020-01-19,1,0,0,0,1582070400,chills,South China Morning Post,https://www.scmp.com/news/asia/east-asia/article/3049091/coronavirus-south-korea-confirms-two-new-cases-including-man +772,17,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: 2/5-No.1, male, 37, attended conference in Singapore 1/18-1/23 where contacted Malaysian man infected with virus, symptom onset 1/26/2020, went to three different hospitals, lives in Guri, quarantined on hospital, visited clinic on 2/4/2020",South Korea,South Korea,male,37.0,2020-01-26T00:00:00.000000,0,2020-02-04,,,2020-01-18T00:00:00.000000,2020-01-23,1,0,0,0,0,,South China Morning Post,https://www.scmp.com/news/asia/east-asia/article/3049091/coronavirus-south-korea-confirms-two-new-cases-including-man +773,18,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 21, daughter of 2/4-No.1",South Korea,South Korea,female,21.0,,,,,,2020-01-19T00:00:00.000000,,,0,0,0,1582070400,,South China Morning Post,https://www.scmp.com/news/asia/east-asia/article/3049091/coronavirus-south-korea-confirms-two-new-cases-including-man +774,19,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 36, attended conference in Singapore 1/18-1/23 with 2/5-No.1 where contacted Malaysian man infected with virus, self-quarantine 2/4/2020, now quarantined at medical center",South Korea,South Korea,male,36.0,,,,,,2020-01-18T00:00:00.000000,2020-01-23,1,0,0,0,0,,South China Morning Post,https://www.scmp.com/news/asia/east-asia/article/3049091/coronavirus-south-korea-confirms-two-new-cases-including-man +775,20,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 41, related to 2/2-No.1, in hospital",South Korea,South Korea,female,41.0,,,,,,,,,0,0,0,1582502400,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030 +776,21,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 59, aquaintance of 1/30-No.2, in hospital",South Korea,South Korea,female,59.0,,,,,,,,,0,0,0,1582934400,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0031 +777,22,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 46, related to 2/4-No.1, in hospital",South Korea,South Korea,male,46.0,,,,,,,,,0,0,0,1581897600,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0032 +778,23,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 58, Chinese, visited Korea from Wuhan for travel on 1/23",South Korea,South Korea,female,58.0,,,,,,,2020-01-23,1,1,0,0,1582934400,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0033 +779,24,2020-02-07T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 28, evacuated from Wuhan and quarantined with sore throat",South Korea,South Korea,male,28.0,,,,,,,,1,1,0,0,1582761600,sore throat,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030 +780,25,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 73, stayed with family who visited Guangdong from November 2019 to 1/31/2020, symptom onset fever, cough, sore throat, now in hospital",South Korea,South Korea,female,73.0,,,,,,,2020-01-31,,0,0,0,1582329600,"fever, cough, sore throat",KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030 +781,26,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 51, family member of 25th confirmed case, visited Guangdong from November 2019-January 31, 2020",South Korea,South Korea,male,51.0,,,,,,,2020-01-31,1,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0031 +782,27,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 37, family member of 25th confirmed case, visited Guangdong from November 2019-January 31",South Korea,South Korea,female,37.0,,,,,,,2020-01-31,1,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0032 +783,28,2020-02-11T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 30, chinese, acquaintance of 3rd case",South Korea,South Korea,female,30.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0033 +784,29,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 82, admitted to hospital for chest discomfort, first visited local hospital on 2/15",South Korea,South Korea,male,82.0,,,2020-02-15,,,,,,0,0,0,0,chest discomfort,South China Morning Post,https://www.scmp.com/news/asia/east-asia/article/3050917/coronavirus-chinese-students-south-korea-advised-take-leave +785,30,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 68, married to case 29, symptom onset 2/6 (cough, chill, muscle pain)",South Korea,South Korea,female,68.0,2020-02-06T00:00:00.000000,0,,,,,,,0,0,0,0,"cough, chill, muscle pain",South China Morning Post,https://www.scmp.com/news/asia/east-asia/article/3050917/coronavirus-chinese-students-south-korea-advised-take-leave +786,31,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 61, symptom onset 2/7 (fever, chill), tested on 2/17, hospitalized 2/17",South Korea,South Korea,female,61.0,2020-02-07T00:00:00.000000,0,2020-02-17,,,,,,0,0,0,0,fever,South China Morning Post,https://www.scmp.com/news/asia/east-asia/article/3050917/coronavirus-chinese-students-south-korea-advised-take-leave +787,32,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 11, daughter of case 15, contact of case 15 and case 20, self-quarantine since 2/2, symptom onset 2/8",South Korea,South Korea,female,11.0,2020-02-08T00:00:00.000000,0,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=1 +788,33,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 40, contact of case 31",South Korea,South Korea,female,40.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=2 +789,34,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 24, same cluster as case 31",South Korea,South Korea,male,24.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=3 +790,35,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 26, same cluster as case 31",South Korea,South Korea,female,26.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=4 +791,36,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 48, same cluster as case 31",South Korea,South Korea,female,48.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=5 +792,37,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 49, same cluster as case 31",South Korea,South Korea,male,49.0,,,,,,,,,0,0,0,1582675200,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=6 +793,38,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 57, linked with Shincheonji religious sect, died 2/23",South Korea,South Korea,female,57.0,,,,,,,,,0,0,1582416000,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=7 +794,39,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 61, same cluster as case 31",South Korea,South Korea,female,61.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=8 +795,40,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 77, symptom onset 2/11 (cough)",South Korea,South Korea,male,77.0,2020-02-11T00:00:00.000000,0,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=9 +796,41,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 69, same cluster as case 31",South Korea,South Korea,female,69.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=10 +797,42,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 29, same cluster as case 31",South Korea,South Korea,female,29.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=11 +798,43,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 58, same cluster as case 31",South Korea,South Korea,female,58.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=12 +799,44,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 46, same cluster as case 31",South Korea,South Korea,female,46.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=13 +800,45,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 54, same cluster as case 31",South Korea,South Korea,female,54.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=14 +801,46,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 28",South Korea,South Korea,male,28.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=15 +802,47,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 63",South Korea,South Korea,female,63.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=16 +803,48,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 72",South Korea,South Korea,female,72.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=17 +804,49,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 58",South Korea,South Korea,male,58.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=18 +805,50,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 76",South Korea,South Korea,male,76.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=19 +806,51,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 61",South Korea,South Korea,female,61.0,,,,,,,,,0,0,0,1582675200,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=20 +807,52,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 24",South Korea,South Korea,male,24.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=21 +808,53,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 38",South Korea,South Korea,female,38.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=22 +809,54,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 57, Cheongdo Daenam hospital cluster",South Korea,South Korea,male,57.0,,,,,,,,,0,0,1582416000,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=23 +810,55,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 59, Cheongdo Daenam hospital cluster",South Korea,South Korea,male,59.0,,,,,,,,,0,0,1582416000,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=24 +811,56,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, Seoul, 75",South Korea,South Korea,male,75.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=25 +812,57,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 30",South Korea,South Korea,male,30.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=26 +813,58,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 26",South Korea,South Korea,female,26.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=27 +814,59,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 34",South Korea,South Korea,female,34.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=28 +815,60,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 59",South Korea,South Korea,female,59.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=29 +816,61,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 58",South Korea,South Korea,female,58.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=30 +817,62,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 60",South Korea,South Korea,male,60.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=31 +818,63,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 52",South Korea,South Korea,female,52.0,,,,,,,,,0,0,0,1582848000,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=32 +819,64,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 59",South Korea,South Korea,female,59.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=33 +820,65,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 50",South Korea,South Korea,female,50.0,,,,,,,,,0,0,0,1582761600,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=34 +821,66,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 22",South Korea,South Korea,male,22.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=35 +822,67,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 30",South Korea,South Korea,female,30.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=36 +823,68,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 56",South Korea,South Korea,female,56.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=37 +824,69,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 29",South Korea,South Korea,male,29.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=38 +825,70,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 48",South Korea,South Korea,female,48.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=39 +826,71,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 56",South Korea,South Korea,female,56.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=40 +827,72,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 39",South Korea,South Korea,female,39.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=41 +828,73,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 20",South Korea,South Korea,female,20.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=42 +829,74,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 49",South Korea,South Korea,male,49.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=43 +830,75,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 23",South Korea,South Korea,female,23.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=44 +831,76,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 36",South Korea,South Korea,male,36.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=45 +832,77,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 57",South Korea,South Korea,female,57.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=46 +833,78,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 55",South Korea,South Korea,male,55.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=47 +834,79,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 22",South Korea,South Korea,female,22.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=48 +835,80,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 34",South Korea,South Korea,female,34.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=49 +836,81,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 65",South Korea,South Korea,female,65.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=50 +837,82,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 64",South Korea,South Korea,male,64.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=51 +838,83,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=52 +839,84,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=53 +840,85,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=54 +841,86,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=55 +842,87,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=56 +843,88,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=57 +844,89,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=58 +845,90,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=59 +846,91,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=60 +847,92,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=61 +848,93,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=62 +849,94,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=63 +850,95,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=64 +851,96,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=65 +852,97,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=66 +853,98,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=67 +854,99,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=68 +855,100,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=69 +856,101,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=70 +857,102,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=71 +858,103,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=72 +859,104,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in South Korea:,South Korea,South Korea,,,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030&act=view&list_no=366261&tag=&nPage=73 +860,107,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 67, died 2/24, Cheongdo Daenam hospital cluster",South Korea,South Korea,male,67.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030 +861,114,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 74, Shincheonji cluster, died 2/26/2020",South Korea,South Korea,male,74.0,,,,,,,,,0,0,1582675200,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030 +862,161,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 35, symptom onset 2/2 (cough, fever), Seoul",Seoul,South Korea,male,35.0,2020-02-02T00:00:00.000000,0,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030 +863,286,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 62, died 2/23/20, Cheongdo Daenam Hospital cluster",South Korea,South Korea,male,62.0,,,,,,,,,0,0,1582416000,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030 +864,298,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 58, linked with Shincheonji religious sect, died 2/24",South Korea,South Korea,male,58.0,,,,,,,,,0,0,1582502400,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030 +865,365,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 62, symptom onset 2/2 (fever, headache), hospitalized 2/5-2/22",South Korea,South Korea,male,62.0,2020-02-02T00:00:00.000000,0,2020-02-05,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030 +866,443,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 41, died 2/22",South Korea,South Korea,male,41.0,,,,,,,,,0,0,1582329600,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030 +867,875,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 36, died 2/25/2020",South Korea,South Korea,male,36.0,,,,,,,,,0,0,1582588800,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030 +868,925,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: female, 69, died 2/24",South Korea,South Korea,female,69.0,,,,,,,,,0,0,0,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030 +869,1443,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in South Korea: male, 75, died 2/27",South Korea,South Korea,male,75.0,,,,,,,,,0,0,1582761600,0,,KCDC,https://www.cdc.go.kr/board/board.es?mid=a30402000000&bid=0030 +870,1,2020-01-21T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, 55, works in Wuhan, arrived in Taiwan 1/20/2020, symptomatic (fever, cough, shortness of breath) on arrival, symptom onset 1/11/2020, confirmed 1/21/2020",Taiwan,Taiwan,female,55.0,2020-01-11T00:00:00.000000,0,2020-01-20,,,,2020-01-20,1,1,0,0,0,"fever, cough, shortness of breath",Taiwan News,https://www.taiwannews.com.tw/en/news/3866002 +871,2,2020-01-24T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, in her 50s, arrived in Taiwan 1/21/2020, came from tour in Wuhan, hospitalized due to fever 1/23/2020",Taiwan,Taiwan,female,55.0,2020-01-23T00:00:00.000000,1,2020-01-23,,,,2020-01-21,1,1,0,0,0,fever,Taiwan News,https://www.taiwannews.com.tw/en/news/3866003 +872,3,2020-01-24T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: male, in his 50s, arrived in Taiwan 1/21/2020, works in Wuhan, saw doctor in Wuhan, developed influenza symptoms and hospitalized 1/23/2020",Taiwan,Taiwan,male,55.0,2020-01-23T00:00:00.000000,1,2020-01-23,,,,2020-01-21,1,1,0,0,0,flu symptoms,Taiwan News,https://www.taiwannews.com.tw/en/news/3866004 +873,4,2020-01-27T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: 1/27-No.1, female, 50, arrived in Taiwan 1/25/2020, reported condition to airport officers and immediately hospitalized, visited Wuhan 1/13/2020-1/15/2020, symptom onset 1/22/2020 (no fever, mild symptoms of pneumonia, cough), confirmed 1/26/2020",Taiwan,Taiwan,female,50.0,2020-01-22T00:00:00.000000,0,2020-01-25,,,2020-01-13T00:00:00.000000,2020-01-15,1,1,0,0,0,cough,Taiwan News,https://www.taiwannews.com.tw/en/news/3866005 +874,5,2020-01-27T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, 50, working in Wuhan since October 2019 and returned to Taiwan 1/20/2020, hospitalized 1/25/2020 after developing a fever and muscle aches, confirmed 1/27/2020",Taiwan,Taiwan,female,50.0,2020-01-25T00:00:00.000000,1,2020-01-25,,,,2020-01-20,1,1,0,0,0,"fever, muscle aches",Taiwan News,https://www.taiwannews.com.tw/en/news/3866006 +875,6,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, 70, Wuhan resident, arrived in Taiwan 1/22/2020, symptom onset 1/25/2020 (fever), hospitalized 1/25/2020, confirmed 1/28/2020",Taiwan,Taiwan,female,70.0,2020-01-25T00:00:00.000000,0,2020-01-25,,,,2020-01-22,1,0,1,0,0,fever,Taiwan News,https://www.taiwannews.com.tw/en/news/3866007 +876,7,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, 70, Wuhan resident, arrived in Taiwan 1/22/2020, symptom onset 1/25/2020 (fever), hospitalized 1/25/2020, confirmed 1/28/2020",Taiwan,Taiwan,female,70.0,2020-01-25T00:00:00.000000,0,2020-01-25,,,,2020-01-22,1,0,1,0,0,fever,Taiwan News,https://www.taiwannews.com.tw/en/news/3866008 +877,8,2020-01-28T00:00:00.000000,"new confirmed domestic COVID-19 patient in Taiwan: man, in his 50s, contracted virus from wife 1/27-No.1, symptom onset 1/26/2020 (cough), tested positive 1/28/2020",Taiwan,Taiwan,male,55.0,2020-01-26T00:00:00.000000,0,,,,,,,0,0,0,0,cough,Taiwan News,https://www.taiwannews.com.tw/en/news/3866009 +878,9,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: 1/30-No.1, male, experiencing symptoms on arrival 1/12/2020 (cough, runny nose, no fever), recently returned from business in Wuhan",Taiwan,Taiwan,male,,2020-01-12T00:00:00.000000,1,,,,,,1,1,0,0,0,"cough, runny nose",Taiwan News,https://www.taiwannews.com.tw/en/news/3867321 +879,10,2020-01-31T00:00:00.000000,"new confirmed domestic COVID-19 patient in Taiwan: female, married to 1/30-No.1, symptom onset 1/27/2020, hospitalized 1/28/2020, confirmed 1/30/2020",Taiwan,Taiwan,female,,2020-01-27T00:00:00.000000,0,2020-01-28,,,,,,0,0,0,0,,Taiwan News,https://www.taiwannews.com.tw/en/news/3867322 +880,11,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: male, in his 50s, evacuated from Wuhan on 2/4, hospitalized",Taiwan,Taiwan,male,55.0,,,,,,,2020-02-02,1,1,0,0,0,,Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/jrD8pZG1_vGt1Gb8ficN3g?typeid=158 +881,12,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: male, in his 40s, went to Wuhan for work in December 2019 and left for Liaoning China on 1/17, returned to Taiwan on 2/2, symptom onset 2/3 (fever, cough, headache), hospitalized on 2/4/2020",Taiwan,Taiwan,male,45.0,2020-02-03T00:00:00.000000,0,2020-02-04,,,,2020-01-17,1,1,0,0,0,"fever, cough, headache",Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/wn02wbpI_2YrRLcxS_pZnA?typeid=158 +882,13,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, in her 20s, lived in Wuhan, on 1/21/2020 left Wuhan to Taiwan, symptom onset 2/1/2020 (cough, chest pain), hospitalized 2/4/2020",Taiwan,Taiwan,female,25.0,2020-02-01T00:00:00.000000,0,2020-02-04,,,,2020-01-21,1,0,1,0,0,"cough, chest pain",Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/wn02wbpI_2YrRLcxS_pZnA?typeid=159 +883,14,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: 2/7-No.1, male, in his 50s, traveled to Italy 1/22, returned 2/1, fever on arrival, went to see doctor 2/1, went again on 2/4",Taiwan,Taiwan,male,55.0,2020-01-26T00:00:00.000000,0,2020-02-01,,,,,,0,0,0,0,"fever, cough",Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/ijxi3l3JEYqfNtV2aRGzVg?typeid=158 +884,15,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: 2/7-No.2, female, in her 50s, married to 2/7-No.1, traveled to Italy 1/22, returned 2/1, diagnosed with common cold 2/3",Taiwan,Taiwan,female,55.0,2020-01-28T00:00:00.000000,0,2020-02-03,,,,,,0,0,0,0,cough,Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/ijxi3l3JEYqfNtV2aRGzVg?typeid=159 +885,16,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, in her 40s, traveled to Macau 1/21-1/24, symptom onset 2/1 (fever, chills, sore throat, runny nose, shortness of breath), medical attention on 2/3",Taiwan,Taiwan,female,45.0,2020-02-01T00:00:00.000000,0,2020-02-03,,,,,,0,0,0,0,"fever, chills, sore throat, runny nose, shortness of breath",Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/ijxi3l3JEYqfNtV2aRGzVg?typeid=160 +886,17,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: male, 20s, son of 2/7-No.1 and 2/7-No.2, traveled to Italy with parents from 1/22 to 1/31, transited through HK for Taiwan on 2/1, symptom onset 1/27 while in Italy",Taiwan,Taiwan,male,25.0,2020-01-27T00:00:00.000000,0,,,,,,,0,0,0,0,,Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/ijxi3l3JEYqfNtV2aRGzVg?typeid=161 +887,18,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: male, 20s, son of 2/7-No.1 and 2/7-No.2, traveled to Italy with parents from 1/22 to 1/31, transited through HK for Taiwan on 2/1",Taiwan,Taiwan,male,25.0,,,,,,,,,0,0,0,0,,Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/ijxi3l3JEYqfNtV2aRGzVg?typeid=162 +888,19,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: male, 60s, symptom onset 1/27 (cough, shortness of breath), went to hospital 2/3, diagnosed with pneumonia, hospitalized 2/3, died 2/15",Taiwan,Taiwan,male,65.0,2020-01-27T00:00:00.000000,0,2020-02-03,,,,,,0,0,1,0,"cough, shortness of breath",Taiwan MOH,https://www.mohw.gov.tw/cp-4638-51567-2.html +889,20,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: male, 50s, related to case 19",Taiwan,Taiwan,male,55.0,,,,,,,,,0,0,0,0,,Taiwan MOH,https://www.mohw.gov.tw/cp-4638-51567-2.html +890,21,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, 80s, related to case 19 and 20, symptom onset 2/6",Taiwan,Taiwan,female,85.0,2020-02-06T00:00:00.000000,0,,,,,,,0,0,0,0,,Taiwan MOH,https://www.mohw.gov.tw/cp-4638-51567-2.html +891,22,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: male, 30s, related to case 19 and 20, symptom onset 1/28-2/6 (fever, cough), attended 1/27",Taiwan,Taiwan,male,35.0,2020-01-28T00:00:00.000000,0,,,,2020-01-27T00:00:00.000000,2020-01-27,,0,0,0,0,"fever, cough",Taiwan MOH,https://www.mohw.gov.tw/cp-4638-51567-2.html +892,23,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, 60, younger sister of case 19, attended event on 1/27",Taiwan,Taiwan,female,65.0,,,,,,2020-01-27T00:00:00.000000,2020-01-27,,0,0,0,0,,Taiwan MOH,https://www.mohw.gov.tw/cp-4638-51567-2.html +893,24,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, 60, symptom onset 1/22 (fever, cough), went to doctor's four times before being diagnosed with pneumonia 1/29, hospitalized 1/30, moved to negative-pressure isolation room on 2/17, positive 2/19",Taiwan,Taiwan,female,60.0,2020-01-22T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, cough",Taiwan News,https://www.taiwannews.com.tw/en/news/3879311 +894,25,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, 20s, granddaughter of case 24, symptom onset 1/28 (cough, fever), went to doctor on 1/30, 2/4, 2/11",Taiwan,Taiwan,female,45.0,2020-01-28T00:00:00.000000,0,2020-01-30,,,,,,0,0,0,0,"fever, cough",Taiwan News,https://www.taiwannews.com.tw/en/news/3879311 +895,26,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, 40s, daughter of case 24, went to doctor 2/3 and 2/6 due to reflux",Taiwan,Taiwan,female,25.0,,,2020-02-03,,,,,,0,0,0,0,reflux,Taiwan News,https://www.taiwannews.com.tw/en/news/3879311 +896,27,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: male, 80s, father of case 28",Taiwan,Taiwan,male,85.0,,,,,,,,,0,0,0,0,,Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/MtvPSPzlksx8B_zvdcNdBw?typeid=158 +897,28,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: male, 50s",Taiwan,Taiwan,male,55.0,,,,,,,,,0,0,0,0,throat discomfort,Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/MtvPSPzlksx8B_zvdcNdBw?typeid=159 +898,29,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: male, 40s, son of case 27, throat discomfort from 1/29-1/30 but didn't seek medical attention",Taiwan,Taiwan,male,45.0,2020-01-29T00:00:00.000000,0,,,,,,,0,0,0,0,physical discomfort,Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/MtvPSPzlksx8B_zvdcNdBw?typeid=160 +899,30,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, 70s, wife of case 27, physical discomfort on 2/6 and saw doctor on 2/6, sought medical attentio four times for respiratory symptoms from 2/10-2/19",Taiwan,Taiwan,female,75.0,2020-02-06T00:00:00.000000,0,2020-02-06,,,,,,0,0,0,0,,Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/MtvPSPzlksx8B_zvdcNdBw?typeid=161 +900,31,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: male, grandson of case 27 and son of case 28, visited case 27 in hospital 2/11 and 2/19",Taiwan,Taiwan,male,,,,,,,,,,0,0,0,0,,Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/MtvPSPzlksx8B_zvdcNdBw?typeid=162 +901,32,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, 30s, caregivers who cared for case 27 in the hospital from 2/11-2/16",Taiwan,Taiwan,female,35.0,,,2020-02-24,,,2020-02-11T00:00:00.000000,2020-02-16,,0,0,0,0,throat discomfort,Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/QMZlqDJORsFvH6k9GJHB2Q?typeid=158 +902,33,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: male, 30s, traveled with 21 other tourists to Osaka from 2/17-2/22, after returning, developed a cough and itchy throat on 2/25",Taiwan,Taiwan,male,35.0,2020-02-25T00:00:00.000000,0,,,,2020-02-17T00:00:00.000000,2020-02-22,1,0,0,0,0,"cough, itchy throat",Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/DVaJkPoWj0jFxnjAvUeqjA?typeid=158 +903,34,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Taiwan: female, 50s",Taiwan,Taiwan,female,55.0,,,,,,,,,0,0,0,0,,Taiwan CDC,https://www.cdc.gov.tw/En/Bulletin/Detail/DVaJkPoWj0jFxnjAvUeqjA?typeid=158 +904,1,2020-01-13T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: female, 61, Wuhan resident, symptom onset 1/5/2020 (fever, chills, sore throat, headache), arrived 1/8/2020, hospitalized on arrival, tested positive 1/12/2020, discharged and returned to China",Thailand,Thailand,female,61.0,2020-01-05T00:00:00.000000,0,2020-01-08,,,,2020-01-08,1,0,1,0,0,"fever, chills, sore throat, headache",Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272486 +905,2,2020-01-17T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: female, 74, Wuhan resident, quarantined since 1/13/2020 on arrival, discharged and returned to China",Thailand,Thailand,female,74.0,2020-01-13T00:00:00.000000,1,2020-01-13,,,,2020-01-13,1,0,1,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272487 +906,3,2020-01-22T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: male, 68, tourist visiting from Wuhan, detected with a fever on 1/19/2020",Thailand,Thailand,male,68.0,2020-01-19T00:00:00.000000,1,2020-01-19,,,,,1,1,0,0,1,fever,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272488 +907,4,2020-01-22T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: female, 73, Thai citizen, visited Wuhan late 2019, arrived in Thailand 1/13/2020, quarantined on arrival with a fever, returned home to China 1/21/2020",Thailand,Thailand,female,73.0,2020-01-13T00:00:00.000000,1,2020-01-13,,,,2020-01-13,1,1,0,0,1580947200,fever,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272489 +908,5,2020-01-22T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: male, Chinese tourist, screened for high fever on 1/19/2020",Thailand,Thailand,male,,2020-01-19T00:00:00.000000,1,2020-01-19,,,,,1,1,0,0,1,fever,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272490 +909,6,2020-01-24T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: female, 33, arrived from Wuhan on 1/21/2020 and visited hospital for fever, coughing, and muscle aches on 1/23/2020",Thailand,Thailand,female,33.0,2020-01-23T00:00:00.000000,1,2020-01-23,,,,2020-01-21,1,1,0,0,0,"fever, coughing, muscle aches",Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272491 +910,7,2020-01-26T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: female, 57, Wuhan resident",Thailand,Thailand,female,57.0,,,,,,,,1,0,1,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272492 +911,8,2020-01-26T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: female, 73, Wuhan resident",Thailand,Thailand,female,73.0,,,,,,,,1,0,1,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272493 +912,9,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Chinese national, part of a family aged 6-60, traveling from Hubei province, one passenger taken to hospital after showing symptoms on arrival and other four members quarantined after showing symptoms following monitoring",Thailand,Thailand,,6.0,,,,,,,,1,0,1,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272494 +913,10,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Chinese national, part of a family aged 6-60, traveling from Hubei province, one passenger taken to hospital after showing symptoms on arrival and other four members quarantined after showing symptoms following monitoring",Thailand,Thailand,,60.0,,,,,,,,1,0,1,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272495 +914,11,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Chinese national, part of a family aged 6-60, traveling from Hubei province, one passenger taken to hospital after showing symptoms on arrival and other four members quarantined after showing symptoms following monitoring",Thailand,Thailand,,,,,,,,,,1,0,1,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272496 +915,12,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Chinese national, part of a family aged 6-60, traveling from Hubei province, one passenger taken to hospital after showing symptoms on arrival and other four members quarantined after showing symptoms following monitoring",Thailand,Thailand,,,,,,,,,,1,0,1,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272497 +916,13,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Chinese national, part of a family aged 6-60, traveling from Hubei province, one passenger taken to hospital after showing symptoms on arrival and other four members quarantined after showing symptoms following monitoring",Thailand,Thailand,,,,,,,,,,1,0,1,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272498 +917,14,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Chinese national, from Chongqing province in China",Thailand,Thailand,,,,,,,,,,1,0,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-pneumonia-outbreak-thailand-second-case-coronavirus-12272499 +918,15,2020-01-30T00:00:00.000000,new confirmed COVID-19 patient in Thailand: Chinese national,Thailand,Thailand,,,,,,,,,,1,1,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-virus-thailand-first-human-coronavirus-transmission-12374356 +919,16,2020-01-31T00:00:00.000000,new confirmed COVID-19 patient in Thailand: Chinese national,Thailand,Thailand,,,,,,,,,,1,1,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-virus-thailand-first-human-coronavirus-transmission-12374357 +920,17,2020-01-31T00:00:00.000000,new confirmed COVID-19 patient in Thailand: Chinese national,Thailand,Thailand,,,,,,,,,,1,1,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-virus-thailand-first-human-coronavirus-transmission-12374358 +921,18,2020-01-31T00:00:00.000000,new confirmed COVID-19 patient in Thailand: Chinese national,Thailand,Thailand,,,,,,,,,,1,1,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-virus-thailand-first-human-coronavirus-transmission-12374359 +922,19,2020-01-31T00:00:00.000000,new confirmed COVID-19 patient in Thailand: Chinese national,Thailand,Thailand,,,,,,,,,,1,1,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-virus-thailand-first-human-coronavirus-transmission-12374360 +923,20,2020-01-31T00:00:00.000000,"first confirmed human-to-human COVID-19 patient in Thailand: male, 50, taxi driver infected by traveller, no history of travel to China, discharged 2/5/2020, symptom onset 1/20 (fever, cough, myalgia), went to local pharmacy 1/20, visited clinic 1/23, hospital at 1/28",Thailand,Thailand,male,50.0,2020-01-20T00:00:00.000000,0,2020-01-23,,,,,,0,0,0,1580860800,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-virus-thailand-first-human-coronavirus-transmission-12374361 +924,21,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: 2/5-No.1, Thai, just returned from Japan",Thailand,Thailand,,,,,,,,,,1,0,0,0,0,,Bangkok Post,https://www.google.com/search?rlz=1C1GCEA_enUS884US884&sxsrf=ACYBGNRdMvO0fuV77TKGKyRufrIz56lrRg%3A1580930610509&ei=MhY7XqfcHpiDytMPteawqAc&q=thailand+coronavirus+cases+tourists+25&oq=thailand+coronavirus+cases+tourists+25&gs_l=psy-ab.3..33i160l2j33i299.9848.10231..10337...0.0..0.149.382.2j2......0....1..gws-wiz.......35i39.Ah0XtHSdjxs&ved=0ahUKEwinvdC7kbvnAhWYgXIEHTUzDHUQ4dUDCAs&uact=5 +925,22,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Thai, just returned from Japan, married to 2/5-No.1",Thailand,Thailand,,,,,,,,,,1,0,0,0,0,,Bangkok Post,https://www.google.com/search?rlz=1C1GCEA_enUS884US884&sxsrf=ACYBGNRdMvO0fuV77TKGKyRufrIz56lrRg%3A1580930610509&ei=MhY7XqfcHpiDytMPteawqAc&q=thailand+coronavirus+cases+tourists+25&oq=thailand+coronavirus+cases+tourists+25&gs_l=psy-ab.3..33i160l2j33i299.9848.10231..10337...0.0..0.149.382.2j2......0....1..gws-wiz.......35i39.Ah0XtHSdjxs&ved=0ahUKEwinvdC7kbvnAhWYgXIEHTUzDHUQ4dUDCAs&uact=6 +926,23,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Thai, driver who had driven Chinese tourists",Thailand,Thailand,,,,,,,,,,,0,0,0,0,,Bangkok Post,https://www.google.com/search?rlz=1C1GCEA_enUS884US884&sxsrf=ACYBGNRdMvO0fuV77TKGKyRufrIz56lrRg%3A1580930610509&ei=MhY7XqfcHpiDytMPteawqAc&q=thailand+coronavirus+cases+tourists+25&oq=thailand+coronavirus+cases+tourists+25&gs_l=psy-ab.3..33i160l2j33i299.9848.10231..10337...0.0..0.149.382.2j2......0....1..gws-wiz.......35i39.Ah0XtHSdjxs&ved=0ahUKEwinvdC7kbvnAhWYgXIEHTUzDHUQ4dUDCAs&uact=7 +927,24,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: male, 70, moved to infectious diseases institute,Thai, driver who had driven Chinese tourists",Thailand,Thailand,male,70.0,,,,,,,,,0,0,0,0,,Bangkok Post,https://www.google.com/search?rlz=1C1GCEA_enUS884US884&sxsrf=ACYBGNRdMvO0fuV77TKGKyRufrIz56lrRg%3A1580930610509&ei=MhY7XqfcHpiDytMPteawqAc&q=thailand+coronavirus+cases+tourists+25&oq=thailand+coronavirus+cases+tourists+25&gs_l=psy-ab.3..33i160l2j33i299.9848.10231..10337...0.0..0.149.382.2j2......0....1..gws-wiz.......35i39.Ah0XtHSdjxs&ved=0ahUKEwinvdC7kbvnAhWYgXIEHTUzDHUQ4dUDCAs&uact=8 +928,25,2020-02-04T00:00:00.000000,new confirmed COVID-19 patient in Thailand: Chinese tourist,Thailand,Thailand,,,,,,,,,,,0,0,0,0,,Bangkok Post,https://www.google.com/search?rlz=1C1GCEA_enUS884US884&sxsrf=ACYBGNRdMvO0fuV77TKGKyRufrIz56lrRg%3A1580930610509&ei=MhY7XqfcHpiDytMPteawqAc&q=thailand+coronavirus+cases+tourists+25&oq=thailand+coronavirus+cases+tourists+25&gs_l=psy-ab.3..33i160l2j33i299.9848.10231..10337...0.0..0.149.382.2j2......0....1..gws-wiz.......35i39.Ah0XtHSdjxs&ved=0ahUKEwinvdC7kbvnAhWYgXIEHTUzDHUQ4dUDCAs&uact=9 +929,26,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Thai, evacuated on 2/4 from Wuhan",Thailand,Thailand,,,,,,,,,2020-02-04,1,1,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-virus-coronavirus-thailand-cases-12410690 +930,27,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Thai, exposed to tourists",Thailand,Thailand,,,,,,,,,,,0,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-virus-coronavirus-thailand-cases-12410691 +931,28,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Thai, exposed to tourists",Thailand,Thailand,,,,,,,,,,,0,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-virus-coronavirus-thailand-cases-12410692 +932,29,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Chinese, related to someone who was previously confirmed",Thailand,Thailand,,,,,,,,,,,0,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-virus-coronavirus-thailand-cases-12410693 +933,30,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Chinese, related to someone who was previously confirmed",Thailand,Thailand,,,,,,,,,,,0,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-virus-coronavirus-thailand-cases-12410694 +934,31,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Chinese, related to someone who was previously confirmed",Thailand,Thailand,,,,,,,,,,,0,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-virus-coronavirus-thailand-cases-12410695 +935,32,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: Chinese, tourist from ""risky area"" in China",Thailand,Thailand,,,,,,,,,,1,0,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/wuhan-virus-coronavirus-thailand-cases-12410696 +936,33,2020-02-11T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: female, 54, Chinese tourist from Wuhan, admitted to hospital on 2/6",Thailand,Thailand,female,54.0,,,2020-02-06,,,,,1,0,1,0,0,,Bangkok Post,https://www.bangkokpost.com/thailand/general/1856074/local-virus-cases-stable-at-33 +937,34,2020-02-15T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: female, 35, contacted patient",Thailand,Thailand,female,35.0,,,,,,,,,0,0,0,0,,Bangkok Post,https://www.bangkokpost.com/thailand/general/1859434/thailand-records-1-new-case-of-coronavirus +938,35,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: female, 60, family members infected,",Thailand,Thailand,female,60.0,,,,,,,,,0,0,0,0,,Bangkok Post,https://www.bangkokpost.com/thailand/general/1859434/thailand-records-1-new-case-of-coronavirus +939,36,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: female, 31, relative who recently returned from China",Thailand,Thailand,female,31.0,,,,,,,,,0,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/thailand-covid19-coronavirus-cases-12468314 +940,37,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: male, 29, taxi driver",Thailand,Thailand,male,29.0,,,,,,,,,0,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/asia/thailand-covid19-coronavirus-cases-12468314 +941,38,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: male, returned from Hokkaido, contacted case 40 (grandson), came into hospital 2/23 with cough and fever",Thailand,Thailand,male,,,,2020-02-23,,,,,1,0,0,0,0,cough,South China Morning Post,https://www.scmp.com/news/asia/southeast-asia/article/3052466/coronavirus-thailand-criticises-patient-who-concealed +942,39,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: female, returned from Hokkaido, contacted case 40 (grandson)",Thailand,Thailand,female,,,,,,,,,1,0,0,0,0,,South China Morning Post,https://www.scmp.com/news/asia/southeast-asia/article/3052466/coronavirus-thailand-criticises-patient-who-concealed +943,40,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: male, 8",Thailand,Thailand,male,8.0,,,,,,,,,0,0,0,0,,South China Morning Post,https://www.scmp.com/news/asia/southeast-asia/article/3052466/coronavirus-thailand-criticises-patient-who-concealed +944,41,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Thailand: male, 25, tour guide who returned recently from South Korea, sought treatment for fever and cough on 2/25",Thailand,Thailand,male,25.0,,,2020-02-25,,,,,1,0,0,0,0,"fever, cough",Bangkok Post,https://www.bangkokpost.com/thailand/general/1867844/thai-tour-guide-41st-virus-patient +945,1,2020-01-21T00:00:00.000000,"new confirmed COVID-19 patient in US: male, in his 30s, confirmed sick in Snohomish County, Washington, visited Wuhan, returned to the US on 1/15/2020, sought treatment at urgent care center 1/23/2020",Washington,USA,male,30.0,2020-01-16T00:00:00.000000,1,2020-01-19,1,0,,2020-01-15,1,1,0,0,1582156800,,LA Times,https://www.latimes.com/california/story/2020-01-25/los-angeles-area-prepared-for-coronavirus +946,2,2020-01-24T00:00:00.000000,"new confirmed COVID-19 patient in US: 1/24-No.1, female, 61, treated in Chicago, traveled to Wuhan in December, returned on 1/13/2020, called doctor a few days after returning to report feeling unwell, sent to hospital",Illinois,USA,female,60.0,2020-01-16T00:00:00.000000,1,2020-01-16,1,0,,2020-01-13,1,1,0,0,1580947200,,LA Times,https://www.latimes.com/california/story/2020-01-25/los-angeles-area-prepared-for-coronavirus +947,3,2020-01-26T00:00:00.000000,"new confirmed COVID-19 patient in US: male, Wuhan resident, traveling through LAX on way to China on 1/22/2020 reported feeling unwell to airport staff, taken to hospital",California,USA,male,,2020-01-22T00:00:00.000000,0,2020-01-22,1,0,,,1,0,1,0,0,,LA Times,https://www.latimes.com/california/story/2020-01-25/los-angeles-area-prepared-for-coronavirus +948,4,2020-01-26T00:00:00.000000,"new confirmed COVID-19 patient in US: Orange County, at local hospital, recently traveled to Wuhan, confirmed 1/25/2020",California,USA,male,55.0,,,,1,0,,,1,1,0,0,0,,LA Times,https://www.latimes.com/california/story/2020-01-25/los-angeles-area-prepared-for-coronavirus +949,5,2020-01-26T00:00:00.000000,"new confirmed COVID-19 patient in US: Arizona, recently traveled to Wuhan",Arizona,USA,male,,,,,1,0,,,1,1,0,0,0,,LA Times,https://www.latimes.com/california/story/2020-01-25/los-angeles-area-prepared-for-coronavirus +950,6,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in US: male, in his 60s, husband of 1/24-No.1, Chicago, admitted to hospital 1/28/2020, symptom onset 1/28/2020",Illinois,USA,male,60.0,2020-01-28T00:00:00.000000,0,2020-01-28,,0,2020-01-13T00:00:00.000000,,0,0,0,0,1580947200,,The Hill,https://thehill.com/policy/healthcare/public-global-health/481136-us-coronavirus-cases-count-jumps-to-11-with-three-more +951,7,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in US: male, from Santa Clara County, traveled to Wuhan and Shanghai before returning on 1/24/2020, never sick enough to be hospitalized and ""self-isolated"" at home, left twice to seek care at local clinic and hospital",California,USA,male,,,,,1,0,,2020-01-24,1,1,0,0,0,,The Hill,https://thehill.com/policy/healthcare/public-global-health/481136-us-coronavirus-cases-count-jumps-to-11-with-three-more +952,8,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in US: male, in his 20s, University of Massachusetts student who recently traveled from Wuhan, returned on 1/29/2020, sought medical care afterwards, quarantined at his home",Massachusetts,USA,male,23.0,2020-01-29T00:00:00.000000,1,,1,0,,2020-01-29,1,1,0,0,0,,The Hill,https://thehill.com/policy/healthcare/public-global-health/481136-us-coronavirus-cases-count-jumps-to-11-with-three-more +953,9,2020-02-03T00:00:00.000000,"new confirmed COVID-19 patient in US: 2/3-No.1, male, 57, San Benito County, recently traveled back from Wuhan on 1/18/2020, isolated in home, arrived in San Francisco 1/24/2020 as healthy, but symptom onset 1/25/2020 (cough, fever), hospitalized",California,USA,male,57.0,2020-01-25T00:00:00.000000,0,,1,0,2020-01-18T00:00:00.000000,2020-01-24,1,1,0,0,0,"cough, fever",The Hill,https://thehill.com/policy/healthcare/public-global-health/481136-us-coronavirus-cases-count-jumps-to-11-with-three-more +954,10,2020-02-03T00:00:00.000000,"new confirmed COVID-19 patient in US: female, 57, married to 2/3-No.1, San Benito County, symptom onset 1/29/2020, hospitalized",California,USA,female,57.0,2020-01-29T00:00:00.000000,0,,0,0,2020-01-24T00:00:00.000000,,0,0,0,0,0,,The Hill,https://thehill.com/policy/healthcare/public-global-health/481136-us-coronavirus-cases-count-jumps-to-11-with-three-more +955,11,2020-02-03T00:00:00.000000,"new confirmed COVID-19 patient in US: female, recently traveled to Wuhan from Santa Clara County on 1/23/2020, never sick enough to be hospitalized",California,USA,female,,,,,1,0,,2020-01-23,1,1,0,0,0,,The Hill,https://thehill.com/policy/healthcare/public-global-health/481136-us-coronavirus-cases-count-jumps-to-11-with-three-more +956,12,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in US: Wisconsin, came into contact with someone infected while traveling in China",Wisconsin,USA,,,,,,0,0,,,0,0,0,0,0,,NBC,https://www.nbcnews.com/health/health-news/conoravirus-case-confirmed-wisconsin-12th-case-u-s-n1130946 +957,13,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in US: California, evacuated from Wuhan, San Diego, female, returned 2/5",California,USA,female,,,,,1,0,,2020-02-05,1,1,0,0,0,,NBC,https://www.nbcnews.com/health/health-news/conoravirus-case-confirmed-wisconsin-12th-case-u-s-n1130946 +958,14,2020-02-12T00:00:00.000000,"new confirmed COVID-19 patient in US: California, evacuated from Wuhan 2/7, San Diego",California,USA,,,,,,1,0,,2020-02-07,1,1,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +959,15,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in US: Texas, returned from Wuhan 2/7, male, San Antonio",Texas,USA,male,,,,,1,0,,2020-02-07,1,1,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +960,16,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in US: California, Napa, Diamond Princess evacuee",California,USA,,,,,,1,0,,,1,0,0,0,0,,Reuters,https://www.reuters.com/article/us-china-health-usa/us-cdc-confirms-53-coronavirus-cases-including-repatriated-citizens-idUSKCN20I22G +961,17,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in US: California,California,USA,,,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +962,18,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in US: Sacramento, returned to US 2/2 from China",California,USA,,,,,,1,0,,2020-02-02,1,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +963,19,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in US: passenger from Diamond Princess cruise ship, quarantined in San Antonio, TX, returned 2/13",California,USA,,,,,,1,0,,2020-02-13,1,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1007,63,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in US: Santa Clara, CA, female, 65, second case of unknown origin",California,USA,female,65.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1008,64,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in US: Oregon, elementary school employee",Oregon,USA,,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1009,65,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in US: Snohomish, Washington, male, teens, student at high school",Washington,USA,male,15.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1010,66,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in US: King County, WA, went to Korea, female, 50s, USPS employee",Washington,USA,female,55.0,,,,1,0,,,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1011,67,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in US: King County, Washington, male, 50s, died 2/29",Washington,USA,male,55.0,,,,0,0,,,0,0,0,1582934400,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1012,68,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in US: King County, Washington, resident in long-term care center, female, 70s",Washington,USA,female,75.0,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1013,69,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in US: King County, Washington, health care worker, female, 40s",Washington,USA,female,45.0,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1014,70,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in US: Cook County, IL, male, 70s",Illinois,USA,,,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1015,71,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Santa Clara, California: fourth Santa Clara County case, female, contact of case 63",California,USA,female,,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1016,72,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Rhode Island: male, 40s, travelled to Italy in mid-February",Rhode Island,USA,male,45.0,,,,1,0,,,1,0,0,0,0,,Press Herald,https://www.pressherald.com/2020/03/01/first-virus-case-confirmed-in-rhode-island/ +1017,73,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in King County, Washington: male, 60s",Washington,USA,male,65.0,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1018,74,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in King County, Washington: male, 60s",Washington,USA,male,65.0,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1019,75,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in California: Alameda County, health care worker at NorthBay VacaValley hospital, exposed to patient 29",California,USA,,,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1020,76,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in California: Solano County, health care worker at NorthBay VacaValley hospital, exposed to patient 29",California,USA,,,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1021,77,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara County, female",California,USA,female,,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1022,78,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara County, female, recently traveled to Egypt",California,USA,female,,,,,1,0,,,1,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1023,79,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara County, male, recently traveled to Egypt, married to case 54",California,USA,male,,,,,1,0,,,1,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1024,80,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in New York: female, late 30s, recently traveled to Iran",New York,USA,female,38.0,,,,1,0,,,1,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1025,81,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in King County, Washington: associated with long-term care facility, female, 80s, died 3/2",Washington,USA,female,85.0,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1026,82,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in King County,Washington: associated with long-term care facility, female, 90s",Washington,USA,female,95.0,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1027,83,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in King County,Washington: associated with long-term care facility, male, 70s",Washington,USA,male,75.0,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1028,84,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in King County,Washington: associated with long-term care facility, male, 70s, died 2/29/2020",Washington,USA,male,75.0,,,,0,0,,,0,0,0,1583020800,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1029,85,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Snohomish, Washington: male, 40s, died 3/2",Washington,USA,male,45.0,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1030,86,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Manatee County, male, 63",Florida,USA,male,63.0,,,,0,0,,,0,0,0,0,0,,Wesh,https://www.wesh.com/article/florida-gov-says-coronvirus-2-presumptively-positive-tests/31180562 +1031,87,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Hillsborough County, been to Italy, female, 29",Florida,USA,female,29.0,,,,1,0,,,0,0,0,0,0,,Wesh,https://www.wesh.com/article/florida-gov-says-coronvirus-2-presumptively-positive-tests/31180562 +1032,88,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Rhode Island: been to Italy, female, teens, went to Italy mid-February",Rhode Island,USA,female,15.0,,,,1,0,,,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1033,89,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in San Antonio, Texas: been to Wuhan",Texas,USA,,,,,,1,0,,,0,1,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1034,90,2020-03-01T00:00:00.000000,new confirmed COVID-19 patient in Oregon: contact of first Oregon case,Oregon,USA,,,,,,0,0,,,0,0,0,0,0,,CDC,https://www.cdc.gov/media/releases/2020/s0213-15th-coronavirus-case.html +1035,91,2020-03-01T00:00:00.000000,new confirmed COVID-19 patient: passenger on Diamond Princess,USA,USA,,,,,,1,0,,2020-02-13,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1036,92,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Grafton County, NH: went to Italy",New Hampshire,USA,,,,,,1,0,,,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1037,93,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Cook County, IL: female, 70s, married to third case",Illinois,USA,female,75.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1038,94,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Washington, Oregon: unrelated to the two others in Oregon",Oregon,USA,,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1039,95,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Santa Clara, CA: male, in contact with a confirmed case",California,USA,male,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1040,96,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Santa Clara, CA: male, in contact with a confirmed case",California,USA,male,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1041,97,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in San Mateo, CA:",California,USA,,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1042,98,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in King County, WA: male, 50s",Washington,USA,male,55.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1043,99,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in King County, WA: male, 70s, died 3/1/2020",Washington,USA,male,75.0,,,,0,0,,,0,0,0,1583020800,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1044,100,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in King County, WA: female, 70s, died 3/1/2020",Washington,USA,female,75.0,,,,0,0,,,0,0,0,1583020800,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1045,101,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in King County, WA: female, 80s",Washington,USA,female,85.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1046,102,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Sonoma, CA: recently returned from cruise ship that departed from San Francisco to Mexico, been in CA for 10 days, 2/11-2/21 cruise",California,USA,,,,,,1,0,2020-02-11T00:00:00.000000,2020-02-21,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1047,103,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Snohomish, WA: female, 50s",Washington,USA,female,55.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1048,104,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Placer County, CA",California,USA,,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1049,105,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Norfolk County, MA: been to Italy, female, 20s",Massachusetts,USA,female,25.0,,,,1,0,,,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1050,106,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Fulton County, GA: been to Italy, male, traveled to Milan",Georgia,USA,male,,,,,1,0,,,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1051,107,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Fulton County, GA: contact of case 106, male, 15",Georgia,USA,male,15.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1052,108,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Westchester County, NY: male, 50s, commute worker in Manhattan, traveled to Miami",New York,USA,male,55.0,,,,0,1,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1053,109,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Maricopa County, AZ: male, 20s, known contact of presumptive positive case outside of Arizona",Arizona,USA,male,25.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1054,110,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Hillsborough, FL: female, sister of previous Florida case",Florida,USA,female,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1055,111,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in King County, WA: male, 50s, died last week",Washington,USA,male,55.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1056,112,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Snohomish, WA, male, 40s, worked at LifeCare in Kirkland",Washington,USA,male,45.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1057,113,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Snohomish, WA, female, 60s, hospitalized",Washington,USA,female,65.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1058,114,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in King County, WA: female, 40s",Washington,USA,female,45.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1059,115,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in King County, WA: female, 60s, family member of confirmed case",Washington,USA,female,65.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1060,116,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in King County, WA: male, 70s",Washington,USA,male,75.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1061,117,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in King County, WA: male, 20s",Washington,USA,male,25.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1062,118,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in King County, WA: male, 20s",Washington,USA,male,25.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1063,119,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in King County, WA: female, 80s, died 2/26",Washington,USA,female,85.0,,,,0,0,,,0,0,0,1582675200,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1064,120,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Wake County, NC: contracted after visiting nursing home in Seattle, WA",North Carolina,USA,,,,,,0,1,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1065,121,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Santa Clara, CA:",California,USA,,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1066,122,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Santa Clara, CA",California,USA,,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1067,123,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Crafton, NH: male, contact with first NH case",New Hampshire,USA,male,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1068,124,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Berekely, CA: returned to Berekely on 2/23 from a country with outbreak",California,USA,,,,,,1,0,,2020-02-23,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1069,125,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Orange County, CA: male, 60s, recent travel",California,USA,male,65.0,,,,1,0,,,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1070,126,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Orange County, CA: female, 30s, recent travel",California,USA,female,35.0,,,,1,0,,,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1071,127,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Contra Costa, CA",California,USA,,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1072,128,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Los Angeles, CA: last screening air travelers on 2/21, symptom onset 2/29, went to doctor 3/1",California,USA,,,2020-02-29T00:00:00.000000,0,2020-03-01,0,0,,2020-02-21,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1073,129,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Placer County, CA: international travel on Princess cruise ship that departed from San Francisco to Mexico where previous case also attended, 2/11-2/21 cruise",California,USA,,,,,,1,0,2020-02-11T00:00:00.000000,2020-02-21,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1074,130,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Renton, Washington: high school student",Washington,USA,,16.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1075,131,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Westchester, NY: male, 20, son of Westchester man also positive",New York,USA,male,20.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1076,132,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Westchester NY: female, 14, daughter of previous Westchester man",New York,USA,female,14.0,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1077,133,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Westchester NY: female, wife of previous Westchester man",New York,USA,female,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1078,134,2020-03-04T00:00:00.000000,new confirmed COVID-19 patient in Westchester NY: related to previous Westchester man,New York,USA,,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1079,135,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Los Angeles, CA: family member had close contact with someone outside of the country",California,USA,,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1080,136,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Los Angeles, CA: family member had close contact with someone outside of the country",California,USA,,,,,,0,0,,,0,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1081,137,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Los Angeles, CA: been to Italy",California,USA,,,,,,1,0,,,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1082,138,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Los Angeles, CA: been to Italy",California,USA,,,,,,1,0,,,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1083,139,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Los Angeles, CA: been to Italy",California,USA,,,,,,1,0,,,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1084,140,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Florida resident, traveling in Asia recently",Washington,USA,,,,,,1,0,,,1,0,0,0,0,,1Point3Acres,https://coronavirus.1point3acres.com/en +1085,143,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County, male, 50s, associated with Life Care, not hospitalized",Washington,USA,male,55.0,,,,0,0,,,0,,,,,,, +1086,144,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County, male, 60s, Lifecare resident",Washington,USA,male,65.0,,,,0,0,,,0,,,,,,, +1087,145,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County, female, 70s, Lifecare resident",Washington,USA,female,75.0,,,,0,0,,,0,,,,,,, +1088,146,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County, female, 90s, Lifecare resident, died 3/3",Washington,USA,female,95.0,,,,0,0,,,0,,,1583193600,,,, +1089,147,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County, male, 60s, Lifecare resident",Washington,USA,male,65.0,,,,0,0,,,0,,,,,,, +1090,148,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County, female, 70s, Lifecare resident, died 3/8",Washington,USA,female,75.0,,,,0,0,,,0,,,,,,, +1091,149,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County, male, 30s",Washington,USA,male,35.0,,,,0,0,,,0,,,,,,, +1092,150,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County, male, 80s, resident of Lifecare",Washington,USA,male,85.0,,,,0,0,,,0,,,,,,, +1093,151,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 20s, LifeCare",Washington,USA,female,25.0,,,,0,0,,,0,,,,,,, +1094,152,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 50s, LifeCare",Washington,USA,female,55.0,,,,0,0,,,0,,,,,,, +1095,153,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, male, contact with infected patient",New York,USA,male,,,,,0,0,,,0,,,,,,, +1096,154,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, wife of infected patient, female",New York,USA,female,,,,,0,0,,,0,,,,,,, +1097,155,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, male, son of infected patient",New York,USA,male,,,,,0,0,,,0,,,,,,, +1098,156,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, male, son of infected patient",New York,USA,male,,,,,0,0,,,0,,,,,,, +1099,157,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, daughter, son of infected patient",New York,USA,female,,,,,0,0,,,0,,,,,,, +1100,158,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara County, male",California,USA,male,,,,,0,0,,,0,,,,,,, +1101,159,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara County, male, contact of existing case",California,USA,male,,,,,0,0,,,0,,,,,,, +1102,160,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara County, male, contact of existing case",California,USA,male,,,,,0,0,,,0,,,,,,, +1103,161,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Fort Bend, male, 70s recently traveled abroad",Texas,USA,male,75.0,,,,1,0,,,1,,,,,,, +1104,162,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in New Jersey: Bergen, healthcare worker who works and lives in NYC, male, 70",New Jersey,USA,male,70.0,,,,0,1,,,,,,,,,, +1105,163,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County, Facebook employee in Seattle",Washington,USA,,,,,,0,0,,,,,,,,,, +1106,164,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Grant County, admitted to hospital 2/29, died 3/8, 80s",Washington,USA,,85.0,,,2020-02-29,0,0,,,,,,1583625600,,,, +1107,165,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in New York: male, 40s",New York,USA,male,45.0,,,,0,0,,,,,,,,,, +1108,166,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in New York: female, 80s",New York,USA,female,85.0,,,,0,0,,,,,,,,,, +1109,167,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Nevada: Clark County, male, 50s, recently traveled to Washington and Texas",Nevada,USA,male,55.0,,,,0,1,,,,,,,,,, +1110,168,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Tennessee: Williamson, male, 44, traveled to Boston 2/29-3/1",Tennessee,USA,male,44.0,,,,0,1,2020-02-29T00:00:00.000000,2020-03-01,,,,,,,, +1111,169,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Santa Rosa, male, 71, international travel",Florida,USA,male,71.0,,,,1,0,,,1,,,,,,, +1112,170,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1113,171,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1114,172,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1115,173,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1116,174,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1117,175,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1118,176,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1119,177,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1120,178,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Illinois: Cook County, traveled to Italy, male, 21, hospitalized 3/5, flew home 3/3, symptom onset 3/3",Illinois,USA,male,21.0,2020-03-03T00:00:00.000000,0,2020-03-05,1,0,,2020-03-03,1,,,,,,, +1121,179,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1122,180,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1123,181,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1124,182,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1125,183,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1126,184,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1127,185,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1128,186,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1129,187,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1130,188,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1131,189,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1132,190,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1133,191,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1134,192,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1135,193,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1136,194,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1137,195,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1138,196,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1139,197,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1140,198,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 60s",Washington,USA,female,65.0,,,,0,0,,,,,,,,,, +1141,199,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 60s",Washington,USA,male,65.0,,,,0,0,,,,,,,,,, +1142,200,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 20s, LifeCare",Washington,USA,female,25.0,,,,0,0,,,,,,,,,, +1143,201,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 50s, LifeCare",Washington,USA,female,55.0,,,,0,0,,,,,,,,,, +1144,202,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 40s, LifeCare",Washington,USA,female,45.0,,,,0,0,,,,,,,,,, +1145,203,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 50s, LifeCare",Washington,USA,female,55.0,,,,0,0,,,,,,,,,, +1146,204,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 50s",Washington,USA,male,55.0,,,,0,0,,,,,,,,,, +1147,205,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 60s, LifeCare",Washington,USA,female,65.0,,,,0,0,,,,,,,,,, +1148,206,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 40s",Washington,USA,male,45.0,,,,0,0,,,,,,,,,, +1149,207,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 80s",Washington,USA,female,85.0,,,,0,0,,,,,,,,,, +1150,208,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, community spread, male, 90s",California,USA,male,95.0,,,,0,0,,,,,,,,,, +1151,209,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, community spread, female, 40s",California,USA,female,45.0,,,,0,0,,,,,,,,,, +1152,210,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in California: San Diego, female, spent time in Italy, symptom onset 3/2",California,USA,female,,2020-03-02T00:00:00.000000,0,,1,0,,,1,,,,,,, +1153,211,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in New Jersey: Bergen, works in same office as Manhattan lawyer from Westchester who was second NY patient, male, 32, symptom onset 3/1, sought medical care 3/2 at clinic, hospitalized 3/3",New Jersey,USA,male,32.0,2020-03-01T00:00:00.000000,0,2020-03-02,0,1,,,,,,,,,, +1154,212,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in New York: Nassau, male, 42",New York,USA,male,42.0,,,,0,0,,,,,,,,,, +1155,213,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in California: Los Angeles, went to Northern Italy",California,USA,,,,,,1,0,,,1,,,,,,, +1156,214,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in California: Los Angeles, went to Northern Italy",California,USA,,,,,,1,0,,,1,,,,,,, +1157,215,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in California: Los Angeles, went to Northern Italy",California,USA,,,,,,1,0,,,1,,,,,,, +1158,216,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in California: Los Angeles, went to Northern Italy",California,USA,,,,,,1,0,,,1,,,,,,, +1159,217,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Harris, female, traveler",Texas,USA,female,,,,,1,0,,,1,,,,,,, +1160,218,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Harris, male, traveler",Texas,USA,male,,,,,1,0,,,1,,,,,,, +1161,219,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: Florida resident,Washington,USA,,,,,,0,0,,,,,,,,,, +1162,220,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: Florida resident,Washington,USA,,,,,,0,0,,,,,,,,,, +1163,221,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: Florida resident,Washington,USA,,,,,,0,0,,,,,,,,,, +1164,222,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: Florida resident,Washington,USA,,,,,,0,0,,,,,,,,,, +1165,223,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Washington: Florida resident,Washington,USA,,,,,,0,0,,,,,,,,,, +1166,224,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, male",California,USA,male,,,,,0,0,,,,,,,,,, +1167,225,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, male",California,USA,male,,,,,0,0,,,,,,,,,, +1168,226,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, male",California,USA,male,,,,,0,0,,,,,,,,,, +1169,227,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, female",California,USA,female,,,,,0,0,,,,,,,,,, +1170,228,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, female",California,USA,female,,,,,0,0,,,,,,,,,, +1171,229,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, female",California,USA,female,,,,,0,0,,,,,,,,,, +1172,230,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Summit, male, 30s, Californian resident, went to Italy in mid-February, flew to Denver 2/29, symptom onset 3/3",Colorado,USA,male,35.0,2020-03-03T00:00:00.000000,0,,1,0,,2020-02-29,1,,,,,,, +1173,231,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Middlesex, female, 60s, recently traveled to northern Italy",Massachusetts,USA,female,65.0,,,,1,0,,,1,,,,,,, +1174,232,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Maryland: Montgomery County, went on cruise to Egypt, female, 70s, returned from travel 2/20",Maryland,USA,female,75.0,,,,1,0,,2020-02-20,1,,,,,,, +1175,233,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Maryland: Montgomery County, went on cruise to Egypt, male, 70s, returned from travel 2/20",Maryland,USA,male,75.0,,,,1,0,,2020-02-20,1,,,,,,, +1176,234,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Maryland: Montgomery County, female, 50s, returned from travel 2/20",Maryland,USA,female,55.0,,,,1,0,,2020-02-20,1,,,,,,, +1177,235,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Douglas, female, overseas cruise ship",Colorado,USA,female,,,,,1,0,,,1,,,,,,, +1178,236,2020-03-05T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Plymouth,Massachusetts,USA,,,,,,0,0,,,,,,,,,, +1179,237,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County,",Washington,USA,,,,,,0,0,,,,,,,,,, +1180,238,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Harris, female, 60s",Texas,USA,female,65.0,,,,0,0,,,,,,,,,, +1181,239,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Pennsylvania: Delaware, female, contacted infected patient",Pennsylvania,USA,female,,,,,0,0,,,,,,,,,, +1182,240,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Pennsylvania: Wayne, male, traveler",Pennsylvania,USA,male,,,,,1,0,,,1,,,,,,, +1183,241,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Harris, male, 60",Texas,USA,male,60.0,,,,0,0,,,,,,,,,, +1184,242,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Harris, male, 60",Texas,USA,male,60.0,,,,0,0,,,,,,,,,, +1185,243,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in North Carolina: Chatham, male, traveled to Italy",North Carolina,USA,male,,,,,1,0,,,1,,,,,,, +1186,244,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Indiana: Marion, male, traveled to Boston for an event, went to hospital 3/5",Indiana,USA,male,,,,2020-03-05,0,1,,,,,,,,,, +1187,245,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Georgia: Polk, female, 46, went to care center in Rome with flu 2/29, returned to hospital 3/3",Georgia,USA,female,46.0,,,2020-02-29,0,0,,,,,,,,,, +1188,246,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Arizona: Pinal, female, 40s",Arizona,USA,female,45.0,,,,0,0,,,,,,,,,, +1189,247,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Norfolk,Massachusetts,USA,,,,,,0,0,,,,,,,,,, +1190,248,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Suffolk, attended company meeting in Boston 2/24-2/27 at Marriott Long Wharf, female, 40s",Massachusetts,USA,female,45.0,,,,0,1,2020-02-24T00:00:00.000000,2020-02-27,,,,,,,, +1191,249,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Suffolk, attended company meeting in Boston 2/24-2/27 at Marriott Long Wharf, female, 40s",Massachusetts,USA,female,45.0,,,,0,1,2020-02-24T00:00:00.000000,2020-02-27,,,,,,,, +1192,250,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Suffolk, attended company meeting in Boston 2/24-2/27 at Marriott Long Wharf, male, 40s",Massachusetts,USA,male,45.0,,,,0,1,2020-02-24T00:00:00.000000,2020-02-27,,,,,,,, +1193,251,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, connected to cluster with Manhattan Lawyer, male, 50s",New York,USA,male,55.0,,,,0,0,,,,,,,,,, +1194,252,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, connected to cluster with Manhattan Lawyer",New York,USA,,,,,,0,0,,,,,,,,,, +1195,253,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, connected to cluster with Manhattan Lawyer",New York,USA,,,,,,0,0,,,,,,,,,, +1196,254,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, connected to cluster with Manhattan Lawyer",New York,USA,,,,,,0,0,,,,,,,,,, +1197,255,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, connected to cluster with Manhattan Lawyer",New York,USA,,,,,,0,0,,,,,,,,,, +1198,256,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, connected to cluster with Manhattan Lawyer",New York,USA,,,,,,0,0,,,,,,,,,, +1199,257,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, connected to cluster with Manhattan Lawyer",New York,USA,,,,,,0,0,,,,,,,,,, +1200,258,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, connected to cluster with Manhattan Lawyer",New York,USA,,,,,,0,0,,,,,,,,,, +1201,259,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Contra Costa County, passenger aboard Grand Princess cruise ship",California,USA,,,,,,1,0,,,1,,,,,,, +1202,260,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Contra Costa County, passenger aboard Grand Princess cruise ship",California,USA,,,,,,1,0,,,1,,,,,,, +1203,261,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Contra Costa County, in contact with infected patient",California,USA,,,,,,1,0,,,,,,,,,, +1204,262,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Nevada: Washoe, male, 50s, linked to Grand Princess cruise ship",Nevada,USA,male,55.0,,,,,0,,,1,,,,,,, +1205,263,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Yolo, female",California,USA,female,,,,,1,0,,,,,,,,,, +1206,264,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Los Angeles, medical screener",California,USA,,,,,,,0,,,,,,,,,, +1207,265,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Los Angeles, recently returned from Northern Italy",California,USA,,,,,,,0,,,1,,,,,,, +1208,266,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New Jersey: Camden, male, 60s, currently hospitalized",New Jersey,USA,male,65.0,,,,1,0,,,,,,,,,, +1209,267,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in Washington: Jefferson,Washington,USA,,,,,,,0,,,,,,,,,, +1210,268,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Placer, traveled on Grand Princess 2/11-2/21",California,USA,,,,,,1,0,2020-02-11T00:00:00.000000,2020-02-21,,,,,,,, +1211,269,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Placer, traveled on Grand Princess 2/11-2/21",California,USA,,,,,,1,0,2020-02-11T00:00:00.000000,2020-02-21,,,,,,,, +1212,270,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Placer, traveled on Grand Princess 2/11-2/21",California,USA,,,,,,1,0,2020-02-11T00:00:00.000000,2020-02-21,,,,,,,, +1213,271,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County, male, 80s, died 3/9/2020",Washington,USA,male,85.0,,,,,0,,,,,,1583712000,,,, +1214,272,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,0,,,,,,,,,, +1215,273,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,0,,,,,,,,,, +1216,274,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,0,,,,,,,,,, +1217,275,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,0,,,,,,,,,, +1218,276,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,0,,,,,,,,,, +1219,277,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,0,,,,,,,,,, +1220,278,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 50s",Washington,USA,male,55.0,,,,,0,,,,,,,,,, +1221,279,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Minnesota: Ramsey, female, older woman, travelled on cruise ship, symptom onset 2/25, went to doctor 3/3",Minnesota,USA,female,,2020-02-25T00:00:00.000000,0,2020-03-03,1,0,,,,,,,,,, +1222,280,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Kentucky: Fayette, male, 49",Kentucky,USA,male,49.0,,,,,0,,,,,,,,,, +1223,281,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Denver, returned from Vancouver, Canada, male, 40s",Colorado,USA,male,45.0,,,,1,0,,,,,,,,,, +1224,282,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Denver, returned from cruise ship, female, 70s",Colorado,USA,female,75.0,,,,1,0,,,,,,,,,, +1225,283,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Nebraska: Douglas, female, 36, in UK from 2/18-2/27, went to emergency department 3/5 for respiratory infection that has been going on since 2/22 symptoms worsened 3/5",Nebraska,USA,female,36.0,2020-02-22T00:00:00.000000,0,2020-03-05,1,0,2020-02-18T00:00:00.000000,2020-02-27,,,,,,,, +1247,305,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, female, 12",New York,USA,female,12.0,,,,0,0,,,,,,,,,, +1248,306,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, male, 14",New York,USA,male,14.0,,,,0,0,,,,,,,,,, +1249,307,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, male, 17",New York,USA,male,17.0,,,,0,0,,,,,,,,,, +1250,308,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Westchester, male, 51",New York,USA,male,51.0,,,,0,0,,,,,,,,,, +1251,309,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1252,310,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1253,311,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1254,312,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1255,313,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Oklahoma: male, 50s, recently traveled to Italy, returned to Tulsa on 2/23, symptomatic 2/29",Oklahoma,USA,male,55.0,2020-02-29T00:00:00.000000,,,1,0,,2020-02-23,,,,,,,, +1256,314,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1257,315,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1258,316,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1259,317,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: El Paso, male, 40s, recently traveled to California",Colorado,USA,male,45.0,,,,0,1,,,,,,,,,, +1260,318,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New Jersey: Bergen, male, 50s, hospitalized since 3/5, attended Conservative Political Action Conference in Maryland 2/26-2/29",New Jersey,USA,male,55.0,,,2020-03-05,0,1,2020-02-26T00:00:00.000000,2020-02-29,,,,,,,, +1261,319,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, male, contact of previously infected case",California,USA,male,,,,,0,0,,,,,,,,,, +1262,320,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in California: female,California,USA,female,,,,,0,0,,,,,,,,,, +1263,321,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, male, recently traveled from India",California,USA,male,,,,,1,0,,,,,,,,,, +1264,322,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, male",California,USA,male,,,,,0,0,,,,,,,,,, +1265,323,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in South Carolina: Kershaw, female",South Carolina,USA,female,,,,,0,0,,,,,,,,,, +1266,324,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in South Carolina: Charleston, female, recently traveled to France and Italy",South Carolina,USA,female,,,,,1,0,,,,,,,,,, +1267,325,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Illinois: Cook County, female, 50s, aboard Grand Princess cruise ship that disembarked on 2/21, returned to Chicago 2/25",Illinois,USA,female,55.0,,,,1,0,,2020-02-21,,,,,,,, +1268,326,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Fort Bend, female, 60s, took trip to Egypt",Texas,USA,female,65.0,,,,1,0,,,,,,,,,, +1269,327,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Fort Bend, female, 60s, took trip to Egypt",Texas,USA,female,65.0,,,,1,0,,,,,,,,,, +1270,328,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in Hawaii: on Grand Princess cruise ship,Hawaii,USA,,,,,,1,0,,,,,,,,,, +1271,329,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Rhode Island: Providence, female, 60s, had contact with confirmed patient in New York late January",Rhode Island,USA,female,65.0,,,,0,1,,,,,,,,,, +1272,330,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Douglas, female, 40s, traveler",Colorado,USA,female,45.0,,,,1,0,,,,,,,,,, +1273,331,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Douglas, female, 70s, traveler",Colorado,USA,female,75.0,,,,1,0,,,,,,,,,, +1274,332,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Eagle, female, 50s, traveler",Colorado,USA,female,55.0,,,,1,0,,,,,,,,,, +1275,333,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Pierce, male, 50s, went to hospital 3/4",Washington,USA,male,55.0,,,2020-03-04,0,0,,,,,,,,,, +1276,334,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Broward, male, 75",Florida,USA,male,75.0,,,,0,0,,,,,,,,,, +1277,335,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Broward, male, 65",Florida,USA,male,65.0,,,,0,0,,,,,,,,,, +1278,336,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Lee, died 3/6, female, 77, traveler",Florida,USA,female,77.0,,,,1,0,,,,,,1583452800,,,, +1279,337,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in Utah: Davis,Utah,USA,,,,,,0,0,,,,,,,,,, +1280,338,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in Texas: Montgomery,Texas,USA,,,,,,0,0,,,,,,,,,, +1281,339,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Alameda, passenger on Grand Princess cruise ship",California,USA,,,,,,1,0,,,,,,,,,, +1282,340,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in California: San Francisco,California,USA,,,,,,0,0,,,,,,,,,, +1283,341,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Rockland, male",New York,USA,male,,,,,0,0,,,,,,,,,, +1284,342,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in New York: Rockland, female",New York,USA,female,,,,,0,0,,,,,,,,,, +1285,343,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in New York: New York City,New York,USA,,,,,,0,0,,,,,,,,,, +1286,344,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Ventura, on Grand Princess cruise, disembarked 2/21",California,USA,,,,,,1,0,,2020-02-21,,,,,,,, +1287,345,2020-03-06T00:00:00.000000,new confirmed COVID-19 patient in California: Solano,California,USA,,,,,,0,0,,,,,,,,,, +1288,346,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Sonoma, on Grand Princess cruise to Mexico",California,USA,,,,,,1,0,,2020-02-21,,,,,,,, +1289,347,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in California: Sonoma, on Grand Princess cruise to Mexico",California,USA,,,,,,1,0,,2020-02-21,,,,,,,, +1290,348,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Georgia: Cobb, traveled to Italy",Georgia,USA,,,,,,1,0,,,,,,,,,, +1291,349,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Fulton,Georgia,USA,,,,,,0,0,,,,,,,,,, +1292,350,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Lee, male, 77, travel-related",Florida,USA,male,77.0,,,,1,0,,,,,,,,,, +1293,351,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Arizona: Pinal, contact of another case",Arizona,USA,,,,,,0,0,,,,,,,,,, +1294,352,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Arizona: Pinal, contact of another case",Arizona,USA,,,,,,0,0,,,,,,,,,, +1295,353,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in New York: Uber driver, male, early 30s",New York,USA,male,33.0,,,,0,0,,,,,,,,,, +1296,354,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,0,0,,,,,,,,,, +1297,355,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,0,0,,,,,,,,,, +1298,356,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,0,0,,,,,,,,,, +1299,357,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in New York: Saratoga, male, 57, recently traveled to conference in Miami and came into contact with infected person from Pennsylvania",New York,USA,male,57.0,,,,0,1,,,,,,,,,, +1300,358,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in New York: Saratoga, female, 52, recently traveled to conference in Miami and came into contact with infected person from Pennsylvania",New York,USA,female,52.0,,,,0,1,2020-02-27T00:00:00.000000,2020-02-29,,,,,,,, +1301,359,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Clark, male, 70s",Washington,USA,male,75.0,,,,0,0,,,,,,,,,, +1302,360,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1303,361,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1304,362,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1305,363,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1306,364,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1307,365,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1308,366,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1309,367,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1310,368,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1311,369,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1312,370,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1313,371,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1314,372,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1315,373,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1316,374,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1317,375,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1318,376,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1319,377,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1320,378,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1321,379,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1322,380,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1323,381,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1324,382,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1325,383,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Oregon: Jackson, travel-related",Oregon,USA,,,,,,1,0,,,,,,,,,, +1326,384,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Oregon: Jackson, travel-related",Oregon,USA,,,,,,1,0,,,,,,,,,, +1327,385,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Oregon: Klamath, travel-related",Oregon,USA,,,,,,1,0,,,,,,,,,, +1328,386,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Middlesex, female, 40s",Massachusetts,USA,female,45.0,,,,0,0,,,,,,,,,, +1329,387,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Middlesex, female, 50s",Massachusetts,USA,female,55.0,,,,0,0,,,,,,,,,, +1330,388,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Middlesex, male, 40s",Massachusetts,USA,male,45.0,,,,0,0,,,,,,,,,, +1331,389,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Middlesex, male, 60s",Massachusetts,USA,male,65.0,,,,0,0,,,,,,,,,, +1332,390,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Oregon: Washington County, contact with previous case",Oregon,USA,,,,,,0,0,,,,,,,,,, +1333,391,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in California: Madera, returned from Grand Princess cruise",California,USA,,,,,,1,0,,2020-02-21,,,,,,,, +1334,392,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County, died 3/8, female, 80s",Washington,USA,female,85.0,,,,0,0,,,,,,1583625600,,,, +1335,393,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1336,394,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1337,395,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1338,396,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1339,397,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1340,398,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1341,399,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1342,400,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1343,401,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1344,402,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1345,403,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1346,404,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, LifeCare, female, 40s",Washington,USA,female,45.0,,,,0,0,,,,,,,,,, +1347,405,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 60s",Washington,USA,male,65.0,,,,0,0,,,,,,,,,, +1348,406,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, LifeCare, male, 40s",Washington,USA,male,45.0,,,,0,0,,,,,,,,,, +1349,407,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, LifeCare, female, 60s",Washington,USA,female,65.0,,,,0,0,,,,,,,,,, +1350,408,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 40s",Washington,USA,male,45.0,,,,0,0,,,,,,,,,, +1351,409,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 50s, LifeCare",Washington,USA,female,55.0,,,,0,0,,,,,,,,,, +1352,410,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 30s, Lifecare",Washington,USA,female,35.0,,,,0,0,,,,,,,,,, +1353,411,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 50s",Washington,USA,female,55.0,,,,0,0,,,,,,,,,, +1354,412,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Charlotte, female, 54, recently returned from Middle East",Florida,USA,female,54.0,,,,1,0,,,,,,,,,, +1355,413,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, Stanford University faculty member,",California,USA,,,,,,0,0,,,,,,,,,, +1356,414,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Cruz, on Grand Princess cruise ship",California,USA,,,,,,1,0,,2020-02-21,,,,,,,, +1357,415,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, male, 50s",California,USA,male,55.0,,,,0,0,,,,,,,,,, +1358,416,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, 20s",California,USA,,25.0,,,,0,0,,,,,,,,,, +1359,417,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, 20s",California,USA,,25.0,,,,0,0,,,,,,,,,, +1360,418,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, 40s",California,USA,,45.0,,,,0,0,,,,,,,,,, +1361,419,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, 40s",California,USA,,45.0,,,,0,0,,,,,,,,,, +1362,420,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, 40s",California,USA,,45.0,,,,0,0,,,,,,,,,, +1363,421,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, 50s",California,USA,,55.0,,,,0,0,,,,,,,,,, +1364,422,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in California: Los Angeles, returned from AIPAC conference in DC 3/1-3/3",California,USA,,,,,,0,1,2020-03-01T00:00:00.000000,2020-03-03,,,,,,,, +1365,423,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Kittitas, female, 67",Washington,USA,female,67.0,,,,0,0,,,,,,,,,, +1366,424,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Berkshire, male, 60s",Massachusetts,USA,male,65.0,,,,0,0,,,,,,,,,, +1367,425,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in DC: male, 50s, symptom onset 2/24, went to doctor 3/3 and diagnosed with flu, admitted to hospital 3/5, returned from Louisville 2/22",district of columbia,USA,male,55.0,2020-02-24T00:00:00.000000,0,2020-03-03,0,1,,2020-02-22,,,,,,,, +1368,426,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1369,427,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1370,428,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1371,429,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1372,430,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1373,431,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1374,432,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Pennsylvania: Montgomery County,Pennsylvania,USA,,,,,,0,0,,,,,,,,,, +1375,433,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Pennsylvania: Montgomery County,Pennsylvania,USA,,,,,,0,0,,,,,,,,,, +1376,434,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1377,435,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1378,436,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1379,437,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1380,438,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1381,439,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1382,440,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1383,441,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1384,442,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1385,443,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1386,444,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1387,445,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1388,446,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1389,447,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Kansas: Johnson, female, under 50",Kansas,USA,female,,,,,0,0,,,,,,,,,, +1390,448,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Okaloosa, female, 61, traveled on cruise on Nile River in Egypt from 2/4-2/18",Florida,USA,female,61.0,,,,1,0,2020-02-04T00:00:00.000000,2020-02-18,,,,,,,, +1391,449,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Virginia: Fairfax, returned from overseas business",Virginia,USA,,,,,,1,0,,,,,,,,,, +1392,450,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Volusia, female, 66, traveled on cruise on Nile River in Egypt from 2/4-2/18",Florida,USA,female,66.0,,,,1,0,2020-02-04T00:00:00.000000,2020-02-18,,,,,,,, +1393,451,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Missouri: St. Louis, female, 20s, traveled to Italy, flew to Chicago 3/2, symptom onset 3/4, went to hospital 3/6 with fever and breathing issues",Missouri,USA,female,25.0,2020-03-04T00:00:00.000000,,2020-03-06,1,0,,2020-03-02,,,,,,,, +1394,452,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: family member of infected man,New York,USA,,,,,,0,0,,,,,,,,,, +1395,453,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: family member of infected man,New York,USA,,,,,,0,0,,,,,,,,,, +1396,454,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Georgia: Gwinnett, recently returned from Italy",Georgia,USA,,,,,,1,0,,,,,,,,,, +1397,455,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in New York: Bronx man who spent time with infected patient in Chile,New York,USA,male,,,,,1,0,,,,,,,,,, +1398,456,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Fulton,Georgia,USA,,,,,,0,0,,,,,,,,,, +1399,457,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Manatee, female, 81, travel related",Florida,USA,female,81.0,,,,1,0,,,,,,,,,, +1400,458,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in California: Fresno, returned from Grand Princess cruise on 3/6",California,USA,,,,,,1,0,,2020-03-06,,,,,,,, +1401,459,2020-03-07T00:00:00.000000,new confirmed COVID-19 patient in Vermont: Bennington,Vermont,USA,,,,,,0,0,,,,,,,,,, +1402,460,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Pierce, female, 30s",Washington,USA,female,35.0,,,,0,0,,,,,,,,,, +1403,461,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Pierce, male, 40s",Washington,USA,male,45.0,,,,0,0,,,,,,,,,, +1404,462,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in New Hampshire: Grafton, male, contact with infected patient on 3/1",New Hampshire,USA,male,,,,,0,0,2020-03-01T00:00:00.000000,2020-03-01,,,,,,,, +1405,463,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in New Hampshire: Rockingham, male, traveled to Italy",New Hampshire,USA,male,,,,,1,0,,,,,,,,,, +1406,464,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in California: Riverside,California,USA,,,,,,0,0,,,,,,,,,, +1407,465,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in DC: male, traveled to Nigeria from DC, 50s",district of columbia,USA,male,55.0,,,,1,0,,,,,,,,,, +1408,466,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Virginia: Fairfax, 80s, traveled on same Nile River cruise as other coronavirus patients from Montgomery County, symptom onset 2/28, hospitalized 3/5",Virginia,USA,,85.0,2020-02-28T00:00:00.000000,0,2020-03-05,1,0,2020-02-04T00:00:00.000000,2020-02-18,,,,,,,, +1409,467,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1410,468,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1411,469,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1412,470,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1413,471,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1414,472,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1415,473,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1416,474,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1417,475,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1418,476,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1419,477,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1420,478,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1421,479,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1422,480,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in New York: Ulster, recently traveled to France",New York,USA,,,,,,1,0,,,,,,,,,, +1423,481,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1424,482,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Fort Bend, traveler, male, 70s",Texas,USA,male,75.0,,,,1,0,,,,,,,,,, +1425,483,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Fort Bend, traveler, male, 70s",Texas,USA,male,75.0,,,,1,0,,,,,,,,,, +1426,484,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Fort Bend, traveler, female, 60s",Texas,USA,female,65.0,,,,1,0,,,,,,,,,, +1427,485,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Tennessee: Shelby, traveled out of state recently",Tennessee,USA,,,,,,0,1,,,,,,,,,, +1428,486,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Connecticut: Wilton, male, 40s, trip to California",Connecticut,USA,male,45.0,,,,0,1,,,,,,,,,, +1429,487,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Tennessee: Davidson, female,",Tennessee,USA,female,,,,,0,0,,,,,,,,,, +1430,488,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Indiana: Hendricks, traveled to Boston in late February to attend the BioGen conference at Marriott hotel, symptom onset 3/2",Indiana,USA,,,2020-03-02T00:00:00.000000,0,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1431,489,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in New Jersey: Bergen, male, 70, admitted to hospital 3/6",New Jersey,USA,male,70.0,,,2020-03-06,0,0,,,,,,,,,, +1432,490,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in New Jersey: Hudson, male, 32, hospitalized 3/5",New Jersey,USA,male,32.0,,,2020-03-05,0,0,,,,,,,,,, +1433,491,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Oregon: Washington County,Oregon,USA,,,,,,0,0,,,,,,,,,, +1434,492,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Oregon: Washington County,Oregon,USA,,,,,,0,0,,,,,,,,,, +1435,493,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Oregon: Washington County,Oregon,USA,,,,,,0,0,,,,,,,,,, +1436,494,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Oregon: Washington County,Oregon,USA,,,,,,0,0,,,,,,,,,, +1437,495,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Oregon: Umatilla,Oregon,USA,,,,,,0,0,,,,,,,,,, +1438,496,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Oregon: Douglas,Oregon,USA,,,,,,0,0,,,,,,,,,, +1439,497,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Oregon: Marion,Oregon,USA,,,,,,0,0,,,,,,,,,, +1440,498,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Illinois: Cook, male, 60s",Illinois,USA,male,65.0,,,,0,0,,,,,,,,,, +1441,499,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1442,500,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1443,501,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1444,502,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1445,503,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1446,504,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1447,505,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1448,506,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1449,507,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1450,508,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1451,509,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1452,510,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1453,511,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Suffolk, went to Biogen employee conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1454,512,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Suffolk, went to Biogen employee conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1455,513,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Suffolk, went to Biogen employee conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1456,514,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Suffolk, went to Biogen employee conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1457,515,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Suffolk, went to Biogen employee conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1458,516,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Middlesex, went to Biogen employee conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1459,517,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Middlesex, went to Biogen employee conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1460,518,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Middlesex, went to Biogen employee conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1461,519,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Middlesex, went to Biogen employee conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1462,520,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Middlesex, went to Biogen employee conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1463,521,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Norfolk, went to Biogen conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1464,522,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Norfolk, went to Biogen conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1465,523,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Norfolk, went to Biogen conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1466,524,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: Norfolk, went to Biogen conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1467,525,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Massachusetts: female, went to Biogen conference",Massachusetts,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1468,526,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1469,527,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1470,528,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1471,529,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1472,530,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1473,531,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Nevada: Clark,Nevada,USA,,,,,,0,0,,,,,,,,,, +1474,532,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in California: Contra Costa,California,USA,,,,,,0,0,,,,,,,,,, +1475,533,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in California: Contra Costa,California,USA,,,,,,0,0,,,,,,,,,, +1476,534,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Pennsylvania: Montgomery County, traveler",Pennsylvania,USA,,,,,,1,0,,,,,,,,,, +1477,535,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Pennsylvania: Montgomery County, traveler",Pennsylvania,USA,,,,,,1,0,,,,,,,,,, +1478,536,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in California: Contra Costa,California,USA,,,,,,0,0,,,,,,,,,, +1479,537,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in California: Contra Costa,California,USA,,,,,,0,0,,,,,,,,,, +1480,538,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in California: Contra Costa,California,USA,,,,,,0,0,,,,,,,,,, +1481,539,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 80s",Washington,USA,female,85.0,,,,0,0,,,,,,,,,, +1482,540,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 30s",Washington,USA,male,35.0,,,,0,0,,,,,,,,,, +1483,541,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 60s",Washington,USA,male,65.0,,,,0,0,,,,,,,,,, +1484,542,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 70s",Washington,USA,male,75.0,,,,0,0,,,,,,,,,, +1485,543,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington:,Washington,USA,,,,,,0,0,,,,,,,,,, +1486,544,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington:,Washington,USA,,,,,,0,0,,,,,,,,,, +1487,545,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington:,Washington,USA,,,,,,0,0,,,,,,,,,, +1488,546,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington:,Washington,USA,,,,,,0,0,,,,,,,,,, +1489,547,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington:,Washington,USA,,,,,,0,0,,,,,,,,,, +1490,548,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington:,Washington,USA,,,,,,0,0,,,,,,,,,, +1491,549,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington:,Washington,USA,,,,,,0,0,,,,,,,,,, +1492,550,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington:,Washington,USA,,,,,,0,0,,,,,,,,,, +1493,551,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington:,Washington,USA,,,,,,0,0,,,,,,,,,, +1494,552,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Maryland: Hartford, female, 80s, traveler",Maryland,USA,female,85.0,,,,1,0,,,,,,,,,, +1495,553,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in South Carolina: Camden, male",South Carolina,USA,male,,,,,0,0,,,,,,,,,, +1496,554,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in South Carolina: Camden, male, contact of infected patient",South Carolina,USA,male,,,,,0,0,,,,,,,,,, +1497,555,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Maryland: Montgomery County, male, 60s, traveler",Maryland,USA,male,65.0,,,,1,0,,,,,,,,,, +1498,556,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Washington: Pierce,Washington,USA,,,,,,0,0,,,,,,,,,, +1499,557,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in South Carolina: Camden, female",South Carolina,USA,female,,,,,0,0,,,,,,,,,, +1500,558,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in South Carolina: Spartanburg, male, traveled to Italy",South Carolina,USA,male,,,,,1,0,,,,,,,,,, +1501,559,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Kentucky: Harrison, female, 27",Kentucky,USA,female,27.0,,,,0,0,,,,,,,,,, +1502,560,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Kentucky: Fayette,Kentucky,USA,,,,,,0,0,,,,,,,,,, +1503,561,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Kentucky: Jefferson, male, 69",Kentucky,USA,male,69.0,,,,0,0,,,,,,,,,, +1504,562,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in California: Orange, male",California,USA,male,,,,,0,0,,,,,,,,,, +1505,563,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Broward, male, 67",Florida,USA,male,67.0,,,,0,0,,,,,,,,,, +1506,564,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Nevada: Washoe County, male, 30s, traveled to California",Nevada,USA,male,35.0,,,,0,1,,,,,,,,,, +1507,565,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Iowa: Johnson, cruise in Egypt",Iowa,USA,,,,,,1,0,,2020-03-03,,,,,,,, +1508,566,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Iowa: Johnson, Cruise in Egypt",Iowa,USA,,,,,,1,0,,2020-03-03,,,,,,,, +1509,567,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Iowa: Johnson, cruise in Egypt",Iowa,USA,,,,,,1,0,,2020-03-03,,,,,,,, +1510,568,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in New York: Suffolk, male, early 40s",New York,USA,male,45.0,,,,0,0,,,,,,,,,, +1511,569,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Minnesota: Carver, 50s, traveled to Europe, symptom onset 3/2, went to doctor 3/7",Minnesota,USA,,55.0,2020-03-02T00:00:00.000000,0,2020-03-07,1,0,,,,,,,,,, +1512,570,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Nebraska: related to previous case,Nebraska,USA,,,,,,0,0,,,,,,,,,, +1513,571,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Nebraska: related to previous case,Nebraska,USA,,,,,,0,0,,,,,,,,,, +1514,572,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Harris, went to Egypt, female, 60s",Texas,USA,female,65.0,,,,1,0,,,,,,,,,, +1515,573,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in California: Shasta, male, 50s",California,USA,male,55.0,,,,0,0,,,,,,,,,, +1516,574,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Hawaii: Honolulu, male, recently traveled to Washington, symptom onset 3/2, returned to Hawaii on 3/4 and went directly to a hospital",Hawaii,USA,male,,2020-03-02T00:00:00.000000,0,2020-03-04,0,1,,2020-03-04,,,,,,,, +1517,575,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Fulton,Georgia,USA,,,,,,0,0,,,,,,,,,, +1518,576,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Cherokee,Georgia,USA,,,,,,0,0,,,,,,,,,, +1519,577,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Cobb,Georgia,USA,,,,,,0,0,,,,,,,,,, +1520,578,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Cobb,Georgia,USA,,,,,,0,0,,,,,,,,,, +1521,579,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Indiana: Hendricks, student at Hickory Elementary School",Indiana,USA,,,,,,0,0,,,,,,,,,, +1522,580,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in California: Placer,California,USA,,,,,,0,0,,,,,,,,,, +1523,581,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in California: Placer,California,USA,,,,,,0,0,,,,,,,,,, +1524,582,2020-03-08T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,0,0,,,,,,,,,, +1525,583,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Indiana: Noble,",Indiana,USA,,,,,,0,0,,,,,,,,,, +1526,584,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,0,0,,,,,,,,,, +1527,585,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,0,0,,,,,,,,,, +1528,586,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,0,0,,,,,,,,,, +1529,587,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1530,588,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1531,589,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1532,590,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1533,591,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1534,592,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1535,593,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1536,594,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1537,595,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1538,596,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1539,597,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1540,598,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1541,599,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1542,600,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1543,601,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1544,602,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1545,603,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1546,604,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1547,605,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1548,606,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1549,607,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1550,608,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,0,0,,,,,,,,,, +1551,609,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1552,613,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1553,614,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1554,615,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,0,0,,,,,,,,,, +1555,617,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Rockland,New York,USA,,,,,,0,0,,,,,,,,,, +1556,618,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York: Rockland,New York,USA,,,,,,0,0,,,,,,,,,, +1557,619,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Pennsylvania: Montgomery,Pennsylvania,USA,,,,,,0,0,,,,,,,,,, +1558,620,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Tennessee: female,Tennessee,USA,female,,,,,0,0,,,,,,,,,, +1559,621,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Collin, male, 30s recently traveled to California",Texas,USA,male,35.0,,,,0,1,,,,,,,,,, +1560,622,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Floyd,Georgia,USA,,,,,,0,0,,,,,,,,,, +1561,623,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Larimer, female, 50s",Colorado,USA,female,55.0,,,,0,0,,,,,,,,,, +1562,624,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, had contact with infected patient",California,USA,,,,,,0,0,,,,,,,,,, +1563,625,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, had contact with infected patient",California,USA,,,,,,0,0,,,,,,,,,, +1564,626,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, had contact with infected patient",California,USA,,,,,,0,0,,,,,,,,,, +1565,627,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, had contact with infected patient",California,USA,,,,,,0,0,,,,,,,,,, +1566,628,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, had contact with infected patient",California,USA,,,,,,0,0,,,,,,,,,, +1567,629,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Louisiana: Jefferson Parish,Louisiana,USA,,,,,,0,0,,,,,,,,,, +1568,630,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New Jersey,New Jersey,USA,,,,,,0,0,,,,,,,,,, +1569,631,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New Jersey,New Jersey,USA,,,,,,0,0,,,,,,,,,, +1570,632,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New Jersey,New Jersey,USA,,,,,,0,0,,,,,,,,,, +1571,633,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New Jersey,New Jersey,USA,,,,,,0,0,,,,,,,,,, +1572,634,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New Jersey,New Jersey,USA,,,,,,0,0,,,,,,,,,, +1573,635,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Ohio: Cuyahoga, female, went on cruise on Nile River",Ohio,USA,female,,,,,1,0,,,,,,,,,, +1574,636,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Ohio: Cuyahoga, male, went on cruise on Nile River",Ohio,USA,male,,,,,1,0,,,,,,,,,, +1575,637,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Ohio: Cuyahoga, went to AIPAC conference in Washington D.C.",Ohio,USA,,,,,,0,1,2020-03-01T00:00:00.000000,2020-03-03,,,,,,,, +1576,638,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: San Mateo,California,USA,,,,,,0,0,,,,,,,,,, +1577,639,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: San Mateo,California,USA,,,,,,0,0,,,,,,,,,, +1578,640,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: San Mateo,California,USA,,,,,,0,0,,,,,,,,,, +1579,641,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in California: Los Angeles, traveled to japan",California,USA,,,,,,1,0,,,,,,,,,, +1580,642,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Los Angeles,California,USA,,,,,,0,0,,,,,,,,,, +1581,643,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in California: Marin, passenger on Grand Princess cruise ship that returned to San Francisco from Mexico on 2/21",California,USA,,,,,,1,0,,,,,,,,,, +1582,642,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County, female, 80s, LifeCare resident, died 3/4/2020",Washington,USA,,,,,,0,0,,,,,,,,,, +1583,643,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Washington: King County, female, 90s, LifeCare resident, died 3/8/2020",Washington,USA,,,,,,0,0,,2020-02-21,,,,,,,, +1584,644,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,female,85.0,,,,0,0,,,,,,1583280000,,,, +1585,645,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,female,95.0,,,,0,0,,,,,,1583625600,,,, +1586,646,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1587,647,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1588,648,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1589,649,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1590,650,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1591,651,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1592,652,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1593,653,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1594,654,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1595,655,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1596,656,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1597,657,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1598,658,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1599,659,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1600,660,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1601,661,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1602,662,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1603,663,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1604,664,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1605,665,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1606,666,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1607,667,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1608,668,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1609,669,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1610,670,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1611,671,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1612,672,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1613,673,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1614,674,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,0,0,,,,,,,,,, +1615,675,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Pennsylvania: Monroe,Pennsylvania,USA,,,,,,0,0,,,,,,,,,, +1616,676,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Pennsylvania: Montgomery,Pennsylvania,USA,,,,,,0,0,,,,,,,,,, +1617,677,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Pennsylvania: Montgomery,Pennsylvania,USA,,,,,,0,0,,,,,,,,,, +1618,678,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in New Jersey: Bergen, male, 30, hospitalized",New Jersey,USA,male,30.0,,,,0,0,,,,,,,,,, +1619,679,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in New Jersey: Union County, male, 48",New Jersey,USA,male,48.0,,,,0,0,,,,,,,,,, +1620,680,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in New Jersey: Monmouth, male, 27, attended conference in Boston 2/24-2/28, symptom onset 2/29",New Jersey,USA,male,27.0,2020-02-29T00:00:00.000000,,,0,1,2020-02-24T00:00:00.000000,2020-02-28,,,,,,,, +1621,681,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in New Jersey: Monmouth, female, 83, symptom onset 3/3",New Jersey,USA,female,83.0,2020-03-03T00:00:00.000000,,,0,0,,,,,,,,,, +1622,682,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Illinois: Cook, female, 50s",Illinois,USA,female,55.0,,,,0,0,,,,,,,,,, +1623,683,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Illinois: Cook, female, 70s",Illinois,USA,female,75.0,,,,0,0,,,,,,,,,, +1624,684,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Illinois: Cook, female, 50s, traveled to California",Illinois,USA,female,55.0,,,,0,1,,,,,,,,,, +1625,685,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Illinois: Cook, female, 70s, traveled on Egyptian cruise",Illinois,USA,female,75.0,,,,1,0,,,,,,,,,, +1626,686,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Cruz, traveled to Seattle",California,USA,,,,,,0,1,,,,,,,,,, +1627,687,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Berkshire,Massachusetts,USA,,,,,,0,0,,,,,,,,,, +1628,688,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Berkshire,Massachusetts,USA,,,,,,0,0,,,,,,,,,, +1629,689,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Berkshire,Massachusetts,USA,,,,,,0,0,,,,,,,,,, +1630,690,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Berkshire,Massachusetts,USA,,,,,,0,0,,,,,,,,,, +1631,691,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,0,0,,,,,,,,,, +1632,692,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,0,0,,,,,,,,,, +1633,693,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,0,0,,,,,,,,,, +1634,694,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,0,0,,,,,,,,,, +1635,695,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,0,0,,,,,,,,,, +1636,696,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Iowa: Johnson, cruise in Egypt",Iowa,USA,,,,,,1,0,,,,,,,,,, +1637,697,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Iowa: Johnson, cruise in Egypt",Iowa,USA,,,,,,1,0,,,,,,,,,, +1638,698,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Iowa: Johnson, cruise in Egypt",Iowa,USA,,,,,,1,0,,,,,,,,,, +1639,699,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Iowa: Johnson, cruise in Egypt",Iowa,USA,,,,,,1,0,,,,,,,,,, +1640,700,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Denver, female, 30s, recent US travel history",Colorado,USA,female,35.0,,,,0,1,,,,,,,,,, +1641,701,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 70s",Washington,USA,female,75.0,,,,0,0,,,,,,,,,, +1642,702,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 70s",Washington,USA,female,75.0,,,,0,0,,,,,,,,,, +1643,703,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 60s",Washington,USA,male,65.0,,,,0,0,,,,,,,,,, +1644,704,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 60s",Washington,USA,male,65.0,,,,0,0,,,,,,,,,, +1645,705,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 70s",Washington,USA,male,75.0,,,,0,0,,,,,,,,,, +1646,706,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 70s",Washington,USA,female,75.0,,,,0,0,,,,,,,,,, +1647,707,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Riverside,California,USA,,,,,,0,0,,,,,,,,,, +1648,708,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Riverside,California,USA,,,,,,0,0,,,,,,,,,, +1649,709,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Riverside,California,USA,,,,,,0,0,,,,,,,,,, +1650,710,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,0,0,,,,,,,,,, +1651,711,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Arizona: Pima, returned from travel in an area with community spread",Arizona,USA,,,,,,0,1,,,,,,,,,, +1652,712,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Kentucky: Fayette, male, 46",Kentucky,USA,male,46.0,,,,0,0,,,,,,,,,, +1653,713,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Kentucky: Harrison, female, 67",Kentucky,USA,female,67.0,,,,0,0,,,,,,,,,, +1654,714,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Wisconsin: Pierce, traveled within the US",Wisconsin,USA,,,,,,0,1,,,,,,,,,, +1655,715,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in North Carolina: Wake, traveled to BioGen conference",North Carolina,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1656,716,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in North Carolina: Wake, traveled to BioGen conference",North Carolina,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1657,717,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in North Carolina: Wake, traveled to BioGen conference",North Carolina,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1658,718,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in North Carolina: Wake, traveled to BioGen conference",North Carolina,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1659,719,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in North Carolina: Wake, traveled to BioGen conference",North Carolina,USA,,,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1660,720,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Maryland: Prince George's, female, 50s, contracted virus during out-of-state travel",Maryland,USA,female,55.0,,,,0,1,,,,,,,,,, +1661,721,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Conneticut:,Connecticut,USA,,,,,,0,0,,,,,,,,,, +1662,722,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Iowa: Pottawattamie, female, recently traveled to California",Iowa,USA,female,,,,,0,1,,,,,,,,,, +1663,723,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Volusia, female, 60s, known history of international travel",Florida,USA,female,65.0,,,,1,0,,,,,,,,,, +1664,724,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Virginia: Norfolk, female, cruise in Egypt, symptom onset 3/5, went to hospital 3/6",Virginia,USA,female,,2020-03-05T00:00:00.000000,0,2020-03-06,1,0,,,,,,,,,, +1665,725,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Virginia: Norfolk, male, cruise in Egypt, went to hospital 3/6",Virginia,USA,male,,,,2020-03-06,1,0,,,,,,,,,, +1666,726,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in California: Los Angeles, male, traveled internationally",California,USA,,,,,,1,0,,,,,,,,,, +1667,727,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in California: Los Angeles, male, traveled internationally",California,USA,,,,,,1,0,,,,,,,,,, +1668,728,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in California: Los Angeles, female, traveled domestically to an area of community transmission",California,USA,,,,,,0,1,,,,,,,,,, +1669,729,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in California: Sacramento, elementary school student",California,USA,,,,,,0,0,,,,,,,,,, +1670,730,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Sacramento,California,USA,female,95.0,,,,0,0,,,,,,1583798400,,,, +1671,731,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Sacramento,California,USA,,,,,,0,0,,,,,,,,,, +1672,732,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Sacramento,California,USA,,,,,,0,0,,,,,,,,,, +1673,733,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Sacramento,California,USA,,,,,,0,0,,,,,,,,,, +1674,734,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Sacramento,California,USA,,,,,,0,0,,,,,,,,,, +1675,735,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Sacramento,California,USA,,,,,,0,0,,,,,,,,,, +1676,736,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1677,737,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1678,738,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1679,739,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1680,740,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1681,741,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,0,0,,,,,,,,,, +1682,742,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Cobb,Georgia,USA,,,,,,0,0,,,,,,,,,, +1683,743,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Fayette,Georgia,USA,,,,,,0,0,,,,,,,,,, +1684,744,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Gwinnett,Georgia,USA,,,,,,0,0,,,,,,,,,, +1685,745,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Georgia: DeKalb,Georgia,USA,,,,,,0,0,,,,,,,,,, +1686,746,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Georgia: DeKalb,Georgia,USA,,,,,,0,0,,,,,,,,,, +1687,747,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Virginia: Fairfax, married to patient who tested positive, traveled on same Nile River cruise, female",Virginia,USA,,,,,,1,0,,,,,,,,,, +1688,748,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Virginia: Spotsylvania, 50s",Virginia,USA,,55.0,,,,0,0,,,,,,,,,, +1689,749,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in DC: male, 39, attended Christ Church",district of columbia,USA,male,39.0,,,,0,0,,,,,,,,,, +1690,750,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in DC: male, 77, attended Biogen",district of columbia,USA,male,77.0,,,,0,1,2020-02-26T00:00:00.000000,2020-02-27,,,,,,,, +1691,751,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in DC: male, 79",district of columbia,USA,male,79.0,,,,0,0,,,,,,,,,, +1692,752,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Colorado: Eagle,Colorado,USA,,,,,,0,0,,,,,,,,,, +1693,753,2020-03-09T00:00:00.000000,new confirmed COVID-19 patient in Indiana: Adams County,Indiana,USA,,,,,,0,0,,,,,,,,,, +1694,754,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in California: San Diego, female, 50s, traveled overseas",California,USA,female,55.0,,,,1,0,,,,,,,,,, +1695,755,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Arapahoe, returned from India, female, 30s",Colorado,USA,female,35.0,,,,1,0,,,,,,,,,, +1696,756,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Broward, female, 69",Florida,USA,female,69.0,,,,0,0,,,,,,,,,, +1697,757,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: NYC,New York,USA,,,,,,0,0,,,,,,,,,, +1698,758,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: NYC,New York,USA,,,,,,0,0,,,,,,,,,, +1699,759,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: NYC,New York,USA,,,,,,0,0,,,,,,,,,, +1700,760,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: NYC,New York,USA,,,,,,0,0,,,,,,,,,, +1701,761,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: NYC,New York,USA,,,,,,0,0,,,,,,,,,, +1702,763,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Utah: Weber, older than 60, traveled extensively outside Utah and US",Utah,USA,,,,,,1,,,,,,,,,,, +1703,764,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Pennsylvania: Montgomery,Pennsylvania,USA,,,,,,,,,,,,,,,,, +1704,765,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Indiana: Boone, female",Indiana,USA,female,,,,,,,,,,,,,,,, +1705,766,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +1706,767,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +1707,768,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +1708,769,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +1709,770,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +1710,771,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +1711,772,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +1712,773,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +1713,774,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +1714,775,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +1715,776,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +1716,777,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Maryland: Prince George's traveled internationally on a cruise,Maryland,USA,,,,,,1,,,,,,,,,,, +1717,778,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Maryland: Prince George's traveled internationally on a cruise,Maryland,USA,,,,,,1,,,,,,,,,,, +1718,779,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,,,,,,,,,,,, +1719,780,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Nassau,New York,USA,,,,,,,,,,,,,,,,, +1720,781,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Wisconsin: Dane, traveled in the US",Wisconsin,USA,,,,,,,1,,,,,,,,,, +1721,782,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Collin, female, wife of previous case",Texas,USA,female,,,,,,,,,,,,,,,, +1722,783,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Collin, 3 year old child with infected parents",Texas,USA,,3.0,,,,,,,,,,,,,,, +1723,784,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Oklahoma: Tulsa, female, 20s, traveled to Italy",Oklahoma,USA,female,25.0,,,,1,,,,,,,,,,, +1724,785,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,,,,,,,,,,,, +1725,786,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,,,,,,,,,,,, +1726,787,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,,,,,,,,,,,, +1727,788,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,,,,,,,,,,,, +1728,789,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,,,,,,,,,,,, +1729,790,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,,,,,,,,,,,, +1730,791,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,,,,,,,,,,,, +1731,792,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,,,,,,,,,,,, +1732,793,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,,,,,,,,,,,, +1733,794,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Westchester,New York,USA,,,,,,,,,,,,,,,,, +1734,795,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Virginia: Loudoun, 40s, attended Christ Church, Georgetown in Washington, DC",Virginia,USA,,45.0,,,,,1,,,,,,,,,, +1735,796,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Tennessee: Williamson, male",Tennessee,USA,male,,,,,,,,,,,,,,,, +1736,797,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Tennessee: Williamson, male",Tennessee,USA,male,,,,,,,,,,,,,,,, +1737,798,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Gregg, traveled within US",Texas,USA,,,,,,,1,,,,,,,,,, +1738,799,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in New Jersey: Bergen, male, 69, died 3/10, hospitalized 3/6, had emphysema, diabetes, and hypertension",New Jersey,USA,male,69.0,,,2020-03-06,,,,,,,,1583798400,,,, +1739,800,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Arapahoe, male, 50s",Pennsylvania,USA,male,55.0,,,,,,,,,,,,,,, +1740,801,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New Jersey: Bergen,New Jersey,USA,,,,,,,,,,,,,,,,, +1741,802,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Pennsylvania: Philadelphia, had exposure to previously confirmed cases",New jersey,USA,,,,,,,,,,,,,,,,, +1742,803,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New Jersey: Burlington,Colorado,USA,female,15.0,,,,,,,,,,,,,,, +1743,804,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New Jersey: Burlington,Colorado,USA,male,35.0,,,,,,,,,,,,,,, +1744,805,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Colorado, Denver: female, teens",California,USA,,,,,,,,,,,,,,,,, +1745,806,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Eagle County, male, 30s",Minnesota,USA,,35.0,2020-02-28T00:00:00.000000,0,2020-03-03,,,,,,,,,,,, +1746,807,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in California: San Francisco, had known contact with infected person",Oregon,USA,,,,,,,,,,,,,,,,, +1747,808,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Minnesota: Anoka, 30s, had contact with international travelers, symptom onset 2/28, sought health care on 3/3 but was released, went again on 3/9",Tennessee,USA,,,,,,,,,,,,,,,,, +1748,809,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Oregon: Multnomah, had no travel",New York,USA,,,,,,,,,,,,,,,,, +1749,810,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Tennessee: Sullivan,New York,USA,,,,,,,,,,,,,,,,, +1750,811,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Rockland,New Hampshire,USA,male,,,,,,,,,,,,,,,, +1751,812,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in New York: Rockland,Illinois,USA,male,75.0,,,,,,,,,,,,,,, +1752,813,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in New Hampshire: Rockingham, male, contact to a case of COVID-19 in another state",Illinois,USA,female,65.0,,,,,,,,,,,,,,, +1753,814,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Illinois: Cook County, male, 70s",Illinois,USA,female,45.0,,,,,,,,,,,,,,, +1754,815,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Illinois: Cook County, female, 60s",Illinois,USA,male,45.0,,,,,,,,,,,,,,, +1757,818,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in,Illinois,USA,female,65.0,,,,,,,,,,,,,,, +1758,819,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in,Illinois,USA,,15.0,,,,,,,,,,,,,,, +1759,820,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Illinois: Kane, female, 60s",Louisiana,USA,,,,,,,,,,,,,,,,, +1760,821,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Illinois: McHenry, teenager, no history of travel",Louisiana,USA,,,,,,,,,,,,,,,,, +1761,822,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Louisiana,Massachusetts,USA,,,,,,,,,,,,,,,,, +1762,823,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Louisiana,Massachusetts,USA,,,,,,,,,,,,,,,,, +1763,824,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1764,825,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1765,826,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1766,827,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1767,828,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1768,829,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1769,830,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1770,831,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1771,832,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1772,833,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1773,834,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1774,835,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1775,836,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1776,837,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1777,838,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1778,839,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1779,840,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1780,841,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1781,842,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1782,843,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1783,844,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1784,845,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1785,846,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1786,847,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1787,848,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1788,849,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Middlesex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1789,850,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in South Carolina: Kershaw, household contacts",South Carolina,USA,,,,,,,,,,,,,,,,, +1790,851,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in South Carolina: Kershaw, household contacts",South Carolina,USA,,,,,,,,,,,,,,,,, +1791,852,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1792,853,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1793,854,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1794,855,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1795,856,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1796,857,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1797,858,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1798,859,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1799,860,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1800,861,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1801,862,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1802,863,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1803,864,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1804,865,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1805,866,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1806,867,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1807,868,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1808,869,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1809,870,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1810,871,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1811,872,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1812,873,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1813,874,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1814,875,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1815,876,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1816,877,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1817,878,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1818,879,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1819,880,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1820,881,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1821,882,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1822,883,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1823,884,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1824,885,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1825,886,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1826,887,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1827,888,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1828,889,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1829,890,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1830,891,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1831,892,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1832,893,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1833,894,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1834,895,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1835,896,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1836,897,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1837,898,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1838,899,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1839,900,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1840,901,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1841,902,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1842,903,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1843,904,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1844,905,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1845,906,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1846,907,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1847,908,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1848,909,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1849,910,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1850,911,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1851,912,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1852,913,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1853,914,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1854,915,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1855,916,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1856,917,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1857,918,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1858,919,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1859,920,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1860,921,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1861,922,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1862,923,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1863,924,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1864,925,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: King County,Washington,USA,,,,,,,,,,,,,,,,, +1865,926,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 80s",Washington,USA,female,85.0,,,,,,,,,,,,,,, +1866,927,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 70s",Washington,USA,female,75.0,,,,,,,,,,,,,,, +1867,928,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 30s",Washington,USA,female,35.0,,,,,,,,,,,,,,, +1868,929,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 50s",Washington,USA,female,55.0,,,,,,,,,,,,,,, +1869,930,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 70s",Washington,USA,female,75.0,,,,,,,,,,,,,,, +1870,931,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 40s",Washington,USA,female,45.0,,,,,,,,,,,,,,, +1871,932,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 50s",Washington,USA,male,55.0,,,,,,,,,,,,,,, +1872,933,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 50s, LifeCare",Washington,USA,female,55.0,,,,,,,,,,,,,,, +1873,934,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 30s",Washington,USA,male,35.0,,,,,,,,,,,,,,, +1874,935,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 50s",Washington,USA,female,55.0,,,,,,,,,,,,,,, +1875,936,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 40s, LifeCare",Washington,USA,male,45.0,,,,,,,,,,,,,,, +1876,937,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 20s",Washington,USA,female,25.0,,,,,,,,,,,,,,, +1877,938,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 40s",Washington,USA,female,45.0,,,,,,,,,,,,,,, +1878,939,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 20s",Washington,USA,female,25.0,,,,,,,,,,,,,,, +1879,940,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 50s",Washington,USA,female,55.0,,,,,,,,,,,,,,, +1880,941,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 30s",Washington,USA,male,35.0,,,,,,,,,,,,,,, +1881,942,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 70s",Washington,USA,male,75.0,,,,,,,,,,,,,,, +1882,943,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Rhode Island,Rhode Island,USA,,,,,,,,,,,,,,,,, +1883,944,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Rhode Island,Rhode Island,USA,,,,,,,,,,,,,,,,, +1884,945,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Kentucky: Harrison, male, 68",Kentucky,USA,male,68.0,,,,,,,,,,,,,,, +1885,946,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Kentucky: Harrison,Kentucky,USA,,,,,,,,,,,,,,,,, +1886,947,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Kitsap,Washington,USA,,,,,,,,,,,,,,,,, +1887,948,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Suffolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1888,949,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Suffolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1889,950,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Suffolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1890,951,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Suffolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1891,952,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Suffolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1892,953,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Suffolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1893,954,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Suffolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1894,955,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Suffolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1895,956,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Suffolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1896,957,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Suffolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1897,958,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Norfolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1898,959,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Norfolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1899,960,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Norfolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1900,961,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Norfolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1901,962,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Norfolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1902,963,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Norfolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1903,964,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Norfolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1904,965,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Norfolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1905,966,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Norfolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1906,967,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Norfolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1907,968,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Norfolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1908,969,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Norfolk,Massachusetts,USA,,,,,,,,,,,,,,,,, +1909,970,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Berkshire,Massachusetts,USA,,,,,,,,,,,,,,,,, +1910,971,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Berkshire,Massachusetts,USA,,,,,,,,,,,,,,,,, +1911,972,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Massachusetts: Essex,Massachusetts,USA,,,,,,,,,,,,,,,,, +1912,973,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Pierce,Washington,USA,,,,,,,,,,,,,,,,, +1913,974,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Pierce,Washington,USA,,,,,,,,,,,,,,,,, +1914,975,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Pierce,Washington,USA,,,,,,,,,,,,,,,,, +1915,976,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Pierce,Washington,USA,,,,,,,,,,,,,,,,, +1916,977,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Pierce,Washington,USA,,,,,,,,,,,,,,,,, +1917,978,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Pierce,Washington,USA,,,,,,,,,,,,,,,,, +1918,979,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Pierce,Washington,USA,,,,,,,,,,,,,,,,, +1919,980,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Pierce,Washington,USA,,,,,,,,,,,,,,,,, +1920,981,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Pierce,Washington,USA,,,,,,,,,,,,,,,,, +1921,982,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Pierce,Washington,USA,,,,,,,,,,,,,,,,, +1922,983,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Pierce,Washington,USA,,,,,,,,,,,,,,,,, +1923,984,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Pierce,Washington,USA,,,,,,,,,,,,,,,,, +1924,985,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Washington: Skagit,Washington,USA,,,,,,,,,,,,,,,,, +1925,986,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Dallas, 50s, close contact with first presumptive positive Dallas County case",Texas,USA,,55.0,,,,,,,,,,,,,,, +1926,987,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in California: Los Angeles, traveler from Iran",California,USA,,,,,,1,,,,,,,,,,, +1927,988,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in South Dakota: Pennington, died 3/10, male, 60s",South Dakota,USA,male,65.0,,,,,,,,,,,1583798400,,,, +1928,989,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in South Dakota: Beadle, male, 40s",South Dakota,USA,male,45.0,,,,,,,,,,,,,,, +1929,990,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in South Dakota: Charles Mix, male, 50s",South Dakota,USA,male,55.0,,,,,,,,,,,,,,, +1930,991,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in South Dakota: Davidson, female, 30s",South Dakota,USA,female,35.0,,,,,,,,,,,,,,, +1931,992,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Maryland: Montgomery County, female, 60s, linked to same Egyptian cruise along the Nile",Maryland,USA,female,65.0,,,,1,,,,,,,,,,, +1932,993,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in South Dakota: Minnehaha, male, 40s",South Dakota,USA,male,45.0,,,,,,,,,,,,,,, +1933,994,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,,,,,,,,,,,, +1934,995,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in California: Santa Clara,California,USA,,,,,,,,,,,,,,,,, +1935,996,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Iowa: Johnson County, on same Egyptian cruise",Iowa,USA,,,,,,1,,,,,,,,,,, +1936,997,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Iowa: Johnson County, on same Egyptian cruise",Iowa,USA,,,,,,1,,,,,,,,,,, +1937,998,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Iowa: Johnson County, on same Egyptian cruise",Iowa,USA,,,,,,1,,,,,,,,,,, +1938,999,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Iowa: Johnson County, on same Egyptian cruise",Iowa,USA,,,,,,1,,,,,,,,,,, +1939,1000,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Iowa: Johnson County, on same Egyptian cruise",Iowa,USA,,,,,,1,,,,,,,,,,, +1940,1001,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Tarrant County, traveled to conference in Kentucky in late February",Texas,USA,,,,,,,1,,,,,,,,,, +1941,1002,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Nevada: Douglas, female, 40s, recently traveled to California and Nevada",Nevada,USA,female,45.0,,,,,1,,,,,,,,,, +1942,1003,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 80s",Washington,USA,male,85.0,,,,,,,,,,,,,,, +1943,1004,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 90s",Washington,USA,female,95.0,,,,,,,,,,,,,,, +1944,1005,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 40s",Washington,USA,female,45.0,,,,,,,,,,,,,,, +1945,1006,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, female, 80s",Washington,USA,female,85.0,,,,,,,,,,,,,,, +1946,1007,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 80s",Washington,USA,male,85.0,,,,,,,,,,,,,,, +1947,1008,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Snohomish, male, 60s",Washington,USA,male,65.0,,,,,,,,,,,,,,, +1948,1009,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Whatcom, female, 60s",Washington,USA,female,65.0,,,,,,,,,,,,,,, +1949,1010,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in California: Solano,California,USA,,,,,,,,,,,,,,,,, +1950,1011,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in California: Solano,California,USA,,,,,,,,,,,,,,,,, +1951,1012,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in California: Solano,California,USA,,,,,,,,,,,,,,,,, +1952,1013,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in California: Alameda, left Grand Princess cruise ship in February",California,USA,,,,,,1,,,,,,,,,,, +1953,1014,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in California: San Joaquin, passenger on Grand Princess cruise ship, but not on cruise that most recently disembarked, hospitalized several days ago",California,USA,,,,,,1,,,,,,,,,,, +1954,1015,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in California: Contra Costa,California,USA,,,,,,,,,,,,,,,,, +1955,1016,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in California: Fresno, travel associated",California,USA,,,,,,1,,,,,,,,,,, +1956,1017,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Denver, female, 40s",Colorado,USA,female,45.0,,,,,,,,,,,,,,, +1957,1018,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Denver, female, 70s",Colorado,USA,female,75.0,,,,,,,,,,,,,,, +1958,1019,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Colorado: Jefferson, male, 50s",Colorado,USA,male,55.0,,,,,,,,,,,,,,, +1959,1020,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Harris, female, 20s, lived abroad in Italy, contacted healthcare provider when she returned",Texas,USA,female,25.0,,,,1,,,,,,,,,,, +1960,1021,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in New York: Suffolk, male, early 20s",New York,USA,male,23.0,,,,,,,,,,,,,,, +1961,1022,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in New York: Suffolk, female, early 20s",New York,USA,female,23.0,,,,,,,,,,,,,,, +1962,1023,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in New York: Suffolk, male, 80s",New York,USA,male,85.0,,,,,,,,,,,,,,, +1963,1024,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Michigan: Oakland, female, international travel",Michigan,USA,female,,,,,1,,,,,,,,,,, +1964,1025,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Michigan: Wayne, male, history of domestic travel",Michigan,USA,male,,,,,,1,,,,,,,,,, +1965,1026,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Montgomery County, male, 40s",Texas,USA,male,45.0,,,,,,,,,,,,,,, +1966,1027,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in California: Calaveras, elementary school student, female",California,USA,female,,,,,,,,,,,,,,,, +1967,1028,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in California: Calaveras, male",California,USA,male,,,,,,,,,,,,,,,, +1968,1029,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Alachua, female, 68, Georgia resident currently in Alachua county, traveler",Florida,USA,female,68.0,,,,,1,,,,,,,,,, +1969,1030,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Texas: Dallas, 50s, close contact with first case",Texas,USA,,55.0,,,,,,,,,,,,,,, +1970,1031,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in California: Sacramento, resident at senior living facility, female, 90s, died 3/10",California,USA,female,95.0,,,,0,0,,,,,,1583798400,,,, +1971,1032,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Fulton,Georgia,USA,,,,,,,,,,,,,,,,, +1972,1033,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Cobb,Georgia,USA,,,,,,,,,,,,,,,,, +1973,1034,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Cobb,Georgia,USA,,,,,,,,,,,,,,,,, +1974,1035,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Cobb,Georgia,USA,,,,,,,,,,,,,,,,, +1975,1036,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Georgia: Charlton,Georgia,USA,,,,,,,,,,,,,,,,, +1976,1037,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Nebraska,Nebraska,USA,,,,,,,,,,,,,,,,, +1977,1038,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Pennsylvania: Bucks County, attended an out-of-state gathering recently where they came into contact with two other people who later tested positive",Pennsylvania,USA,,,,,,,1,,,,,,,,,, +1978,1039,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Pennsylvania: Bucks County, attended an out-of-state gathering recently where they came into contact with two other people who later tested positive",Pennsylvania,USA,,,,,,,1,,,,,,,,,, +1979,1040,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Louisiana: Orleans Parish,Louisiana,USA,,,,,,,,,,,,,,,,, +1980,1041,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Louisiana: Orleans Parish,Louisiana,USA,,,,,,,,,,,,,,,,, +1981,1042,2020-03-10T00:00:00.000000,new confirmed COVID-19 patient in Louisiana: Orleans Parish,Louisiana,USA,,,,,,,,,,,,,,,,, +1982,1043,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Nassau, male, 68, travel-related",Florida,USA,male,68.0,,,,1,,,,,,,,,,, +1983,1044,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Collier, male, 73, traveler",Florida,USA,male,73.0,,,,1,,,,,,,,,,, +1984,1045,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Collier, female, 68, traveler",Florida,USA,female,68.0,,,,1,,,,,,,,,,, +1985,1046,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Collier, female, 64, traveler",Florida,USA,female,64.0,,,,1,,,,,,,,,,, +1986,1047,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Pinellas, male, 67, traveler",Florida,USA,male,67.0,,,,1,,,,,,,,,,, +1987,1048,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Pinellas, male, 54, traveler",Florida,USA,male,54.0,,,,1,,,,,,,,,,, +1988,1049,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Florida: Pasco, male, 46, traveler",Florida,USA,male,46.0,,,,1,,,,,,,,,,, +1989,1050,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in Washington: Island, male, 50s",Washington,USA,male,55.0,,,,,,,,,,,,,,, +1990,1051,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, security screener at Northern California airport",California,USA,,,,,,,,,,,,,,,,, +1991,1052,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, security screener at Northern California airport",California,USA,,,,,,,,,,,,,,,,, +1992,1053,2020-03-10T00:00:00.000000,"new confirmed COVID-19 patient in California: Santa Clara, security screener at Northern California airport",California,USA,,,,,,,,,,,,,,,,, +1993,1054,2020-03-11T00:00:00.000000,"new confirmed COVID-19 patient in Nebraska: Knox, male, symptom onset 3/5",Nebraska,USA,male,,2020-03-05T00:00:00.000000,,,,,,,,,,,,,, +1994,1055,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,,,,,,,,,,,, +1995,1056,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,,,,,,,,,,,, +1996,1057,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,,,,,,,,,,,, +1997,1058,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,,,,,,,,,,,, +1998,1059,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,,,,,,,,,,,, +1999,1060,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,,,,,,,,,,,, +2000,1061,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,,,,,,,,,,,, +2001,1062,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,,,,,,,,,,,, +2002,1063,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,,,,,,,,,,,, +2003,1064,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York:,New York,USA,,,,,,,,,,,,,,,,, +2004,1065,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +2005,1066,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +2006,1067,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +2007,1068,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +2008,1069,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +2009,1070,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +2010,1071,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New York,New York,USA,,,,,,,,,,,,,,,,, +2011,1072,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in Indiana: Johnson County,Indiana,USA,,,,,,,,,,,,,,,,, +2012,1073,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in Indiana: Johnson County,Indiana,USA,,,,,,,,,,,,,,,,, +2013,1074,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in Indiana: Johnson County,Indiana,USA,,,,,,,,,,,,,,,,, +2014,1075,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in Indiana: Howard County,Indiana,USA,,,,,,,,,,,,,,,,, +2015,1076,2020-03-11T00:00:00.000000,"new confirmed COVID-19 patient in Virginia: Hanover, international traveler",Virginia,USA,,,,,,,,,,,,,,,,, +2016,1076,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in Pennsylvania: Montgomery,Pennsylvania,USA,,,,,,,,,,,,,,,,, +2017,1077,2020-03-11T00:00:00.000000,"new confirmed COVID-19 patient in New Mexico: Socorro, male, 60s, traveled to Egypt",New Mexico,USA,male,65.0,,,,1,,,,,,,,,,, +2018,1078,2020-03-11T00:00:00.000000,"new confirmed COVID-19 patient in New Mexico: Socorro, female, 60s, traveled to Egypt",New Mexico,USA,female,65.0,,,,1,,,,,,,,,,, +2019,1079,2020-03-11T00:00:00.000000,"new confirmed COVID-19 patient in New Mexico: Bernalillo, female, 70s, recently traveled to NYC",New Mexico,USA,female,75.0,,,,,1,,,,,,,,,, +2020,1080,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in Arkansas: traveled to another state,Arkansas,USA,,,,,,,1,,,,,,,,,, +2021,1081,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in California: San Mateo,California,USA,,,,,,,,,,,,,,,,, +2022,1082,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in California: San Mateo,California,USA,,,,,,,,,,,,,,,,, +2023,1083,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in California: San Mateo,California,USA,,,,,,,,,,,,,,,,, +2024,1084,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in California: San Mateo,California,USA,,,,,,,,,,,,,,,,, +2025,1085,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in California: San Mateo,California,USA,,,,,,,,,,,,,,,,, +2026,1086,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in California: San Mateo,California,USA,,,,,,,,,,,,,,,,, +2027,1087,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New Jersey,New Jersey,USA,,,,,,,,,,,,,,,,, +2028,1088,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New Jersey,New Jersey,USA,,,,,,,,,,,,,,,,, +2029,1089,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New Jersey,New Jersey,USA,,,,,,,,,,,,,,,,, +2030,1090,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New Jersey,New Jersey,USA,,,,,,,,,,,,,,,,, +2031,1091,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New Jersey,New Jersey,USA,,,,,,,,,,,,,,,,, +2032,1092,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New Jersey,New Jersey,USA,,,,,,,,,,,,,,,,, +2033,1093,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New Jersey,New Jersey,USA,,,,,,,,,,,,,,,,, +2034,1094,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in New Jersey,New Jersey,USA,,,,,,,,,,,,,,,,, +2035,1095,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in Minnesota: Washtenaw,Minnesota,USA,,,,,,,,,,,,,,,,, +2036,1096,2020-03-11T00:00:00.000000,"new confirmed COVID-19 patient in Arizona: Maricopa, male, 90s",Arizona,USA,male,95.0,,,,,,,,,,,,,,, +2037,1097,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in Arizona: Pinal,Arizona,USA,,,,,,,,,,,,,,,,, +2038,1098,2020-03-11T00:00:00.000000,new confirmed COVID-19 patient in Arizona: Pinal,Arizona,USA,,,,,,,,,,,,,,,,, +2042,1,2020-01-23T00:00:00.000000,"new confirmed COVID-19 patient in Vietnam: male, 66, 1/23-No.1, arrived from Wuhan on 1/13/2020, symptom onset 1/17/2020 (fever), hospitalized 1/17/2020",Ho Chi Minh City,Vietnam,male,66.0,2020-01-17T00:00:00.000000,0,2020-01-17,,,,2020-01-13,1,0,1,0,1581465600,fever,Straits Times,https://www.straitstimes.com/asia/se-asia/wuhan-virus-chinese-father-and-son-identified-as-vietnams-first-two-cases +2043,2,2020-01-23T00:00:00.000000,"new confirmed COVID-19 patient in Vietnam: male, 28, son of 1/23-No.1, symptom onset 1/20/2020 (fever), contracted from father",Ho Chi Minh City,Vietnam,male,28.0,2020-01-20T00:00:00.000000,0,,,,2020-01-13T00:00:00.000000,,0,0,0,0,1580774400,fever,Straits Times,https://www.straitstimes.com/asia/se-asia/wuhan-virus-chinese-father-and-son-identified-as-vietnams-first-two-cases +2044,3,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Vietnam: Hanoi, recently returned from Wuhan",Hanoi,Vietnam,,,,,,,,,,1,1,0,0,0,,Reuters,https://www.reuters.com/article/us-china-health-vietnam/vietnam-says-three-new-cases-of-coronavirus-detected-state-media-idUSKBN1ZT12Y +2045,4,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Vietnam: Hanoi, recently returned from Wuhan",Hanoi,Vietnam,,,,,,,,,,1,1,0,0,0,,Reuters,https://www.reuters.com/article/us-china-health-vietnam/vietnam-says-three-new-cases-of-coronavirus-detected-state-media-idUSKBN1ZT12Y +2046,5,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Vietnam: Thanh Hoa, recently returned from Wuhan",Thanh Hoa,Vietnam,,,,,,,,,,1,1,0,0,0,,Reuters,https://www.reuters.com/article/us-china-health-vietnam/vietnam-says-three-new-cases-of-coronavirus-detected-state-media-idUSKBN1ZT12Y +2047,6,2020-02-03T00:00:00.000000,new confirmed COVID-19 patient in Vietnam: same flight from Wuhan to Vietnam as three patients detected on 1/30,Vietnam,Vietnam,,,,,,,,,,1,1,0,0,0,,Reuters,https://www.reuters.com/article/us-china-health-vietnam/vietnam-says-three-new-cases-of-coronavirus-detected-state-media-idUSKBN1ZT12Y +2048,7,2020-02-03T00:00:00.000000,new confirmed COVID-19 patient in Vietnam: same flight from Wuhan to Vietnam as three patients detected on 1/30,Vietnam,Vietnam,,,,,,,,,,1,1,0,0,0,,Reuters,https://www.reuters.com/article/us-china-health-vietnam/vietnam-says-three-new-cases-of-coronavirus-detected-state-media-idUSKBN1ZT12Y +2049,8,2020-02-03T00:00:00.000000,new confirmed COVID-19 patient in Vietnam: same flight from Wuhan to Vietnam as three patients detected on 1/30,Vietnam,Vietnam,,,,,,,,,,1,1,0,0,0,,Reuters,https://www.reuters.com/article/us-china-health-vietnam/vietnam-says-three-new-cases-of-coronavirus-detected-state-media-idUSKBN1ZT12Y +2050,9,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Vietnam: male, 30, Vinh Phuc, returned from Wuhan for training, returned 1/17",Vinh Phuc,Vietnam,male,30.0,,,,,,,2020-01-17,1,1,0,0,1581984000,,Vietnam News,https://vietnamnews.vn/society/591803/viet-nam-confirms-9th-coronavirus-case-hong-kong-reports-first-death-from-infection.html +2051,10,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Vietnam: female, 42, lives in Vinh Phuc, exposed 1/22 and 1/28, symptom onset 1/31 (fever), went to clinic",Vinh Phuc,Vietnam,female,42.0,2020-01-31T00:00:00.000000,0,,,,2020-01-22T00:00:00.000000,2020-01-28,,0,0,0,1582156800,fever,Vietnam News,https://vietnamnews.vn/society/591803/viet-nam-confirms-9th-coronavirus-case-hong-kong-reports-first-death-from-infection.html +2052,11,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Vietnam: 16, Vietnamese national from Vinh Phuc",Vinh Phuc,Vietnam,female,16.0,,,,,,,,,0,0,0,1582156800,,Vietnam News,https://vietnamnews.vn/society/591803/viet-nam-confirms-9th-coronavirus-case-hong-kong-reports-first-death-from-infection.html +2053,12,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Vietnam: 49, Vietnamese national from Vinh Phuc",Vinh Phuc,Vietnam,,49.0,,,,,,,,,0,0,0,0,,Vietnam News,https://vietnamnews.vn/society/591803/viet-nam-confirms-9th-coronavirus-case-hong-kong-reports-first-death-from-infection.html +2054,13,2020-02-08T00:00:00.000000,"new confirmed COVID-19 patient in Vietnam: female, 29, in Vinh Phuc, sent to train for two months in Wuhan, returned 1/17",Vinh Phuc,Vietnam,female,29.0,,,,,,,2020-01-17,1,1,0,0,1581984000,,Vietnam News,https://vietnamnews.vn/society/591803/viet-nam-confirms-9th-coronavirus-case-hong-kong-reports-first-death-from-infection.html +2055,14,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Vietnam: 2/9-No.1, female, 55, Vinh Phuc, neighbor of a worker who went to Wuhan, ,went to worker's house on 1/28, symptom onset 2/2 (fever, headache, runny nose)",Vinh Phuc,Vietnam,female,55.0,2020-02-02T00:00:00.000000,0,,,,2020-01-28T00:00:00.000000,2020-01-28,,0,0,0,1581984000,"fever, headache, runny nose",Vietnam News,https://vietnamnews.vn/society/591803/viet-nam-confirms-9th-coronavirus-case-hong-kong-reports-first-death-from-infection.html +2056,15,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in Vietnam: 3 months old, infected by grandma 2/9-No.1,",Vinh Phuc,Vietnam,,0.25,,,,,,,,,0,0,0,1582156800,,Vietnam News,https://vietnamnews.vn/society/591803/viet-nam-confirms-9th-coronavirus-case-hong-kong-reports-first-death-from-infection.html +2057,16,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Vietnam: male, 50, Vinh Phuc, lives with daughter who was sent to Wuhan for training and confirmed to be infected, symptom onset 2/11 (tired)",Vinh Phuc,Vietnam,male,50.0,2020-02-11T00:00:00.000000,0,,,,,,,0,0,0,0,tired,Vietnam Insider,https://vietnaminsider.vn/vietnam-confirms-16th-coronavirus-patient/ +2058,1,2020-01-25T00:00:00.000000,"new confirmed COVID-19 patient in NSW, Australia: male, 35, arrived in Sydney from Shenzhen on 1/6/2020, symptom onset 1/15/2020, did not visit Wuhan but had contact with a person from Wuhan diagnosed with the coronavirus",NSW,Australia,male,35.0,2020-01-15T00:00:00.000000,0,,,,,,1,0,0,0,1580342400,,The Guardian,https://www.theguardian.com/science/2020/jan/25/coronavirus-five-people-in-nsw-being-tested-for-deadly-disease +2059,2,2020-01-25T00:00:00.000000,"new confirmed COVID-19 patient in NSW, Australia: male, 43, arrived in Sydney from Wuhan on 1/18/2020, symptom onset 1/24/2020, hospitalized 1/24/2020",NSW,Australia,male,43.0,2020-01-24T00:00:00.000000,0,2020-01-24,,,,2020-01-18,1,1,0,0,1581552000,,The Guardian,https://www.theguardian.com/science/2020/jan/25/coronavirus-five-people-in-nsw-being-tested-for-deadly-disease +2060,3,2020-01-25T00:00:00.000000,"new confirmed COVID-19 patient in NSW, Australia: male, 53, arrived in Sydney from Wuhan on 1/20/2020, symptom onset 1/20/2020",NSW,Australia,male,53.0,2020-01-20T00:00:00.000000,0,,,,,2020-01-20,1,1,0,0,1580342400,,The Guardian,https://www.theguardian.com/science/2020/jan/25/coronavirus-five-people-in-nsw-being-tested-for-deadly-disease +2061,4,2020-01-25T00:00:00.000000,"new confirmed COVID-19 patient in Victoria, Australia: male, in his 50s, recently spent two weeks in Wuhan, arrived in Melbourne from Guangzhou 1/19/2020, symptom onset 1/23/2020, put in isolation 1/24/2020",Victoria,Australia,male,55.0,2020-01-23T00:00:00.000000,0,2020-01-24,,,,,1,1,0,0,0,,Reuters,https://www.reuters.com/article/us-china-health-australia/australia-confirms-fifth-coronavirus-case-from-last-flight-out-of-wuhan-idUSKBN1ZQ0D1 +2062,5,2020-01-26T00:00:00.000000,"new confirmed COVID-19 patient in NSW, Australia: female, 21, recently travelled back to Sydney from Wuhan, arrived 1/23/2020, symptom onset 1/24/2020 then went to an emergency department",NSW,Australia,female,21.0,2020-01-24T00:00:00.000000,0,2020-01-24,,,,2020-01-23,1,1,0,0,1580601600,,Reuters,https://www.reuters.com/article/us-china-health-australia/australia-confirms-fifth-coronavirus-case-from-last-flight-out-of-wuhan-idUSKBN1ZQ0D1 +2063,6,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Queensland, Australia: 1/29-No.1, 44, Chinese National, currently in hospital, travelled from Melbourne to the Gold Coast 1/27/2020, symptom onset and hospitalized 1/28/2020",Queensland,Australia,male,44.0,2020-01-28T00:00:00.000000,0,2020-01-28,,,,,1,0,1,0,0,,Yahoo News,https://au.news.yahoo.com/toddler-among-16-possible-new-cases-of-coronavirus-nsw-052558683.html +2064,7,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Victoria, Australia: male, in his 60s, unwell on 1/23/2020, travelled to Wuhan, returned from China 1/21/2020",Victoria,Australia,male,65.0,2020-01-23T00:00:00.000000,0,,,,,2020-01-21,1,1,0,0,0,,Yahoo News,https://au.news.yahoo.com/toddler-among-16-possible-new-cases-of-coronavirus-nsw-052558683.html +2065,8,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Victoria, Australia: female, in her 40s, visitor from Hubei, went to doctor's and was referred to hospital immediately, been in Australia for about a week and showed symptoms for two or three days",Victoria,Australia,female,45.0,2020-01-25T00:00:00.000000,1,,,,,,1,0,1,0,0,,Reuters,https://www.reuters.com/article/us-china-health-australia/australia-confirms-fifth-coronavirus-case-from-last-flight-out-of-wuhan-idUSKBN1ZQ0D1 +2066,9,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in Queensland, Australia: female, 42, Chinese national from Wuhan, member of tour group travelling with 1/29-No.1 confirmed with virus, flew into country 1/27/2020",Queensland,Australia,female,42.0,,,,,,,2020-01-27,1,0,1,0,0,,Reuters,https://www.reuters.com/article/us-china-health-australia/australia-confirms-fifth-coronavirus-case-from-last-flight-out-of-wuhan-idUSKBN1ZQ0D2 +2067,10,2020-02-01T00:00:00.000000,"new confirmed COVID-19 patient in South Australia: male, 60, from Wuhan, now hospitalized, arrived on 1/21/2020",South Australia,Australia,male,60.0,,,,,,,2020-01-21,1,0,1,0,0,,ABC,https://www.abc.net.au/news/2020-02-01/coronavirus-confirmed-in-south-australia-and-victoria/11920754 +2068,11,2020-02-01T00:00:00.000000,"new confirmed COVID-19 patient in South Australia: female, 60, from Wuhan, now hospitalized, arrived on 1/21/2020",South Australia,Australia,female,60.0,,,,,,,2020-01-21,1,0,1,0,0,,ABC,https://www.abc.net.au/news/2020-02-01/coronavirus-confirmed-in-south-australia-and-victoria/11920755 +2069,12,2020-02-01T00:00:00.000000,"new confirmed COVID-19 patient in Victoria, Australia: female, in her 20s, resident of Melbourne, recovering at home, returned from Wuhan on 1/25/2020, symptom onset 1/27/2020, seen by doctors in hospital on 1/30/2020 but assessed as well enough to stay at home",Victoria,Australia,female,25.0,2020-01-27T00:00:00.000000,0,2020-01-30,,,,2020-01-25,1,1,0,0,0,,ABC,https://www.abc.net.au/news/2020-02-01/coronavirus-confirmed-in-south-australia-and-victoria/11920756 +2070,13,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Queensland, Australia: male, 8, Chinese citizen from Wuhan, traveling with 1/29-No.1, isolated at hospital",Queensland,Australia,male,8.0,,,,,,,,1,0,1,0,0,,ABC,https://www.abc.net.au/news/2020-02-05/queensland-confirms-fourth-coronavirus-case-man-from-wuhan-china/11934390 +2071,14,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Queensland, Australia: male, 37, Chinese national from Wuhan, isolated in hospital, part of same tour group as 1/29-No.1",Queensland,Australia,male,37.0,,,,,,,,1,0,1,0,0,,ABC,https://www.abc.net.au/news/2020-02-05/queensland-confirms-fourth-coronavirus-case-man-from-wuhan-china/11934391 +2072,15,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Queensland, Australia: female, 37, hospital, same member of tour group as four other people in the state",Queensland,Australia,female,37.0,,,,,,,,1,0,1,0,0,,SBS,https://www.sbs.com.au/news/chinese-woman-in-queensland-confirmed-as-15th-australian-coronavirus-case +2073,1,2020-01-26T00:00:00.000000,"new confirmed COVID-19 patient in Toronto, Canada: male, 56, tested positive at provincial facility days after returning to Toronto from Wuhan via Guangzhou on 1/22/2020, mild symptoms on flight, a day after he went home a family member reported he felt ill, fever, cough, symptom onset 1/23",Toronto,Canada,male,56.0,,,2020-01-23,,,,2020-01-22,1,1,0,0,1580428800,"fever, cough",National Post,https://nationalpost.com/news/canada/canadian-coronavirus-patient-showed-symptoms-on-flight-back-to-wuhan-officials-say +2074,2,2020-01-27T00:00:00.000000,"new confirmed COVID-19 patient in Toronto, Canada: female, in her 50s, has been in self-isolation at home since husband confirmed, arrived on 1/22/2020 after visiting Wuhan",Toronto,Canada,female,55.0,,,,,,,2020-01-22,1,1,0,0,0,,Fox News,https://www.foxnews.com/health/canadas-coronavirus-cases-husband-wife +2075,3,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Vancouver, Canada: male, in his 40s, home isolation and not hospitalized, was in Wuhan for work, returned to Vancouver last week, onset of symptoms after return, contacted primary care physician 1/26/2020",Vancouver,Canada,male,45.0,2020-01-26T00:00:00.000000,1,2020-01-26,,,,,1,1,0,0,0,,National Post,https://nationalpost.com/news/canada/wuhan-china-coronavirus-outbreak-latest-news-updates +2076,4,2020-02-01T00:00:00.000000,"new confirmed COVID-19 patient in Toronto, Canada: female, in her 20s, arrived on 1/23/2020 from Wuhan, went to hospital on 1/24/2020 but tested negative, symptom onset 1/24/2020",Toronto,Canada,female,25.0,2020-01-24T00:00:00.000000,0,2020-01-24,,,,2020-01-23,1,1,0,0,1,,Fox News,https://www.foxnews.com/health/canadas-coronavirus-cases-husband-wife +2077,5,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Vancouver, Canada: female, 50s",Vancouver,Canada,female,55.0,,,,,,,,,0,0,0,0,,Global News,https://globalnews.ca/news/6517559/bc-top-doctor-health-minister-coronavirus-update/ +2078,6,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Vancouver, Canada: male, 30s, related to case 5, visitors from Wuhan",Vancouver,Canada,male,35.0,,,,,,,,1,0,1,0,0,,Global News,https://globalnews.ca/news/6517559/bc-top-doctor-health-minister-coronavirus-update/ +2079,7,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Vancouver, Canada: female, 30s, related to case 5, visitors from Wuhan",Vancouver,Canada,female,35.0,,,,,,,,1,0,1,0,0,,Global News,https://globalnews.ca/news/6517559/bc-top-doctor-health-minister-coronavirus-update/ +2080,8,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Vancouver, Canada: female, 30s, returned from Shanghai",Vancouver,Canada,female,35.0,,,,,,,,1,0,0,0,0,,Global News,https://globalnews.ca/news/6517559/bc-top-doctor-health-minister-coronavirus-update/ +2081,9,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Vancouver, Canada: female, 30s, returned from Iran",Vancouver,Canada,female,35.0,,,,,,,,1,0,0,0,0,,South China Morning Post,https://www.scmp.com/news/world/united-states-canada/article/3051735/sentinel-event-new-canadian-coronavirus-patient +2082,10,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Toronto, Canada: female, 20s, travelled to Wuhan before it was quarantined, then went elsewhere before returning 2/21",Toronto,Canada,female,25.0,,,,,,,2020-02-21,1,1,0,0,0,,National Post,https://nationalpost.com/health/who-says-covid-19-coronavirus-not-yet-a-pandemic-while-canada-diagnoses-11th-case +2083,11,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Vancouver, Canada: male, 40s, close contact of case 9",Vancouver,Canada,male,45.0,,,,,,,,,0,0,0,0,,National Post,https://nationalpost.com/health/who-says-covid-19-coronavirus-not-yet-a-pandemic-while-canada-diagnoses-11th-case +2084,12,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Toronto, Canada: female, 60s, travel history to Iran, went to hospital on 2/24",Toronto,Canada,female,65.0,,,,,,,,1,0,0,0,0,,Channel 3000,https://www.channel3000.com/these-are-the-countries-where-novel-coronavirus-cases-have-been-confirmed-worldwide/ +2085,1,2020-01-27T00:00:00.000000,"new confirmed COVID-19 patient in Cambodia: male, 60, arrived from Wuhan 1/23/2020, Chinese national, symptom onset 1/25/2020 (fever and runny nose), confirmed 1/27/2020",Preah Sihanouk Province,Cambodia,male,60.0,2020-01-25T00:00:00.000000,0,,,,,2020-01-23,1,0,1,0,0,"fever, runny nose",Xin Hua Net,http://www.xinhuanet.com/english/2020-01/27/c_138737583.htm +2086,1,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Sri Lanka: female, 40, from Hubei, tested positive at a screening, arrived on 1/19/2020, symptom onset 1/25/2020 (fever), confirmed 1/27/2020, admitted to hospital 1/25/2020",Sri Lanka,Sri Lanka,female,40.0,2020-01-25T00:00:00.000000,0,2020-01-25,,,,2020-01-19,1,0,1,0,1582070400,fever,Reuters,https://www.reuters.com/article/us-health-china-sri-lanka/sri-lanka-confirms-first-case-of-coronavirus-health-official-idUSKBN1ZQ1WF +2087,1,2020-01-28T00:00:00.000000,"new confirmed COVID-19 patient in Germany: 1/28-No.1 male, 33, caught from Chinese colleague during conference in Munich from 1/20-1/21, first human-to-human transmission in Europe, confirmed 1/27/2020, isolated, contracted 1/21/2020, symptom onset on 1/24/2020 (sore throat, chills, myalgias, fever, cough)",Bavaria,Germany,male,33.0,2020-01-24T00:00:00.000000,0,,,,2020-01-20T00:00:00.000000,2020-01-21,1,0,0,0,0,"sore throat, chills, myalgias, fever, cough",Channel News Asia,https://www.channelnewsasia.com/news/world/germany-wuhan-virus-workers-confirm-cases-infected-mild-symptoms-12365776 +2088,2,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Germany: caught from same Chinese colleague as 1/28-No.1, symptom onset 1/25/2020",Bavaria,Germany,,,2020-01-25T00:00:00.000000,0,,,,2020-01-20T00:00:00.000000,2020-01-21,1,0,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/world/germany-wuhan-virus-workers-confirm-cases-infected-mild-symptoms-12365777 +2089,3,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Germany: caught from 1/28-No.1 during contacts on 1/20 and 1/21, symptom onset 1/26/2020",Bavaria,Germany,,,2020-01-26T00:00:00.000000,0,,,,2020-01-20T00:00:00.000000,2020-01-21,1,0,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/world/germany-wuhan-virus-workers-confirm-cases-infected-mild-symptoms-12365778 +2090,4,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Germany: caught from 1/28-No.1 during contacts from 1/21-1/24, symptom onset 1/27/2020",Bavaria,Germany,,,2020-01-27T00:00:00.000000,0,,,,2020-01-21T00:00:00.000000,2020-01-24,1,0,0,0,0,,Channel News Asia,https://www.channelnewsasia.com/news/world/germany-wuhan-virus-workers-confirm-cases-infected-mild-symptoms-12365779 +2091,5,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Germany: male, worked at same company",Bavaria,Germany,male,,,,,,,,,,0,0,0,0,,CNN,https://www.cnn.com/asia/live-news/coronavirus-outbreak-02-01-20-intl-hnk/index.html +2092,6,2020-01-31T00:00:00.000000,new confirmed COVID-19 patient in Germany: child of employee at same company,Bavaria,Germany,,,,,,,,,,,0,0,0,0,,CNN,https://www.cnn.com/asia/live-news/coronavirus-outbreak-02-01-20-intl-hnk/index.html +2093,7,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in Germany: 52, male, works at same company as patients 1-5",Bavaria,Germany,male,52.0,,,,,,,,,0,0,0,0,,CNN,https://www.cnn.com/asia/live-news/coronavirus-outbreak-02-01-20-intl-hnk/index.html +2094,8,2020-02-01T00:00:00.000000,"new confirmed COVID-19 patient in Germany: 33, male, works at same company",Bavaria,Germany,male,33.0,,,,,,,,,0,0,0,0,,CNN,https://www.cnn.com/asia/live-news/coronavirus-outbreak-02-01-20-intl-hnk/index.html +2095,9,2020-02-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: evacuated from Wuhan, now in hospital in Frankfurt, arrived on 2/1/2020",Frankfurt,Germany,,,,,,,,,2020-02-01,1,1,0,0,0,,CNN,https://www.cnn.com/asia/live-news/coronavirus-outbreak-02-01-20-intl-hnk/index.html +2096,10,2020-02-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: evacuated from Wuhan, now in hospital in Frankfurt, arrived on 2/1/2020",Frankfurt,Germany,,,,,,,,,2020-02-01,1,1,0,0,0,,CNN,https://www.cnn.com/asia/live-news/coronavirus-outbreak-02-01-20-intl-hnk/index.html +2097,11,2020-02-05T00:00:00.000000,new confirmed COVID-19 patient in Germany: another child of employee,Bavaria,Germany,,,,,,,,,,,0,0,0,0,,Bavaria Health Ministry,https://www.stmgp.bayern.de/ministerium/presse/pressemitteilungen/ +2098,12,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: male, 58, employee of the same company",Bavaria,Germany,male,58.0,,,,,,,,,0,0,0,0,,Bavaria Health Ministry,https://www.stmgp.bayern.de/ministerium/presse/pressemitteilungen/ +2099,13,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: wife of a man who tested positive and worked at the company, two children also tested positive",Bavaria,Germany,female,,,,,,,,,,0,0,0,0,,Bavaria Health Ministry,https://www.stmgp.bayern.de/ministerium/presse/pressemitteilungen/ +2100,14,2020-02-07T00:00:00.000000,new confirmed COVID-19 patient in Germany: wife of a man who tested positive and worked at the company,Bavaria,Germany,female,,,,,,,,,,0,0,0,0,,Bavaria Health Ministry,https://www.stmgp.bayern.de/ministerium/presse/pressemitteilungen/ +2101,15,2020-02-11T00:00:00.000000,"new confirmed COVID-19 patient in Germany: male, 49, employee of Starnberf",Bavaria,Germany,male,49.0,,,,,,,,,0,0,0,0,,Bavaria Health Ministry,https://www.stmgp.bayern.de/ministerium/presse/pressemitteilungen/ +2102,16,2020-02-11T00:00:00.000000,new confirmed COVID-19 patient in Germany: family member of another employee of the company,Bavaria,Germany,,,,,,,,,,,0,0,0,0,,Bavaria Health Ministry,https://www.stmgp.bayern.de/ministerium/presse/pressemitteilungen/ +2103,17,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Germany: male, 25, took trip to Milan, admitted to hospital 2/24, Baden-Wurttemberg",Baden-Wuerttemberg,Germany,male,25.0,,,2020-02-24,,,,,1,0,0,0,0,,Thomson Reuters Foundation News,https://news.trust.org/item/20200225200141-gy7jv/ +2104,18,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Germany: male, 60, father of case 19, Baden-Wurttemberg",Baden-Wuerttemberg,Germany,male,60.0,,,,,,,,0,0,0,0,0,,Wa.de,https://www.wa.de/nordrhein-westfalen/corona-virus-nrw-coronavirus-covid19-heinsberg-epidemie-ticker-news-13560300.html +2105,19,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Germany: female, 24, accompanied case 17 to Milan, Baden-Wurttemberg",Baden-Wuerttemberg,Germany,female,24.0,,,,,,,,1,0,0,0,0,,Wa.de,https://www.wa.de/nordrhein-westfalen/corona-virus-nrw-coronavirus-covid19-heinsberg-epidemie-ticker-news-13560300.html +2106,20,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Germany: male, 32, Baden-Wurttemberg, returned on 2/23 from Codogno, Italy",Baden-Wuerttemberg,Germany,male,32.0,,,,,,,2020-02-23,1,0,0,0,0,,Wa.de,https://www.wa.de/nordrhein-westfalen/corona-virus-nrw-coronavirus-covid19-heinsberg-epidemie-ticker-news-13560300.html +2107,21,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Germany: male, 47, North Rhine-Westphalia, isolated 2/24 with symptoms of severe pneumonia, symptom onset 2/16 (fever, cough)",North Rhine-Westphalia,Germany,male,47.0,2020-02-16T00:00:00.000000,0,2020-02-24,,,,,,0,0,0,0,"fever, cough",Wa.de,https://www.wa.de/nordrhein-westfalen/corona-virus-nrw-coronavirus-covid19-heinsberg-epidemie-ticker-news-13560300.html +2108,22,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Germany: female, 46, wife of case 21, NRW",North Rhine-Westphalia,Germany,female,46.0,,,,,,,,,0,0,0,0,,Wa.de,https://www.wa.de/nordrhein-westfalen/corona-virus-nrw-coronavirus-covid19-heinsberg-epidemie-ticker-news-13560300.html +2109,23,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Rhineland-Palatinate, male, 41, infected in North Rhine-Westphalia on 2/15, admitted to hospital on 2/26, symptom onset 2/20",North Rhine-Westphalia,Germany,male,41.0,2020-02-20T00:00:00.000000,0,2020-02-26,,,2020-02-15T00:00:00.000000,2020-02-15,,0,0,0,0,,Wa.de,https://www.wa.de/nordrhein-westfalen/corona-virus-nrw-coronavirus-covid19-heinsberg-epidemie-ticker-news-13560300.html +2110,24,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Germany: contact of cases 21 and 22, NRW, employee of case 21",North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Wa.de,https://www.wa.de/nordrhein-westfalen/corona-virus-nrw-coronavirus-covid19-heinsberg-epidemie-ticker-news-13560300.html +2111,25,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Germany: contact of cases 21 and 22, NRW, partner of case 24",North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Wa.de,https://www.wa.de/nordrhein-westfalen/corona-virus-nrw-coronavirus-covid19-heinsberg-epidemie-ticker-news-13560300.html +2112,26,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Germany: contact of cases 21 and 22, NRW",North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823937 +2113,27,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823938 +2114,28,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823939 +2115,29,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823940 +2116,30,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823941 +2117,31,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823942 +2118,32,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823943 +2119,33,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823944 +2120,34,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823945 +2121,35,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823946 +2122,36,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823947 +2123,37,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823948 +2124,38,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823949 +2125,39,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823950 +2126,40,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in Germany: NRW,North Rhine-Westphalia,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823951 +2127,41,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hamburg, male, employee of children's medical department, called in sick 2/26/2020, went to hospital 2/27, had been on vacation in Trentino",Hamburg,Germany,male,,2020-02-26T00:00:00.000000,0,2020-02-27,,,,,1,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823952 +2128,42,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, female, attended business meeting in Munich where they had contact with an Italian participant who tested positive in Italy from 2/19-2/21",Baden-Wuerttemberg,Germany,female,,,,,,,2020-02-19T00:00:00.000000,2020-02-21,1,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823953 +2129,43,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, female, attended business meeting in Munich where they had contact with an Italian participant who tested positive in Italy from 2/19-2/21",Baden-Wuerttemberg,Germany,female,,,,,,,2020-02-19T00:00:00.000000,2020-02-21,1,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823954 +2130,44,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male, attended business meeting in Munich where they had contact with an Italian participant who tested positive in Italy from 2/19-2/21",Baden-Wuerttemberg,Germany,male,,,,,,,2020-02-19T00:00:00.000000,2020-02-21,1,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823955 +2131,45,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male, directly related to case 17",Baden-Wuerttemberg,Germany,male,,,,,,,,,0,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823956 +2132,46,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Rhineland-Palatinate, doctor who was infected by case 21",Rhineland-Palatinate,Germany,,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823957 +2133,47,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Bavaria, male, came into contact in Germany with an Italian who tested positive on his return to Italy",Bavaria,Germany,male,,,,,,,,,,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823958 +2134,48,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, male, 31, returned from a trip to Lombardy 2/23, Lahn-Dill district",Hesse,Germany,male,31.0,,,,,,,2020-02-23,1,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823959 +2135,49,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male",Baden-Wuerttemberg,Germany,male,,,,,,,,,0,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823960 +2136,50,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male, returned from ski holiday in Italy",Baden-Wuerttemberg,Germany,male,,,,,,,,,1,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823961 +2137,51,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male, was in Karlsruhe on business, family member also sick",Baden-Wuerttemberg,Germany,male,,,,,,,,,0,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823962 +2138,52,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male, travelled to Bergamo, Italy",Baden-Wuerttemberg,Germany,male,,,,,,,,,1,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823963 +2139,53,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male, 32, was in Milan on 2/21, symptom onset 2/23",Baden-Wuerttemberg,Germany,male,32.0,2020-02-23T00:00:00.000000,0,,,,2020-02-21T00:00:00.000000,2020-02-21,1,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823964 +2140,54,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male, identified as contact person on 2/25, isolated in domestic quarantine, hospitalized in a clinic",Baden-Wuerttemberg,Germany,male,,,,,,,,2020-02-25,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2141,55,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Germany: NRW, female, attended carnival event in Gangelt on 2/15",North Rhine-Westphalia,Germany,female,,,,,,,2020-02-15T00:00:00.000000,2020-02-15,0,0,0,0,0,,Suede Deutsche,https://www.sueddeutsche.de/panorama/coronavirus-deutschland-infizierte-insgesamt-news-aktuell-anzahl-wo-1.4823965 +2142,56,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, male, 29, mild symptoms, isolated at home, related to coronavirus case in Lahn-Dill district",Hesse,Germany,male,29.0,,,,,,,,0,0,0,0,0,,HNA,https://www.hna.de/welt/coronavirus-erster-fall-nordhessen-frau-waldeck-frankenberg-infiziert-zr-13575236.html +2143,57,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, from Gieben, 24, mild signs of illness, related to infection case in NRW",Hesse,Germany,,24.0,,,,,,,,0,0,0,0,0,,HNA,https://www.hna.de/welt/coronavirus-erster-fall-nordhessen-frau-waldeck-frankenberg-infiziert-zr-13575236.html +2144,58,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, male, 32, from Frankfurt, in contact with infected patient in Wetzlar",Hesse,Germany,male,32.0,,,,,,,,0,0,0,0,0,,Hessenschau,"https://www.hessenschau.de/panorama/acht-hessen-mit-coronavirus-infiziert,coronafall-hochtaunus-100.html" +2145,59,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, male, 28, from Frankfurt, in contact with infected patient in Wetzlar",Hesse,Germany,male,28.0,,,,,,,,0,0,0,0,0,,Hessenschau,"https://www.hessenschau.de/panorama/acht-hessen-mit-coronavirus-infiziert,coronafall-hochtaunus-100.html" +2146,60,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, male, 31, from Frankfurt, recently travelled to Italy",Hesse,Germany,male,31.0,,,,,,,,1,0,0,0,0,,Hessenschau,"https://www.hessenschau.de/panorama/acht-hessen-mit-coronavirus-infiziert,coronafall-hochtaunus-100.html" +2147,61,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, female, from Grob-Gerau, in contact with infected patient in Wetzlar, 41",Hesse,Germany,female,41.0,,,,,,,,0,0,0,0,0,,Hessenschau,"https://www.hessenschau.de/panorama/acht-hessen-mit-coronavirus-infiziert,coronafall-hochtaunus-100.html" +2148,62,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, female, Lampertheim, 42, infected in NRW",Hesse,Germany,female,42.0,,,,,,,,0,0,0,0,0,,HNA,https://www.hna.de/welt/coronavirus-erster-fall-nordhessen-frau-waldeck-frankenberg-infiziert-zr-13575236.html +2149,63,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, male, 52, trip to Lombardy, Lahn-Dill district",Hesse,Germany,male,52.0,,,,,,,,1,0,0,0,0,,HNA,https://www.hna.de/welt/coronavirus-erster-fall-nordhessen-frau-waldeck-frankenberg-infiziert-zr-13575236.html +2150,64,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, female, 42, in direct contact with an infected person from Freiburg, in isolation since 2/27",Baden-Wuerttemberg,Germany,female,42.0,,,,,,,2020-02-27,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2151,65,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, Frankfurt, trip to Milan",Hesse,Germany,,,,,,,,,,1,0,0,0,0,,HNA,https://www.hna.de/welt/coronavirus-erster-fall-nordhessen-frau-waldeck-frankenberg-infiziert-zr-13575236.html +2152,66,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male, 20 from Heilbronn, traveled to Lombardy 2/22-2/28, symptom onset 2/28, in domestic isolation",Baden-Wuerttemberg,Germany,male,20.0,2020-02-28T00:00:00.000000,0,,,,2020-02-22T00:00:00.000000,2020-02-28,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2153,67,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male, 68, returned from skiing holiday in South Tyrol 2/26, had contact with man infected, from Mannheim",Baden-Wuerttemberg,Germany,male,68.0,,,,,,,2020-02-26,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2154,68,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male from Mannheim, 24, in contact with confirmed case in NRW, symptom 2/25-2/27",Baden-Wuerttemberg,Germany,male,24.0,2020-02-25T00:00:00.000000,0,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2155,69,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male from Mannheim, 54, returned from Qom 2/24",Baden-Wuerttemberg,Germany,male,54.0,,,,,,,2020-02-24,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2156,70,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male, 41, unrelated to previously known cases, symptoms started 2/26, trip to Basel 2/21-2/23",Baden-Wuerttemberg,Germany,male,41.0,2020-02-26T00:00:00.000000,0,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2157,71,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Heilbronn district, male, 85, in contact with infected patient, hospitalized 2/28",Baden-Wuerttemberg,Germany,male,85.0,,,2020-02-28,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2158,72,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Heilbronn district, female, 54, worker at nursing home of above case, in isolation since 2/28",Baden-Wuerttemberg,Germany,female,54.0,,,,,,,2020-02-28,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2159,73,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Heilbronn district, female, daughter of above case, went to hospital 2/28",Baden-Wuerttemberg,Germany,female,,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2160,74,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Heilbronn district, male, 32, no symptoms, recently returned from trip to northern Italy, infected both the 85 year old male and 54 year old female colleague",Baden-Wuerttemberg,Germany,male,32.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2161,75,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Heilbronn district, female, contact of infected man from Ludwigsburg, in quarantine since 2/28",Baden-Wuerttemberg,Germany,female,,,,,,,,2020-02-28,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2162,76,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Heilbronn district, female, 51, went on trip to Lombardy from 2/21-2/27",Baden-Wuerttemberg,Germany,female,51.0,,,,,,2020-02-21T00:00:00.000000,2020-02-27,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2163,77,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Hohenzollern district but from Zollernalb, male, 61, skiing in South Tyrol with a group 2/29-3/1, symptom onset 3/2",Baden-Wuerttemberg,Germany,male,61.0,2020-03-02T00:00:00.000000,0,,,,2020-02-29T00:00:00.000000,2020-03-01,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2164,78,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Ulm city district, female, 45, on skiing holiday in South Tyrol",Baden-Wuerttemberg,Germany,female,45.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2165,79,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male, 44, Rems-Murr district, mild symptoms",Baden-Wuerttemberg,Germany,male,44.0,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2166,80,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, male, 45, Ludwigsburg district, previously in South Tyrol, mild flu infection and in home quarantine",Baden-Wuerttemberg,Germany,male,45.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2167,81,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Esslingen, in South Tyrol from 2/22-2/29, male",Baden-Wuerttemberg,Germany,male,,,,,,,2020-02-22T00:00:00.000000,2020-02-29,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2168,82,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Esslingen, in South Tyrol from 2/22-2/29, female, married to above case",Baden-Wuerttemberg,Germany,female,,,,,,,2020-02-22T00:00:00.000000,2020-02-29,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2169,83,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Esslingen, 18, male, on vacation with family in South Tyrol from 2/22-2/29",Baden-Wuerttemberg,Germany,male,18.0,,,,,,2020-02-22T00:00:00.000000,2020-02-29,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2170,84,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Esslingen, male, traveled to Florence and Bologna",Baden-Wuerttemberg,Germany,male,,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2171,85,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Esslingen, female, traveled to Florence and Bologna, married to above case",Baden-Wuerttemberg,Germany,female,,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2172,86,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Lorrach, in Milan 2/12, developed fever and cough after trip, 35",Baden-Wuerttemberg,Germany,,35.0,,,,,,2020-02-12T00:00:00.000000,2020-02-12,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2173,87,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Ostalkbreis, female, 43, previously visited carnival parades in Heinsberg (NRW)",Baden-Wuerttemberg,Germany,female,43.0,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2174,88,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Mecklenburg-Vorpommern, from Griefswald, contact with confirmed case in late February in Baden-Wurttemberg, male, 64, mild symptoms",Mecklenburg-Vorpommern,Germany,male,64.0,,,,,,,,0,0,0,0,0,,Ministry,https://www.regierung-mv.de/Landesregierung/wm/Aktuell/?id=158268&processor=processor.sa.pressemitteilung +2175,89,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Mecklenburg-Vorpommern, from Griefswald, contact with confirmed case in late February in Baden-Wurttemberg, female, 62, no symptoms",Mecklenburg-Vorpommern,Germany,female,62.0,,,,,,,,0,0,0,0,0,,Ministry,https://www.regierung-mv.de/Landesregierung/wm/Aktuell/?id=158268&processor=processor.sa.pressemitteilung +2176,90,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Mecklenburg-Vorpommern, Vorpommern-Rugen, male, 50, skiing holiday in South Tyrol last week, mild symptoms",Mecklenburg-Vorpommern,Germany,male,50.0,,,,,,,,1,0,0,0,0,,Ministry,https://www.regierung-mv.de/Landesregierung/wm/Aktuell/?id=158268&processor=processor.sa.pressemitteilung +2177,91,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Brandenburg, male, 51, recently returned from South Tyrol",Brandenburg,Germany,male,51.0,,,,,,,,1,0,0,0,0,,Maz-Online,https://www.maz-online.de/Brandenburg/Zweiter-Fall-von-Coronavirus-in-Brandenburg +2178,92,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Thuringia, male, 57, infected in Italy when he went skiing",Thuringia,Germany,male,57.0,,,,,,,,1,0,0,0,0,,Isaan,https://isaan.live/isaan-news/coronavirus/first-cases-of-coronavirus-confirmed-in-saxony-thuringia-and-brandenburg/?related_post_from=117434 +2179,93,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Saarland, male, doctor, symptoms 3/3",Saarland,Germany,male,,2020-03-03T00:00:00.000000,,,,,,,0,0,0,0,0,,Sol,"https://www.sol.de/news/update/News-Update,454086/Coronavirus-im-Saarland-Der-aktuelle-Stand,454183" +2180,94,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Mecklenburg-Vorpommern, 52, Mecklenburg Lake District, returned from South Tyrol in past few days",Mecklenburg-Vorpommern,Germany,,52.0,,,,,,,,1,0,0,0,0,,Ministry,https://www.regierung-mv.de/Landesregierung/wm/Aktuell/?id=158268&processor=processor.sa.pressemitteilung +2181,95,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, Main-Kinzig district, female, mild symptoms",Hesse,Germany,female,,,,,,,,,0,0,0,0,0,,HSN,https://www.hna.de/welt/coronavirus-erster-fall-nordhessen-frau-waldeck-frankenberg-infiziert-zr-13575236.html +2182,96,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, Frankfurt",Hesse,Germany,,,,,,,,,,0,0,0,0,0,,HSN,https://www.hna.de/welt/coronavirus-erster-fall-nordhessen-frau-waldeck-frankenberg-infiziert-zr-13575236.html +2183,97,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Ulm, in quarantine at home, previously in Italy, male, 48",Baden-Wuerttemberg,Germany,male,48.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2184,98,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Ulm, in quarantine at home, previously in Italy, male, 53",Baden-Wuerttemberg,Germany,male,53.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2185,99,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Ulm, in quarantine at home, previously in Italy, male, 12",Baden-Wuerttemberg,Germany,male,12.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2186,100,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Freiburg, in quarantine at home, previously in Italy, male, 54",Baden-Wuerttemberg,Germany,male,54.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2187,101,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Freiburg, in quarantine at home, previously in Italy, male, 63",Baden-Wuerttemberg,Germany,male,63.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2188,102,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Freiburg, in quarantine at home, female, 12, got infected from father",Baden-Wuerttemberg,Germany,female,12.0,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2189,103,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Lake Constance, male, in quarantine at home, previously in Italy and returned 3/3",Baden-Wuerttemberg,Germany,male,,,,,,,,2020-03-03,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2190,104,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Main-Tauber, female, 46, previously in Italy from 2/22-2/28",Baden-Wuerttemberg,Germany,female,46.0,,,,,,2020-02-22T00:00:00.000000,2020-02-28,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2191,105,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Rhein-Neckar, 55, contact with confirmed case in the district",Baden-Wuerttemberg,Germany,,55.0,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2192,106,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Rhein-Neckar, 36, traveler from Tehran, Iran",Baden-Wuerttemberg,Germany,,36.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2193,107,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Rhein-Neckar, 55, been in South Tyrol",Baden-Wuerttemberg,Germany,,55.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2194,108,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Ludwigsburg, male, 61, traveled to Naples",Baden-Wuerttemberg,Germany,male,61.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2195,109,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Stuttgart, female, 55, recently returned from Barcelona",Baden-Wuerttemberg,Germany,female,55.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2196,110,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Rems-Murr, female, 14, daughter of man tested positive",Baden-Wuerttemberg,Germany,female,14.0,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2197,111,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Zollern-Alb, 25, female, previous close contact with already confirmed case from same district",Baden-Wuerttemberg,Germany,female,25.0,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2198,112,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Ostalb district, female, 38, contact of infected person",Baden-Wuerttemberg,Germany,female,38.0,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2199,113,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Ostalb district, female, 33, contact of infected person",Baden-Wuerttemberg,Germany,female,33.0,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2200,114,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Heidenheim, male, 80",Baden-Wuerttemberg,Germany,male,80.0,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2201,115,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Sigmaringen, male, 40, had been in South Tyrol",Baden-Wuerttemberg,Germany,male,40.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2202,116,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Freiburg, male, 58, previously in South Tyrol",Baden-Wuerttemberg,Germany,male,58.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2203,117,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Mannheim, female, 33, recently returned from Tehran, Iran on 2/24",Baden-Wuerttemberg,Germany,female,33.0,,,,,,,2020-02-24,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2204,118,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, resident of nursing home, female, 91, Heilbronn",Baden-Wuerttemberg,Germany,female,91.0,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2205,119,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, resident of nursing home, female, 87, Heilbronn",Baden-Wuerttemberg,Germany,female,87.0,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2206,120,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, resident of nursing home, male, 77, Heilbronn",Baden-Wuerttemberg,Germany,male,77.0,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2207,121,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, resident of nursing home, male, Heilbronn",Baden-Wuerttemberg,Germany,male,,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2208,122,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Alb-Donau, 56, male, returned from Italy",Baden-Wuerttemberg,Germany,male,56.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2209,123,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Alb-Donau, 19, male, son of above case, returned from Italy",Baden-Wuerttemberg,Germany,male,19.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2210,124,2020-03-04T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Stuttgart, male, 34, traveler from Italy",Baden-Wuerttemberg,Germany,male,34.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2211,125,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Mecklenburg-Vorpommern, male, 49, Vorpommern-Rugen district, in close contact with third case in MV",Mecklenburg-Vorpommern,Germany,male,49.0,,,,,,,,0,0,0,0,0,,Ministry,https://www.regierung-mv.de/Landesregierung/wm/Aktuell/?id=158268&processor=processor.sa.pressemitteilung +2212,126,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, Waldeck-Frankenberg, female, stayed in NRW until 2/25, 75",Hesse,Germany,female,75.0,,,,,,,2020-02-25,0,0,0,0,0,,HSN,https://www.hna.de/welt/coronavirus-erster-fall-nordhessen-frau-waldeck-frankenberg-infiziert-zr-13575236.html +2213,127,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, Vogelsberg, female, 21, spent past weekend in Berlin (14)",Hesse,Germany,female,21.0,,,,,,,,1,0,0,0,0,,HSN,https://www.hna.de/welt/coronavirus-erster-fall-nordhessen-frau-waldeck-frankenberg-infiziert-zr-13575236.html +2214,128,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, Rheingau-Tauus district, female, 27",Hesse,Germany,female,27.0,,,,,,,,0,0,0,0,0,,HSN,https://www.hna.de/welt/coronavirus-erster-fall-nordhessen-frau-waldeck-frankenberg-infiziert-zr-13575236.html +2215,129,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Esslingen, female, member of travel group to Italy, 50",Baden-Wuerttemberg,Germany,female,50.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2216,130,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Esslingen, female, member of travel group to Italy, 50",Baden-Wuerttemberg,Germany,female,50.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2217,131,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Esslingen, female, member of travel group to Italy, 18",Baden-Wuerttemberg,Germany,female,18.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2218,132,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Esslingen, female, traveled to Italy, 20",Baden-Wuerttemberg,Germany,female,20.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2219,133,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Esslingen, male, returned from Lombardy, 63",Baden-Wuerttemberg,Germany,male,63.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2220,134,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Ravensburg, male, previously in South Tyrol, 51",Baden-Wuerttemberg,Germany,male,51.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2221,135,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Lake Constance, female, traveled to South Tyrol, 54",Baden-Wuerttemberg,Germany,female,54.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2222,136,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Stuttgart, male, 41, previously been in Lombardy",Baden-Wuerttemberg,Germany,male,41.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2223,137,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Rhein-Neckar, male, 60, returned from South Tyrol",Baden-Wuerttemberg,Germany,male,60.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2224,138,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Karlsruhe, 18, previously traveled to South Tyrol",Baden-Wuerttemberg,Germany,,18.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2225,139,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Esslingen, male, 19, went to South Tyrol",Baden-Wuerttemberg,Germany,male,19.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2226,140,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Esslingen, female, 19, went to South Tyrol",Baden-Wuerttemberg,Germany,female,19.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2227,141,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Esslingen, female, 19, went to South Tyrol",Baden-Wuerttemberg,Germany,female,19.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2228,142,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Zollernalb, male",Baden-Wuerttemberg,Germany,male,,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2229,143,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Lake Constance, female, 51, went to South Tyrol, contact person for other case in lake Constance (case 80)",Baden-Wuerttemberg,Germany,female,51.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2230,144,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Zollernalbkreis, male, traveled to South Tyrol",Baden-Wuerttemberg,Germany,male,,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2231,145,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Zollernalbkreis, male, traveled to South Tyrol",Baden-Wuerttemberg,Germany,male,,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2232,146,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Zollernalbkreis, male, traveled to South Tyrol",Baden-Wuerttemberg,Germany,male,,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2233,147,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Zollernalbkreis, male, traveled to South Tyrol",Baden-Wuerttemberg,Germany,male,,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2234,148,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Zollernalbkreis, female, traveled to South Tyrol",Baden-Wuerttemberg,Germany,female,,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2235,149,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Zollernalbkreis, female, traveled to South Tyrol",Baden-Wuerttemberg,Germany,female,,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2236,150,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Zollernalbkreis, female, traveled to South Tyrol",Baden-Wuerttemberg,Germany,female,,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2237,151,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Zollernalbkreis, female, traveled to South Tyrol",Baden-Wuerttemberg,Germany,female,,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2238,152,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Hohenlohekreis, 57, traveler from Italy (case 89)",Baden-Wuerttemberg,Germany,,,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2239,153,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Hesse, Kassel region (16), male, 54, on vacation in northern Italy",Hesse,Germany,male,54.0,,,,,,,,0,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2240,154,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Heilbronn, male, 50, returned from South tyrol",Baden-Wuerttemberg,Germany,male,50.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2241,155,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Rems-Murr, male, 57, been in South Tyrol",Baden-Wuerttemberg,Germany,male,57.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2242,156,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Ortenaukreis, female, 54, been in South Tyrol",Baden-Wuerttemberg,Germany,female,54.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2243,157,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Oretanaukreis, female, 17, been in South Tyrol, daughter of above case",Baden-Wuerttemberg,Germany,female,17.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2244,158,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Calw, 29, previously been in Sirmione",Baden-Wuerttemberg,Germany,,29.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2245,159,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Emmendingen, female, been in France",Baden-Wuerttemberg,Germany,female,,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2246,160,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Baden-Wuerttemberg, Biberach, male, 43, been in South Tyrol",Baden-Wuerttemberg,Germany,male,43.0,,,,,,,,1,0,0,0,0,,Ministry,https://stm.baden-wuerttemberg.de/de/service/presse/pressemitteilung/pid/informationen-zum-coronavirus-in-baden-wuerttemberg/ +2247,161,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Mecklenburg-Vorpommern, male, 56, close contact with fourth case in MV on 3/4, symptoms since 3/5",Mecklenburg-Vorpommern,Germany,male,56.0,2020-03-05T00:00:00.000000,0,,,,2020-03-04T00:00:00.000000,2020-03-04,0,0,0,0,0,,NDR,"https://www.ndr.de/nachrichten/mecklenburg-vorpommern/Coronavirus-Acht-nachgewiesene-Faelle-in-MV,corona468.html" +2248,162,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Mecklenburg-Vorpommern, female, 23, went skiing in Austria",Mecklenburg-Vorpommern,Germany,female,23.0,,,,,,,,1,0,0,0,0,,NDR,"https://www.ndr.de/nachrichten/mecklenburg-vorpommern/Coronavirus-Acht-nachgewiesene-Faelle-in-MV,corona468.html" +2249,163,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Mecklenburg-Vorpommern, male, 37, went skiing in Austria",Mecklenburg-Vorpommern,Germany,male,37.0,,,,,,,,1,0,0,0,0,,NDR,"https://www.ndr.de/nachrichten/mecklenburg-vorpommern/Coronavirus-Acht-nachgewiesene-Faelle-in-MV,corona468.html" +2250,164,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Saarland, male, works in Saarland but lives in France",Saarland,Germany,male,,,,,,,,,1,0,0,0,0,,NDR,"https://www.ndr.de/nachrichten/mecklenburg-vorpommern/Coronavirus-Acht-nachgewiesene-Faelle-in-MV,corona468.html" +2251,165,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Saarland, female, 65, met with a woman in France who was considered to be positively infected",Saarland,Germany,female,65.0,,,,,,,,0,0,0,0,0,,NDR,"https://www.ndr.de/nachrichten/mecklenburg-vorpommern/Coronavirus-Acht-nachgewiesene-Faelle-in-MV,corona468.html" +2252,166,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Brandenburg, female, 43, lives with husband in Berlin-Reinickendorf",Brandenburg,Germany,female,43.0,,,,,,,,0,0,0,0,0,,NDR,"https://www.ndr.de/nachrichten/mecklenburg-vorpommern/Coronavirus-Acht-nachgewiesene-Faelle-in-MV,corona468.html" +2253,167,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Saarland, male, contact with frontier worker in France who tested positive as second case in Saarland",Saarland,Germany,male,,,,,,,,,0,0,0,0,0,,NDR,"https://www.ndr.de/nachrichten/mecklenburg-vorpommern/Coronavirus-Acht-nachgewiesene-Faelle-in-MV,corona468.html" +2254,168,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Germany: Saarland, male, contact with frontier worker in France who tested positive as second case in Saarland",Saarland,Germany,male,,,,,,,,,0,0,0,0,0,,NDR,"https://www.ndr.de/nachrichten/mecklenburg-vorpommern/Coronavirus-Acht-nachgewiesene-Faelle-in-MV,corona468.html" +2255,1,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in UAE: female, 73, 1/29-No.1 (grandmother), arrived as tourists 1/16/2020, symptom onset 1/23/2020, sought medical help",UAE,UAE,female,73.0,2020-01-23T00:00:00.000000,0,,,,,2020-01-16,1,0,1,0,1581206400,,Aljazeera,https://www.aljazeera.com/news/2020/01/uae-confirms-cases-coronavirus-200129063305587.html +2256,2,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in UAE: female, 36, 1/29-No.2 (mother), arrived as tourists 1/16/2020, admitted into hospital",UAE,UAE,female,36.0,,,,,,,2020-01-16,1,0,1,0,1582761600,,Aljazeera,https://www.aljazeera.com/news/2020/01/uae-confirms-cases-coronavirus-200129063305587.html +2257,3,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in UAE: male, 41, 1/29-No.3 (father), arrived as tourists 1/16/2020, admitted into hospital",UAE,UAE,male,41.0,,,,,,,2020-01-16,1,0,1,0,1581811200,,Aljazeera,https://www.aljazeera.com/news/2020/01/uae-confirms-cases-coronavirus-200129063305587.html +2258,4,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in UAE: male, 8, 1/29-No.4 (son), arrived as tourists 1/16/2020, admitted into hospital",UAE,UAE,male,8.0,,,,,,,2020-01-16,1,0,1,0,1581811200,,Aljazeera,https://www.aljazeera.com/news/2020/01/uae-confirms-cases-coronavirus-200129063305587.html +2259,5,2020-02-01T00:00:00.000000,new confirmed COVID-19 patient in UAE: arrived from Wuhan,UAE,UAE,,,,,,,,,,1,1,0,0,0,,The National,https://www.thenational.ae/uae/health/uae-s-fifth-coronavirus-case-man-s-family-tests-negative-1.972741 +2260,6,2020-02-08T00:00:00.000000,new confirmed COVID-19 patient in UAE: Chinese national,UAE,UAE,,,,,,,,,,,0,0,0,0,,Reuters,https://www.reuters.com/article/us-china-health-uae/uae-says-total-of-seven-cases-diagnosed-with-coronavirus-as-two-more-cases-detected-idUSKBN20209A +2261,7,2020-02-08T00:00:00.000000,new confirmed COVID-19 patient in UAE: Filipino national,UAE,UAE,,,,,,,,,,,0,0,0,0,,Reuters,https://www.reuters.com/article/us-china-health-uae/uae-says-total-of-seven-cases-diagnosed-with-coronavirus-as-two-more-cases-detected-idUSKBN20209A +2262,8,2020-02-10T00:00:00.000000,new confirmed COVID-19 patient in UAE: Indian national who had been in contact with another case,UAE,UAE,,,,,,,,,,,0,0,0,0,,Reuters,https://www.reuters.com/article/us-china-health-uae/uae-says-total-of-seven-cases-diagnosed-with-coronavirus-as-two-more-cases-detected-idUSKBN20209A +2263,9,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in UAE: male, 37",UAE,UAE,male,37.0,,,,,,,,,0,0,0,0,,The National,https://www.thenational.ae/uae/health/coronavirus-uae-confirms-ninth-case-1.979894 +2264,10,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in UAE: Filipino national, 34",UAE,UAE,,34.0,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/uae/iranian-couple-diagnosed-with-covid-19-in-uae-taking-number-of-cases-to-13-1.69875492 +2265,11,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in UAE: from Bangladesh, 39",UAE,UAE,,39.0,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/uae/iranian-couple-diagnosed-with-covid-19-in-uae-taking-number-of-cases-to-13-1.69875492 +2266,12,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in UAE: male, 70",UAE,UAE,male,70.0,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/uae/iranian-couple-diagnosed-with-covid-19-in-uae-taking-number-of-cases-to-13-1.69875492 +2267,13,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in UAE: female, 64",UAE,UAE,female,64.0,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/uae/iranian-couple-diagnosed-with-covid-19-in-uae-taking-number-of-cases-to-13-1.69875492 +2268,14,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in UAE: Iranian, traveled from Iran",UAE,UAE,,,,,,,,,,1,0,0,0,0,,The National,https://www.thenational.ae/uae/health/coronavirus-uae-tour-cancelled-and-dozens-quarantined-as-two-participants-test-positive-1.985664 +2269,15,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in UAE: Iranian, traveled from Iran",UAE,UAE,,,,,,,,,,1,0,0,0,0,,The National,https://www.thenational.ae/uae/health/coronavirus-uae-tour-cancelled-and-dozens-quarantined-as-two-participants-test-positive-1.985665 +2270,16,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in UAE: Iranian, traveled from Iran",UAE,UAE,,,,,,,,,,1,0,0,0,0,,The National,https://www.thenational.ae/uae/health/coronavirus-uae-tour-cancelled-and-dozens-quarantined-as-two-participants-test-positive-1.985666 +2271,17,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in UAE: Iranian, traveled from Iran",UAE,UAE,,,,,,,,,,1,0,0,0,0,,The National,https://www.thenational.ae/uae/health/coronavirus-uae-tour-cancelled-and-dozens-quarantined-as-two-participants-test-positive-1.985667 +2272,18,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in UAE: Bahraini, traveled from Iran",UAE,UAE,,,,,,,,,,1,0,0,0,0,,The National,https://www.thenational.ae/uae/health/coronavirus-uae-tour-cancelled-and-dozens-quarantined-as-two-participants-test-positive-1.985668 +2273,19,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in UAE: Chinese, traveled from Iran",UAE,UAE,,,,,,,,,,1,0,0,0,0,,The National,https://www.thenational.ae/uae/health/coronavirus-uae-tour-cancelled-and-dozens-quarantined-as-two-participants-test-positive-1.985669 +2274,20,2020-02-28T00:00:00.000000,new confirmed COVID-19 patient in UAE: Italian participant in UAE Tour,UAE,UAE,,,,,,,,,,,0,0,0,0,,The National,https://www.thenational.ae/uae/health/coronavirus-uae-tour-cancelled-and-dozens-quarantined-as-two-participants-test-positive-1.985670 +2275,21,2020-02-28T00:00:00.000000,new confirmed COVID-19 patient in UAE: Italian participant in UAE Tour,UAE,UAE,,,,,,,,,,,0,0,0,0,,The National,https://www.thenational.ae/uae/health/coronavirus-uae-tour-cancelled-and-dozens-quarantined-as-two-participants-test-positive-1.985671 +2276,1,2020-01-22T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 39, tourist from Wuhan, arrived 1/21/2020 via high-speed rail from Shenzhen and detected having fever at the border, quarantined 1/22/2020 at hospital",Hong Kong,Hong Kong,male,39.0,2020-01-21T00:00:00.000000,1,2020-01-22,,,,,1,0,1,0,0,fever,Reuters,https://www.reuters.com/article/us-china-health-hongkong/hong-kong-confirms-first-case-of-new-wuhan-virus-local-media-idUSKBN1ZL10A?il=0 +2277,2,2020-01-22T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 56, went to Wuhan 1/10/2020-1/19/2020, visited hospital on 1/19/2020 but no fever or pneumonia, returned to hospital 1/21/2020, sent to isolation ward, symptom onset 1/18/2020 (fever)",Hong Kong,Hong Kong,male,56.0,2020-01-18T00:00:00.000000,0,2020-01-19,,,2020-01-10T00:00:00.000000,2020-01-19,1,1,0,0,0,,South China Morning Post,https://www.scmp.com/news/hong-kong/health-environment/article/3047193/china-coronavirus-first-case-confirmed-hong-kong +2278,3,2020-01-24T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: 1/24-No.1, married to 1/27-No.1, female, 62, lives in Wuhan, travelled from Wuhan to Shenzhenbei and then Hong Kong by train on 1/19/2020, symptom onset 1/20/2020 (fever, cough), hospitalized 1/23/2020, admitted for isolation 1/24/2020",Hong Kong,Hong Kong,female,62.0,2020-01-20T00:00:00.000000,0,2020-01-23,,,,2020-01-19,1,0,1,0,0,"fever, cough",Shine,https://www.shine.cn/news/nation/2001290843/ +2279,4,2020-01-24T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: 1/24-No.2, married to 1/24-No.3, female, 62, took train from Wuhan to Hong Kong on 1/22/2020, symptom onset 1/23/2020 (fever), went to hospital 1/23/2020 and admitted for isolation",Hong Kong,Hong Kong,female,62.0,2020-01-23T00:00:00.000000,0,2020-01-23,,,,2020-01-22,1,0,1,0,0,feve\,Shine,https://www.shine.cn/news/nation/2001290843/ +2280,5,2020-01-24T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: 1/24-No.3, married to 1/24-No.2, male, 63, took train from Wuhan to Hong Kong on 1/22/2020, symptom onset 1/23/2020 (fever and cough), went to hospital 1/23/2020 and admitted for isolation",Hong Kong,Hong Kong,male,63.0,2020-01-23T00:00:00.000000,0,2020-01-23,,,,2020-01-22,1,0,1,0,1,"fever, cough",Shine,https://www.shine.cn/news/nation/2001290843/ +2281,6,2020-01-27T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 47, worked in Wuhan, returned to HK on 1/23/2020, symptom onset 1/20/2020 (fever), sought treatment at hospital in Wuhan on 1/21/2020, left for Hong Kong on 1/23/2020",Hong Kong,Hong Kong,male,47.0,2020-01-20T00:00:00.000000,0,2020-01-21,,,,2020-01-23,1,0,1,0,0,fever,Shine,https://www.shine.cn/news/nation/2001290843/ +2282,7,2020-01-27T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 68, lives in Shenzhen, traveled to Hong Kong on 1/25/2020 with a fever, immediately taken to hospital for isolation, visited family members in Wuhan , symptom onset 1/21/2020 (fever, cough), had visited family member in Wuhan",Hong Kong,Hong Kong,female,68.0,2020-01-21T00:00:00.000000,0,2020-01-25,,,,2020-01-25,1,1,0,0,0,fever,Shine,https://www.shine.cn/news/nation/2001290843/ +2283,8,2020-01-27T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: 1/27-No.1, married to 1/24-No.1, male, 64, wife was third imported case, traveled with wife to Hong Kong by train 1/19/2020, put into quarantine 1/24/2020 due to wife, developed fever 1/25/2020 and transferred to hospital",Hong Kong,Hong Kong,male,64.0,2020-01-25T00:00:00.000000,0,2020-01-25,,,,2020-01-19,1,0,1,0,0,fever,Shine,https://www.shine.cn/news/nation/2001290843/ +2284,9,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: 1/29-No.1, married to 1/29-No.2, female, 73, live in Wuhan, arrived by flight 1/22/2020, admitted to hospital 1/28/2020",Hong Kong,Hong Kong,female,73.0,2020-01-28T00:00:00.000000,1,2020-01-28,,,,2020-01-22,1,1,0,0,0,,Shine,https://www.shine.cn/news/nation/2001290843/ +2285,10,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: 1/29-No.2, married to 1/29-No.1, male, 72, live in Wuhan, arrived by flight 1/22/2020, admitted to hospital 1/28/2020",Hong Kong,Hong Kong,male,72.0,2020-01-28T00:00:00.000000,1,2020-01-28,,,,2020-01-22,1,1,0,0,0,,Shine,https://www.shine.cn/news/nation/2001290843/ +2286,11,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 37, lives in Yau Ma Tei, daughter of 1/29-No.1 and 1/29-No.2, symptom onset 1/28/2020 (cough), hospitalized 1/30/2020, stayed with parents 1/22/2020-1/28/2020",Yau Ma Tei,Hong Kong,female,37.0,2020-01-28T00:00:00.000000,0,2020-01-30,,,2020-01-22T00:00:00.000000,2020-01-28,,0,0,0,0,cough,Xin Hua Net,http://www.xinhuanet.com/english/2020-01/31/c_138745266.htm +2287,12,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 75, living in Tsing Yi, symptom onset 1/22/2020 (cough, shortness of breath), hospitalized 1/24/2020, visited Guangdong 12/30/2019-1/7/2020, day trips to Macau 1/10/2020-1/14/2020",Tsing Yi,Hong Kong,male,75.0,2020-01-22T00:00:00.000000,0,2020-01-24,,,,,1,0,0,0,0,"cough, shortness of breath",Xin Hua Net,http://www.xinhuanet.com/english/2020-01/31/c_138745266.htm +2288,13,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: 1/31-No.1, male, 39, lives in Kowloon, symptom onset 1/31/2020 (myalgia, fever), hospitalized 1/31/2020 and admitted for isolation and treatment, took train from Hong Kong to Wuhan on 1/21/2020 and from Changsha to Hong Kong on 1/23/2020, died 2/4/2020",Kowloon,Hong Kong,male,39.0,2020-01-31T00:00:00.000000,0,2020-01-31,,,2020-01-21T00:00:00.000000,2020-01-23,,1,0,1,0,"myalgia, fever",Fortune,https://fortune.com/2020/02/03/coronavirus-death-hong-kong/ +2289,14,2020-02-02T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 80, visited Shenzhen for a few hours on 1/10/2020, flight to Japan on 1/17/2020 and returned to HK on cruise on 1/25/2020, symptom onset 1/19/2020, hospitalized on 1/30/2020 for high fever",Hong Kong,Hong Kong,male,80.0,2020-01-19T00:00:00.000000,0,2020-01-30,,,2020-01-10T00:00:00.000000,2020-01-10,1,0,0,0,0,fever,Daily HK,https://www.chinadailyhk.com/article/119879 +2290,15,2020-02-02T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 72, no recent history of travel, caught from son 1/31-No.1, quarantined since 2/1/2020, symptom onset 2/1/2020 (fever, cough), sent to hospital",Kowloon,Hong Kong,female,72.0,2020-02-01T00:00:00.000000,0,2020-02-01,,,2020-01-23T00:00:00.000000,2020-01-31,,0,0,0,0,"fever, cough",Daily HK,https://www.chinadailyhk.com/article/119880 +2291,16,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 64, worked at clothing store in Kowloon, symptom onset 1/23/2020 (cough) and consulted private doctor 1/23/2020, shortness of breath on 2/1/2020, sought treatment at hospital, no recent travel to China",Kowloon,Hong Kong,female,64.0,2020-01-23T00:00:00.000000,0,2020-01-23,,,,,,0,0,0,0,cough,Daily HK,https://www.chinadailyhk.com/article/119881 +2292,17,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: 2/4-No.1, male, 60, visited four private clinics before taken to hospital, no recent travel to China, lives in Kwun Tong, symptom onset 1/22/2020 (fever, myalgia, shortness of breath), first went to hospital on 1/30",Hong Kong,Hong Kong,male,60.0,2020-01-22T00:00:00.000000,0,2020-01-30,,,,,,0,0,0,0,"fever, myalgia, shortness of breath",Daily HK,https://www.chinadailyhk.com/article/119882 +2293,18,2020-02-04T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 25, lives in Kowloon City, now in hospital, had not travelled outside Hong Kong, symptom onset 1/28/2020 (cough, runny nose, diarrhea), went to hospital 1/29/2020",Kowloon,Hong Kong,male,25.0,2020-01-28T00:00:00.000000,0,2020-01-29,,,,,,0,0,0,1581724800,"cough, runny nose, diarrhea",Line Today,https://today.line.me/hk/pc/article/Coronavirus+three+new+cases+in+Hong+Kong+include+wife+and+daughter+of+man+who+already+has+disease-E0NpJa +2294,19,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 56, married to 2/4-No.1, sent to hospital in Kwun Tong, symptom onset 2/4/2020 (fever)",Kwun Tong,Hong Kong,female,56.0,2020-02-04T00:00:00.000000,0,2020-02-04,,,,,,0,0,0,0,fever,Line Today,https://today.line.me/hk/pc/article/Coronavirus+three+new+cases+in+Hong+Kong+include+wife+and+daughter+of+man+who+already+has+disease-E0NpJa +2295,20,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 28, daughter of 2/4-No.1, sent to hospital in Kwun Tong 2/4/2020, symptom onset 1/30 (cough, sore throat, fever)",Kwun Tong,Hong Kong,female,28.0,2020-01-30T00:00:00.000000,0,2020-02-04,,,,,,0,0,0,0,"cough, sore throat",Line Today,https://today.line.me/hk/pc/article/Coronavirus+three+new+cases+in+Hong+Kong+include+wife+and+daughter+of+man+who+already+has+disease-E0NpJa +2296,21,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: 2/5-No.1, male, 56, tested positive at hospital in Kwai Chung, symptom onset 1/30/2020 (fever, cough, sore throat), consulted private doctor 2/1/2020, went to hospital on 2/4/2020 when admitted, worked in Shenzhen and visited onn 1/21, visited Tokyo 1/28-2/1",Kwai Chung,Hong Kong,male,56.0,2020-01-30T00:00:00.000000,0,2020-02-01,,,,,,0,0,0,0,"fever, cough, sore throat",Line Today,https://today.line.me/hk/pc/article/Coronavirus+three+new+cases+in+Hong+Kong+include+wife+and+daughter+of+man+who+already+has+disease-E0NpJa +2297,22,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: married to 2/5-No.1, female, 55, in hospital in Kwai Chung, in Japan 1/28 and returned 2/1, symptom onset 2/1 (sore throat, fever, diarrhea), consulted private doctor on 2/2/2020, visited hospital on 2/4 with husband, admitted 2/5",Kwai Chung,Hong Kong,female,55.0,2020-02-01T00:00:00.000000,0,2020-02-02,,,,,,0,0,0,0,"sore throat, fever, diarrhea",Government HK,https://www.info.gov.hk/gia/general/202002/05/P2020020500690.htm +2298,23,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 63, symptom onset 1/26/2020 (cough, malaise), went to private doctor on 2/5/2020 and sought treatment at hospital where admitted the same day",Hong Kong,Hong Kong,female,63.0,2020-01-26T00:00:00.000000,0,2020-02-05,,,,,,0,0,0,0,"cough, malaise",Government HK,https://www.info.gov.hk/gia/general/202002/05/P2020020500690.htm +2299,24,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 65, symptom onset 1/28/2020 (fever, cough), went to private doctor on 1/29 and 2/1, sought treatment at hospital on 2/5",Hong Kong,Hong Kong,female,65.0,2020-01-28T00:00:00.000000,0,2020-01-29,,,,,,0,0,0,0,"fever, cough",Government HK,https://www.info.gov.hk/gia/general/202002/05/P2020020500690.htm +2300,25,2020-02-07T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 58, lives in Zhuhai, developed fever and cough 2/4, returned to HK 2/5, consulted doctor 2/6, went to hospital 2/6, traveled from Zhuhai to Macao back and forth during incubation period",Zhuhai,Hong Kong,male,58.0,2020-02-04T00:00:00.000000,0,2020-02-06,,,,2020-02-05,1,0,0,0,0,"fever, cough",Government HK,https://www.info.gov.hk/gia/general/202002/07/P2020020700760.htm?fontSize=1 +2301,26,2020-02-07T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 42, lives in Fo Tan, developed fever and cough 2/3, went to hospital on 2/3, went to international airport from hong kong on 1/22 for flight to Hebei, returned from Hebei to Guangzhou 1/26, visited Macao 1/26, returned to HK 2/2",Fo Tan,Hong Kong,male,42.0,2020-02-03T00:00:00.000000,0,2020-02-03,,,2020-01-22T00:00:00.000000,2020-02-02,1,0,0,0,0,"fever, cough",Government HK,https://www.info.gov.hk/gia/general/202002/07/P2020020700760.htm?fontSize=2 +2302,27,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: 2/9-No.1, male, 24, lives in Wan Chai, fever cough 1/30, doctor 1/30, 2/4, hospital 2/6, 2/8",Wan Chai,Hong Kong,male,24.0,2020-01-30T00:00:00.000000,0,2020-01-30,,,,,,0,0,0,0,"fever, cough",Government HK,https://www.info.gov.hk/gia/general/202002/09/P2020020900704.htm?fontSize=1 +2303,28,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 70, lives in Ngau Chi Wan, cough, chills, shortness of breath 1/30, diarrhea since 2/1, went to doctors 2/1-2/7, attended hospital on 2/8 for chills and shortness of breath",Ngau Chi Wan,Hong Kong,male,70.0,2020-01-30T00:00:00.000000,0,2020-02-01,,,,,,0,0,0,0,"cough, chills, shortness of breath, diarrhea",Government HK,https://www.info.gov.hk/gia/general/202002/09/P2020020900704.htm?fontSize=2 +2304,29,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 68, father of 2/9-No.1, had hot pot with him 1/26",Hong Kong,Hong Kong,male,68.0,,,,,,2020-01-26T00:00:00.000000,2020-01-26,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/09/P2020020900704.htm?fontSize=3 +2305,30,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 57, mother of 2/9-No.1, had hot pot with him 1/26",Hong Kong,Hong Kong,female,57.0,,,,,,2020-01-26T00:00:00.000000,2020-01-26,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/09/P2020020900704.htm?fontSize=4 +2306,31,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 91, maternal grandmother of 2/9-No.1, had hot pot with him 1/26",Hong Kong,Hong Kong,female,91.0,,,,,,2020-01-26T00:00:00.000000,2020-01-26,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/09/P2020020900704.htm?fontSize=5 +2307,32,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 51, aunt of 2/9-No.1, had hot pot with him 1/26",Hong Kong,Hong Kong,female,51.0,,,,,,2020-01-26T00:00:00.000000,2020-01-26,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/09/P2020020900704.htm?fontSize=6 +2308,33,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 25, cousin of 2/9-No.1, had hot pot with him 1/26",Hong Kong,Hong Kong,female,25.0,,,,,,2020-01-26T00:00:00.000000,2020-01-26,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/09/P2020020900704.htm?fontSize=7 +2309,34,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 22, cousin of 2/9-No.1, had hot pot with him 1/26",Hong Kong,Hong Kong,male,22.0,,,,,,2020-01-26T00:00:00.000000,2020-01-26,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/09/P2020020900704.htm?fontSize=8 +2310,35,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 50, aunt of 2/9-No.1, had hot pot with him 1/26",Hong Kong,Hong Kong,female,50.0,,,,,,2020-01-26T00:00:00.000000,2020-01-26,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/09/P2020020900704.htm?fontSize=9 +2311,36,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 23, cousin of 2/9-No.1, had hot pot with him 1/26",Hong Kong,Hong Kong,male,23.0,,,,,,2020-01-26T00:00:00.000000,2020-01-26,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/09/P2020020900704.htm?fontSize=10 +2312,37,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 55, aunt of 2/9-No.1, had hot pot with him on 1/26, lives in Sha Tin, symptom onset 1/30 (fever, cough, runny nose), went to doctor 1/30, admitted to hospital 2/9",Hong Kong,Hong Kong,female,55.0,2020-01-30T00:00:00.000000,0,2020-01-30,,,2020-01-26T00:00:00.000000,2020-01-26,,0,0,0,0,,China Daily HK,https://www.chinadailyhk.com/article/120696 +2313,38,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 52, uncle of 2/9-No.1, had hot pot with him on 1/26, wife and children tested positive on 2/9, lives in Wan Chai, symptom onset 2/8 (cough, sore throat, dry mouth), admitted to hospital on 2/9",Hong Kong,Hong Kong,male,52.0,2020-02-08T00:00:00.000000,0,2020-02-09,,,2020-01-26T00:00:00.000000,2020-01-26,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/11/P2020021100773.htm +2314,39,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: 2/10-No.1, male, 69, lives in Sai Wan Ho, symptom onset 1/30 (cough), went to doctor's on 2/7, went to hospital on 2/9 for shortness of breath and admitted for isolation",Hong Kong,Hong Kong,male,69.0,2020-01-30T00:00:00.000000,0,2020-02-07,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/11/P2020021100773.htm +2315,40,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 63, wife of 2/10-No.1, symptom onset 1/30, ,transferred to hospital 2/9, went to clinic on 1/31",Hong Kong,Hong Kong,female,63.0,2020-01-30T00:00:00.000000,0,2020-01-31,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/11/P2020021100773.htm +2316,41,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 86, mother-in-law of 2/10-No.1, symptom onset 1/28, transferred to hospital 2/9",Hong Kong,Hong Kong,female,86.0,2020-01-28T00:00:00.000000,0,2020-02-09,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/11/P2020021100773.htm +2317,42,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: 2/10-No.2, female, 62, lives in same building as case 12 in Tsing Yi, symptom onset 2/3 (cough), went to doctor on 2/3, 2/5, 2/7 went to hospital 2/9, visited Macao from 1/18-1/19",Hong Kong,Hong Kong,female,62.0,2020-02-03T00:00:00.000000,0,2020-02-03,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/11/P2020021100773.htm +2318,43,2020-02-11T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 59, lives in Siu Sai Wan, symptom onset 2/2 (fever, cough, shortness of breath), went to doctor on 2/6, went to hospital on 2/9 and 2/10",Hong Kong,Hong Kong,male,59.0,2020-02-02T00:00:00.000000,0,2020-02-06,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/11/P2020021100773.htm +2319,44,2020-02-11T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 60, colleague of case 30, lives in Ap Lei Chau, symptom onset 2/1 (cough), went to doctor on 2/2, ,went to hospital on 2/10",Hong Kong,Hong Kong,female,60.0,2020-02-01T00:00:00.000000,0,2020-02-02,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/11/P2020021100773.htm +2320,45,2020-02-11T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 71, symptom onset 2/5 (fever, cough, shortness of breath), went to hospital on 2/10",Hong Kong,Hong Kong,male,71.0,2020-02-05T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/11/P2020021100773.htm +2321,46,2020-02-11T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 37, son of 2/10-No.2, symptom onset 1/30 (fever, cough), went to doctor 1/30, 2/3, 2/5",Hong Kong,Hong Kong,male,37.0,2020-01-30T00:00:00.000000,0,2020-01-30,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/11/P2020021100773.htm +2322,47,2020-02-11T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 66, symptom onset 1/31 (sore throat, chills, cough, fever), went to doctors on 2/1 and 2/10, went to hospital 2/10",Hong Kong,Hong Kong,male,66.0,2020-01-31T00:00:00.000000,0,2020-02-01,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/11/P2020021100773.htm +2323,48,2020-02-11T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: 2/11-No.1, female, 37, daughter-in-law of 2/10-No.2, symptom onset 2/2 (fever, cough, sore throat), went to doctor 2/3",Hong Kong,Hong Kong,female,37.0,2020-02-02T00:00:00.000000,0,2020-02-03,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/11/P2020021100773.htm +2324,49,2020-02-11T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 75, father of 2/11-No.1, symptom onset 2/3 (fever, cough), went to doctors on 2/3, 2/7, 2/10",Hong Kong,Hong Kong,male,75.0,2020-02-03T00:00:00.000000,0,2020-02-03,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/11/P2020021100773.htm +2325,50,2020-02-12T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 51, symptom onset 2/3 (fever), hospitalized 2/10, coworker of case 37",Hong Kong,Hong Kong,male,51.0,2020-02-03T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,0,fever,CNN,https://www.cnn.com/asia/live-news/coronavirus-outbreak-02-12-20-intl-hnk/index.html +2326,51,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 43, relative of case 47, symptom onset 1/29 (cough, diarrhea, vomiting), went to doctors on 1/31-2/8, went to hospital 2/12, attended banquet on 1/30 with case 47",Hong Kong,Hong Kong,male,43.0,2020-01-29T00:00:00.000000,0,2020-01-31,,,2020-01-30T00:00:00.000000,2020-01-30,,0,0,0,0,"cough, diarrhea, vomiting",Government HK,https://www.info.gov.hk/gia/general/202002/13/P2020021300700.htm?fontSize=1 +2327,52,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 67, had dinner with case 46, 48, 49 on 1/26, sister in law of case 46, symptom onset 1/31 (cough, fever, chill), went to doctors on 1/31, 2/3, 2/7, went to hospital on 2/12",Hong Kong,Hong Kong,female,67.0,2020-01-31T00:00:00.000000,0,2020-01-31,,,2020-01-26T00:00:00.000000,2020-01-26,,0,0,0,0,"cough, fever, chills",Government HK,https://www.info.gov.hk/gia/general/202002/13/P2020021300700.htm?fontSize=1 +2328,53,2020-02-13T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 37, son of case 52, had dinner with patients of case 46, 48, 49 on 1/26, symptom onset 2/8 (fever), went to doctor on 2/9, hospital on 2/12",Hong Kong,Hong Kong,male,37.0,2020-02-08T00:00:00.000000,0,2020-02-09,,,2020-01-26T00:00:00.000000,2020-01-26,,0,0,0,0,fever,Government HK,https://www.info.gov.hk/gia/general/202002/13/P2020021300700.htm?fontSize=1 +2329,54,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 41, attended family dinner on 1/26 that five others confirmed were at",Hong Kong,Hong Kong,female,41.0,,,,,,2020-01-26T00:00:00.000000,2020-01-26,,0,0,0,0,,South China Morning Post,https://www.scmp.com/news/hong-kong/health-environment/article/3050681/coronavirus-hong-kong-confirms-three-news-cases +2330,55,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 70, returned from day trip to mainland China on 1/22, visited hospital on 2/12, shortness of breath for more than 10 days, symptom onset 2/2",Hong Kong,Hong Kong,male,70.0,2020-02-02T00:00:00.000000,0,2020-02-12,,,,,,0,0,1,0,cough,South China Morning Post,https://www.scmp.com/news/hong-kong/health-environment/article/3050681/coronavirus-hong-kong-confirms-three-news-cases +2331,56,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, husband had visited son in Guangdong from 1/23-1/28 but neither infected",Hong Kong,Hong Kong,female,,,,,,,,,,0,0,0,0,,South China Morning Post,https://www.scmp.com/news/hong-kong/health-environment/article/3050681/coronavirus-hong-kong-confirms-three-news-cases +2332,57,2020-02-16T00:00:00.000000,"new confirmed COVID-19 patient in Hong kong: male, 54, went to doctor on 2/7, hospital on 2/10",Hong Kong,Hong Kong,male,54.0,,,2020-02-07,,,,,,0,0,0,0,fever,rthk.hk,https://news.rthk.hk/rthk/en/component/k2/1508878-20200216.htm +2333,58,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 69, symptom onset 2/8 (cough, ,shortness of breath), went to doctor between 2/8-2/13, went to clinic on 2/15 and 2/16",Hong Kong,Hong Kong,male,69.0,2020-02-08T00:00:00.000000,0,2020-02-08,,,,,,0,0,0,0,"cough, shortness of breath",South China Morning Post,https://www.scmp.com/news/hong-kong/health-environment/article/3051077/coronavirus-domestic-helper-tests-positive-taking +2334,59,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 45, colleague of case 57, ,symptom onset 2/12 (fever, sore throat), went to doctor 2/13, went to hospital 2/16, went to Vietnam from 1/30-2/1",Hong Kong,Hong Kong,male,45.0,2020-02-12T00:00:00.000000,0,2020-02-13,,,,,,0,0,0,0,"fever, sore throat",South China Morning Post,https://www.scmp.com/news/hong-kong/health-environment/article/3051077/coronavirus-domestic-helper-tests-positive-taking +2335,60,2020-02-17T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 46, wife of case 57, symptom onset 2/8 (runny nose, cough), went to doctor 2/10, hospital 2/16",Hong Kong,Hong Kong,female,46.0,2020-02-08T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,0,"runny nose, cough",South China Morning Post,https://www.scmp.com/news/hong-kong/health-environment/article/3051077/coronavirus-domestic-helper-tests-positive-taking +2336,61,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 32, worked for case 52, symptom onset 2/2 (fever, cough)",Hong Kong,Hong Kong,female,32.0,2020-02-02T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, cough",South China Morning Post,https://www.scmp.com/news/hong-kong/health-environment/article/3051077/coronavirus-domestic-helper-tests-positive-taking +2337,62,2020-02-18T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 58, went to Zhongshan and Macau",Hong Kong,Hong Kong,male,58.0,,,,,,,,,0,0,0,0,,South China Morning Post,https://www.scmp.com/news/hong-kong/health-environment/article/3051077/coronavirus-domestic-helper-tests-positive-taking +2338,63,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 83, mother-in-law of engineer who contracted the disease",Hong Kong,Hong Kong,female,83.0,,,,,,,,,0,0,0,0,,South China Morning Post,https://www.scmp.com/news/hong-kong/health-environment/article/3051312/second-hongkonger-dies-after-becoming-infected +2339,63,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 83, mother-in-law of case 57, mother of case 60, symptom onset 2/14 (runny nose), suffered from fractures caused by a fall on 2/15 and admitted to hospital, surgery on 2/16",Hong Kong,Hong Kong,female,83.0,2020-02-14T00:00:00.000000,0,,,,,,,0,0,0,0,,South China Morning Post,https://www.scmp.com/news/hong-kong/health-environment/article/3051312/second-hongkonger-dies-after-becoming-infected +2340,64,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 68, symptom onset 2/12 (cough), went to doctor on 2/18, admitted to hospital",Hong Kong,Hong Kong,male,68.0,2020-02-12T00:00:00.000000,0,2020-02-18,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/20/P2020022000773.htm +2341,65,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 70, symptom onset 2/12 (cough), went to doctor on 2/18, admitted to hospital, married to case 64",Hong Kong,Hong Kong,female,70.0,2020-02-12T00:00:00.000000,0,2020-02-18,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/20/P2020022000773.htm +2342,66,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 75, married to case 63, symptom onset 1/25 (cough, shortness of breath), went to two doctors from 1/31-2/7, transferred to hospital on 2/18, made several day trips to Guangdong from 1/12-1/25",Hong Kong,Hong Kong,male,75.0,2020-01-25T00:00:00.000000,0,2020-01-31,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/20/P2020022000773.htm +2343,67,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 38, symptom onset 2/10 (fever, cough), went to doctor on 2/10, again on 2/14 and went to hospital and admitted on 2/19",Hong Kong,Hong Kong,female,38.0,2020-02-10T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/20/P2020022000773.htm +2344,68,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 58, symptom onset 2/8 (fever, cough), went to private doctor 2/10 and 2/17, went to hospital on 2/18 and admitted 2/19",Hong Kong,Hong Kong,male,58.0,2020-02-08T00:00:00.000000,0,2020-02-10,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/20/P2020022000773.htm +2345,69,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 48, symptom onset 2/18 (fever, cough), went to health center 2/19",Hong Kong,Hong Kong,male,48.0,2020-02-18T00:00:00.000000,0,2020-02-19,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/20/P2020022000773.htm +2346,70,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 96, symptom onset 2/13 (fever, cough), went to hospital 2/22 and admitted",Hong Kong,Hong Kong,female,96.0,2020-02-13T00:00:00.000000,0,2020-02-22,,,,,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2347,71,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 68, passenger of Diamond Princess cruise, stayed on cruise from 1/25-2/20, returned to Hong Kong by chartered flight on 2/20, symptom onset 2/20 (cough, fever), transferred to hospital 2/22 and admitted",Hong Kong,Hong Kong,male,68.0,2020-02-20T00:00:00.000000,0,2020-02-22,,,2020-01-25T00:00:00.000000,2020-02-20,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2348,72,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 62, symptom onset 2/10 (fever, cough), went to two private doctors 2/13-2/18, went to hospital 2/22 and admitted for treatment",Hong Kong,Hong Kong,male,62.0,2020-02-10T00:00:00.000000,0,2020-02-22,,,,,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2349,73,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 80, symptom onset 2/8 (sore throat, cough), went to hospital 2/22 and admitted",Hong Kong,Hong Kong,female,80.0,2020-02-08T00:00:00.000000,0,2020-02-22,,,,,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2350,74,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 76, symptom onset 2/13 (muscle pain, fever), went to two private doctors and sought medical attention at hospital on 2/22, admitted for treatment",Hong Kong,Hong Kong,female,76.0,2020-02-13T00:00:00.000000,0,2020-02-22,,,,,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2351,75,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 35, symptom onset 2/19 (fever, cough), went to hospital 2/21, went to Shenzhen between 2/3-2/7",Hong Kong,Hong Kong,male,35.0,2020-02-19T00:00:00.000000,0,2020-02-21,,,,,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2352,76,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 57, symptom onset 2/8 (sore throat), fever on 2/10, went to hospital between 2/12-2/16 and admitted on 2/16 and 2/17, went to hospital again on 2/23 and admitted, went to Osaka in Japan 1/26-1/30, returned 1/31",Hong Kong,Hong Kong,female,57.0,2020-02-08T00:00:00.000000,0,2020-02-12,,,,,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2353,77,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 68, symptom onset 2/19 (cough), went to doctor 2/23",Hong Kong,Hong Kong,female,68.0,2020-02-19T00:00:00.000000,0,2020-02-23,,,,,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2354,78,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 59, Diamond Princess cruise from 1/25-2/21, returned by flight on 2/22, symptom onset 2/24 (fever, headache)",Hong Kong,Hong Kong,female,59.0,2020-02-24T00:00:00.000000,0,,,,2020-01-25T00:00:00.000000,2020-02-21,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2355,79,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 58, Diamond Princess cruise from 1/25-2/21, returned by flight on 2/22, symptom onset 2/4 (throat discomfort)",Hong Kong,Hong Kong,female,58.0,2020-02-04T00:00:00.000000,0,,,,2020-01-25T00:00:00.000000,2020-02-21,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2356,80,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 57, Diamond Princess cruise from 1/25-2/21, returned by flight on 2/22",Hong Kong,Hong Kong,male,57.0,,,,,,2020-01-25T00:00:00.000000,2020-02-21,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2357,81,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 57, Diamond Princess cruise from 1/25-2/21, returned by flight on 2/22",Hong Kong,Hong Kong,female,57.0,,,,,,2020-01-25T00:00:00.000000,2020-02-21,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2358,82,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 33, son of case 72, symptom onset 2/20 (fever), went to doctor on 2/22, cough on 2/24, transferred to hospital and admitted on 2/24",Hong Kong,Hong Kong,male,33.0,2020-02-20T00:00:00.000000,0,,,,,,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2359,83,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 55, sister of case 76, symptom onset 2/17 (cough), went to hospital and admitted 2/24",Hong Kong,Hong Kong,female,55.0,2020-02-17T00:00:00.000000,,,,,,,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2360,84,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 24, son of case 83, asymptomatic",Hong Kong,Hong Kong,male,24.0,,,,,,,,,0,0,0,0,,Government HK,https://www.dh.gov.hk/textonly/eindex.html +2361,85,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 60, symptom onset 2/12 (cough), went to doctor several times, admitted to hospital on 2/24",Hong Kong,Hong Kong,female,60.0,2020-02-12T00:00:00.000000,0,2020-02-24,,,,,,0,0,0,0,cough,Government HK,https://www.info.gov.hk/gia/general/202002/25/P2020022500772.htm +2362,86,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 49, cough and sputum and sore throat 2/18, went to hospital 2/22, admitted 2/23",Hong Kong,Hong Kong,female,49.0,2020-02-18T00:00:00.000000,0,2020-02-22,,,,,,0,0,0,0,"cough, sputum, sore throat",Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2363,87,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 21, passengers of DP cruise 1/25-2/22, returned to HK by flight 2/23, went to hospital 2/25, fever 2/12",Hong Kong,Hong Kong,female,21.0,2020-02-12T00:00:00.000000,0,2020-02-25,,,2020-01-25T00:00:00.000000,2020-02-22,,0,0,0,0,fever,Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2364,88,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 16, brother of case 87, passengers of DP cruise 1/25-2/22, returned to HK by flight 2/23, went to hospital 2/25, runny nose since 2/17",Hong Kong,Hong Kong,male,16.0,2020-02-17T00:00:00.000000,0,2020-02-25,,,2020-01-25T00:00:00.000000,2020-02-22,,0,0,0,0,runny nose,Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2365,89,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 80, husband of case 74, fever and cough 2/25 and admitted to hospital 2/25",Hong Kong,Hong Kong,male,80.0,2020-02-25T00:00:00.000000,0,2020-02-25,,,,,,0,0,0,0,"fever, cough",Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2366,90,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 29, domestic helper of case 85, fever 2/16, consulted same private doctor 2/20 and 2/24, admitted to hospital 2/25",Hong Kong,Hong Kong,female,29.0,2020-02-16T00:00:00.000000,0,2020-02-20,,,,,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2367,91,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 26, son of case 76, fever and cough 2/20, went to hospital 2/21, admitted 2/24",Hong Kong,Hong Kong,male,26.0,2020-02-20T00:00:00.000000,0,2020-02-21,,,,,,0,0,0,0,"fever, cough",Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2368,92,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 70, cough with sputum 2/13, went to doctor 2/13, 2/23, admitted to hospital 2/26",Hong Kong,Hong Kong,female,70.0,2020-02-13T00:00:00.000000,0,2020-02-13,,,,,,0,0,0,0,cough with sputum,Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2369,93,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 89, cough since 2/25, went to clinic 2/26",Hong Kong,Hong Kong,female,89.0,2020-02-25T00:00:00.000000,0,2020-02-26,,,,,,0,0,0,0,cough,Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2370,94,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 61, passenger of Diamond Princess cruise, stayed on cruise 1/25-2/19, returned by flight on 2/20",Hong Kong,Hong Kong,female,61.0,,,,,,2020-01-25T00:00:00.000000,2020-02-19,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2371,95,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 46, daughter in law of case 92, quarantined since 2/27 as close contact, sore throat 2/29",Hong Kong,Hong Kong,female,46.0,2020-02-29T00:00:00.000000,0,,,,,,,0,0,0,0,sore throat,Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2372,96,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 68, on Diamond Princess cruise from 1/25-2/21, returned by flight on 2/22, fever from 2/16-2/17, cough since 2/27",Hong Kong,Hong Kong,female,68.0,2020-02-16T00:00:00.000000,0,,,,2020-01-25T00:00:00.000000,2020-02-21,,0,0,0,0,"fever, cough",Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2373,97,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 56, on Diamond Princess cruise from 1/25-2/21, returned by flight on 2/22, asymptomatic",Hong Kong,Hong Kong,male,56.0,,,,,,2020-01-25T00:00:00.000000,2020-02-21,,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2374,98,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 71, cough and runny nose since 2/12, went to doctor on 2/14, 2/25, 2/26, went to hospital 2/29",Hong Kong,Hong Kong,female,71.0,2020-02-12T00:00:00.000000,0,2020-02-14,,,,,,0,0,0,0,"cough, runny nose",Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2375,99,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: female, 76, fever, shortness of breath, cough, abdominal pain since 2/28",Hong Kong,Hong Kong,female,76.0,2020-02-28T00:00:00.000000,0,,,,,,,0,0,0,0,"fever, shortness of breath, cough, abdominal pain",Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2376,100,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 79, fever and cough since 2/28, went to doctor 2/29",Hong Kong,Hong Kong,male,79.0,2020-02-28T00:00:00.000000,0,2020-02-29,,,,,,0,0,0,0,"fever, cough",Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2377,101,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Hong Kong: male, 63, elder brother of case 85, attended event with case 85 on 2/22",Hong Kong,Hong Kong,male,63.0,,,,,,2020-02-22T00:00:00.000000,2020-02-22,0,0,0,0,0,,Government HK,https://www.info.gov.hk/gia/general/202002/26/P2020022600842.htm +2378,1,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in Rome, Italy: male, Chinese tourist, arrived in Milan over a week ago",Rome,Italy,male,,,,,,,,,,1,0,0,1582329600,,The Daily Beast,https://www.thedailybeast.com/italy-confirms-two-cases-of-coronavirus +2379,2,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in Rome, Italy: female, married to 1/31-No.1, Chinese tourist, arrived in Milan over a week ago",Rome,Italy,female,,,,,,,,,,1,0,0,1582675200,,The Daily Beast,https://www.thedailybeast.com/italy-confirms-two-cases-of-coronavirus +2380,3,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in Rome, Italy: male, 30s, Italian national, evacuated from Wuhan 2/3",Rome,Italy,male,35.0,,,,,,,2020-02-03,,1,0,0,1582329600,,Reuters,https://www.reuters.com/article/us-china-health-italy/third-case-of-coronavirus-confirmed-in-italy-health-ministry-idUSKBN2002X8 +2381,4,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: male, 38, symptom onset 2/14, fever 2/16 and went to hospital, again on 2/18, on 2/19 wife remembered he encountered an Italian friend (who tested negative) who returned from China on 1/21",Lombardy,Italy,male,38.0,2020-02-14T00:00:00.000000,0,2020-02-16,,,,,,0,0,0,0,fever,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2382,5,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: female, pregnant wife of case 4",Lombardy,Italy,female,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2383,6,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: friend of case 4",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2384,7,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: contact of case 6, male, 75",Lombardy,Italy,male,75.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2385,8,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: contact of case 6",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2386,9,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: contact of case 6",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2387,10,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: doctor from Codogno hospital",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2388,11,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: doctor from Codogno hospital",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2389,12,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: doctor from Codogno hospital",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2390,13,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: doctor from Codogno hospital",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2391,14,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: doctor from Codogno hospital",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2392,15,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: patient from Codogno hospital",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2393,16,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: patient from Codogno hospital",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2394,17,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: patient from Codogno hospital",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2395,18,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2396,19,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy: male, 78, hospitalized for 15 days",Veneto,Italy,male,78.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2397,20,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy: male, 67",Veneto,Italy,male,67.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2398,21,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Milan, Italy: 78, male, admitted to hospital for a week",Milan,Italy,male,78.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2399,22,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Milan, Italy: 71, male",Milan,Italy,male,71.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2400,23,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: female, 77, visited same emergency room as case 4, died 2/22, mother of a friend of case 4",Lombardy,Italy,female,77.0,,,,,,,,,0,0,1582329600,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2401,24,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: male, 65, doctor in Pavia",Lombardy,Italy,male,65.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2402,25,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: female, 57, wife of case 24, pediatrician in Codogno",Lombardy,Italy,female,57.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2403,26,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: female, 38",Lombardy,Italy,female,38.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2404,27,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: female, 32",Lombardy,Italy,female,32.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2405,28,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: female, 66",Lombardy,Italy,female,66.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2406,29,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: 29",Lombardy,Italy,,29.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2407,30,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: 27, married to case 29",Lombardy,Italy,,27.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2408,31,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2409,32,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2410,33,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2411,34,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2412,35,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2413,36,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2414,37,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2415,38,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2416,39,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2417,40,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2418,41,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2419,42,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2420,43,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2421,44,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2422,45,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2423,46,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2424,47,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2425,48,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2426,49,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2427,50,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2428,51,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2429,52,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2430,53,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2431,54,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2432,55,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2433,56,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2434,57,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2435,58,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2436,59,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2437,60,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2438,61,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy:",Lombardy,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2439,62,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Emilia-Romagna, Italy:",Emilia-Romagna,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2440,63,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Emilia-Romagna, Italy:",Emilia-Romagna,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2441,64,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Piedmont, Italy: 40, male, fever",Piedmont,Italy,male,40.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2442,65,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy: male, 67, hospitalized in Padua",Veneto,Italy,male,67.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2443,66,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2444,67,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2445,68,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2446,69,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2447,70,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2448,71,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2449,72,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2450,73,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2451,74,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2452,75,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2453,76,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2454,77,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2455,78,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2456,79,2020-02-22T00:00:00.000000,"new confirmed COVID-19 patient in Veneto, Italy:",Veneto,Italy,,,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2457,80,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: female, 68, died 2/23, very comprised clinical picture, admitted with cancer and had heart attack shortly before death",Lombardy,Italy,female,68.0,,,,,,,,,0,0,1582416000,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2458,81,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: 71",Lombardy,Italy,,71.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2459,82,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: 64",Lombardy,Italy,,64.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2460,83,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: female, 44, doctor in Codogno",Lombardy,Italy,female,44.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2461,84,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: male, 58",Lombardy,Italy,male,58.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2462,85,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: male, 78",Lombardy,Italy,male,78.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2463,86,2020-02-23T00:00:00.000000,"new confirmed COVID-19 patient in Lombardy, Italy: male, 79",Lombardy,Italy,male,79.0,,,,,,,,,0,0,0,0,,Corriere,https://www.corriere.it/salute/malattie_infettive/20_marzo_01/coronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91_preview.shtml?reason=unauthenticated&cat=1&cid=JDS9NcvU&pids=FR&credits=1&origin=https%3A%2F%2Fwww.corriere.it%2Fsalute%2Fmalattie_infettive%2F20_marzo_01%2Fcoronavirus-italia-positivi-sono-1577-34-morti-83-guariti-dati-1-marzo-215bf998-5be0-11ea-ae74-e93752023e91.shtml +2464,1,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in Tyumen, Russia: Chinese citizens",Tyumen,Russia,female,,,,,,,,,,1,0,0,1581379200,,South China Morning Post,https://www.scmp.com/news/world/russia-central-asia/article/3048483/russia-reports-first-two-coronavirus-cases-evacuate +2465,2,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in Zabaikalsky, Russia: Chinese citizens",Zabaikalsky,Russia,male,,,,,,,,,,1,0,0,1581465600,,South China Morning Post,https://www.scmp.com/news/world/russia-central-asia/article/3048483/russia-reports-first-two-coronavirus-cases-evacuate +2466,1,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in York, UK: 1/31-No.1, Chinese national, taken to infirmary",York,UK,,,,,,,,,,,1,0,0,0,,Gov.UK,https://www.gov.uk/government/news/cmo-confirms-cases-of-coronavirus-in-england +2467,2,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in York, UK: Chinese national, taken to infirmary, related to 1/31-No.1",York,UK,,,,,,,,,,,1,0,0,0,,Gov.UK,https://www.gov.uk/government/news/cmo-confirms-cases-of-coronavirus-in-england +2468,3,2020-02-06T00:00:00.000000,"new confirmed COVID-19 patient in London, UK: 2/6-No.1, male, 53, caught in Singapore from 1/20-1/22, stayed at French resort between 1/24-1/28",London,UK,male,53.0,,,,,,2020-01-20T00:00:00.000000,2020-01-22,,0,0,0,1581724800,,BBC,https://www.bbc.com/news/uk-51481469 +2469,4,2020-02-09T00:00:00.000000,"new confirmed COVID-19 patient in London, UK: infected by coming into contact with known carrier in France",London,UK,,,,,,,,,,,0,0,0,1581724800,,BBC,https://www.bbc.com/news/uk-51481470 +2470,5,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in London, UK: male, doctor part of group skiing with 2/6-No.1 from 1/24-1/28",London,UK,male,,,,,,,2020-01-24T00:00:00.000000,2020-01-28,,0,0,0,1581724800,,BBC,https://www.bbc.com/news/uk-51481471 +2471,6,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in London, UK: male, part of group skiing with 2/6-No.1 from 1/24-1/28",London,UK,male,,,,,,,2020-01-24T00:00:00.000000,2020-01-28,,0,0,0,1581724800,,BBC,https://www.bbc.com/news/uk-51481472 +2472,7,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in London, UK: male, part of group skiing with 2/6-No.1 from 1/24-1/28",London,UK,male,,,,,,,2020-01-24T00:00:00.000000,2020-01-28,,0,0,0,1581724800,,BBC,https://www.bbc.com/news/uk-51481473 +2473,8,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in London, UK: female, part of group skiing with 2/6-No.1 from 1/24-1/28",London,UK,female,,,,,,,2020-01-24T00:00:00.000000,2020-01-28,,0,0,0,1581724800,,BBC,https://www.bbc.com/news/uk-51481474 +2474,9,2020-02-12T00:00:00.000000,"new confirmed COVID-19 patient in London, UK: female, flew from China a few days ago,",London,UK,female,,,,,,,2020-01-24T00:00:00.000000,2020-01-28,,0,0,0,0,,BBC,https://www.bbc.com/news/uk-51481475 +2475,10,2020-02-23T00:00:00.000000,new confirmed COVID-19 patient in UK: passenger on Diamond Princess cruise ship,UK,UK,,,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.gov.uk/guidance/wuhan-novel-coronavirus-information-for-the-public#history +2476,11,2020-02-23T00:00:00.000000,new confirmed COVID-19 patient in UK: passenger on Diamond Princess cruise ship,UK,UK,,,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.gov.uk/guidance/wuhan-novel-coronavirus-information-for-the-public#history +2477,12,2020-02-23T00:00:00.000000,new confirmed COVID-19 patient in UK: passenger on Diamond Princess cruise ship,UK,UK,,,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.gov.uk/guidance/wuhan-novel-coronavirus-information-for-the-public#history +2478,13,2020-02-23T00:00:00.000000,new confirmed COVID-19 patient in UK: passenger on Diamond Princess cruise ship,UK,UK,,,,,,,,,,,0,0,0,0,,Ministry of Health,https://www.gov.uk/guidance/wuhan-novel-coronavirus-information-for-the-public#history +2479,14,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in UK: contracted virus in Tenerife,London,UK,,,,,,,,,,,0,0,0,0,,The Mirror,https://www.mirror.co.uk/news/uk-news/breaking-two-more-brits-catch-21587176 +2480,15,2020-02-27T00:00:00.000000,new confirmed COVID-19 patient in UK: contracted virus in Italy,London,UK,,,,,,,,,,,0,0,0,0,,The Mirror,https://www.mirror.co.uk/news/uk-news/breaking-two-more-brits-catch-21587177 +2481,16,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in UK: Northern Ireland, recently traveled to northern Italy and Dublin",Nortern Ireland,UK,,,,,,,,,,,0,0,0,0,,The Mirror,https://www.mirror.co.uk/news/uk-news/breaking-two-more-brits-catch-21587178 +2482,17,2020-02-28T00:00:00.000000,new confirmed COVID-19 patient in UK: contracted while in Iran,UK,UK,,,,,,,,,,,0,0,0,0,,The Guardian,https://www.theguardian.com/world/live/2020/feb/28/coronavirus-live-updates-latest-news-china-wuhan-stock-markets-update +2483,18,2020-02-28T00:00:00.000000,new confirmed COVID-19 patient in UK: contracted while in Iran,UK,UK,,,,,,,,,,,0,0,0,0,,The Guardian,https://www.theguardian.com/world/live/2020/feb/28/coronavirus-live-updates-latest-news-china-wuhan-stock-markets-update +2484,19,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in UK: contracted in Italy, lives in Wales, female",Wales,UK,female,,,,,,,,,,0,0,0,0,,The Guardian,https://www.theguardian.com/world/live/2020/feb/28/coronavirus-live-updates-latest-news-china-wuhan-stock-markets-update +2485,20,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in UK: male, first transmission in UK",UK,UK,male,,,,,,,,,,0,0,0,0,,The Guardian,https://www.theguardian.com/world/live/2020/feb/28/coronavirus-live-updates-latest-news-china-wuhan-stock-markets-update +2517,1,2020-01-30T00:00:00.000000,"new confirmed COVID-19 patient in Kerala, India: female, student at Wuhan University, isolated in hospital",Kerala,India,female,,,,,,,,,,1,0,0,0,,The Economic Times,https://economictimes.indiatimes.com/news/politics-and-nation/third-coronavirus-case-reported-from-india/articleshow/73895001.cms +2518,2,2020-02-02T00:00:00.000000,"new confirmed COVID-19 patient in Alappuzha, India: student from Wuhan, returned to Kerala on 1/24/2020, now in hospital",Alappuzha,India,,,,,,,,,2020-01-24,,1,0,0,0,,The Economic Times,https://economictimes.indiatimes.com/news/politics-and-nation/third-coronavirus-case-reported-from-india/articleshow/73895001.cms +2519,3,2020-02-03T00:00:00.000000,"new confirmed COVID-19 patient in Kerala, India: student who returned from Wuhan last month, in hospital",Kerala,India,,,,,,,,,,,1,0,0,0,,The Economic Times,https://economictimes.indiatimes.com/news/politics-and-nation/third-coronavirus-case-reported-from-india/articleshow/73895001.cms +2520,1,2020-02-02T00:00:00.000000,"new confirmed COVID-19 patient in Philippines: male, 44, from Wuhan, admitted to hospital on 1/25/2020 in Manila with fever, cough, and sore throat, died 2/1/2020, arrived 1/21/2020",Manila,Phillipines,male,44.0,2020-01-25T00:00:00.000000,1,2020-01-25,,,,2020-01-21,,0,1,1580515200,0,"fever, cough, sore throat",Department of Health,https://www.doh.gov.ph/press-release/DOH-reveals-more-negative-2019-COVID-19-cases-confirms-first-COVID-19-ARD-death-in-PH +2521,2,2020-02-02T00:00:00.000000,"new confirmed COVID-19 patient in Philippines: female, 38, from Wuhan, arrived 1/21/2020, admitted to hospital in Manila, arrived 1/21/2020",Manila,Phillipines,female,38.0,,,,,,,2020-01-21,,0,1,0,1581120000,,Department of Health,https://www.doh.gov.ph/press-release/DOH-reveals-more-negative-2019-COVID-19-cases-confirms-first-COVID-19-ARD-death-in-PH +2522,3,2020-02-05T00:00:00.000000,"new confirmed COVID-19 patient in Philippines: female, 60, Chinese woman, arrived from Wuhan via HK on 1/20,",Phillipines,Phillipines,female,60.0,,,,,,,2020-01-20,,1,0,0,0,,Department of Health,https://www.doh.gov.ph/press-release/DOH-reveals-more-negative-2019-COVID-19-cases-confirms-first-COVID-19-ARD-death-in-PH +2523,1,2020-01-29T00:00:00.000000,"new confirmed COVID-19 patient in Finland: female, 32, Chinese traveler from Wuhan, in isolation at Lapland's hospital, arrived in Finland 1/23/2020 and left Wuhan 1/22/2020, symptom onset 1/26/2020 (fever), hospitalized 1/28/2020",Lapland,Finland,female,32.0,2020-01-26T00:00:00.000000,0,2020-01-28,,,,2020-01-22,,0,1,0,0,fever,HBL,https://www.hbl.fi/artikel/ett-fall-av-coronavirus-bekraftat-i-finland/ +2524,1,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in Spain: male, German tourist diagnosed on La Gomera in Canary islands, came into contact with a man diagnosed in Germany, recovering in hospital,",Canary Islands,Spain,male,,,,,,,,,,0,0,0,1581638400,,Channel News Asia,https://www.channelnewsasia.com/news/world/wuhan-virus-coronavirus-spain-first-case-12377104 +2525,2,2020-02-10T00:00:00.000000,"new confirmed COVID-19 patient in Spain: male, British, in Mallorca, under observation in hospital on 2/7 after came into contact with Brit holidaying in France who was then diagnosed",Mallorca,Spain,male,,,,2020-02-07,,,,,,0,0,0,1581638400,,The Local,https://www.thelocal.es/20200210/british-father-in-mallorca-becomes-second-confirmed-case-of-coronavirus-in-spain +2526,3,2020-02-24T00:00:00.000000,"new confirmed COVID-19 patient in Spain: male, Italian, on Canary Island of Tenerife, 69, from Lombardy",Tenerife,Spain,male,69.0,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.es/20200226/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2527,4,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Spain: female, on Canary Island of Tenerife",Tenerife,Spain,female,,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.es/20200226/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2528,5,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Spain: female, 36, Barcelona, visited Bergamo and Milan between 2/12-2/22, contacted authorities 2/24 after experiencing flu-like symptoms",Barcelona,Spain,female,36.0,,,2020-02-24,,,2020-02-12T00:00:00.000000,2020-02-22,,0,0,0,0,,The Local,https://www.thelocal.es/20200226/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2529,6,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Madrid, 24, also visited Italy",Madrid,Spain,,24.0,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.es/20200226/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2530,7,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Villarrealin, Castellon, recent trip to Milan, male, 31,",Castellon,Spain,male,31.0,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.es/20200226/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2531,8,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Madrid, returned from trip to northern Italy",Madrid,Spain,,,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.es/20200226/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2532,9,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Tenerife, accompanied case 3 and 4",Tenerife,Spain,,,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.es/20200226/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2533,10,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Tenerife, accompanied case 3 and 4",Tenerife,Spain,,,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.es/20200226/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2534,11,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Barcelona, male, 22, recently spent time in northern Italy, went to hospital 2/25 with sore throat and fever",Barcelona,Spain,male,22.0,,,2020-02-25,,,,,,0,0,0,0,"sore throat, fever",The Local,https://www.thelocal.es/20200226/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2535,12,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Spain: male, Seville (Andalusia), 62",Andalusia,Spain,male,62.0,,,2020-02-19,,,,,,0,0,0,1583107200,,The Local,https://www.thelocal.es/20200226/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2536,13,2020-02-26T00:00:00.000000,"new confirmed COVID-19 patient in Spain: female, Tenerife, traveled to Italy between 2/4-2/8",Tenerife,Spain,female,,,,,,,2020-02-04T00:00:00.000000,2020-02-08,,0,0,0,0,,Levante,https://www.levante-emv.com/comunitat-valenciana/2020/02/27/coronavirus-valencia-nuevos-casos-infectados/1983062.html +2537,14,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Valencia, male, 44, went to Pisa by plane and Milan by car to watch game on 2/19, sports journalist,",Valencia,Spain,male,44.0,,,,,,2020-02-19T00:00:00.000000,2020-02-19,,0,0,0,0,,Levante,https://www.levante-emv.com/comunitat-valenciana/2020/02/27/coronavirus-valencia-nuevos-casos-infectados/1983062.html +2538,15,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Madrid, 77",Madrid,Spain,,77.0,,,,,,,,,0,0,0,0,,Levante,https://www.levante-emv.com/comunitat-valenciana/2020/02/27/coronavirus-valencia-nuevos-casos-infectados/1983062.html +2539,16,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Madrid, 50",Madrid,Spain,,50.0,,,,,,,,,0,0,0,0,,Levante,https://www.levante-emv.com/comunitat-valenciana/2020/02/27/coronavirus-valencia-nuevos-casos-infectados/1983062.html +2540,17,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Barcelona, female, 22, traveled to Italy from 2/19-2/25",Barcelona,Spain,female,22.0,,,,,,2020-02-19T00:00:00.000000,2020-02-25,,0,0,0,0,,Levante,https://www.levante-emv.com/comunitat-valenciana/2020/02/27/coronavirus-valencia-nuevos-casos-infectados/1983062.html +2541,18,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Castile and Leon, male, 30, Iranian, working in Spain",Castile and Leon,Spain,male,30.0,,,,,,,,,0,0,0,0,,Levante,https://www.levante-emv.com/comunitat-valenciana/2020/02/27/coronavirus-valencia-nuevos-casos-infectados/1983062.html +2542,19,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Castile and Leon, male, 18, student from Italy studying in Spain, ,was in Milan 2/21-2/23, symptom onset 2/24, went to clinic 2/25",Castile and Leon,Spain,male,18.0,2020-02-24T00:00:00.000000,0,2020-02-25,,,2020-02-21T00:00:00.000000,2020-02-23,1,0,0,0,0,,Levante,https://www.levante-emv.com/comunitat-valenciana/2020/02/27/coronavirus-valencia-nuevos-casos-infectados/1983062.html +2543,20,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Valencia, male, contact of case 14",Valencia,Spain,male,,,,,,,,,,0,0,0,0,,Levante,https://www.levante-emv.com/comunitat-valenciana/2020/02/27/coronavirus-valencia-nuevos-casos-infectados/1983062.html +2544,21,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Valencia, male, contact of case 14",Valencia,Spain,male,,,,,,,,,,0,0,0,0,,Levante,https://www.levante-emv.com/comunitat-valenciana/2020/02/27/coronavirus-valencia-nuevos-casos-infectados/1983062.html +2545,22,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Valencia, male, sportswriter who watched game in Milan on 2/19",Valencia,Spain,male,,,,,,,2020-02-19T00:00:00.000000,2020-02-19,,0,0,0,0,,Levante,https://www.levante-emv.com/comunitat-valenciana/2020/02/27/coronavirus-valencia-nuevos-casos-infectados/1983062.html +2546,23,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Valencia, male, sportswriter who watched game in Milan on 2/19",Valencia,Spain,male,,,,,,,2020-02-19T00:00:00.000000,2020-02-19,,0,0,0,0,,Levante,https://www.levante-emv.com/comunitat-valenciana/2020/02/27/coronavirus-valencia-nuevos-casos-infectados/1983062.html +2547,24,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Valencia, female, travelled to Milan",Valencia,Spain,female,,,,,,,,,,0,0,0,0,,Levante,https://www.levante-emv.com/comunitat-valenciana/2020/02/27/coronavirus-valencia-nuevos-casos-infectados/1983062.html +2548,25,2020-02-27T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Valencia, male, student from Italy, currently studying in Valencia",Valencia,Spain,male,,,,,,,,,,0,0,0,0,,Levante,https://www.levante-emv.com/comunitat-valenciana/2020/02/27/coronavirus-valencia-nuevos-casos-infectados/1983062.html +2549,26,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 28, travelled to Milan",Andalusia,Spain,male,28.0,,,,,,,,,0,0,0,1582934400,,The Local,https://www.thelocal.es/20200228/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2550,27,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 42, contact of case 12",Andalusia,Spain,male,42.0,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.es/20200228/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2551,28,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 53, contact of case 12",Andalusia,Spain,male,53.0,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.es/20200228/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2552,29,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, female, 81, family member of previous infected case",Andalusia,Spain,female,81.0,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.es/20200228/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2553,30,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 55, recently traveled to Emilia-Romagna",Andalusia,Spain,male,55.0,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.es/20200228/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2554,31,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, female, 25, nurse who treated a coronavirus positive patient",Andalusia,Spain,female,25.0,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.es/20200228/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2555,32,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, Seville, 58, male, doctor who had contact with case 12",Andalusia,Spain,male,58.0,,,,,,,,,0,0,0,0,,The Local,https://www.thelocal.es/20200228/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2556,33,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, female, 55, recently traveled to Emilia-Romagna",Andalusia,Spain,female,55.0,,,,,,,,1,0,0,0,0,,The Local,https://www.thelocal.es/20200228/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2557,34,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Madrid, admitted to hospital 2/28, 66",Madrid,Spain,,66.0,,,2020-02-28,,,,,0,0,0,0,0,,The Local,https://www.thelocal.es/20200228/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2558,35,2020-02-28T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Zaragoza, 27 female, had traveled to Milan",Zaragoza,Spain,female,27.0,,,,,,,,1,0,0,0,0,,The Local,https://www.thelocal.es/20200228/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2559,36,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Tenerife, part of same group as four original cases, in isolation since 2/24, will be taken to the hospital",Tenerife,Spain,,,,,,,,,,0,0,0,0,0,,The Local,https://www.thelocal.es/20200228/covid-19-what-we-know-so-far-about-the-coronavirus-in-spain +2560,37,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, related to case 33, male, 59, recently traveled to Emilia-Romagna",Andalusia,Spain,male,59.0,,,,,,,,1,0,0,0,0,,Sevilla ABC,https://sevilla.abc.es/andalucia/malaga/sevi-nuevos-casos-coronavirus-fuengirola-elevan-diez-positivos-andalucia-202002292005_noticia.html +2561,38,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, related to case 33, male, 62, recently traveled to Emilia-Romagna",Andalusia,Spain,male,62.0,,,,,,,,1,0,0,0,0,,Sevilla ABC,https://sevilla.abc.es/andalucia/malaga/sevi-nuevos-casos-coronavirus-fuengirola-elevan-diez-positivos-andalucia-202002292005_noticia.html +2562,39,2020-02-29T00:00:00.000000,new confirmed COVID-19 patient in Spain: Asturias,Asturias,Spain,,,,,,,,,,0,0,0,0,0,,Sevilla ABC,https://sevilla.abc.es/andalucia/malaga/sevi-nuevos-casos-coronavirus-fuengirola-elevan-diez-positivos-andalucia-202002292005_noticia.html +2563,40,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Cantabria, traveled to Italy",Cantabria,Spain,,,,,,,,,,1,0,0,0,0,,Sevilla ABC,https://sevilla.abc.es/andalucia/malaga/sevi-nuevos-casos-coronavirus-fuengirola-elevan-diez-positivos-andalucia-202002292005_noticia.html +2564,41,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Catalonia, female, 52, traveled to Italy about 15 days ago",Catalonia,Spain,female,52.0,,,,,,,,1,0,0,0,0,,Lavanguardia,https://www.lavanguardia.com/vida/20200229/473834417385/dos-casos-coronavirus-cataluna-seis-contagios.html +2565,42,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Catalonia, male, in contact with an infected patient",Catalonia,Spain,male,,,,,,,,,0,0,0,0,0,,Lavanguardia,https://www.lavanguardia.com/vida/20200229/473834417385/dos-casos-coronavirus-cataluna-seis-contagios.html +2566,43,2020-02-29T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Navarra, female, 39",Catalonia,Spain,female,39.0,,,,,,,,0,0,0,0,0,,Lavanguardia,https://www.lavanguardia.com/vida/20200229/473834417385/dos-casos-coronavirus-cataluna-seis-contagios.html +2567,44,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, doctor, 28",Navarra,Spain,,28.0,,,,,,,,0,0,0,0,0,,El Plural,https://www.elplural.com/autonomias/andalucia/jovenes-medicos-infectados-elevan-12-casos-andaluces-coronavirus_234339102 +2568,45,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, doctor, 36",Andalusia,Spain,,36.0,,,,,,,,0,0,0,0,0,,El Plural,https://www.elplural.com/autonomias/andalucia/jovenes-medicos-infectados-elevan-12-casos-andaluces-coronavirus_234339102 +2569,46,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Basque Country, contact with infected person",Andalusia,Spain,,,,,,,,,,0,0,0,0,0,,Lavanguardia,https://www.lavanguardia.com/local/paisvasco/20200302/473905559335/contagios-coronavirus-euskadi.html +2570,47,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Basque Country, contact with infected person",Basque Country,Spain,,,,,,,,,,0,0,0,0,0,,Lavanguardia,https://www.lavanguardia.com/local/paisvasco/20200302/473905559335/contagios-coronavirus-euskadi.html +2571,48,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Basque Country, contact with infected person",Basque Country,Spain,,,,,,,,,,0,0,0,0,0,,Lavanguardia,https://www.lavanguardia.com/local/paisvasco/20200302/473905559335/contagios-coronavirus-euskadi.html +2572,49,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Basque Country, healthcare professional, no history of risk",Basque Country,Spain,,,,,,,,,,0,0,0,0,0,,Lavanguardia,https://www.lavanguardia.com/local/paisvasco/20200302/473905559335/contagios-coronavirus-euskadi.html +2573,50,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Castilla-La Mancha, male, 62",Castilla-La Mancha,Spain,male,62.0,,,,,,,,0,0,0,0,0,,Lavanguardia,https://www.lavanguardia.com/local/paisvasco/20200302/473905559335/contagios-coronavirus-euskadi.html +2574,51,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Castille and Leon, male, 62, traveled twice to Italy in February, went to Milan two weeks ago",Castille and Leon,Spain,male,62.0,,,,,,,,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/leon/bierzo-registra-tercer-20200301095242-nt.html?ref=https:%2F%2Fen.wikipedia.org%2F +2575,52,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Extremadura, male, 56, Coria, went to northern Italy",Extremadura,Spain,male,56.0,,,,,,,,1,0,0,0,0,,El Periodico,https://www.elperiodicoextremadura.com/noticias/extremadura/confirmados-casos-coronavirus-extremadura_1221514.html +2576,53,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Extremadura, male, 56, Caceres, went to northern Italy",Extremadura,Spain,male,56.0,,,,,,,,1,0,0,0,0,,El Periodico,https://www.elperiodicoextremadura.com/noticias/extremadura/confirmados-casos-coronavirus-extremadura_1221514.html +2577,54,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Extremadura, male, 58, Llerena-Zafra, went to nothern Italy",Extremadura,Spain,male,58.0,,,,,,,,1,0,0,0,0,,El Periodico,https://www.elperiodicoextremadura.com/noticias/extremadura/confirmados-casos-coronavirus-extremadura_1221514.html +2578,55,2020-03-01T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Extremadura, male, 19, Llerena-Zafra, went to northern Italy",Extremadura,Spain,male,19.0,,,,,,,,1,0,0,0,0,,El Periodico,https://www.elperiodicoextremadura.com/noticias/extremadura/confirmados-casos-coronavirus-extremadura_1221514.html +2579,56,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Basque Country, health personnel in Alava",Basque Country,Spain,,,,,,,,,,0,0,0,0,0,,Deia,https://www.deia.eus/actualidad/sociedad/2020/03/02/contagio-sanitario-araba-eleva-diez/1021776.html +2580,57,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Cantabria, traveled to Italy",Cantabria,Spain,,,,,,,,,,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2581,58,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Cantabria, traveled to Italy",Cantabria,Spain,,,,,,,,,,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2582,59,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Cantabria, traveled to Italy",Cantabria,Spain,,,,,,,,,,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2583,60,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Cantabria, traveled to Italy",Cantabria,Spain,,,,,,,,,,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2584,61,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Cantabria, traveled to Italy",Cantabria,Spain,,,,,,,,,,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2585,62,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Cantabria, traveled to Italy",Cantabria,Spain,,,,,,,,,,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2586,63,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Cantabria, traveled to Italy",Cantabria,Spain,,,,,,,,,,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2587,64,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Cantabria, traveled to Italy",Cantabria,Spain,,,,,,,,,,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2588,65,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Cantabria, traveled to Italy",Cantabria,Spain,,,,,,,,,,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2589,66,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Castilla-La Mancha, male, 30, link to northern Italy",Castilla-La Mancha,Spain,male,30.0,,,,,,,,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2590,67,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Castilla-La Mancha, male, 23, link to northern Italy",Castilla-La Mancha,Spain,male,23.0,,,,,,,,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2591,68,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Castile and Leon, male, took statement from two Korean citizens with cough",Castile and Leon,Spain,male,,,,,,,,,0,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2592,69,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Castile and Leon, 19 year old student at University of Salamanca, female, traveled to Italy in February",Castile and Leon,Spain,female,19.0,,,,,,,,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2593,70,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Castile and Leon, male, 52, Burgos, went to hospital 3/1 with pneumonia",Castile and Leon,Spain,male,52.0,,,2020-03-01,,,,,0,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2594,71,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Castile and Leon,",Castile and Leon,Spain,,,,,,,,,,0,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2595,72,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Castile and Leon,",Castile and Leon,Spain,,,,,,,,,,0,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2596,73,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Catalonia, female, 20, went to northern Italy 2/14-2/16",Catalonia,Spain,female,20.0,,,,,,2020-02-14T00:00:00.000000,2020-02-16,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2597,74,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Catalonia, female, 16, went to northern Italy 2/14-2/16",Catalonia,Spain,female,16.0,,,,,,2020-02-14T00:00:00.000000,2020-02-16,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2598,75,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Catalonia, male, 28, went to Milan 2/20-2/23",Catalonia,Spain,male,28.0,,,,,,2020-02-20T00:00:00.000000,2020-02-23,1,0,0,0,0,,El Norde de Castilla,https://www.elnortedecastilla.es/valladolid/cinco-nuevos-casos-20200302201555-nt.html +2599,76,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Extremadura, female, 20, went to northern Italy",Extremadura,Spain,female,20.0,,,,,,,,1,0,0,0,0,,El Periodico,https://www.elperiodicoextremadura.com/noticias/sociedad/dos-nuevos-casos-coronavirus-confirmados-extremadura_1221697.html +2600,77,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Extremadura, female, 21, went to northern Italy",Extremadura,Spain,female,21.0,,,,,,,,1,0,0,0,0,,El Periodico,https://www.elperiodicoextremadura.com/noticias/sociedad/dos-nuevos-casos-coronavirus-confirmados-extremadura_1221697.html +2601,78,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Navarra, male, 34, family of first Navarra patient, returned 3/2 from Germany",Navarra,Spain,male,34.0,,,,,,,2020-03-02,1,0,0,0,0,,Noticias,https://www.noticiasdenavarra.com/actualidad/sociedad/2020/03/02/segundo-caso-positivo-coronavirus-navarra/1027474.html +2602,79,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: La Rioja, male, health personnel in hospital",La Rioja,Spain,male,,,,,,,,,0,0,0,0,0,,Sur,http://www.surinenglish.com/local/202003/03/retired-doctor-isolation-malaga-20200303150541.html +2603,80,2020-03-02T00:00:00.000000,"new confirmed COVID-19 patient in Spain: La Rioja, male, 52, went to hospital 3/1 with pneumonia",La Rioja,Spain,male,52.0,,,2020-03-01,,,,,0,0,0,0,0,,Sur,http://www.surinenglish.com/local/202003/03/retired-doctor-isolation-malaga-20200303150541.html +2604,81,2020-03-03T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 73, admitted to hospital 3/1, got virus from family memers who visited from northern Italy",Andalusia,Spain,male,73.0,,,2020-03-01,,,,,0,0,0,0,0,,Sur,http://www.surinenglish.com/local/202003/03/retired-doctor-isolation-malaga-20200303150541.html +2605,82,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, 41, in Malaga, discharged and in active follow-up at home",Andalusia,Spain,,41.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2606,83,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, female, 17, went to Italy",Andalusia,Spain,female,17.0,,,,,,,,1,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2607,84,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, female, 23, Seville, recently traveled to Italy",Andalusia,Spain,female,23.0,,,,,,,,1,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2608,85,2020-03-05T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, female, 37, resident in Seville",Andalusia,Spain,female,37.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2609,86,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, Malaga, female, 63, recently traveled to Italy",Andalusia,Spain,female,63.0,,,,,,,,1,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2610,87,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, female, 48, Jaen, recently traveled to Italy",Andalusia,Spain,female,48.0,,,,,,,,1,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2611,88,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 78, Jaen",Andalusia,Spain,male,78.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2612,89,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, Malaga, male, 74, diagnosed with pneumonia",Andalusia,Spain,male,74.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2613,90,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, Malaga, male, 72, admitted to hospital with pneumonia",Andalusia,Spain,male,72.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2614,91,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 54, contact with another case",Andalusia,Spain,male,54.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2615,92,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 22, traveled to Italy",Andalusia,Spain,male,22.0,,,,,,,,1,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2616,93,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 32, traveled to Italy",Andalusia,Spain,male,32.0,,,,,,,,1,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2617,94,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 37, admitted to hospital of Malaga with pneumonia",Andalusia,Spain,male,37.0,,53,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2618,95,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 53, admitted to Costa del Sol hospital in Malaga",Andalusia,Spain,male,53.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2619,96,2020-03-06T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 70, admitted to Serrania de Ronda Hospital",Andalusia,Spain,male,70.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2620,97,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, female, 74, had contact with a positive case, Jaen",Andalusia,Spain,female,74.0,,,,,,,,0,0,0,0,0,,Ideal,https://www.ideal.es/andalucia/siete-nueve-casos-coronavirus-andalucia-20200307133620-nt.html +2621,98,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, female, 75, had contact with a positive case, Jaen",Andalusia,Spain,female,75.0,,,,,,,,0,0,0,0,0,,Ideal,https://www.ideal.es/andalucia/siete-nueve-casos-coronavirus-andalucia-20200307133620-nt.html +2622,99,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 64, Malaga",Andalusia,Spain,male,64.0,,,,,,,,0,0,0,0,0,,Ideal,https://www.ideal.es/andalucia/siete-nueve-casos-coronavirus-andalucia-20200307133620-nt.html +2623,100,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 55, Cadiz, contact with positive case",Andalusia,Spain,male,55.0,,,,,,,,0,0,0,0,0,,Ideal,https://www.ideal.es/andalucia/siete-nueve-casos-coronavirus-andalucia-20200307133620-nt.html +2624,101,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, female, 21, traveled to Italy",Andalusia,Spain,female,21.0,,,,,,,,1,0,0,0,0,,Ideal,https://www.ideal.es/andalucia/siete-nueve-casos-coronavirus-andalucia-20200307133620-nt.html +2625,102,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 52, in Malaga for work, recently traveled to Italy",Andalusia,Spain,male,52.0,,,,,,,,1,0,0,0,0,,Ideal,https://www.ideal.es/andalucia/siete-nueve-casos-coronavirus-andalucia-20200307133620-nt.html +2626,103,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 23, resident in Malaga",Andalusia,Spain,male,23.0,,,,,,,,0,0,0,0,0,,Ideal,https://www.ideal.es/andalucia/siete-nueve-casos-coronavirus-andalucia-20200307133620-nt.html +2627,104,2020-03-07T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, female, from Malaga, 71, had contact with a positive case",Andalusia,Spain,female,71.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2628,105,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, female, from Malaga, 50",Andalusia,Spain,female,50.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2629,106,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, 43, in Cadiz",Andalusia,Spain,,43.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2630,107,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, 55, admitted to hospital in Malaga",Andalusia,Spain,,55.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2631,108,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, 66, male, admitted to hospital in Malaga",Andalusia,Spain,male,66.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2632,109,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 40, admitted to San Agustin de Linares hospital",Andalusia,Spain,male,40.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2633,110,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 53, admitted to Costa del Sol hospital in Malaga",Andalusia,Spain,male,53.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2634,111,2020-03-08T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Andalusia, male, 77, admitted to Vithas Xanit International hospital in Malaga",Andalusia,Spain,male,77.0,,,,,,,,0,0,0,0,0,,Junta de Analucia,https://www.juntadeandalucia.es/organismos/saludyfamilias/areas/salud-vida/paginas/Nuevo_Coronavirus.html +2635,112,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Aragon, female, 69",Aragon,Spain,female,69.0,,,,,,,,0,0,0,0,0,,ABC,https://www.abc.es/espana/aragon/abci-extiende-contagio-coronavirus-residencia-ancianos-zaragoza-202003071423_noticia.html +2636,113,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Aragon, male, 85, resident of nursing home",Aragon,Spain,male,85.0,,,,,,,,0,0,0,0,0,,ABC,https://www.abc.es/espana/aragon/abci-extiende-contagio-coronavirus-residencia-ancianos-zaragoza-202003071423_noticia.html +2637,114,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Aragon, male, 83, resident of nursing home",Aragon,Spain,male,83.0,,,,,,,,0,0,0,0,0,,ABC,https://www.abc.es/espana/aragon/abci-extiende-contagio-coronavirus-residencia-ancianos-zaragoza-202003071423_noticia.html +2638,115,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Aragon, male, 66, resident of nursing home",Aragon,Spain,male,66.0,,,,,,,,0,0,0,0,0,,ABC,https://www.abc.es/espana/aragon/abci-extiende-contagio-coronavirus-residencia-ancianos-zaragoza-202003071423_noticia.html +2639,116,2020-03-09T00:00:00.000000,"new confirmed COVID-19 patient in Spain: Aragon, female, 96, resident of nursing home",Aragon,Spain,female,96.0,,,,,,,,0,0,0,0,0,,ABC,https://www.abc.es/espana/aragon/abci-extiende-contagio-coronavirus-residencia-ancianos-zaragoza-202003071423_noticia.html +2640,1,2020-01-31T00:00:00.000000,"new confirmed COVID-19 patient in Sweden: female, in her 20s, in Jonkoping county who had visited Wuhan, landed in Sweden 1/24/2020, a few days later developed cough and contacted local hospital,",Jonkoping,Sweden,female,25.0,2020-01-27T00:00:00.000000,1,,,,,2020-01-24,0,1,0,0,0,cough,Politico,https://www.politico.eu/article/coronavirus-case-confirmed-in-finland-as-who-reconvenes-panel/ +2641,1,2020-02-04T00:00:00.000000,new confirmed COVID-19 patient in Belgium: evacuated from Wuhan on 2/2,Belgium,Belgium,,,,,,,,,2020-02-02,,1,0,0,0,,Washington Examiner,https://www.washingtonexaminer.com/news/first-case-of-coronavirus-in-belgium-confirmed +2642,1,2020-02-14T00:00:00.000000,"new confirmed COVID-19 patient in Egypt: ""foreigner""",Egypt,Egypt,,,,,,,,,,,0,0,0,1582070400,,South China Morning Post,https://www.scmp.com/news/china/diplomacy/article/3050845/egypt-reports-first-case-coronavirus-africa-amid-fears-poorer +2643,1,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Iran: died, in Qom",Qom,Iran,,,,,,,,,,,0,0,1582070400,0,,ABC News,https://abcnews.go.com/International/wireStory/iran-reports-cases-coronavirus-69065372 +2644,2,2020-02-19T00:00:00.000000,"new confirmed COVID-19 patient in Iran: died, in Qom",Qom,Iran,,,,,,,,,,,0,0,1582070400,0,,ABC News,https://abcnews.go.com/International/wireStory/iran-reports-cases-coronavirus-69065372 +2645,3,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in Iran: Qom,Qom,Iran,,,,,,,,,,,0,0,1582243200,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2646,4,2020-02-20T00:00:00.000000,new confirmed COVID-19 patient in Iran: Qom,Qom,Iran,,,,,,,,,,,0,0,1582243200,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2647,5,2020-02-20T00:00:00.000000,"new confirmed COVID-19 patient in Iran: Araq, doctor",Araq,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2648,6,2020-02-21T00:00:00.000000,new confirmed COVID-19 patient in Iran: Qom,Qom,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2649,7,2020-02-21T00:00:00.000000,new confirmed COVID-19 patient in Iran: Qom,Qom,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2650,8,2020-02-21T00:00:00.000000,new confirmed COVID-19 patient in Iran: Qom,Qom,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2651,9,2020-02-21T00:00:00.000000,new confirmed COVID-19 patient in Iran: Qom,Qom,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2652,10,2020-02-21T00:00:00.000000,new confirmed COVID-19 patient in Iran: Qom,Qom,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2653,11,2020-02-21T00:00:00.000000,new confirmed COVID-19 patient in Iran: Qom,Qom,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2654,12,2020-02-21T00:00:00.000000,new confirmed COVID-19 patient in Iran: Qom,Qom,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2655,13,2020-02-21T00:00:00.000000,new confirmed COVID-19 patient in Iran: Tehran,Tehran,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2656,14,2020-02-21T00:00:00.000000,new confirmed COVID-19 patient in Iran: Tehran,Tehran,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2657,15,2020-02-21T00:00:00.000000,new confirmed COVID-19 patient in Iran: Tehran,Tehran,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2658,16,2020-02-21T00:00:00.000000,new confirmed COVID-19 patient in Iran: Tehran,Tehran,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2659,17,2020-02-21T00:00:00.000000,new confirmed COVID-19 patient in Iran: Guilan,Guilan,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2660,18,2020-02-21T00:00:00.000000,new confirmed COVID-19 patient in Iran: Guilan,Guilan,Iran,,,,,,,,,,,0,0,0,0,,Iran Ministry of Health,http://behdasht.gov.ir/news/%DA%A9%D8%B1%D9%88%D9%86%D8%A7+%D9%88%DB%8C%D8%B1%D9%88%D8%B3/199807/%D8%AF%D8%B1+%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C+%DA%AF%D8%B0%D8%B4%D8%AA%D9%87+735+%D8%A8%DB%8C%D9%85%D8%A7%D8%B1+%D8%A8%D8%A7+%D8%B9%D9%84%D8%A7%D8%A6%D9%85+%D8%B4%D8%A8%D9%87+%D8%A2%D9%86%D9%81%D9%84%D9%88%D8%A2%D9%86%D8%B2%D8%A7+%D8%AF%D8%B1+%DA%A9%D8%B4%D9%88%D8%B1+%D8%A8%D8%B3%D8%AA%D8%B1%DB%8C+%D8%B4%D8%AF%D9%86%D8%AF+%D8%A8%D8%B1+%D8%A7%D8%B3%D8%A7%D8%B3+%D8%A2%D8%AE%D8%B1%DB%8C%D9%86+%D9%86%D8%AA%D8%A7%DB%8C%D8%AC+%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4+%D9%87%D8%A7+%D8%A7%D8%A8%D8%AA%D9%84%D8%A7%DB%8C+13+%D9%85%D9%88%D8%B1%D8%AF+%D8%AF%DB%8C%DA%AF%D8%B1+%D8%A8%D9%87+%DA%A9%D9%88%D9%88%DB%8C%D8%AF19+%D9%82%D8%B7%D8%B9%DB%8C+%D8%A8%D9%87+%D9%86%D8%B8%D8%B1+%D9%85%DB%8C+%D8%B1%D8%B3%D8%AF +2661,1,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Israel: female, returned 1/21 after being quarantined on cruise ship",Israel,Israel,female,,,,,,,,2020-02-21,,0,0,0,0,,The Times of Israel,https://www.timesofisrael.com/israel-confirms-first-coronavirus-case-as-cruise-ship-returnee-diagnosed/ +2662,1,2020-02-21T00:00:00.000000,"new confirmed COVID-19 patient in Lebanon: female, 45, arrived from Qom, Iran 1/20",Lebanon,Lebanon,female,45.0,,,,,,,2020-02-20,,0,0,0,0,,US News,https://www.usnews.com/news/world/articles/2020-02-21/lebanon-confirms-first-case-of-coronavirus-two-more-suspected +2663,1,2020-02-24T00:00:00.000000,new confirmed COVID-19 patient in Kuwait: returned from Iran,Kuwait,Kuwait,,,,,,,,,,,0,0,0,0,,Al Arabiya,http://english.alarabiya.net/en/News/gulf/2020/02/25/Number-of-Kuwait-coronavirus-cases-rises-to-eight-KUNA.html +2664,2,2020-02-24T00:00:00.000000,new confirmed COVID-19 patient in Kuwait: returned from Iran,Kuwait,Kuwait,,,,,,,,,,,0,0,0,0,,Al Arabiya,http://english.alarabiya.net/en/News/gulf/2020/02/25/Number-of-Kuwait-coronavirus-cases-rises-to-eight-KUNA.html +2665,3,2020-02-24T00:00:00.000000,new confirmed COVID-19 patient in Kuwait: returned from Iran,Kuwait,Kuwait,,,,,,,,,,,0,0,0,0,,Al Arabiya,http://english.alarabiya.net/en/News/gulf/2020/02/25/Number-of-Kuwait-coronavirus-cases-rises-to-eight-KUNA.html +2666,4,2020-02-24T00:00:00.000000,new confirmed COVID-19 patient in Kuwait: returned from Iran,Kuwait,Kuwait,,,,,,,,,,,0,0,0,0,,Al Arabiya,http://english.alarabiya.net/en/News/gulf/2020/02/25/Number-of-Kuwait-coronavirus-cases-rises-to-eight-KUNA.html +2667,5,2020-02-24T00:00:00.000000,new confirmed COVID-19 patient in Kuwait: returned from Iran,Kuwait,Kuwait,,,,,,,,,,,0,0,0,0,,Al Arabiya,http://english.alarabiya.net/en/News/gulf/2020/02/25/Number-of-Kuwait-coronavirus-cases-rises-to-eight-KUNA.html +2668,6,2020-02-25T00:00:00.000000,new confirmed COVID-19 patient in Kuwait: returned from Iran,Kuwait,Kuwait,,,,,,,,,,,0,0,0,0,,Al Arabiya,http://english.alarabiya.net/en/News/gulf/2020/02/25/Number-of-Kuwait-coronavirus-cases-rises-to-eight-KUNA.html +2669,7,2020-02-25T00:00:00.000000,new confirmed COVID-19 patient in Kuwait: returned from Iran,Kuwait,Kuwait,,,,,,,,,,,0,0,0,0,,Al Arabiya,http://english.alarabiya.net/en/News/gulf/2020/02/25/Number-of-Kuwait-coronavirus-cases-rises-to-eight-KUNA.html +2670,8,2020-02-25T00:00:00.000000,new confirmed COVID-19 patient in Kuwait: returned from Iran,Kuwait,Kuwait,,,,,,,,,,,0,0,0,0,,Al Arabiya,http://english.alarabiya.net/en/News/gulf/2020/02/25/Number-of-Kuwait-coronavirus-cases-rises-to-eight-KUNA.html +2671,9,2020-02-25T00:00:00.000000,"new confirmed COVID-19 patient in Kuwait: female, returned from Iran",Kuwait,Kuwait,female,,,,,,,,,,0,0,0,0,,Al Arabiya,http://english.alarabiya.net/en/News/gulf/2020/02/25/Number-of-Kuwait-coronavirus-cases-rises-to-eight-KUNA.html +2672,1,2020-02-24T00:00:00.000000,new COVID-19 patient confirmed in Bahrain: returning from Iran,Bahrain,Bahrain,,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110968 +2673,2,2020-02-24T00:00:00.000000,new COVID-19 patient confirmed in Bahrain:,Bahrain,Bahrain,,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110969 +2674,3,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: male, returning from Iran",Bahrain,Bahrain,male,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110970 +2675,4,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: female, returning from Iran",Bahrain,Bahrain,female,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110971 +2676,5,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: female, Saudi Arabian, returning from Iran",Bahrain,Bahrain,female,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110972 +2677,6,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: female, Saudi Arabian, returning from Iran",Bahrain,Bahrain,female,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110973 +2678,7,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: female, Saudi Arabian, returning from Iran",Bahrain,Bahrain,female,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110974 +2679,8,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: female, Saudi Arabian, returning from Iran",Bahrain,Bahrain,female,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110975 +2680,9,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: female, returning from Iran",Bahrain,Bahrain,female,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110976 +2681,10,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: female, returning from Iran",Bahrain,Bahrain,female,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110977 +2682,11,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: female, returning from Iran",Bahrain,Bahrain,female,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110978 +2683,12,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: female, returning from Iran",Bahrain,Bahrain,female,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110979 +2684,13,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: male, returning from Iran",Bahrain,Bahrain,male,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110980 +2685,14,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: male, returning from Iran",Bahrain,Bahrain,male,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110981 +2686,15,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: male, returning from Iran",Bahrain,Bahrain,male,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110982 +2687,16,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: female, Saudi national, returning from Iran",Bahrain,Bahrain,female,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110983 +2688,17,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Bahrain: female, Saudi national, returning from Iran",Bahrain,Bahrain,female,,,,,,,,,,0,0,0,0,,Gulf News,https://gulfnews.com/world/gulf/bahrain/bahrain-announces-23-cases-of-new-coronavirus-infection-1.1582636110984 +2689,1,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Austria: 24, Innsbruck, from Lombardy",Innsbruck,Austria,,24.0,,,,,,,,,0,0,0,0,,Jakarta Post,https://www.thejakartapost.com/news/2020/02/25/austria-reports-first-two-coronavirus-cases-after-italy-outbreak.html +2690,2,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Austria: 24, Innsbruck",Innsbruck,Austria,,24.0,,,,,,,,,0,0,0,0,,Jakarta Post,https://www.thejakartapost.com/news/2020/02/25/austria-reports-first-two-coronavirus-cases-after-italy-outbreak.html +2691,1,2020-02-24T00:00:00.000000,"new COVID-19 patient confirmed in Afghanistan: 35, recently returned from Qom",Afghanistan,Afghanistan,,35.0,,,,,,,,,0,0,0,0,,Fox News,https://www.foxnews.com/health/afghanistan-first-coronavirus-case-iran +2692,1,2020-02-26T00:00:00.000000,"new COVID-19 patient confirmed in Algeria: male, Italian who arrived in the country on 2/17",Algeria,Algeria,male,,,,,,,,2020-02-17,,0,0,0,0,,South China Morning Post,https://www.scmp.com/news/china/society/article/3052457/algeria-reports-first-coronavirus-case-italian-citizen +2693,1,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Croatia: male, recently returned from Milan, was there from 2/19-2/21",Croatia,Croatia,male,,,,,,,2020-02-19T00:00:00.000000,2020-02-21,,0,0,0,0,,Reuters,https://www.reuters.com/article/us-croatia-coronavirus/croatia-confirms-its-first-case-of-coronavirus-infection-idUSKBN20J1OB +2694,1,2020-02-25T00:00:00.000000,"new COVID-19 patient confirmed in Switzerland: Ticino, male, 70, infected in Milan during an event 2/15, symptom onset 2/17",Ticino,Switzerland,male,70.0,2020-02-17T00:00:00.000000,0,,,,2020-02-15T00:00:00.000000,2020-02-15,1,0,0,0,0,,Reuters,https://www.reuters.com/article/uk-switzerland-coronavirus/swiss-authorities-confirm-first-case-of-coronavirus-idUSKBN20J1ZO +2695,2,2020-02-27T00:00:00.000000,"new COVID-19 patient confirmed in Switzerland: Geneva, returned from Milan, male, 28",Geneva,Switzerland,male,28.0,2020-02-17T00:00:00.000000,0,,,,,,1,0,0,0,0,,The Local,https://www.thelocal.ch/20200304/swiss-health-authorities-launch-a-campaign-to-prevent-the-spread-of-coronavirus +2696,3,2020-02-27T00:00:00.000000,"new COVID-19 patient confirmed in Switzerland: Geneva, 55, Italian who works in an international company",Geneva,Switzerland,,55.0,,,,,,,,1,0,0,0,0,,The Local,https://www.thelocal.ch/20200304/swiss-health-authorities-launch-a-campaign-to-prevent-the-spread-of-coronavirus +2697,4,2020-02-27T00:00:00.000000,"new COVID-19 patient confirmed in Switzerland: Grisons, Italian child on vacation",Grisons,Switzerland,,,,,,,,,,1,0,0,0,0,,The Local,https://www.thelocal.ch/20200304/swiss-health-authorities-launch-a-campaign-to-prevent-the-spread-of-coronavirus +2698,5,2020-02-27T00:00:00.000000,"new COVID-19 patient confirmed in Switzerland: Grisons, Italian child on vacation",Grisons,Switzerland,,,,,,,,,,1,0,0,0,0,,The Local,https://www.thelocal.ch/20200304/swiss-health-authorities-launch-a-campaign-to-prevent-the-spread-of-coronavirus +2699,6,2020-02-27T00:00:00.000000,"new COVID-19 patient confirmed in Switzerland: male, 26, Aargau, went on business trip the week before in Verona",Aargau,Switzerland,male,26.0,,,,,,,,1,0,0,0,0,,The Local,https://www.thelocal.ch/20200304/swiss-health-authorities-launch-a-campaign-to-prevent-the-spread-of-coronavirus +2700,7,2020-02-27T00:00:00.000000,"new COVID-19 patient confirmed in Switzerland: Zurich, female, 30, visited Milan",Zurich,Switzerland,female,30.0,,,,,,,,1,0,0,0,0,,The Local,https://www.thelocal.ch/20200304/swiss-health-authorities-launch-a-campaign-to-prevent-the-spread-of-coronavirus +2701,8,2020-02-27T00:00:00.000000,"new COVID-19 patient confirmed in Switzerland: Vaud, male, 49, living in France",Vaud,Switzerland,male,49.0,,,,,,,,1,0,0,0,0,,The Local,https://www.thelocal.ch/20200304/swiss-health-authorities-launch-a-campaign-to-prevent-the-spread-of-coronavirus +2702,9,2020-02-27T00:00:00.000000,"new COVID-19 patient confirmed in Switzerland: Basal-Stadt, female, travelled to Milan",Basal-Stadt,Switzerland,female,,,,,,,,,1,0,0,0,0,,The Local,https://www.thelocal.ch/20200304/swiss-health-authorities-launch-a-campaign-to-prevent-the-spread-of-coronavirus +2703,10,2020-02-28T00:00:00.000000,"new COVID-19 patient confirmed in Switzerland: Basal-Stadt, male, 23, married to case 9",Basal-Stadt,Switzerland,male,23.0,,,,,,,,0,0,0,0,0,,The Local,https://www.thelocal.ch/20200304/swiss-health-authorities-launch-a-campaign-to-prevent-the-spread-of-coronavirus diff --git a/packages/importation/src/importation/data/state_population_data_2020.csv b/packages/importation/src/importation/data/state_population_data_2020.csv new file mode 100644 index 0000000..bb90c0d --- /dev/null +++ b/packages/importation/src/importation/data/state_population_data_2020.csv @@ -0,0 +1,53 @@ +state_name,state,population +Pennsylvania,42,12794885 +California,6,39346023 +West Virginia,54,1807426 +Utah,49,3151239 +New York,36,19514849 +District of Columbia,11,701974 +Alaska,2,736990 +Florida,12,21216924 +South Carolina,45,5091517 +North Dakota,38,760394 +Maine,23,1340825 +Georgia,13,10516579 +Alabama,1,4893186 +New Hampshire,33,1355244 +Oregon,41,4176346 +Wyoming,56,581348 +Arizona,4,7174064 +Louisiana,22,4664616 +Indiana,18,6696893 +Idaho,16,1754367 +Connecticut,9,3570549 +Hawaii,15,1420074 +Illinois,17,12716164 +Massachusetts,25,6873003 +Texas,48,28635442 +Montana,30,1061705 +Nebraska,31,1923826 +Ohio,39,11675275 +Colorado,8,5684926 +New Jersey,34,8885418 +Maryland,24,6037624 +Virginia,51,8509358 +Vermont,50,624340 +North Carolina,37,10386227 +Arkansas,5,3011873 +Washington,53,7512465 +Kansas,20,2912619 +Oklahoma,40,3949342 +Wisconsin,55,5806975 +Mississippi,28,2981835 +Missouri,29,6124160 +Michigan,26,9973907 +Rhode Island,44,1057798 +Minnesota,27,5600166 +Iowa,19,3150011 +New Mexico,35,2097021 +Nevada,32,3030281 +Delaware,10,967679 +Puerto Rico,72,3255642 +Kentucky,21,4461952 +South Dakota,46,879336 +Tennessee,47,6772268 diff --git a/packages/importation/src/importation/perkins_et_al_methods.py b/packages/importation/src/importation/perkins_et_al_methods.py index e9150bf..6fdf2fb 100644 --- a/packages/importation/src/importation/perkins_et_al_methods.py +++ b/packages/importation/src/importation/perkins_et_al_methods.py @@ -250,7 +250,7 @@ def sample_undetected_infections( for each replicate. It must include a column named "replicate". max_infections (int, optional): The maximum number of infections to consider in the probability distribution. Defaults to 20000. - seed (int, optional): A random seed for reproducibility. Defaults to None. + seed (int | None): A random seed for reproducibility. Defaults to None. Returns: pl.DataFrame: A Polars DataFrame containing the sampled number of undetected infections diff --git a/packages/importation/tests/test_etl.py b/packages/importation/tests/test_etl.py index 7681ab0..b32c5bb 100644 --- a/packages/importation/tests/test_etl.py +++ b/packages/importation/tests/test_etl.py @@ -39,7 +39,7 @@ def test_read_bytes(mock_urlopen): assert isinstance(result, BytesIO) -def test_get_perkins_et_al_posteriors(mock_urlopen, mock_read_csv): +def test_get_perkins_et_al_posteriors(mock_urlopen, mock_read_csv, tmp_path): # Mock response data mock_response = mock_urlopen.return_value.__enter__.return_value mock_response.read.return_value = b"mock csv data" @@ -52,15 +52,16 @@ def test_get_perkins_et_al_posteriors(mock_urlopen, mock_read_csv): ) # Call the function - params = get_perkins_et_al_posteriors() + params = get_perkins_et_al_posteriors(input_dir=tmp_path, cache=False) # Assertions assert "rho_travel_alpha" in params.columns assert "rho_travel_beta" in params.columns assert params.filter(pl.col("Scenario") == "Default").height == 1 + assert mock_urlopen.call_count == 1 -def test_get_linelist_data(mock_urlopen, mock_read_csv): +def test_get_linelist_data(mock_urlopen, mock_read_csv, tmp_path): # Mock response data mock_response = mock_urlopen.return_value.__enter__.return_value mock_response.read.return_value = b"mock csv data" @@ -101,7 +102,11 @@ def test_get_linelist_data(mock_urlopen, mock_read_csv): ) # Call the function - data = get_linelist_data() + data = get_linelist_data( + filename="downloaded_linelist.csv", + input_dir=tmp_path, + cache=False, + ) # Assertions assert "report_day" in data.columns @@ -110,3 +115,4 @@ def test_get_linelist_data(mock_urlopen, mock_read_csv): assert "confirmed_cases" in data.columns assert "confirmed_deaths" in data.columns assert data.height == 1 + assert mock_urlopen.call_count == 1 diff --git a/src/ixa_epi_covid/model_execution.py b/src/ixa_epi_covid/model_execution.py index 22e9928..069ded5 100644 --- a/src/ixa_epi_covid/model_execution.py +++ b/src/ixa_epi_covid/model_execution.py @@ -179,7 +179,9 @@ def phase1_rows_to_report( report: pl.DataFrame | dict[str, list[Any]] | list[dict[str, Any]], ) -> pl.DataFrame: """Normalize a phase-1 report payload into a Polars DataFrame.""" - frame = report if isinstance(report, pl.DataFrame) else pl.DataFrame(report) + frame = ( + report if isinstance(report, pl.DataFrame) else pl.DataFrame(report) + ) casts = [] if "t_lower" in frame.columns: casts.append(pl.col("t_lower").cast(pl.Float64)) diff --git a/tests/cloud/test_cloud_auto_size_probe.py b/tests/cloud/test_cloud_auto_size_probe.py index 79d2ab7..e2f35b6 100644 --- a/tests/cloud/test_cloud_auto_size_probe.py +++ b/tests/cloud/test_cloud_auto_size_probe.py @@ -17,7 +17,9 @@ def test_auto_size_uses_configured_local_task_probe(monkeypatch, tmp_path): "epimodel.GlobalParams": { "synth_population_file": str(synth_population), "imported_cases_timeseries": { - "filename": str(tmp_path / "imported_cases_timeseries.csv"), + "filename": str( + tmp_path / "imported_cases_timeseries.csv" + ), }, } }, diff --git a/tests/cloud/test_cloud_cleanup.py b/tests/cloud/test_cloud_cleanup.py index 9e504a9..2924a46 100644 --- a/tests/cloud/test_cloud_cleanup.py +++ b/tests/cloud/test_cloud_cleanup.py @@ -4,15 +4,6 @@ from calibrationtools.cloud import cleanup as shared_cleanup -def test_makefile_population_rule_uses_packaged_entrypoint(): - makefile = (Path(__file__).resolve().parents[2] / "Makefile").read_text( - encoding="utf-8" - ) - - assert "uv run python -m create_synthetic_population.run" in makefile - assert "scripts/create_synthetic_population.py" not in makefile - - def test_makefile_cloud_cleanup_targets_use_shared_cli(): makefile = (Path(__file__).resolve().parents[2] / "Makefile").read_text( encoding="utf-8" diff --git a/tests/cloud/test_cloud_settings.py b/tests/cloud/test_cloud_settings.py index d357765..610ba08 100644 --- a/tests/cloud/test_cloud_settings.py +++ b/tests/cloud/test_cloud_settings.py @@ -2,9 +2,6 @@ import pytest from calibrationtools.cloud.config import ( - CloudAutoSizeMemoryScope, - CloudOutputMode, - CSVTableOrientation, DEFAULT_INPUT_MOUNT_PATH, load_cloud_model_config, ) @@ -79,28 +76,3 @@ def test_load_cloud_model_config_accepts_legacy_jobs_per_generation( settings = load_cloud_model_config(config_path).runtime_settings assert settings.jobs_per_session == 2 - - -def test_packaged_cloud_config_loads(): - config_path = ( - Path(__file__).resolve().parents[2] / "ixa_epi_covid.cloud_config.toml" - ) - - config = load_cloud_model_config(config_path) - - assert config.runtime_settings.repository == "ixa-epi-covid-cloud" - assert config.runtime_settings.jobs_per_session == 1 - assert config.runtime_settings.max_parallel_output_downloads == 8 - assert config.output.filename == "output.csv" - assert config.output.mode is CloudOutputMode.CSV_TABLE - assert config.output.output_name == "aggregated_deaths_report" - assert config.output.orientation is CSVTableOrientation.COLUMNS - assert config.shared_assets[0].name == "synthetic_population" - assert config.auto_size.probe == "local_task" - assert config.auto_size.local_mrp_config_path == ( - Path(__file__).resolve().parents[2] / "ixa_epi_covid.mrp.toml" - ) - assert ( - config.auto_size.memory_scope - is CloudAutoSizeMemoryScope.PROCESS_TREE - ) diff --git a/tests/cloud/test_dependency_contract.py b/tests/cloud/test_dependency_contract.py index b063ac8..706caa2 100644 --- a/tests/cloud/test_dependency_contract.py +++ b/tests/cloud/test_dependency_contract.py @@ -17,8 +17,13 @@ def test_dependency_contract_imports(): create_cloud_mrp_runner_from_config, resolve_cloud_build_context, ) - from calibrationtools.cloud.task_payload import apply_task_payload_transforms - from calibrationtools.mrp_csv_runner import CSVOutputMRPRunner, MRPOutputRunner + from calibrationtools.cloud.task_payload import ( + apply_task_payload_transforms, + ) + from calibrationtools.mrp_csv_runner import ( + CSVOutputMRPRunner, + MRPOutputRunner, + ) from calibrationtools.output_contracts import ( CSVTableOutputContract, OutputContract, diff --git a/tests/cloud/test_importation_offline_data.py b/tests/cloud/test_importation_offline_data.py index 82e4cbd..bf67531 100644 --- a/tests/cloud/test_importation_offline_data.py +++ b/tests/cloud/test_importation_offline_data.py @@ -18,7 +18,7 @@ def test_get_linelist_data_prefers_packaged_resource(monkeypatch, tmp_path): def test_get_total_state_population_data_prefers_packaged_resource( - monkeypatch, + monkeypatch, tmp_path ): monkeypatch.setattr( "importation.geographies.Census", @@ -26,6 +26,7 @@ def test_get_total_state_population_data_prefers_packaged_resource( AssertionError("Census API should not be used") ), ) + monkeypatch.chdir(tmp_path) data = get_total_state_population_data(year=2020, cache=False) diff --git a/tests/cloud/test_mrp_toml_configs.py b/tests/cloud/test_mrp_toml_configs.py index 7cbfe05..121682d 100644 --- a/tests/cloud/test_mrp_toml_configs.py +++ b/tests/cloud/test_mrp_toml_configs.py @@ -23,6 +23,8 @@ def test_cloud_config_uses_model_facing_schema(): assert cloud_config.build_context == REPO_ROOT assert cloud_config.dockerfile == REPO_ROOT / "Dockerfile.cloud" + assert cloud_config.runtime_settings.repository == "ixa-epi-covid-cloud" + assert cloud_config.runtime_settings.jobs_per_session == 1 assert cloud_config.runtime_settings.task_mrp_config_path == ( "/app/ixa_epi_covid.mrp.task.toml" ) @@ -31,6 +33,7 @@ def test_cloud_config_uses_model_facing_schema(): assert cloud_config.output.mode is CloudOutputMode.CSV_TABLE assert cloud_config.output.output_name == "aggregated_deaths_report" assert cloud_config.output.orientation is CSVTableOrientation.COLUMNS + assert cloud_config.shared_assets[0].name == "synthetic_population" assert cloud_config.auto_size.probe == "local_task" assert cloud_config.auto_size.local_mrp_config_path == ( REPO_ROOT / "ixa_epi_covid.mrp.toml" diff --git a/tests/cloud/test_population_asset_staging.py b/tests/cloud/test_population_asset_staging.py index c536882..3ce3ff8 100644 --- a/tests/cloud/test_population_asset_staging.py +++ b/tests/cloud/test_population_asset_staging.py @@ -122,9 +122,7 @@ def test_task_payload_transforms_set_cloud_task_paths(tmp_path): == "/tmp/ixa-epi-covid/gen_0_particle_0_attempt_0" ) assert ( - payload["ixa_inputs"]["epimodel.GlobalParams"][ - "synth_population_file" - ] + payload["ixa_inputs"]["epimodel.GlobalParams"]["synth_population_file"] == "/cloud-input/shared/synthetic_population/session-1/synth.csv" ) assert ( @@ -133,11 +131,3 @@ def test_task_payload_transforms_set_cloud_task_paths(tmp_path): ]["filename"] == "/tmp/ixa-epi-covid/gen_0_particle_0_attempt_0/imported_cases_timeseries.csv" ) - - -def test_cloud_config_limits_parallel_output_downloads(): - cloud_config = load_cloud_model_config( - REPO_ROOT / "ixa_epi_covid.cloud_config.toml" - ) - - assert cloud_config.runtime_settings.max_parallel_output_downloads == 8 From 084a650fba57b187d7b0f23465ae181ed8950fd5 Mon Sep 17 00:00:00 2001 From: Gil Sharon Date: Tue, 5 May 2026 12:36:45 -0400 Subject: [PATCH 13/15] Fix Docker MRP staged input handling run the Docker-backed MRP config directly through ixa_epi_covid.mrp_task_runner override the IXA executable path for built-in local Docker calibration --- ixa_epi_covid.mrp.docker.toml | 2 +- src/ixa_epi_covid/phase1/calibrate.py | 29 ++++++ tests/cloud/test_mrp_runner.py | 123 +++++++++++++++++++++++++- tests/cloud/test_mrp_toml_configs.py | 13 +++ tests/cloud/test_phase1_core.py | 58 ++++++++++++ 5 files changed, 223 insertions(+), 2 deletions(-) diff --git a/ixa_epi_covid.mrp.docker.toml b/ixa_epi_covid.mrp.docker.toml index dc15ed6..8da0ba4 100644 --- a/ixa_epi_covid.mrp.docker.toml +++ b/ixa_epi_covid.mrp.docker.toml @@ -9,7 +9,7 @@ spec = "process" command = "sh" args = [ "-c", - "exec docker run --rm -i --user \"$(id -u):$(id -g)\" -v \"$PWD:/work\" -w /work ixa-epi-covid-cloud:latest", + "exec docker run --rm -i --user \"$(id -u):$(id -g)\" -v \"$PWD:/work\" -w /work ixa-epi-covid-cloud:latest /app/.venv/bin/python -m ixa_epi_covid.mrp_task_runner", ] [output] diff --git a/src/ixa_epi_covid/phase1/calibrate.py b/src/ixa_epi_covid/phase1/calibrate.py index 4ad737c..efef74d 100644 --- a/src/ixa_epi_covid/phase1/calibrate.py +++ b/src/ixa_epi_covid/phase1/calibrate.py @@ -4,6 +4,7 @@ import json import timeit import warnings +from copy import deepcopy from pathlib import Path from typing import Any @@ -46,6 +47,7 @@ DEFAULT_MAX_CONCURRENT_SIMULATIONS = 10 DEFAULT_ARTIFACTS_DIR = Path("artifacts") +DOCKER_IXA_EXECUTABLE = "/app/target/release/ixa-epi-covid" PHASE1_ENTROPY = 0x2D845A9183A835EC4A777F6C7403A6D0 @@ -211,6 +213,27 @@ def resolve_cloud_sizing( ) +def apply_local_docker_runtime_overrides( + model_inputs: dict[str, Any], + *, + docker: bool, + cloud: bool, + mrp_config: str | Path | None, +) -> dict[str, Any]: + """Return model inputs adjusted for the built-in local Docker runtime.""" + if not docker or cloud or mrp_config is not None: + return model_inputs + + resolved_inputs = deepcopy(model_inputs) + config_inputs = resolved_inputs.get("config_inputs") + if not isinstance(config_inputs, dict): + raise ValueError( + "Docker phase-1 calibration inputs must include config_inputs." + ) + config_inputs["exe_file"] = DOCKER_IXA_EXECUTABLE + return resolved_inputs + + def resolve_model_runner( args: argparse.Namespace, *, @@ -317,6 +340,12 @@ def _run_calibration_from_args(args: argparse.Namespace): output_dir, outputs_to_read=[PHASE1_OUTPUT_NAME], ) + mrp_defaults = apply_local_docker_runtime_overrides( + mrp_defaults, + docker=args.docker, + cloud=args.cloud, + mrp_config=args.mrp_config, + ) priors = load_priors(config.priors_file) particles_to_params = build_particles_to_params( diff --git a/tests/cloud/test_mrp_runner.py b/tests/cloud/test_mrp_runner.py index bcc4788..ac02d79 100644 --- a/tests/cloud/test_mrp_runner.py +++ b/tests/cloud/test_mrp_runner.py @@ -1,10 +1,18 @@ +import json +import os +import sys +import textwrap from pathlib import Path import polars as pl import pytest from mrp.runtime import RunResult -from ixa_epi_covid.mrp_runner import IxaEpiCovidMRPRunner +from ixa_epi_covid.mrp_runner import ( + DEFAULT_DOCKER_MRP_CONFIG_PATH, + IxaEpiCovidMRPRunner, +) +from ixa_epi_covid.phase1.calibrate import DOCKER_IXA_EXECUTABLE def test_mrp_runner_parses_phase1_output(monkeypatch): @@ -85,3 +93,116 @@ def fake_mrp_run(config_path, overrides, output_dir=None): ) assert output["aggregated_deaths_report"]["count"] == [1] + + +def test_docker_mrp_runner_forwards_staged_input_to_task_runner( + monkeypatch, + tmp_path, +): + fake_bin_dir = tmp_path / "bin" + fake_bin_dir.mkdir() + fake_docker = fake_bin_dir / "docker" + fake_docker.write_text( + textwrap.dedent( + f"""\ + #!{sys.executable} + import json + import sys + from pathlib import Path + + expected_command = [ + "/app/.venv/bin/python", + "-m", + "ixa_epi_covid.mrp_task_runner", + ] + args = sys.argv[1:] + try: + image_index = args.index("ixa-epi-covid-cloud:latest") + except ValueError: + print("missing cloud image argument", file=sys.stderr) + raise SystemExit(2) + + actual_command = args[image_index + 1:] + if actual_command != expected_command: + print( + f"unexpected container command: {{actual_command!r}}", + file=sys.stderr, + ) + raise SystemExit(3) + + transport = json.loads(sys.stdin.read()) + model_input = transport["input"] + missing = [ + key + for key in [ + "ixa_inputs", + "config_inputs", + "importation_inputs", + "run_id", + ] + if key not in model_input + ] + if missing: + print(f"missing staged input keys: {{missing!r}}", file=sys.stderr) + raise SystemExit(4) + + if model_input["run_id"] != "gen_0_particle_0_attempt_0": + print("run_id was not forwarded", file=sys.stderr) + raise SystemExit(5) + + container_exe = model_input["config_inputs"]["exe_file"] + if container_exe != {DOCKER_IXA_EXECUTABLE!r}: + print( + "container IXA executable was not forwarded", + file=sys.stderr, + ) + raise SystemExit(6) + + output_dir = Path(transport["output"]["dir"]) + output_dir.mkdir(parents=True, exist_ok=True) + (output_dir / "output.csv").write_text( + "t_lower,t_upper,count\\n0.0,1.0,2\\n", + encoding="utf-8", + ) + """ + ), + encoding="utf-8", + ) + fake_docker.chmod(0o755) + monkeypatch.setenv( + "PATH", + f"{fake_bin_dir}{os.pathsep}{os.environ['PATH']}", + ) + + input_path = tmp_path / "input" / "gen_0_particle_0_attempt_0.json" + input_path.parent.mkdir(parents=True) + input_path.write_text( + json.dumps( + { + "run_id": "gen_0_particle_0_attempt_0", + "ixa_inputs": {"epimodel.GlobalParams": {"seed": 123}}, + "config_inputs": { + "exe_file": DOCKER_IXA_EXECUTABLE, + "output_dir": "original-output", + "outputs_to_read": ["aggregated_deaths_report"], + }, + "importation_inputs": { + "state": "Indiana", + "year": 2020, + "symptomatic_reporting_prob": 0.5, + }, + } + ), + encoding="utf-8", + ) + run_output_dir = tmp_path / "output" / "gen_0_particle_0_attempt_0" + + runner = IxaEpiCovidMRPRunner(DEFAULT_DOCKER_MRP_CONFIG_PATH) + output = runner.simulate( + {"ignored": True}, + input_path=input_path, + output_dir=run_output_dir, + run_id="gen_0_particle_0_attempt_0", + ) + + assert output["aggregated_deaths_report"]["count"] == [2] diff --git a/tests/cloud/test_mrp_toml_configs.py b/tests/cloud/test_mrp_toml_configs.py index 121682d..9a775ee 100644 --- a/tests/cloud/test_mrp_toml_configs.py +++ b/tests/cloud/test_mrp_toml_configs.py @@ -56,3 +56,16 @@ def test_local_task_and_docker_mrp_configs_remain_process_backed(): assert config["runtime"]["spec"] == "process" assert config["runtime"]["command"] == command assert "callable" not in config["runtime"] + + +def test_docker_mrp_config_runs_task_runner_directly(): + config = _load_config("ixa_epi_covid.mrp.docker.toml") + command = " ".join(config["runtime"]["args"]) + + assert "docker run --rm -i" in command + assert "ixa-epi-covid-cloud:latest" in command + assert ( + "ixa-epi-covid-cloud:latest /app/.venv/bin/python " + "-m ixa_epi_covid.mrp_task_runner" + ) in command + assert "mrp run /app/ixa_epi_covid.mrp.task.toml" not in command diff --git a/tests/cloud/test_phase1_core.py b/tests/cloud/test_phase1_core.py index ac914da..40f2b19 100644 --- a/tests/cloud/test_phase1_core.py +++ b/tests/cloud/test_phase1_core.py @@ -2,6 +2,7 @@ from pathlib import Path from types import SimpleNamespace +from ixa_epi_covid.phase1 import calibrate from ixa_epi_covid.phase1 import core @@ -149,3 +150,60 @@ def test_phase1_rows_to_report_casts_csv_table_strings(): assert report["t_lower"].to_list() == [0.0] assert report["t_upper"].to_list() == [1.0] assert report["count"].to_list() == [2] + + +def test_local_docker_runtime_overrides_container_executable(): + model_inputs = { + "config_inputs": { + "exe_file": "./target/release/ixa-epi-covid", + "output_dir": "output", + }, + "other": {"value": 1}, + } + + updated = calibrate.apply_local_docker_runtime_overrides( + model_inputs, + docker=True, + cloud=False, + mrp_config=None, + ) + + assert ( + updated["config_inputs"]["exe_file"] == calibrate.DOCKER_IXA_EXECUTABLE + ) + assert ( + model_inputs["config_inputs"]["exe_file"] + == "./target/release/ixa-epi-covid" + ) + assert updated["other"] == model_inputs["other"] + + +def test_local_docker_runtime_overrides_only_builtin_docker_mode(): + model_inputs = { + "config_inputs": { + "exe_file": "./target/release/ixa-epi-covid", + } + } + + direct_inputs = calibrate.apply_local_docker_runtime_overrides( + model_inputs, + docker=False, + cloud=False, + mrp_config=None, + ) + cloud_inputs = calibrate.apply_local_docker_runtime_overrides( + model_inputs, + docker=True, + cloud=True, + mrp_config=None, + ) + custom_mrp_inputs = calibrate.apply_local_docker_runtime_overrides( + model_inputs, + docker=True, + cloud=False, + mrp_config=Path("custom.toml"), + ) + + assert direct_inputs == model_inputs + assert cloud_inputs == model_inputs + assert custom_mrp_inputs == model_inputs From 44cc17a3a2f03639fa92edfd4c8a3e0576acc200 Mon Sep 17 00:00:00 2001 From: Gil Sharon Date: Tue, 5 May 2026 13:11:38 -0400 Subject: [PATCH 14/15] fix lint --- tests/cloud/test_phase1_core.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/cloud/test_phase1_core.py b/tests/cloud/test_phase1_core.py index 40f2b19..90012f5 100644 --- a/tests/cloud/test_phase1_core.py +++ b/tests/cloud/test_phase1_core.py @@ -2,8 +2,7 @@ from pathlib import Path from types import SimpleNamespace -from ixa_epi_covid.phase1 import calibrate -from ixa_epi_covid.phase1 import core +from ixa_epi_covid.phase1 import calibrate, core def test_resolve_synth_population_file_uses_env_copy(monkeypatch, tmp_path): From 95fbeb24e136e867f9996a77e9f99a33847eca48 Mon Sep 17 00:00:00 2001 From: Gil Sharon Date: Wed, 6 May 2026 10:49:27 -0400 Subject: [PATCH 15/15] last commit for now --- .gitignore | 1 + Makefile | 7 +- experiments/phase1/reports/calibration.qmd | 2 +- scripts/phase_1_projection.py | 2 +- src/ixa_epi_covid/covid_model.py | 7 +- src/ixa_epi_covid/phase1/calibrate.py | 15 +-- tests/cloud/test_phase1_auto_size.py | 110 ++++++++++++++++++++- tests/test_ixa_epi_covid.py | 3 +- 8 files changed, 130 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index 24d59f5..3c6c639 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ **/profiling.json +artifacts/ experiments/**/simulations/ experiments/**/calibration/ .codex diff --git a/Makefile b/Makefile index fb41225..925c77d 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ STATE ?=WY SIZE ?= 1000 +RUFF_VERSION ?= 0.14.6 # Normalize SIZE to use underscores (e.g., 1000 -> 1_000, 1000000 -> 1_000_000) NORMALIZED_SIZE := $(shell python3 -c "print(f'{int(\"$(SIZE)\".replace(\"_\",\"\")):_}')") @@ -75,10 +76,10 @@ test: uv run pytest lint: - uv run --with ruff ruff check --line-length 79 . + uv run --with ruff==$(RUFF_VERSION) ruff check --line-length 79 . format-check: - uv run --with ruff ruff format --check --line-length 79 . + uv run --with ruff==$(RUFF_VERSION) ruff format --check --line-length 79 . typecheck: uv run --with ty ty check --ignore=unresolved-import @@ -158,7 +159,7 @@ CLOUD_CLEANUP_ACR ?= --skip-acr CLOUD_CLEANUP_FILTERS = $(if $(SESSION_ID),--session-id $(SESSION_ID)) $(if $(CLOUD_USER),--user $(CLOUD_USER)) $(if $(IMAGE_TAG),--image-tag $(IMAGE_TAG)) $(CLOUD_CLEANUP_ACR) PHASE1_PROD_CONFIG ?= ./experiments/phase1/input/prod-config.yaml PHASE1_DEV_CONFIG ?= ./experiments/phase1/input/dev-config.yaml -CLOUD_ARTIFACTS_DIR ?= ./experiments/phase1/calibration/cloud_artifacts +CLOUD_ARTIFACTS_DIR ?= ./experiments/phase1/calibration/artifacts TARGET_RESULTS = ./experiments/phase1/calibration/output_indiana/results.pkl define require_session_id diff --git a/experiments/phase1/reports/calibration.qmd b/experiments/phase1/reports/calibration.qmd index 9f91024..19451ec 100644 --- a/experiments/phase1/reports/calibration.qmd +++ b/experiments/phase1/reports/calibration.qmd @@ -19,7 +19,7 @@ import matplotlib.pyplot as plt import numpy as np import polars as pl import json -from particle_reader import ParticleReader +from calibrationtools import ParticleReader import tempfile import polars as pl import os diff --git a/scripts/phase_1_projection.py b/scripts/phase_1_projection.py index 460b57e..061c2bd 100644 --- a/scripts/phase_1_projection.py +++ b/scripts/phase_1_projection.py @@ -13,10 +13,10 @@ from calibrationtools import ( CalibrationResults, Particle, + ParticleReader, SamplerReporter, run_coroutine_from_sync, ) -from particle_reader import ParticleReader from ixa_epi_covid import CovidModel, update_epimodel_output_dir from ixa_epi_covid.config_parser import CovidModelConfig diff --git a/src/ixa_epi_covid/covid_model.py b/src/ixa_epi_covid/covid_model.py index d706102..d15c016 100644 --- a/src/ixa_epi_covid/covid_model.py +++ b/src/ixa_epi_covid/covid_model.py @@ -38,7 +38,7 @@ def simulate( input_path: str | Path | None = None, output_dir: str | Path | None = None, run_id: str | None = None, - ) -> dict[str, pl.DataFrame]: + ) -> dict[str, dict[str, list[Any]]]: resolved_inputs = self._resolve_inputs( model_inputs, input_path=input_path, @@ -51,7 +51,10 @@ def simulate( Path(output_dir) / CANONICAL_OUTPUT_FILENAME, outputs, ) - return outputs + return { + output_name: phase1_report_to_rows(report) + for output_name, report in outputs.items() + } @staticmethod def _resolve_inputs( diff --git a/src/ixa_epi_covid/phase1/calibrate.py b/src/ixa_epi_covid/phase1/calibrate.py index efef74d..d5575e8 100644 --- a/src/ixa_epi_covid/phase1/calibrate.py +++ b/src/ixa_epi_covid/phase1/calibrate.py @@ -46,7 +46,7 @@ ) DEFAULT_MAX_CONCURRENT_SIMULATIONS = 10 -DEFAULT_ARTIFACTS_DIR = Path("artifacts") +DEFAULT_ARTIFACTS_DIR = Path("experiments/phase1/calibration/artifacts") DOCKER_IXA_EXECUTABLE = "/app/target/release/ixa-epi-covid" PHASE1_ENTROPY = 0x2D845A9183A835EC4A777F6C7403A6D0 @@ -353,8 +353,13 @@ def _run_calibration_from_args(args: argparse.Namespace): particle_param_names=list(priors["priors"].keys()) + ["seed"], ) - cloud_sizing = resolve_cloud_sizing(args, base_inputs=mrp_defaults) - print_cloud_auto_size_summary(cloud_sizing) + if args.cloud: + cloud_sizing = resolve_cloud_sizing(args, base_inputs=mrp_defaults) + print_cloud_auto_size_summary(cloud_sizing) + max_concurrent_simulations = cloud_sizing.max_concurrent_simulations + else: + cloud_sizing = None + max_concurrent_simulations = resolve_max_concurrent_simulations(args) model_runner = resolve_model_runner( args, @@ -379,9 +384,7 @@ def _run_calibration_from_args(args: argparse.Namespace): outputs_to_distance=outputs_to_distance, target_data=config.target_data, model_runner=model_runner, - max_concurrent_simulations=( - cloud_sizing.max_concurrent_simulations - ), + max_concurrent_simulations=max_concurrent_simulations, entropy=PHASE1_ENTROPY, print_generation_progress=args.print_task_progress, artifacts_dir=resolved_artifacts_dir, diff --git a/tests/cloud/test_phase1_auto_size.py b/tests/cloud/test_phase1_auto_size.py index 5f981a4..949a9ca 100644 --- a/tests/cloud/test_phase1_auto_size.py +++ b/tests/cloud/test_phase1_auto_size.py @@ -1,5 +1,7 @@ import argparse +from pathlib import Path from types import SimpleNamespace +from typing import cast import pytest @@ -62,9 +64,8 @@ def fake_resolve_cloud_sizing_from_config(**kwargs): def test_resolve_artifacts_dir_defaults_to_shared_artifacts_dir(): - assert ( - calibrate.resolve_artifacts_dir(_args()) - == calibrate.DEFAULT_ARTIFACTS_DIR + assert calibrate.resolve_artifacts_dir(_args()) == Path( + "experiments/phase1/calibration/artifacts" ) @@ -214,3 +215,106 @@ def test_resolve_model_runner_defaults_to_direct_runner(): ) assert isinstance(runner, calibrate.IxaEpiCovidDirectRunner) + + +def test_local_calibration_does_not_resolve_cloud_sizing( + monkeypatch, + tmp_path, +): + output_dir = tmp_path / "output" + captured: dict[str, object] = {} + + class FakeConfig: + force_overwrite = True + tolerance_values = [2.0] + generation_particle_count = 1 + priors_file = tmp_path / "priors.json" + target_data = object() + + def update_ixa_params(self, overrides): + captured["ixa_overrides"] = overrides + + def get_mrp_defaults_for_output(self, output_dir, outputs_to_read): + captured["defaults_output_dir"] = output_dir + captured["outputs_to_read"] = outputs_to_read + return {"config_inputs": {"output_dir": str(output_dir)}} + + class FakeResults: + def get_diagnostics(self): + return {"quantiles": {}, "correlation_matrix": "corr"} + + class FakeSampler: + def __init__(self, **kwargs): + captured["sampler_kwargs"] = kwargs + + def run(self): + return FakeResults() + + def fail_cloud_sizing(*args, **kwargs): + raise AssertionError( + "cloud sizing should not run for local calibration" + ) + + monkeypatch.setattr( + calibrate, + "load_phase1_config", + lambda *a, **k: FakeConfig(), + ) + monkeypatch.setattr( + calibrate, + "resolve_synth_population_file", + lambda *a, **k: tmp_path / "synth.csv", + ) + monkeypatch.setattr( + calibrate, + "build_runtime_ixa_overrides", + lambda *a, **k: {}, + ) + monkeypatch.setattr( + calibrate, + "prepare_output_dir", + lambda *a, **k: output_dir, + ) + monkeypatch.setattr( + calibrate, "load_priors", lambda *a, **k: {"priors": {}} + ) + monkeypatch.setattr( + calibrate, + "build_particles_to_params", + lambda *a, **k: object(), + ) + monkeypatch.setattr(calibrate, "resolve_cloud_sizing", fail_cloud_sizing) + monkeypatch.setattr( + calibrate, "print_cloud_auto_size_summary", fail_cloud_sizing + ) + monkeypatch.setattr( + calibrate, + "resolve_model_runner", + lambda *a, **k: captured.update({"cloud_sizing": k["cloud_sizing"]}) + or object(), + ) + monkeypatch.setattr(calibrate, "ABCSampler", FakeSampler) + monkeypatch.setattr( + calibrate, + "save_calibration_artifacts", + lambda *a, **k: None, + ) + + calibrate._run_calibration_from_args( + _args( + config_file=tmp_path / "config.yaml", + output_dir=output_dir, + default_population_size_dev="50_000", + mrp_config=None, + docker=False, + print_task_durations=False, + print_task_progress=False, + max_workers=3, + ) + ) + + assert captured["cloud_sizing"] is None + sampler_kwargs_obj = captured["sampler_kwargs"] + assert isinstance(sampler_kwargs_obj, dict) + sampler_kwargs = cast(dict[str, object], sampler_kwargs_obj) + assert sampler_kwargs["max_concurrent_simulations"] == 3 diff --git a/tests/test_ixa_epi_covid.py b/tests/test_ixa_epi_covid.py index 6121de1..e55d2ed 100644 --- a/tests/test_ixa_epi_covid.py +++ b/tests/test_ixa_epi_covid.py @@ -144,11 +144,12 @@ def fake_execute(model_inputs): "imported_cases_timeseries" ]["filename"] == str(output_dir / "imported_cases_timeseries.csv") assert (output_dir / "output.csv").exists() - assert output[PHASE1_OUTPUT_NAME].to_dict(as_series=False) == { + assert output[PHASE1_OUTPUT_NAME] == { "t_lower": [0.0], "t_upper": [1.0], "count": [1], } + json.dumps(output) def test_get_mrp_defaults_for_output_includes_population_proportion(