9 from scipy
.stats
import gmean
14 import matplotlib
as mpl
15 import matplotlib
.pyplot
as plt
17 # # %matplotlib inline
21 connection_string
= 'postgresql://covid:3NbjJTkT63@localhost/covid'
25 engine
= sqlalchemy
.create_engine(connection_string
)
29 normalisation_date
= '2020-08-01' # '2020-05-15'
31 hospital_normalisation_date
= {
32 'hospital_normalisation_date': normalisation_date
35 with
open('hospital_normalisation_date.json', 'w') as f
:
36 json
.dump(hospital_normalisation_date
, f
)
38 hnd
= pd
.to_datetime(normalisation_date
).strftime("%d %B %Y")
39 with
open('hospital_normalisation_date.js', 'w') as f
:
40 f
.write(f
"document.write('{hnd}');")
44 qstr
= '''select uk_data.date
45 , uk_data.new_admissions, uk_data_7.new_admissions as new_admissions_7
46 , uk_data.new_cases, uk_data_7.new_cases as new_cases_7
47 , uk_data.new_deaths, uk_data_7.new_deaths as new_deaths_7
48 , uk_data.hospital_cases, uk_data_7.hospital_cases as hospital_cases_7
49 , uk_data.ventilator_beds, uk_data_7.ventilator_beds as ventilator_beds_7
50 from uk_data left outer join uk_data_7 using (date)
51 order by uk_data.date'''
52 hospital_data
= pd
.read_sql_query(qstr
, engine
,
54 parse_dates
= ['date'])
58 fig
= plt
.figure(figsize
=(10, 8))
59 ax
= hospital_data
.loc
['2020-03-20':, ['hospital_cases', 'ventilator_beds']].plot(
60 secondary_y
='ventilator_beds',
62 title
="People in hospital, and on mechanical ventilation")
63 # axl.legend(['Number in hospital', 'Number on ventilator'])
64 plt
.savefig('people_in_hospital.png')
68 hospital_data
['cases_m7nd'] = hospital_data
.new_cases_7
/ hospital_data
.new_cases_7
.loc
[normalisation_date
]
69 hospital_data
['deaths_m7nd'] = hospital_data
.new_deaths_7
/ hospital_data
.new_deaths_7
.loc
[normalisation_date
]
70 hospital_data
['admissions_m7nd'] = hospital_data
.new_admissions_7
/ hospital_data
.new_admissions_7
.loc
[normalisation_date
]
74 ymax
= (int(hospital_data
.loc
[normalisation_date
:, ['cases_m7nd', 'admissions_m7nd', 'deaths_m7nd']].max().max() * 10) + 1) / 10.0
75 ax
= hospital_data
.loc
[normalisation_date
:, ['cases_m7nd', 'admissions_m7nd', 'deaths_m7nd']].plot(
78 title
="Cases, hospital admissions, and deaths\n(7-day moving averages)")
80 lvi
= hospital_data
.cases_m7nd
.last_valid_index()
81 ax
.text(x
= lvi
+ pd
.Timedelta(days
=1), y
= hospital_data
.cases_m7nd
[lvi
], s
= f
'{hospital_data.cases_m7nd[lvi]:.2f}')
83 lvi
= hospital_data
.admissions_m7nd
.last_valid_index()
84 ax
.text(x
= lvi
+ pd
.Timedelta(days
=1), y
= hospital_data
.admissions_m7nd
[lvi
], s
= f
'{hospital_data.admissions_m7nd[lvi]:.2f}')
86 lvi
= hospital_data
.deaths_m7nd
.last_valid_index()
87 ax
.text(x
= lvi
+ pd
.Timedelta(days
=1), y
= hospital_data
.deaths_m7nd
[lvi
], s
= f
'{hospital_data.deaths_m7nd[lvi]:.2f}')
91 ax
.set_ylabel(f
'Normalised units, scaled from {normalisation_date}')
92 ax
.legend(['Cases', 'Admissions', 'Deaths'])
94 plt
.savefig('cases_admissions_deaths.png')