Now using py files, for automation
[covid19.git] / hospital_data.py
diff --git a/hospital_data.py b/hospital_data.py
new file mode 100644 (file)
index 0000000..3771cfa
--- /dev/null
@@ -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')
+
+
+# %%
+
+
+
+