From c696c800fc8b00bbf77d76fdaf86dccd1aa9b46a Mon Sep 17 00:00:00 2001 From: fordprefect Date: Thu, 19 Mar 2020 14:58:20 +0100 Subject: [PATCH] initial visualization --- coronavis.py | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 coronavis.py diff --git a/coronavis.py b/coronavis.py new file mode 100644 index 0000000..d55631a --- /dev/null +++ b/coronavis.py @@ -0,0 +1,82 @@ +#!/usr/bin/python + +import requests +import csv +import datetime +import os +import matplotlib.pyplot as pp +import numpy as np + + +dataurl = "https://covid.ourworldindata.org/data/full_data.csv" +date = datetime.date.today() + +datafile = f"{date}-full-data.csv" + +if not os.path.isfile(datafile): + r = requests.get(dataurl) + with open(datafile, "wb") as f: + f.write(r.content) +else: + print(f"file found: {datafile}") + +# processing +data = {} +with open(datafile, "r") as f: + reader = csv.reader(f) + for row in reader: + date,location,new_cases,new_deaths,total_cases,total_deaths = row + if location=="location": + # table header + continue + if location not in data: + data[location] = [] + year, month, day = date.split("-") + def toint(a): + try: + return int(a) + except: + return np.nan + data[location].append([datetime.date(int(year), int(month), int(day)), new_cases, new_deaths, total_cases, total_deaths]) + + +data2 = {} + +# reorganize data +for loc in data: + time = [] + new_cases, new_deaths, total_cases, total_deaths = [], [], [], [] + for entry in data[loc]: + t_, new_cases_, new_deaths_, total_cases_, total_deaths_ = entry + time.append(t_) + new_cases.append(toint(new_cases_)) + new_deaths.append(toint(new_deaths_)) + total_cases.append(toint(total_cases_)) + total_deaths.append(toint(total_deaths_)) + data2[loc] = [time, new_cases, new_deaths, total_cases, total_deaths] + +# countries of interest +countries = ["Germany", "Italy", "Spain", "Denmark", "China", "Japan", "South Korea", "Iran", "Belgium", "World"] + +# plotting +for loc in data2: + if loc not in countries: + continue + time, new_cases, new_deaths, total_cases, total_deaths = data2[loc] + + # total cases + pp.figure("total_cases") + pp.plot(time, total_cases, label=f"{loc}") + + # death/case + pp.figure("death_per_case") + pp.plot(time, np.array(total_deaths)/np.array(total_cases), label=f"{loc}") +# figure postprocessing +for fig in ["total_cases", "death_per_case"]: + pp.figure(fig) + pp.yscale("log") + pp.xticks(rotation=90) + pp.legend(frameon=False) + pp.tight_layout() + + pp.savefig(f"{fig}.png")