From a9a6a4ee077d2b4bfbbba94479f1b8c324f6d360 Mon Sep 17 00:00:00 2001 From: CITF <87315214+MoH-Malaysia@users.noreply.github.com> Date: Fri, 18 Mar 2022 09:15:54 +0800 Subject: [PATCH] Create cfr_vaxstatus.ipynb --- notebooks/cfr_vaxstatus.ipynb | 739 ++++++++++++++++++++++++++++++++++ 1 file changed, 739 insertions(+) create mode 100644 notebooks/cfr_vaxstatus.ipynb diff --git a/notebooks/cfr_vaxstatus.ipynb b/notebooks/cfr_vaxstatus.ipynb new file mode 100644 index 000000000..36856c685 --- /dev/null +++ b/notebooks/cfr_vaxstatus.ipynb @@ -0,0 +1,739 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "2bb42c50", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from tabulate import tabulate\n", + "\n", + "import numpy as np\n", + "import datetime\n", + "from datetime import date, timedelta\n", + "\n", + "import seaborn as sb\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.patches as mpatches\n", + "from matplotlib.lines import Line2D\n", + "import matplotlib.ticker as tkr\n", + "\n", + "linelist_cases_1 = 'https://raw.githubusercontent.com/MoH-Malaysia/covid19-public/main/epidemic/linelist/linelist_cases_06.csv'\n", + "linelist_cases_2 = 'https://raw.githubusercontent.com/MoH-Malaysia/covid19-public/main/epidemic/linelist/linelist_cases_07.csv'\n", + "linelist_deaths = 'https://raw.githubusercontent.com/MoH-Malaysia/covid19-public/main/epidemic/linelist/linelist_deaths.csv'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "ecad69a0", + "metadata": {}, + "outputs": [], + "source": [ + "date_min = date.today() - timedelta(14)\n", + "date_max = date.today() - timedelta(1)\n", + "\n", + "def vaxStatus(date_pos, date1, date2, date3, cases=1):\n", + " if cases == 1:\n", + " if date3 > 6: return 'boosted'\n", + " elif date2 > 13: return 'fullyvax'\n", + " elif date1 >= 0: return 'partialvax'\n", + " else: return 'unvax'\n", + " elif cases == 0:\n", + " if (date_pos - date3).days > 6: return 'boosted'\n", + " elif (date_pos - date2).days > 13: return 'fullyvax'\n", + " elif (date_pos - date1).days >= 0: return 'partialvax'\n", + " else: return 'unvax'\n", + "\n", + "def castAge(age):\n", + " if age == -1: return 'missing'\n", + " elif age < 5: return '0_4'\n", + " elif age < 12: return '5_11'\n", + " elif age < 18: return '12_17'\n", + " elif age < 30: return '18_29'\n", + " elif age < 40: return '30_39'\n", + " elif age < 50: return '40_49'\n", + " elif age < 60: return '50_59'\n", + " elif age < 70: return '60_69'\n", + " elif age < 80: return '70_79'\n", + " else: return '80+'\n", + "\n", + "ages = [x for x in range(-1, 150)]\n", + "age_cat = dict(zip(ages, [castAge(x) for x in ages]))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "67db3a24", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
agestatusdeaths
018_29fullyvax7
118_29unvax5
230_39boosted6
330_39fullyvax13
430_39unvax7
540_49boosted17
640_49fullyvax20
740_49unvax17
850_59boosted27
950_59fullyvax50
1050_59unvax28
1160_69boosted37
1260_69fullyvax94
1360_69unvax40
1470_79boosted55
1570_79fullyvax118
1670_79unvax60
1780+boosted52
1880+fullyvax137
1980+unvax117
20Overallboosted194
21Overallfullyvax439
22Overallunvax274
\n", + "
" + ], + "text/plain": [ + " age status deaths\n", + "0 18_29 fullyvax 7\n", + "1 18_29 unvax 5\n", + "2 30_39 boosted 6\n", + "3 30_39 fullyvax 13\n", + "4 30_39 unvax 7\n", + "5 40_49 boosted 17\n", + "6 40_49 fullyvax 20\n", + "7 40_49 unvax 17\n", + "8 50_59 boosted 27\n", + "9 50_59 fullyvax 50\n", + "10 50_59 unvax 28\n", + "11 60_69 boosted 37\n", + "12 60_69 fullyvax 94\n", + "13 60_69 unvax 40\n", + "14 70_79 boosted 55\n", + "15 70_79 fullyvax 118\n", + "16 70_79 unvax 60\n", + "17 80+ boosted 52\n", + "18 80+ fullyvax 137\n", + "19 80+ unvax 117\n", + "20 Overall boosted 194\n", + "21 Overall fullyvax 439\n", + "22 Overall unvax 274" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Pull latest death linelist and wrangle\n", + "df = pd.read_csv(linelist_deaths, usecols=['date', 'age', 'date_positive', 'date_dose1', 'date_dose2', 'date_dose3', 'brand1'])\n", + "for c in ['date', 'date_positive', 'date_dose1', 'date_dose2', 'date_dose3']: df[c] = pd.to_datetime(df[c], errors='coerce').dt.date\n", + "df = df[(df.date >= date_min) & (df.date <= date_max)]\n", + "\n", + "# Ensure no null vax dates (future date as placeholder), shift 14 days for Cansino, then encode vax status and age group\n", + "for c in ['date_dose1', 'date_dose2', 'date_dose3']: df[c] = df[c].fillna(date.today() + timedelta(1))\n", + "df.loc[df.brand1.isin(['Cansino']), 'date_dose2'] = df.date_dose1 + timedelta(14)\n", + "df['status'] = df.apply(lambda x: vaxStatus(x['date_positive'], x['date_dose1'], x['date_dose2'], x['date_dose3'], cases=0), axis=1)\n", + "df = df.replace(date.today() + timedelta(1), np.nan) # Remove placeholder dates\n", + "df.age = df.age.map(age_cat) # Encode age group\n", + "\n", + "# Tabulate\n", + "df = df[~df.age.isin(['missing','0_4','5_11','12_17'])].groupby(['age', 'status']).size().to_frame('deaths').reset_index()\n", + "df = df[~df.status.isin(['partialvax'])].reset_index(drop=True)\n", + "df = pd.concat([df, df.groupby(['status']).sum().reset_index()],axis=0).fillna('Overall').reset_index(drop=True)\n", + "df.head(len(df))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "08ad8f97", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
agestatuscases
018_29boosted52657
118_29fullyvax52817
218_29unvax4183
330_39boosted56575
430_39fullyvax34507
530_39unvax3822
640_49boosted37800
740_49fullyvax15158
840_49unvax2071
950_59boosted25015
1050_59fullyvax9390
1150_59unvax1398
1260_69boosted15879
1360_69fullyvax6520
1460_69unvax1052
1570_79boosted6430
1670_79fullyvax3355
1770_79unvax759
1880+boosted1567
1980+fullyvax1346
2080+unvax927
21Overallboosted195923
22Overallfullyvax123093
23Overallunvax14212
\n", + "
" + ], + "text/plain": [ + " age status cases\n", + "0 18_29 boosted 52657\n", + "1 18_29 fullyvax 52817\n", + "2 18_29 unvax 4183\n", + "3 30_39 boosted 56575\n", + "4 30_39 fullyvax 34507\n", + "5 30_39 unvax 3822\n", + "6 40_49 boosted 37800\n", + "7 40_49 fullyvax 15158\n", + "8 40_49 unvax 2071\n", + "9 50_59 boosted 25015\n", + "10 50_59 fullyvax 9390\n", + "11 50_59 unvax 1398\n", + "12 60_69 boosted 15879\n", + "13 60_69 fullyvax 6520\n", + "14 60_69 unvax 1052\n", + "15 70_79 boosted 6430\n", + "16 70_79 fullyvax 3355\n", + "17 70_79 unvax 759\n", + "18 80+ boosted 1567\n", + "19 80+ fullyvax 1346\n", + "20 80+ unvax 927\n", + "21 Overall boosted 195923\n", + "22 Overall fullyvax 123093\n", + "23 Overall unvax 14212" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Pull latest 2 case linelists and wrangle\n", + "col_cases = ['date', 'age', 'days_dose1', 'days_dose2', 'days_dose3', 'brand1']\n", + "cf = pd.concat([pd.read_csv(linelist_cases_1, usecols=col_cases),\n", + " pd.read_csv(linelist_cases_2, usecols=col_cases)],axis=0)\n", + "for c in ['date']: cf[c] = pd.to_datetime(cf[c], errors='coerce').dt.date\n", + "cf = cf[(cf.date >= date_min - timedelta(7)) & (cf.date <= date_max - timedelta(7))] # backshift to account for lag between cases and deaths\n", + "\n", + "# Ensure no null vax dates (-1 as placeholder), shift 14 days for Cansino, then encode vax status and age group\n", + "for c in ['days_dose1', 'days_dose2', 'days_dose3']: cf[c] = cf[c].fillna(-1)\n", + "cf.loc[cf.brand1.isin(['c']), 'days_dose2'] = cf.days_dose1 - 14\n", + "cf['status'] = cf.apply(lambda x: vaxStatus(x['date'], x['days_dose1'], x['days_dose2'], x['days_dose3'], cases=1), axis=1)\n", + "cf.age = cf.age.map(age_cat) # Encode age group\n", + "\n", + "# Tabulate\n", + "cf = cf[~cf.age.isin(['missing','0_4','5_11','12_17'])].groupby(['age', 'status']).size().to_frame('cases').reset_index()\n", + "cf = cf[~cf.status.isin(['partialvax'])].reset_index(drop=True)\n", + "cf = pd.concat([cf, cf.groupby(['status']).sum().reset_index()],axis=0).fillna('Overall').reset_index(drop=True)\n", + "cf.head(len(cf))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a75c9d8a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ageUnvaccinatedFully VaccinatedBoosted
018_290.1195310.0132530.000000
130_390.1831500.0376740.010605
240_490.8208590.1319440.044974
350_592.0028610.5324810.107935
460_693.8022811.4417180.233012
570_797.9051383.5171390.855365
680+12.62135910.1783063.318443
7Overall1.9279480.3566410.099018
\n", + "
" + ], + "text/plain": [ + " age Unvaccinated Fully Vaccinated Boosted\n", + "0 18_29 0.119531 0.013253 0.000000\n", + "1 30_39 0.183150 0.037674 0.010605\n", + "2 40_49 0.820859 0.131944 0.044974\n", + "3 50_59 2.002861 0.532481 0.107935\n", + "4 60_69 3.802281 1.441718 0.233012\n", + "5 70_79 7.905138 3.517139 0.855365\n", + "6 80+ 12.621359 10.178306 3.318443\n", + "7 Overall 1.927948 0.356641 0.099018" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Merge frames and compute incidence, then pivot\n", + "df = pd.merge(cf,df, on=['age','status'], how='left')\n", + "df['cfr'] = df.deaths/df.cases * 100\n", + "try: assert len(df[df.cfr < 0]) == 0\n", + "except AssertionError:\n", + " print('Negative CFR(s) detected')\n", + " df.head(len(df))\n", + "df = df.pivot(index='age', columns='status', values=['cfr']).fillna(0).reset_index()\n", + "df.columns = ['age','Boosted','Fully Vaccinated','Unvaccinated']\n", + "df = df[['age','Unvaccinated','Fully Vaccinated','Boosted']]\n", + "df.head(len(df))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "8c846da8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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eKKzsyEiIiIHp5S/p9TpPThvvZXRE6AiIiIiLer0AEdERESkvSnAERERkdhRgCMiIiKxowBHREREYkcBjoiIiMSOAhwRERGJHQU4IiIiEjsKcERERCR2FOCIiIhI7CjAERERkdhRgCMiIiKxowBHREREYkcBjoiIiMROt87OgIiISFvV19dTUVHR6uXHjBlDVlZWO+ZIOpsCHBEROehVVFRwT2Ehea1Ytgq4fMUKCgoK2jtb0okU4IiISCzkAUd0diaky9AYHBEREYkdBTgiIiISOwpwREREJHY0BqcFe/bsYcOGDdTW1nZ2VqST9ezZkxEjRtC9e/fOzoqIiLRAAU4LNmzYQE5ODvn5+ZhZZ2dHOom7s2XLFjZs2MCoUaM6OzsiItIC3aJqQW1tLQMHDlRwc4gzMwYOHKiePBGRg4QCnDQouBFQOxAROZjoFlUG2vpLmano1zNFRETanwKcDLTllzJTSffXM0tKSrj11luZN28eAJdddhlnn302F1xwQTvlJHOPPvooy5cv54YbbmjTembPns2sWbPo3bt3RstNmDCBefPmkZ+f36b0RUQknloMcMzsVuAS4E13n2Bmw4E/A/2B3cA33P3/zGwacCtQ4u5f67gsdy79UmYwY8YMZsyY0eb1zJ49m4svvjjjAEdERKQ56YzBeRA4K+FzHXCNu48HzgPmRNOvBqYAe82ssD0zKan17duX6667joKCAq666ioA7r//fq699trG73z5y1/m3nvvBeCcc86hqKiI4uJifvGLXzR+p7KykhkzZlBUVMQHP/hBVq5c2ez0Sy+9lCOPPHK/dJrKT1PpPvnkkxx77LFs2rSJk08+ufE9wNy5czn++OMpKiri+uuvb1zPT37yE44++mguvPBCDfYVEZFmtdiD4+7PmVl+wufNwObo/Toz62Fm2QmLWPTCzPq4+872zbI02LlzJxdddBE//elPGTNmDJs2beLss8/m29/+Nu6OmfH3v/+dm266CYA77riDESNGsGfPHsaPH88FF1zA0KFDue666zjjjDO4+uqr2bFjR2Pw0NT0e++9lzlz5lBeXt5ifoYNG5Yy3enTp7N48WLy8/OZP38+gwYNAqCqqopbbrmFkpISevfuzYUXXshTTz3F6NGj+fWvf83LL7/M6tWrOeaYYw5cRYuIyEGnTWNwzOw0YJG77zazu4BSYEGY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nHPOORQVFVFcXMwvfvGLxu9UVlYyY8YMioqK+OAHP8jKlSubnX7ppZdy5JFHcu21176nvNdddx0FBQVcddVVjdNTpfvkk09y7LHHsmnTJk4++eTG9w1lPv744ykqKuL6669vXM9PfvITjj76aC688EJqa2szq0gREelS1INzkDj55JMbb1GVlJTQr1+/dlnvGWecwZe+9CV27txJnz59+Mtf/kJJSUmT3+/Xrx8jRoxg+fLl9OjRg4EDB5KXlwfAHXfcwYgRI9izZw/jx4/nggsuYOjQoVx33XWcccYZXH311ezYsaMxeGhq+r333sucOXPeE7Dt3LmTiy66iJ/+9KeMGTOGTZs2MWzYsJTpTp8+ncWLF5Ofn79f71dVVRW33HILJSUl9O7dmwsvvJCnnnqK0aNH8+tf/5qXX36Z1atXc8wxx7RL/YqISOdQgHOQSPcWVaa6devGueeey8MPP8zYsWMZPXo0Q4YMaXaZ6dOns2DBAnr06MFHP/rRxum/+c1veOSRR3B3Nm3axKZNmxg6dCglJSXcd999AOTm5pKbmwvQ5PSm9OjRgw9/+MMAjBo1isrKSoYNG9Zkuqk8//zzrF69unE9NTU1rF69mu3btzNlyhR69erF+PHjed/73pdG7YmISFelAOcgZmaN7+vq6pqc19L0z3zmM9x4442MHTuWSy+9tMV0p0+fzl133UV2dnbj7a2SkhL++c9/8uyzz9K7d2+Ki4vZu3dvJsVpUffu3Rvfmxl79+5tVbqnnXZaY2DV4KGHHmrXvIqISOdSgJOhhief2mtdLT1B1ZzDDz+crVu30qtXL1599dX95g0cOJANGza852mpVNOPPfZYNm/ezKuvvsqPfvSjFtM98cQTufLKK+nWrRt33XUXADt27GDQoEH07t2bZcuWsWTJksbvn3zyydxzzz187nOfY+fOnbzzzjsMHjy4yemZaC5dCD1DW7dubez9OuGEE7j22mvZsGEDI0aMYN26dWRnZzNx4kRuuOEGamtrWb16NevWrcsoHyIi0rUowMnAmDFj2nV9BQUFbVrnN77xDU4//XSKi4sZOXLkfvOuv/56Lr/8cm666Sb+/ve/M2zYsGann3/++axYsYJevXq1mG52djbvf//7qaura/z+6aefzt133824ceM46qijmDhxYuP3f/7znzNr1ix+9atf0b17d+6/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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Chart\n", + "def percFormat(x, pos): return ('{:,}'.format(x) + '%').replace('.0', '')\n", + "\n", + "plt.rcParams.update({'font.size': 10,\n", + " 'font.family':'Monospace',\n", + " 'grid.linestyle':'dashed'})\n", + "plt.rcParams[\"figure.figsize\"] = [8,6]\n", + "plt.rcParams[\"figure.autolayout\"] = True\n", + "fig, ax = plt.subplots()\n", + "\n", + "df.age = df.age.str.replace('_', ' to ')\n", + "df.plot(x='age', y=['Unvaccinated','Fully Vaccinated','Boosted'], kind='bar',\n", + " color=['#a70000','lightgray','#183f78'],\n", + " align='center',\n", + " width=0.7,linewidth=0.3,\n", + " edgecolor='black',ax=ax)\n", + "ax.spines['top'].set_visible(False)\n", + "ax.spines['right'].set_visible(False)\n", + "\n", + "ax.yaxis.grid(True)\n", + "ax.set_axisbelow(True)\n", + "ax.legend(loc='upper center', bbox_to_anchor=(0.2, 0.95), ncol=1, labelspacing = 1.5, frameon=True, fancybox=True)\n", + "plt.xticks(rotation=0)\n", + "ax.yaxis.set_major_formatter(tkr.FuncFormatter(percFormat))\n", + "plt.tick_params(bottom=False)\n", + "\n", + "plt.title('Case Fatality Rate (CFR) by Age & Vax Status \\n\\n' + 'Note: CFR values likely exceed true death rates due to under-testing\\n\\n'\n", + " '(deaths data from ' + date_min.strftime('%d-%b') + ' to ' + date_max.strftime('%d-%b') + ', ' +\n", + " 'cases data from ' + (date_min-timedelta(7)).strftime('%d-%b') + ' to ' + (date_max-timedelta(7)).strftime('%d-%b') + ')')\n", + "plt.xlabel('')\n", + "plt.ylabel('')\n", + "plt.savefig('src_deaths/deaths_vaxstatus_cfr.png', bbox_inches='tight', pad_inches=0.2,dpi=400)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fc1e9067", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}