X-Git-Url: https://git.njae.me.uk/?p=covid19.git;a=blobdiff_plain;f=hospital_data.py;fp=hospital_data.py;h=3771cfa468522bd5c7601b7982c1186bfd5f4184;hp=0000000000000000000000000000000000000000;hb=5afedd66506be7575034ae6deebcfaa7c2ced978;hpb=4abff18d7988bdea04a267a08a0792ba570fe0bd diff --git a/hospital_data.py b/hospital_data.py new file mode 100644 index 0000000..3771cfa --- /dev/null +++ b/hospital_data.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python +# coding: utf-8 +# %% +import itertools +import collections +import json +import pandas as pd +import numpy as np +from scipy.stats import gmean +import datetime + +import sqlalchemy + +import matplotlib as mpl +import matplotlib.pyplot as plt +plt.ioff() + + +# %% +connection_string = 'postgresql://covid:3NbjJTkT63@localhost/covid' + + +# %% +engine = sqlalchemy.create_engine(connection_string) + + +# %% +normalisation_date = '2020-08-01' # '2020-05-15' + +hospital_normalisation_date = { + 'hospital_normalisation_date': normalisation_date +} + +with open('hospital_normalisation_date.json', 'w') as f: + json.dump(hospital_normalisation_date, f) + +hnd = pd.to_datetime(normalisation_date).strftime("%d %B %Y") +with open('hospital_normalisation_date.js', 'w') as f: + f.write(f"document.write('{hnd}');") + + +# %% +qstr = '''select uk_data.date + , uk_data.new_admissions, uk_data_7.new_admissions as new_admissions_7 + , uk_data.new_cases, uk_data_7.new_cases as new_cases_7 + , uk_data.new_deaths, uk_data_7.new_deaths as new_deaths_7 + , uk_data.hospital_cases, uk_data_7.hospital_cases as hospital_cases_7 + , uk_data.ventilator_beds, uk_data_7.ventilator_beds as ventilator_beds_7 + from uk_data left outer join uk_data_7 using (date) + order by uk_data.date''' +hospital_data = pd.read_sql_query(qstr, engine, + index_col='date', + parse_dates = ['date']) + + +# %% +fig = plt.figure(figsize=(10, 8)) +ax = hospital_data.loc['2020-03-20':, ['hospital_cases', 'ventilator_beds']].plot( + secondary_y='ventilator_beds', + figsize=(10, 8), + title="People in hospital, and on mechanical ventilation") +# axl.legend(['Number in hospital', 'Number on ventilator']) +plt.savefig('people_in_hospital.png') + + +# %% +hospital_data['cases_m7nd'] = hospital_data.new_cases_7 / hospital_data.new_cases_7.loc[normalisation_date] +hospital_data['deaths_m7nd'] = hospital_data.new_deaths_7 / hospital_data.new_deaths_7.loc[normalisation_date] +hospital_data['admissions_m7nd'] = hospital_data.new_admissions_7 / hospital_data.new_admissions_7.loc[normalisation_date] + + +# %% +ymax = (int(hospital_data.loc[normalisation_date:, ['cases_m7nd', 'admissions_m7nd', 'deaths_m7nd']].max().max() * 10) + 1) / 10.0 +ax = hospital_data.loc[normalisation_date:, ['cases_m7nd', 'admissions_m7nd', 'deaths_m7nd']].plot( + ylim=(0, ymax), + figsize=(10, 8), + title="Cases, hospital admissions, and deaths\n(7-day moving averages)") + +lvi = hospital_data.cases_m7nd.last_valid_index() +ax.text(x = lvi + pd.Timedelta(days=1), y = hospital_data.cases_m7nd[lvi], s = f'{hospital_data.cases_m7nd[lvi]:.2f}') + +lvi = hospital_data.admissions_m7nd.last_valid_index() +ax.text(x = lvi + pd.Timedelta(days=1), y = hospital_data.admissions_m7nd[lvi], s = f'{hospital_data.admissions_m7nd[lvi]:.2f}') + +lvi = hospital_data.deaths_m7nd.last_valid_index() +ax.text(x = lvi + pd.Timedelta(days=1), y = hospital_data.deaths_m7nd[lvi], s = f'{hospital_data.deaths_m7nd[lvi]:.2f}') + + +ax.set_xlabel("Date") +ax.set_ylabel(f'Normalised units, scaled from {normalisation_date}') +ax.legend(['Cases', 'Admissions', 'Deaths']) + +plt.savefig('cases_admissions_deaths.png') + + +# %% + + + +