import numpy as np
import pandas as pd
data_raw = pd.read_csv(
"https://raw.githubusercontent.com/alonsosilvaallende/COVID-19/master/data/DEFUNCIONES_FUENTE_DEIS_SOLO_CAUSA_COVID_2020-07-09.csv", sep=",")
data_raw.head()
año | fecha | género | edad | comuna_código | comuna | región | código_detalle | causa_detalle | código | causa | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2020 | 2020-05-24 | Hombre | 85 a 89 | 13108 | Independencia | Metropolitana de Santiago | U07.2 | COVID-19 Sospechoso | U07 | COVID-19 |
1 | 2020 | 2020-05-27 | Mujer | 90 a 99 | 13132 | Vitacura | Metropolitana de Santiago | U07.2 | COVID-19 Sospechoso | U07 | COVID-19 |
2 | 2020 | 2020-05-19 | Hombre | 90 a 99 | 13132 | Vitacura | Metropolitana de Santiago | U07.2 | COVID-19 Sospechoso | U07 | COVID-19 |
3 | 2020 | 2020-04-02 | Mujer | 90 a 99 | 13129 | San Joaquín | Metropolitana de Santiago | U07.2 | COVID-19 Sospechoso | U07 | COVID-19 |
4 | 2020 | 2020-06-22 | Hombre | 90 a 99 | 13120 | Ñuñoa | Metropolitana de Santiago | U07.2 | COVID-19 Sospechoso | U07 | COVID-19 |
len(data_raw)
11227
data_RM_COVID = data_raw.query(
"año == 2020 & región == 'Metropolitana de Santiago' & causa == 'COVID-19'").drop(
columns=["año", "región", "causa", "código"])
len(data_RM_COVID)
8595
data_RM_COVID["sexo"] = (pd.get_dummies(data_RM_COVID["género"], drop_first=True)+1)
deaths = pd.Series(dtype="float64")
for comuna in data_RM_COVID["comuna"].unique():
deaths[f"{comuna}"] = len(data_RM_COVID.query(f"comuna == '{comuna}'"))
county_population_raw = pd.read_csv(
"http://www.ine.cl/docs/default-source/proyecciones-de-poblacion/cuadros-estadisticos/base-2017/ine_estimaciones-y-proyecciones-2002-2035_base-2017_comunas0381d25bc2224f51b9770a705a434b74.csv",
encoding='ISO-8859-1', sep=",", thousands='.')
county_population_RM_raw = county_population_raw[county_population_raw["Nombre Region"] == 'Metropolitana de Santiago'].drop(
columns=["Region", "Nombre Region", "Provincia", "Nombre Provincia"])
county_population_RM = county_population_RM_raw[['Sexo (1=Hombre 2=Mujer)', "Edad", "Nombre Comuna", "Poblacion 2020"]]
# Sexo (1=Hombre, 2=Mujer)
county_population_RM = county_population_RM.rename(columns={"Sexo (1=Hombre 2=Mujer)": "Sexo", "Nombre Comuna": "Comuna"})
county_population = county_population_RM.groupby(["Comuna"]).sum().drop(columns=['Sexo', "Edad"])
data = pd.DataFrame()
data["fallecidos COVID"] = deaths
data = data.sort_index()
data["población"] = county_population
data["Tasa de mortalidad observada"] = np.round(100000*data["fallecidos COVID"]/data["población"],2)
data
fallecidos COVID | población | Tasa de mortalidad observada | |
---|---|---|---|
Alhué | 4 | 7405 | 54.02 |
Buin | 84 | 109641 | 76.61 |
Calera de Tango | 11 | 28525 | 38.56 |
Cerrillos | 70 | 88956 | 78.69 |
Cerro Navia | 293 | 142465 | 205.66 |
Colina | 107 | 180353 | 59.33 |
Conchalí | 235 | 139195 | 168.83 |
Curacaví | 17 | 36430 | 46.66 |
El Bosque | 208 | 172000 | 120.93 |
El Monte | 41 | 40014 | 102.46 |
Estación Central | 184 | 206792 | 88.98 |
Huechuraba | 150 | 112528 | 133.30 |
Independencia | 273 | 142065 | 192.17 |
Isla de Maipo | 22 | 40171 | 54.77 |
La Cisterna | 134 | 100434 | 133.42 |
La Florida | 426 | 402433 | 105.86 |
La Granja | 205 | 122557 | 167.27 |
La Pintana | 320 | 189335 | 169.01 |
La Reina | 85 | 100252 | 84.79 |
Lampa | 64 | 126898 | 50.43 |
Las Condes | 289 | 330759 | 87.37 |
Lo Barnechea | 67 | 124076 | 54.00 |
Lo Espejo | 172 | 103865 | 165.60 |
Lo Prado | 134 | 104403 | 128.35 |
Macul | 142 | 134635 | 105.47 |
Maipú | 496 | 578605 | 85.72 |
María Pinto | 5 | 14926 | 33.50 |
Melipilla | 97 | 141612 | 68.50 |
Padre Hurtado | 54 | 74188 | 72.79 |
Paine | 39 | 82766 | 47.12 |
Pedro Aguirre Cerda | 209 | 107803 | 193.87 |
Peñaflor | 100 | 101058 | 98.95 |
Peñalolén | 311 | 266798 | 116.57 |
Pirque | 28 | 30433 | 92.01 |
Providencia | 158 | 157749 | 100.16 |
Pudahuel | 226 | 253139 | 89.28 |
Puente Alto | 614 | 645909 | 95.06 |
Quilicura | 160 | 254694 | 62.82 |
Quinta Normal | 177 | 136368 | 129.80 |
Recoleta | 339 | 190075 | 178.35 |
Renca | 196 | 160847 | 121.85 |
San Bernardo | 330 | 334836 | 98.56 |
San Joaquín | 145 | 103485 | 140.12 |
San José de Maipo | 13 | 18644 | 69.73 |
San Miguel | 175 | 133059 | 131.52 |
San Pedro | 3 | 11953 | 25.10 |
San Ramón | 199 | 86510 | 230.03 |
Santiago | 382 | 503147 | 75.92 |
Talagante | 67 | 81838 | 81.87 |
Tiltil | 11 | 21477 | 51.22 |
Vitacura | 66 | 96774 | 68.20 |
Ñuñoa | 258 | 250192 | 103.12 |
Censo 2002
county_population_2002 = county_population_raw[['Sexo (1=Hombre 2=Mujer)', "Edad", "Nombre Comuna", "Poblacion 2002"]]
county_population_2002 = county_population_2002.rename(columns={"Sexo (1=Hombre 2=Mujer)": "Sexo", "Nombre Comuna": "Comuna"})
new_data = pd.DataFrame()
i = 0
for sexo in [1,2]:
for edad in np.arange(81):
new_data[i] = [sexo, edad, county_population_2002.query(f"Sexo == {sexo} & Edad == {edad}")["Poblacion 2002"].sum()]
i += 1
new_data = new_data.T.rename(columns={0:"Sexo", 1:"Edad", 2:"Poblacion 2002"})
aux1 = new_data.query("Sexo == 1").reset_index(drop=True)
aux2 = new_data.query("Sexo == 2").reset_index(drop=True)
aux1["Poblacion 2002"].sum()+aux2["Poblacion 2002"].sum()
15691701
counts1 = []
counts1.append(aux1.iloc[0]["Poblacion 2002"])
counts1.append(aux1.iloc[1:5]["Poblacion 2002"].sum())
for i in np.arange(1,16):
counts1.append(aux1.iloc[5*i:5*i+5]["Poblacion 2002"].sum())
counts1.append(aux1.iloc[80]["Poblacion 2002"])
counts2 = []
counts2.append(aux2.iloc[0]["Poblacion 2002"])
counts2.append(aux2.iloc[1:5]["Poblacion 2002"].sum())
for i in np.arange(1,16):
counts2.append(aux2.iloc[5*i:5*i+5]["Poblacion 2002"].sum())
counts2.append(aux2.iloc[80]["Poblacion 2002"])
proportion = pd.DataFrame()
proportion["proporciones"] = counts1 + counts2
grupo_etario = ['< 1','1 a 4','5 a 9','10 a 14','15 a 19','20 a 24','25 a 29','30 a 34','35 a 39','40 a 44','45 a 49','50 a 54','55 a 59','60 a 64','65 a 69','70 a 74','75 a 79','80 +']
def tasa_ajustada(comuna):
county = county_population_RM.query(f"Comuna == '{comuna}'").drop(columns="Comuna")
data_county = data_RM_COVID.query(f"comuna == '{comuna}'").drop(columns=["comuna", "comuna_código"])
aux1 = county.query("Sexo == 1").reset_index(drop=True)
aux2 = county.query("Sexo == 2").reset_index(drop=True)
counts1 = []
counts1.append(aux1.iloc[0]["Poblacion 2020"])
counts1.append(aux1.iloc[1:5]["Poblacion 2020"].sum())
for i in np.arange(1,16):
counts1.append(aux1.iloc[5*i:5*i+5]["Poblacion 2020"].sum())
counts1.append(aux1.iloc[80]["Poblacion 2020"])
counts2 = []
counts2.append(aux2.iloc[0]["Poblacion 2020"])
counts2.append(aux2.iloc[1:5]["Poblacion 2020"].sum())
for i in np.arange(1,16):
counts2.append(aux2.iloc[5*i:5*i+5]["Poblacion 2020"].sum())
counts2.append(aux2.iloc[80]["Poblacion 2020"])
data = pd.DataFrame()
data["sexo"] = [1 for i in np.arange(18)] + [2 for i in np.arange(18)]
data["edad"] = grupo_etario + grupo_etario
data["población"] = counts1 + counts2
aux3 = []
for sexo in [1,2]:
for edad in ['< 1','1 a 4','5 a 9','10 a 14','15 a 19','20 a 24','25 a 29','30 a 34','35 a 39','40 a 44','45 a 49','50 a 54','55 a 59','60 a 64','65 a 69','70 a 74','75 a 79']:
aux3.append(len(data_county.query(f"sexo == {sexo} & edad == '{edad}'")))
aux3.append(len(data_county.query(f"sexo == {sexo} & (edad == '80 a 84' | edad == '85 a 89' | edad == '90 a 99' | edad == '100 +') ")))
data["fallecidos COVID"] = aux3
data["Tasa de mortalidad"] = 100000*data["fallecidos COVID"]/data["población"]
return data["Tasa de mortalidad"].dot(proportion["proporciones"]/proportion["proporciones"].sum())
adjusted = []
for comuna in data.index:
adjusted.append(tasa_ajustada(f"{comuna}"))
data["Tasa ajustada"] = np.round(adjusted, decimals=1)
data = data.drop(columns="población").sort_values(by="Tasa ajustada")
import matplotlib.pyplot as plt
lista = ['La Reina', 'Las Condes', 'Lo Barnechea', 'Ñuñoa', 'Providencia', 'Vitacura', 'Santiago', 'Conchalí', 'Huechuraba', 'Independencia', 'Recoleta', 'Quilicura',
'Cerro Navia', 'Lo Prado', 'Pudahuel', 'Quinta Normal', 'Renca',
'Estación Central', 'Maipú', 'Cerrillos', 'Padre Hurtado', 'Peñaflor', 'Pedro Aguirre Cerda', 'San Miguel', 'San Joaquín', 'Lo Espejo', 'La Cisterna', \
'La Granja', 'San Ramón', 'El Bosque', 'San Bernardo', 'La Pintana',
"Macul", "La Florida", 'Peñalolén', "Puente Alto"]
len(lista)
36
data = data.T[lista].T
data = data.sort_values(by="Tasa ajustada")
fig, ax = plt.subplots(figsize=(10,10))
data["Tasa ajustada"].plot(kind='barh', ax=ax, fontsize='x-large')
for i, val in enumerate(data['Tasa ajustada']):
ax.text(val, i-.1, f" {val:.1f}", fontsize='x-large')
ax.set_title(f'Tasa de mortalidad ajustada por edad y sexo en comunas de la conurbación de Santiago\n(Ajuste de población estándar Censo 2002)', fontsize='x-large')
ax.set_xlabel(f'Tasa de mortalidad ajustada por edad y sexo', fontsize='x-large')
plt.xlim(0,165)
fig.tight_layout()
plt.annotate('Fuentes: INE, DEIS\nAutor: @alonsosilva', (0,0), (-100,-40), fontsize='x-large', xycoords='axes fraction', textcoords='offset points', va='top')
plt.savefig('COVID-19-Chile-Tasa-Ajustada-Comuna.png', bbox_inches='tight', format='png', dvi=700)
#plt.show()
from google.colab import files
files.download("COVID-19-Chile-Tasa-Ajustada-Comuna.png")