PROYECTO FINAL¶

Título: Incidencia y muertes por Covid a nivel mundial (2019-2023)¶

Integrantes: Carolina Sancho Blanco¶

Descripción del proyecto:¶

El objetivo de este proyecto es analizar bases de la OMS de incidencia del COVID-19 a nivel mundial con especial atención en los países de Centroamérica. Se empleará Python y sus librerías (como pandas, matplotlib, seaborn), para procesar y visualizar los datos. El proyecto abarcará desde la carga y limpieza de los datos hasta la generación de visualizaciones interactivas, histogramas y mapas de calor.

Antecedentes:¶

El COVID-19, causado por el virus SARS-CoV-2, emergió a finales de 2019 y rápidamente se propagó a nivel mundial, convirtiéndose en una pandemia. A partir de entonces, los gobiernos y organizaciones de salud han recopilando y analizado datos para comprender mejor la propagación del virus por país, sus tasas de mutación e infección, número de casos y defunciones, todo ello con el de tomar decisiones informadas para mitigar su impacto en la salud de la población en general.

Centroamérica; región que incluye países como Belice, Costa Rica, El Salvador, Guatemala, Honduras, Nicaragua y Panamá, ha sido afectada significativamente por la pandemia de COVID-19, siendo incluso declarada el epicentro de la pandemia en mayo de 2020, contando con más del 40% de las muertes por COVID-19 a nivel mundial en ese momento​ (OPS, 2020; Bunker et al. 2021)

Por otra parte, la Organización Mundial de la Salud (OMS, WHO-por sus siglas en inglés)juega un papel crucial en la recopilación y análisis de datos de salud a nivel mundial. Desde el inicio de la pandemia, la OMS ha recopilado datos sobre casos confirmados de COVID-19 y muertes a través de comunicaciones oficiales bajo los Reglamentos Sanitarios Internacionales, complementadas por la monitorización de los sitios web oficiales de los ministerios de salud de cada país (OMS, 2020). Los datos son recopilados y validados continuamente con el fin de que estos represente con precisión las tendencias y cambios en las definiciones de casos y prácticas de reporte de los países​ (OMS,2021).

Por otra parte, el análisis de datos del COVID-19 es esencial para monitorear la propagación del virus, evaluar la efectividad de las medidas de control, predecir tendencias futuras e informar a los responsables de la toma de decisiones (DSouza & Velan, 2020). La manipulación de datos mediante Python permite realizar este análisis de datos masivos de manera eficiente, rápida y efectiva, desde la manipulación de datos y análisis estadísticos hasta visualizaciones avanzadas y la creación de mapas interactivos (Hasija & Chakraborty, 2021). Así mismo, con el Análisis Exploratorio de Datos (EDA) se puede generar inferencias sobre el comportamiento de los datos y la composición de estos.

El procesamiento de las bases de datos permiten conocer la situación actual a partir de los datos disponibles, comprender por qué ciertas variables aumentan o disminuyen en relación con otras y proponer acciones para reducir las tasas de incidencia (DSouza & Velan, 2020).

Este proyecto proporcionará una visión preliminar impacto del COVID-19 por regiones según la clasificación de la OMS mediante un análisis básico de bases de datos de la OMS, con antención en Centroamérica, además de demostrar cómo el uso de Phyton pemite abordar oportunamente desafíos críticos en el ámbito de la salud pública a nivel mundial.

Referencias¶

Bunker, S. G. (2021, 1 de febrero). Centroamérica: La economía cayó un 7,1 % en 2020, el doble que el promedio mundial, según la CEPAL. France 24. https://www.france24.com/es/am%C3%A9rica-latina/20210201-centroam%C3%A9rica-econom%C3%ADa-covid-19-caída

Naciones Unidas. (2021, 2 de marzo). Informe: Las mujeres de América Latina y el Caribe fueron las más afectadas por el COVID-19. Noticias ONU. https://news.un.org/es/story/2021/03/1488592

Organización Mundial de la Salud. (2020, 11 de marzo). WHO Director-General's opening remarks at the media briefing on COVID-19. WHO. https://www.who.int/director-general/speeches/detail/who-director-general-s-opening-remarks-at-the-media-briefing-on-covid-19---11-march-2020

Organización Mundial de la Salud. (2021). Collecting and Reporting Mortality Data. WHO. https://www.who.int/data/data-collection-tools/mortality-data

Organización Mundial de la Salud. (2020). COVID-19 Dashboard. WHO. https://covid19.who.int/

Data Science For Bio. (n.d.). Python for Bioinformatics: 11 Packages and Cheat Sheets for Biological Data. https://datascienceforbio.com/python-for-bioinformatics-11-packages-and-cheat-sheets-for-biological-data/

BMC Bioinformatics. (n.d.). PyCellBase, an efficient python package for easy retrieval of biological data from heterogeneous sources. https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-019-3143-0

PLOS Computational Biology. (n.d.). An Introduction to Programming for Bioscientists: A Python-Based Primer. https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1004865

GitHub. (n.d.). Biopython: Work with biological sequence data in Python. https://github.com/agmcfarland/biopython_workshop

Referencias de Ciencias de Datos utilizadas¶

Hasija, Y., & Chakraborty, R. (2021). Hands-On Data Science for Biologists using Python. CRC Press. https://doi.org/10.1201/9781003090113

DSouza, J., & Velan, S. (2020). Using Exploratory Data Analysis for Generating Inferences on the Correlation of COVID-19 cases. 2020 11th International Conference on Computing, Communication and Networking Technologies (ICCCNT), Kharagpur, India, pp. 1-6. https://doi.org/10.1109/ICCCNT49239.2020.9225621

Paso 1: Carga y el Análisis Exploratorio de los Datos Verrificar las columnas disponibles, identificar valores faltantes y entender la distribución de los datos.

In [1]:
# Cargar bibliotecas
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn import datasets

import matplotlib.pyplot as plt
%matplotlib inline
In [2]:
pip install pandas
Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (2.0.3)
Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.10/dist-packages (from pandas) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas) (2023.4)
Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas) (2024.1)
Requirement already satisfied: numpy>=1.21.0 in /usr/local/lib/python3.10/dist-packages (from pandas) (1.25.2)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)
In [3]:
# Cargar el conjunto de datos COVID
COVID_data = pd.read_csv("COVID_sets.csv")
In [4]:
# Ver la composición de los datos
COVID_data.columns.tolist()
Out[4]:
['Date_reported',
 'Country_code',
 'Country',
 'WHO_region',
 'New_cases',
 'Cumulative_cases',
 'New_deaths',
 'Cumulative_deaths']
In [5]:
# Imprimir la primera fila
COVID_data[:40]
Out[5]:
Date_reported Country_code Country WHO_region New_cases Cumulative_cases New_deaths Cumulative_deaths
0 2020-01-05 AF Afghanistan EMRO NaN 0 NaN 0
1 2020-01-12 AF Afghanistan EMRO NaN 0 NaN 0
2 2020-01-19 AF Afghanistan EMRO NaN 0 NaN 0
3 2020-01-26 AF Afghanistan EMRO NaN 0 NaN 0
4 2020-02-02 AF Afghanistan EMRO NaN 0 NaN 0
5 2020-02-09 AF Afghanistan EMRO NaN 0 NaN 0
6 2020-02-16 AF Afghanistan EMRO NaN 0 NaN 0
7 2020-02-23 AF Afghanistan EMRO NaN 0 NaN 0
8 2020-03-01 AF Afghanistan EMRO 1.0 1 NaN 0
9 2020-03-08 AF Afghanistan EMRO NaN 1 NaN 0
10 2020-03-15 AF Afghanistan EMRO 6.0 7 NaN 0
11 2020-03-22 AF Afghanistan EMRO 17.0 24 NaN 0
12 2020-03-29 AF Afghanistan EMRO 67.0 91 2.0 2
13 2020-04-05 AF Afghanistan EMRO 183.0 274 3.0 5
14 2020-04-12 AF Afghanistan EMRO 247.0 521 10.0 15
15 2020-04-19 AF Afghanistan EMRO 387.0 908 15.0 30
16 2020-04-26 AF Afghanistan EMRO 422.0 1330 13.0 43
17 2020-05-03 AF Afghanistan EMRO 841.0 2171 21.0 64
18 2020-05-10 AF Afghanistan EMRO 1392.0 3563 41.0 105
19 2020-05-17 AF Afghanistan EMRO 2490.0 6053 48.0 153
20 2020-05-24 AF Afghanistan EMRO 3813.0 9866 58.0 211
21 2020-05-31 AF Afghanistan EMRO 4577.0 14443 37.0 248
22 2020-06-07 AF Afghanistan EMRO 5108.0 19551 79.0 327
23 2020-06-14 AF Afghanistan EMRO 4551.0 24102 124.0 451
24 2020-06-21 AF Afghanistan EMRO 4195.0 28297 97.0 548
25 2020-06-28 AF Afghanistan EMRO 2319.0 30616 155.0 703
26 2020-07-05 AF Afghanistan EMRO 2056.0 32672 123.0 826
27 2020-07-12 AF Afghanistan EMRO 1679.0 34351 149.0 975
28 2020-07-19 AF Afghanistan EMRO 938.0 35289 172.0 1147
29 2020-07-26 AF Afghanistan EMRO 747.0 36036 99.0 1246
30 2020-08-02 AF Afghanistan EMRO 674.0 36710 37.0 1283
31 2020-08-09 AF Afghanistan EMRO 305.0 37015 24.0 1307
32 2020-08-16 AF Afghanistan EMRO 536.0 37551 63.0 1370
33 2020-08-23 AF Afghanistan EMRO 343.0 37894 15.0 1385
34 2020-08-30 AF Afghanistan EMRO 249.0 38143 17.0 1402
35 2020-09-06 AF Afghanistan EMRO 161.0 38304 7.0 1409
36 2020-09-13 AF Afghanistan EMRO 337.0 38641 11.0 1420
37 2020-09-20 AF Afghanistan EMRO 278.0 38919 17.0 1437
38 2020-09-27 AF Afghanistan EMRO 273.0 39192 16.0 1453
39 2020-10-04 AF Afghanistan EMRO 105.0 39297 9.0 1462
In [6]:
# Imprimir el tamaño del conjunto
COVID_data.shape
print(COVID_data.shape)
(54720, 8)
In [7]:
# Dimensión del conjunto
## COVID_data_df.ndim
# Dimensión del conjunto
COVID_data.ndim
Out[7]:
2
In [8]:
# Imprimir los nombres de las etiquetas o clases del conjunto de datos COVID_data
print(COVID_data.columns)
Index(['Date_reported', 'Country_code', 'Country', 'WHO_region', 'New_cases',
       'Cumulative_cases', 'New_deaths', 'Cumulative_deaths'],
      dtype='object')
In [9]:
# Imprimir la cantidad de valores nulos por columna en el DataFrame
# Más adelante debo corregir esto para eliminar o corregir los valores nulos

print(COVID_data.isnull().sum())
Date_reported            0
Country_code           228
Country                  0
WHO_region            4104
New_cases            16772
Cumulative_cases         0
New_deaths           30011
Cumulative_deaths        0
dtype: int64
In [10]:
# Cargar el archivo CSV
file_path = 'COVID_sets.csv'
df = pd.read_csv(file_path)

# Reemplazar los valores nulos en 'Country_code' para el país Namibia por 'NAM'
df.loc[(df['Country'] == 'Namibia') & (df['Country_code'].isnull()), 'Country_code'] = 'NAM'

# Verificar si los valores nulos fueron reemplazados
null_country_code_replaced = df[(df['Country'] == 'Namibia') & (df['Country_code'] == 'NAM')]

# Mostrar los primeros registros para confirmar
print(null_country_code_replaced.head())

# Guardar el DataFrame modificado en un nuevo archivo CSV
output_file_path = 'COVID_sets_sin_NaN.csv'  # Ruta donde quieres guardar el archivo modificado
df.to_csv(output_file_path, index=False)

print(f"Archivo guardado en: {output_file_path}")
      Date_reported Country_code  Country WHO_region  New_cases  \
33972    2020-01-05          NAM  Namibia       AFRO        NaN   
33973    2020-01-12          NAM  Namibia       AFRO        NaN   
33974    2020-01-19          NAM  Namibia       AFRO        NaN   
33975    2020-01-26          NAM  Namibia       AFRO        NaN   
33976    2020-02-02          NAM  Namibia       AFRO        NaN   

       Cumulative_cases  New_deaths  Cumulative_deaths  
33972                 0         NaN                  0  
33973                 0         NaN                  0  
33974                 0         NaN                  0  
33975                 0         NaN                  0  
33976                 0         NaN                  0  
Archivo guardado en: COVID_sets_sin_NaN.csv
In [11]:
# *** Ver si en la columna Country_code" ya no hay valores NaN
# Cargar el archivo CSV
file_path = 'COVID_sets_sin_NaN.csv'
df = pd.read_csv(file_path)

# Filtrar las filas donde 'Country_code' es NaN
nan_country_code_all = df[df['Country_code'].isna()]

# Mostrar todas las filas con 'Country_code' NaN
print(nan_country_code_all[['Country', 'Country_code']])
Empty DataFrame
Columns: [Country, Country_code]
Index: []
In [12]:
## Corregir valores NaN en la columna WHO_region y colocar el nombre correcto

# Cargar el archivo CSV
file_path = 'COVID_sets_sin_NaN.csv'
df = pd.read_csv(file_path)

# Filtrar las filas donde 'WHO_region' es NaN
nan_who_region_all = df[df['WHO_region'].isna()]

# Mostrar todas las filas con 'WHO_region' NaN
print(nan_who_region_all)
      Date_reported Country_code                      Country WHO_region  \
16188    2020-01-05           FK  Falkland Islands (Malvinas)        NaN   
16189    2020-01-12           FK  Falkland Islands (Malvinas)        NaN   
16190    2020-01-19           FK  Falkland Islands (Malvinas)        NaN   
16191    2020-01-26           FK  Falkland Islands (Malvinas)        NaN   
16192    2020-02-02           FK  Falkland Islands (Malvinas)        NaN   
...             ...          ...                          ...        ...   
42859    2024-04-14           PM    Saint Pierre and Miquelon        NaN   
42860    2024-04-21           PM    Saint Pierre and Miquelon        NaN   
42861    2024-04-28           PM    Saint Pierre and Miquelon        NaN   
42862    2024-05-05           PM    Saint Pierre and Miquelon        NaN   
42863    2024-05-12           PM    Saint Pierre and Miquelon        NaN   

       New_cases  Cumulative_cases  New_deaths  Cumulative_deaths  
16188        NaN                 0         NaN                  0  
16189        NaN                 0         NaN                  0  
16190        NaN                 0         NaN                  0  
16191        NaN                 0         NaN                  0  
16192        NaN                 0         NaN                  0  
...          ...               ...         ...                ...  
42859        NaN              3426         NaN                  2  
42860        NaN              3426         NaN                  2  
42861        NaN              3426         NaN                  2  
42862        NaN              3426         NaN                  2  
42863        NaN              3426         NaN                  2  

[4104 rows x 8 columns]
In [13]:
## Hacer el reemplazo (COVID_sets_1)

# Cargar el archivo CSV
file_path = 'COVID_sets_sin_NaN.csv'  # Asegúrate de que la ruta sea correcta en tu entorno
df = pd.read_csv(file_path)

# Reemplazar los valores en 'WHO_region' según el país
df.loc[df['Country'] == 'Falkland Islands (Malvinas)', 'WHO_region'] = 'SEARO'
df.loc[df['Country'] == 'Saint Pierre and Miquelon', 'WHO_region'] = 'AMRO'

# Mostrar los cambios para verificar
print(df[df['Country'].isin(['Falkland Islands (Malvinas)', 'Saint Pierre and Miquelon'])][['Country', 'WHO_region']])

# Guardar el DataFrame modificado en un nuevo archivo CSV
output_file_path = 'COVID_sets_1.csv'  # Ruta donde quieres guardar el archivo modificado
df.to_csv(output_file_path, index=False)

print(f"Archivo guardado en: {output_file_path}")
                           Country WHO_region
16188  Falkland Islands (Malvinas)      SEARO
16189  Falkland Islands (Malvinas)      SEARO
16190  Falkland Islands (Malvinas)      SEARO
16191  Falkland Islands (Malvinas)      SEARO
16192  Falkland Islands (Malvinas)      SEARO
...                            ...        ...
42859    Saint Pierre and Miquelon       AMRO
42860    Saint Pierre and Miquelon       AMRO
42861    Saint Pierre and Miquelon       AMRO
42862    Saint Pierre and Miquelon       AMRO
42863    Saint Pierre and Miquelon       AMRO

[456 rows x 2 columns]
Archivo guardado en: COVID_sets_1.csv
In [14]:
# Verificar que tengo menos valores NaN en columna WHO_region
# Más adelante debo corregir esto

print(COVID_data.isnull().sum())
Date_reported            0
Country_code           228
Country                  0
WHO_region            4104
New_cases            16772
Cumulative_cases         0
New_deaths           30011
Cumulative_deaths        0
dtype: int64
In [15]:
# Entonces donde quedan más datos NaN en columna 'WHO_region'

nan_who_region_all = df[df['WHO_region'].isna()]
# Mostrar todas las filas con 'WHO_region' NaN
print(nan_who_region_all)
      Date_reported Country_code                     Country WHO_region  \
16416    2020-01-05           FO               Faroe Islands        NaN   
16417    2020-01-12           FO               Faroe Islands        NaN   
16418    2020-01-19           FO               Faroe Islands        NaN   
16419    2020-01-26           FO               Faroe Islands        NaN   
16420    2020-02-02           FO               Faroe Islands        NaN   
...             ...          ...                         ...        ...   
42631    2024-04-14           MF  Saint Martin (French part)        NaN   
42632    2024-04-21           MF  Saint Martin (French part)        NaN   
42633    2024-04-28           MF  Saint Martin (French part)        NaN   
42634    2024-05-05           MF  Saint Martin (French part)        NaN   
42635    2024-05-12           MF  Saint Martin (French part)        NaN   

       New_cases  Cumulative_cases  New_deaths  Cumulative_deaths  
16416        NaN                 0         NaN                  0  
16417        NaN                 0         NaN                  0  
16418        NaN                 0         NaN                  0  
16419        NaN                 0         NaN                  0  
16420        NaN                 0         NaN                  0  
...          ...               ...         ...                ...  
42631        NaN             12324         NaN                 46  
42632        NaN             12324         NaN                 46  
42633        NaN             12324         NaN                 46  
42634        NaN             12324         NaN                 46  
42635        NaN             12324         NaN                 46  

[3648 rows x 8 columns]
In [16]:
## Hacer el reemplazo

# Cargar el archivo CSV
file_path = 'COVID_sets_1.csv'  # Asegúrate de que la ruta sea correcta en tu entorno
df = pd.read_csv(file_path)

# Reemplazar los valores en 'WHO_region' según el país
df.loc[df['Country'] == 'Saint Martin (French part)', 'WHO_region'] = 'AMRO'
df.loc[df['Country'] == 'French Guiana', 'WHO_region'] = 'AMRO'
df.loc[df['Country'] == 'Gibraltar', 'WHO_region'] = 'EMRO'
df.loc[df['Country'] == 'Saint Helena', 'WHO_region'] = 'EMRO'

# Mostrar los cambios para verificar
print(df[df['Country'].isin(['Saint Martin (French part)', 'French Guiana', 'Gibraltar','Saint Helena' ])][['Country', 'WHO_region']])

# Guardar el DataFrame modificado en un nuevo archivo CSV
output_file_path = 'COVID_sets_2'  # Ruta donde quieres guardar el archivo modificado
df.to_csv(output_file_path, index=False)

print(f"Archivo guardado en: {output_file_path}")
                          Country WHO_region
17556               French Guiana       AMRO
17557               French Guiana       AMRO
17558               French Guiana       AMRO
17559               French Guiana       AMRO
17560               French Guiana       AMRO
...                           ...        ...
42631  Saint Martin (French part)       AMRO
42632  Saint Martin (French part)       AMRO
42633  Saint Martin (French part)       AMRO
42634  Saint Martin (French part)       AMRO
42635  Saint Martin (French part)       AMRO

[912 rows x 2 columns]
Archivo guardado en: COVID_sets_2
In [17]:
import pandas as pd

# Cargar el archivo CSV
file_path = 'COVID_sets_2'
df = pd.read_csv(file_path)

# Eliminar los datos de los países 'Guernsey' y 'Réunion'
df = df[~df['Country'].isin(['Guernsey', 'Réunion'])]

# Verificar que las filas se han eliminado correctamente
if 'Guernsey' not in df['Country'].values and 'Réunion' not in df['Country'].values:
    print("Los datos de 'Guernsey' y 'Réunion' han sido eliminados correctamente.")
else:
    print("Error: Los datos no se han eliminado correctamente.")

# Mostrar los primeros registros para confirmar
print(df.head())

# Guardar el DataFrame modificado en un nuevo archivo CSV
output_file_path = 'COVID_sets_3'
df.to_csv(output_file_path, index=False)

print(f"Archivo guardado en: {output_file_path}")
Los datos de 'Guernsey' y 'Réunion' han sido eliminados correctamente.
  Date_reported Country_code      Country WHO_region  New_cases  \
0    2020-01-05           AF  Afghanistan       EMRO        NaN   
1    2020-01-12           AF  Afghanistan       EMRO        NaN   
2    2020-01-19           AF  Afghanistan       EMRO        NaN   
3    2020-01-26           AF  Afghanistan       EMRO        NaN   
4    2020-02-02           AF  Afghanistan       EMRO        NaN   

   Cumulative_cases  New_deaths  Cumulative_deaths  
0                 0         NaN                  0  
1                 0         NaN                  0  
2                 0         NaN                  0  
3                 0         NaN                  0  
4                 0         NaN                  0  
Archivo guardado en: COVID_sets_3
In [18]:
# Me siguen saliendo pendientes en WHO_region/ otra estrategia, creando un diccionario

file_path = 'COVID_sets_3'
df = pd.read_csv(file_path)

# Lista de países sin región de la OMS
countries_without_who_region = [
    'Falkland Islands (Malvinas)',
    'Faroe Islands',
    'French Guiana',
    'Gibraltar',
    'Guadeloupe',
    'Guernsey',
    'Holy See',
    'Isle of Man',
    'Jersey',
    'Liechtenstein',
    'Martinique',
    'Mayotte',
    'Pitcairn',
    'Réunion',
    'Saint Barthélemy',
    'Saint Helena',
    'Saint Martin (French part)',
    'Saint Pierre and Miquelon'
]

# Eliminar los datos de los países en la lista
df = df[~df['Country'].isin(countries_without_who_region)]

# Guardar el DataFrame modificado en un nuevo archivo CSV
output_file_path = 'COVID_sets_4'  # Ruta donde quieres guardar el archivo modificado
df.to_csv(output_file_path, index=False)

print(f"Archivo guardado en: {output_file_path}")
Archivo guardado en: COVID_sets_4
In [19]:
# Verificar eliminación'

nan_who_region_all = df[df['WHO_region'].isna()]
# Mostrar todas las filas con 'WHO_region' NaN
print(nan_who_region_all)
Empty DataFrame
Columns: [Date_reported, Country_code, Country, WHO_region, New_cases, Cumulative_cases, New_deaths, Cumulative_deaths]
Index: []
In [20]:
# Cargar el archivo CSV editado
file_path = 'COVID_sets_4'  # Asegúrate de que la ruta sea correcta en tu entorno
COVID_data = pd.read_csv(file_path)

# Reemplazar los valores NaN en 'New_deaths' y 'New_cases' por 0
COVID_data['New_deaths'].fillna(0, inplace=True)
COVID_data['New_cases'].fillna(0, inplace=True)

# Mostrar los cambios
print(COVID_data[['New_deaths', 'New_cases']].head())

# Guardar el DataFrame modificado en un nuevo archivo CSV
output_file_path = 'COVID_sets_sin_NaN.csv'  # Ruta donde quieres guardar el archivo modificado
COVID_data.to_csv(output_file_path, index=False)

print(f"Archivo guardado en: {output_file_path}")

# Verificar la cantidad de valores nulos por columna en el DataFrame modificado
print(COVID_data.isnull().sum())
   New_deaths  New_cases
0         0.0        0.0
1         0.0        0.0
2         0.0        0.0
3         0.0        0.0
4         0.0        0.0
Archivo guardado en: COVID_sets_sin_NaN.csv
Date_reported        0
Country_code         0
Country              0
WHO_region           0
New_cases            0
Cumulative_cases     0
New_deaths           0
Cumulative_deaths    0
dtype: int64
In [21]:
## Verificar sin datos NaN en columna Country code

# Cargar el archivo CSV
file_path = 'COVID_sets_sin_NaN.csv'
COVID_data = pd.read_csv(file_path)

# Filtrar las filas donde 'Country_code' es NaN y obtener la lista de países únicos
countries_with_nan = COVID_data[COVID_data['Country_code'].isna()]['Country'].unique()

# Mostrar la lista de países con 'Country_code' NaN
print("Países con 'Country_code' NaN:")
print(countries_with_nan)
Países con 'Country_code' NaN:
[]
In [22]:
## Verificar sin datos NaN en columna New_deaths
# Cargar el archivo CSV
file_path = 'COVID_sets_sin_NaN.csv'  # Asegúrate de que la ruta sea correcta en tu entorno
COVID_data = pd.read_csv(file_path)

# Contar todos los valores NaN en la columna 'New_deaths'
nan_count_country_code = COVID_data['New_deaths'].isna().sum()

print(f"Número de valores NaN en la columna 'New_deaths': {nan_count_country_code}")
Número de valores NaN en la columna 'New_deaths': 0

RESULTADOS¶

Número de Muertes Acumuladas por Región de la OMS¶

En este gráfico podemos observar que la región AMRO ha sido en la que más se han reportado muertes por COVID según los reportes de la OMS.

Esta región lo componen países como: Antigua and Barbuda, Argentina, Bahamas, Barbados, Belize, Bolivia, Brazil, Canada, Chile, Colombia, Costa Rica, Cuba, Dominica, Dominican Republic, Ecuador, El Salvador, Grenada, Guatemala, Guyana, Haiti, Honduras, Jamaica, Mexico, Nicaragua, Panama, Paraguay, Peru, Saint Kitts and Nevis, Saint Lucia, Saint Vincent and the Grenadines, Suriname, Trinidad and Tobago, United States, Uruguay, Venezuela.

In [23]:
import matplotlib.pyplot as plt
import seaborn as sns

# Cargar el archivo CSV
file_path = 'COVID_sets_sin_NaN.csv'  # Asegúrate de que la ruta sea correcta en tu entorno
df = pd.read_csv(file_path)

# Asegurarse de que la columna de fecha es de tipo datetime
df['Date_reported'] = pd.to_datetime(df['Date_reported'])

# Extraer el año de la columna de fecha
df['Year'] = df['Date_reported'].dt.year

# Agrupar por WHO_region y sumar las muertes acumuladas
total_deaths_by_region = df.groupby('WHO_region')['Cumulative_deaths'].max().reset_index()

# Definir una paleta de colores
colors = sns.color_palette("tab10", n_colors=total_deaths_by_region['WHO_region'].nunique())

# Crear un diccionario de colores para las regiones
region_colors = {region: color for region, color in zip(total_deaths_by_region['WHO_region'].unique(), colors)}

# Generar el gráfico de barras
plt.figure(figsize=(12, 6))
bars = plt.bar(total_deaths_by_region['WHO_region'], total_deaths_by_region['Cumulative_deaths'], color=[region_colors[region] for region in total_deaths_by_region['WHO_region']])
plt.xlabel('Región de la OMS')
plt.ylabel('Número de Muertes Acumuladas')
plt.title('Número de Muertes Acumuladas por Región de la OMS')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
No description has been provided for this image

Número de Muertes por año (2020-2023)por Región de la OMS¶

Se observa que el número de defunciones para la región AMRO se ha mantenido alta a lo largo del tiempo en comparación con las otras regiones. En el caso de la región EURO ésta experimento un aumento potencial en el número de casos durante el 2022, por su parte el mayor número de defunciones para la región WPRO ocurrió durante el 2023.

In [38]:
import pandas as pd
import matplotlib.pyplot as plt

# Paso 1: Cargar la base de datos
file_path = 'COVID_sets_sin_NaN.csv'


# Paso 2: Asegurarse de que la columna de fecha es de tipo datetime
df['Date_reported'] = pd.to_datetime(df['Date_reported'])

#Paso 3: Extraer el año de la columna de fecha
df['Year'] = df['Date_reported'].dt.year

# Paso 4: Agrupar por WHO_region y año, y sumar las muertes nuevas
annual_deaths_by_region = df.groupby(['WHO_region', 'Year'])['New_deaths'].sum().reset_index()

# Paso 5: Obtener los años únicos en los datos
years = annual_deaths_by_region['Year'].unique()

# Paso 6: Generar un gráfico de barras para cada año
for year in years:
    data_for_year = annual_deaths_by_region[annual_deaths_by_region['Year'] == year]

    plt.figure(figsize=(10, 6))
    plt.bar(data_for_year['WHO_region'], data_for_year['New_deaths'])
    plt.xlabel('Región de la OMS')
    plt.ylabel('Número de Muertes')
    plt.title(f'Número de Muertes Anuales por Región de la OMS en {year}')
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image

Muertes totales en todos los años por región de la OMS región:¶

In [25]:
## Si quiero ver todas las muertes por año en un mismo gráfico
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Cargar el archivo CSV
file_path = 'COVID_sets_sin_NaN.csv'  # Asegúrate de que la ruta sea correcta en tu entorno
COVID_data = pd.read_csv(file_path)

# Asegurarse de que la columna de fecha es de tipo datetime
COVID_data['Date_reported'] = pd.to_datetime(COVID_data['Date_reported'])

# Extraer el año de la columna de fecha
COVID_data['Year'] = COVID_data['Date_reported'].dt.year

# Agrupar por WHO_region y año, y sumar las muertes nuevas
annual_deaths_by_region = COVID_data.groupby(['WHO_region', 'Year'])['New_deaths'].sum().reset_index()

# Crear el gráfico de barras agrupadas para todos los años
plt.figure(figsize=(12, 6))
sns.barplot(x='Year', y='New_deaths', hue='WHO_region', data=annual_deaths_by_region, ci=None)
plt.xlabel('Año')
plt.ylabel('Número de Muertes')
plt.title('Número de Muertes Anuales por Región de la OMS')
plt.legend(title='Región de la OMS', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()
<ipython-input-25-bcf7d2c7f5cb>:21: FutureWarning: 

The `ci` parameter is deprecated. Use `errorbar=None` for the same effect.

  sns.barplot(x='Year', y='New_deaths', hue='WHO_region', data=annual_deaths_by_region, ci=None)
No description has been provided for this image

Casos en Centroamerica¶

Muertes totales en el periodo 2020-2024 en Centroamerica¶

In [26]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Cargar la base de datos
file_path = 'COVID_sets_sin_NaN.csv'  # Asegúrate de que la ruta sea correcta
df = pd.read_csv(file_path)

# Lista de países de Centroamérica
centroamerica = ['Belize', 'Costa Rica', 'El Salvador', 'Guatemala', 'Honduras', 'Nicaragua', 'Panama']

# Filtrar datos para países de Centroamérica
df_centroamerica = df[df['Country'].isin(centroamerica)].copy()

# Convertir la columna 'Date_reported' a tipo datetime
df_centroamerica['Date_reported'] = pd.to_datetime(df_centroamerica['Date_reported'], errors='coerce')

# Filtrar filas con fechas no válidas
df_centroamerica = df_centroamerica.dropna(subset=['Date_reported'])

# Extraer el año de la columna de fecha
df_centroamerica['Year'] = df_centroamerica['Date_reported'].dt.year

# Agrupar por año y país, y sumar las nuevas muertes
annual_deaths_by_country = df_centroamerica.groupby(['Year', 'Country'])['New_deaths'].sum().reset_index()

# Crear el gráfico de barras agrupadas para el número de muertes anuales por país en Centroamérica
plt.figure(figsize=(12, 6))
sns.barplot(x='Year', y='New_deaths', hue='Country', data=annual_deaths_by_country, errorbar=None, palette='viridis')
plt.xlabel('Año')
plt.ylabel('Número de Muertes')
plt.title('Número de Muertes Anuales por País en Centroamérica')
plt.legend(title='Países de Centroamérica', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()
No description has been provided for this image

Países con mayor número de muertes por Who_region¶

In [27]:
#Mostrar por WHO_region los países que presentaron el mayor número de muertes
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Cargar el archivo CSV original
file_path = 'COVID_sets_sin_NaN.csv'  # Asegúrate de que la ruta sea correcta en tu entorno
df = pd.read_csv(file_path)

# Reemplazar los valores nulos en 'Country_code' por 'NAM'
df['Country_code'].fillna('NAM', inplace=True)

# Iterar sobre las filas del DataFrame para reemplazar NaN en 'New_deaths' si 'Cumulative_deaths' es 0
for i in range(len(df)):
    if df.at[i, 'Cumulative_deaths'] == 0 and pd.isnull(df.at[i, 'New_deaths']):
        df.at[i, 'New_deaths'] = 0

# Iterar sobre las filas del DataFrame para reemplazar NaN en 'New_cases' si 'Cumulative_cases' es 0
for i in range(len(df)):
    if df.at[i, 'Cumulative_cases'] == 0 and pd.isnull(df.at[i, 'New_cases']):
        df.at[i, 'New_cases'] = 0

# Asegurarse de que la columna de fecha es de tipo datetime
df['Date_reported'] = pd.to_datetime(df['Date_reported'])

# Agrupar por WHO_region y país, y sumar las muertes acumuladas
deaths_by_country_region = df.groupby(['WHO_region', 'Country'])['Cumulative_deaths'].max().reset_index()

# Encontrar el país con el mayor número de muertes por cada región
max_deaths_by_region = deaths_by_country_region.loc[deaths_by_country_region.groupby('WHO_region')['Cumulative_deaths'].idxmax()]

# Definir una paleta de colores
colors = sns.color_palette("tab10", n_colors=max_deaths_by_region['WHO_region'].nunique())

# Crear un diccionario de colores para las regiones
region_colors = {region: color for region, color in zip(max_deaths_by_region['WHO_region'].unique(), colors)}

# Generar el gráfico de barras
plt.figure(figsize=(14, 8))
bars = plt.bar(max_deaths_by_region['Country'], max_deaths_by_region['Cumulative_deaths'], color=[region_colors[region] for region in max_deaths_by_region['WHO_region']])
plt.xlabel('País')
plt.ylabel('Número de Muertes Acumuladas')
plt.title('Países con Mayor Número de Muertes por Región de la OMS')
plt.xticks(rotation=45)
plt.tight_layout()

# Añadir leyenda
handles = [plt.Rectangle((0,0),1,1, color=region_colors[region]) for region in region_colors]
labels = list(region_colors.keys())
plt.legend(handles, labels, title='Región de la OMS', bbox_to_anchor=(1.05, 1), loc='upper left')

plt.show()
No description has been provided for this image

Cantidad de muertes por año para cada país centroamericano¶

In [28]:
# Cargar el archivo CSV
file_path = 'COVID_sets_sin_NaN.csv'  # Asegúrate de que la ruta sea correcta en tu entorno
COVID_data = pd.read_csv(file_path)

# Lista de países de Centroamérica
centro_american_countries = [
    'Costa Rica', 'El Salvador', 'Guatemala', 'Honduras',
    'Nicaragua'
]

# Filtrar el DataFrame para incluir solo estos países
COVID_data_centro = COVID_data[COVID_data['Country'].isin(centro_american_countries)].copy()

# Asegurarse de que la columna de fecha es de tipo datetime
COVID_data_centro['Date_reported'] = pd.to_datetime(COVID_data_centro['Date_reported'], errors='coerce')

# Filtrar filas con fechas no válidas
COVID_data_centro = COVID_data_centro.dropna(subset=['Date_reported'])

# Extraer el año de la columna de fecha
COVID_data_centro['Year'] = COVID_data_centro['Date_reported'].dt.year

# Agrupar por país y año, y sumar las muertes nuevas
annual_deaths_centro = COVID_data_centro.groupby(['Country', 'Year'])['New_deaths'].sum().reset_index()

# Crear el gráfico de barras agrupadas para el número de muertes por país y año en los países de Centroamérica
plt.figure(figsize=(14, 8))
sns.barplot(x='Country', y='New_deaths', hue='Year', data=annual_deaths_centro, palette='viridis')
plt.xlabel('País')
plt.ylabel('Número de Muertes')
plt.title('Número de Muertes Anuales por País y Año en Centroamérica')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
No description has been provided for this image
In [29]:
import pandas as pd

# Cargar el archivo CSV
file_path = 'COVID_sets_sin_NaN.csv'  # Asegúrate de que la ruta sea correcta en tu entorno
df = pd.read_csv(file_path)

# Calcular el número total de muertes en El Salvador
total_deaths_el_salvador = df[df['Country'] == 'El Salvador']['New_deaths'].sum()
total_deaths_el_salvador = df[df['Country'] == 'Costa Rica']['New_deaths'].sum()

print(f"El número total de muertes en El Salvador es: {total_deaths_el_salvador}")
El número total de muertes en El Salvador es: 9368.0

Gráfico de líneas de casos anuales por año y país en Centroamérica¶

In [30]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Cargar el archivo CSV
file_path = 'COVID_sets_sin_NaN.csv'  # Asegúrate de que la ruta sea correcta en tu entorno
COVID_data = pd.read_csv(file_path)

# Lista de países de Centroamérica
centro_american_countries = [
    'Costa Rica', 'El Salvador', 'Guatemala', 'Honduras',
    'Nicaragua'
]

# Filtrar el DataFrame para incluir solo estos países
COVID_data_centro = COVID_data[COVID_data['Country'].isin(centro_american_countries)].copy()

# Asegurarse de que la columna de fecha es de tipo datetime
COVID_data_centro['Date_reported'] = pd.to_datetime(COVID_data_centro['Date_reported'], errors='coerce')

# Filtrar filas con fechas no válidas
COVID_data_centro = COVID_data_centro.dropna(subset=['Date_reported'])

# Extraer el año de la columna de fecha
COVID_data_centro['Year'] = COVID_data_centro['Date_reported'].dt.year

# Agrupar por año y país, y sumar los nuevos casos
annual_cases_by_country = COVID_data_centro.groupby(['Year', 'Country'])['New_cases'].sum().reset_index()

# Crear el gráfico de líneas para el número de casos nuevos por país y año en los países de Centroamérica
plt.figure(figsize=(12, 6))
for country in centro_american_countries:
    country_data = annual_cases_by_country[annual_cases_by_country['Country'] == country]
    plt.plot(country_data['Year'], country_data['New_cases'], marker='o', label=country)

plt.title('Aumento de casos anuales por año y país en Centroamérica')
plt.xlabel('Año')
plt.ylabel('Número de casos nuevos')
plt.xticks(annual_cases_by_country['Year'].unique())  # Asegurarse de que los ticks del eje x sean años enteros
plt.legend(title='País')
plt.grid(True)
plt.tight_layout()
plt.show()
No description has been provided for this image

Países con mayor número de casos reportados al 2023¶

In [31]:
# Cargar el dataset
file_path = 'COVID_sets_sin_NaN.csv'
df = pd.read_csv(file_path)

# Convertir la columna de fechas a formato datetime
df['Date_reported'] = pd.to_datetime(df['Date_reported'])

# Filtrar los datos para el año 2023
df_2023 = df[df['Date_reported'].dt.year == 2023]

# Agrupar por WHO_region y Country, y sumar los casos nuevos reportados en 2023
cases_by_region_country = df_2023.groupby(['WHO_region', 'Country']).agg({'New_cases': 'sum'}).reset_index()

# Encontrar el país con el máximo número de casos por región de la OMS
max_cases_by_region = cases_by_region_country.loc[cases_by_region_country.groupby('WHO_region')['New_cases'].idxmax()]

# Mostrar los resultados
print(max_cases_by_region)
    WHO_region                     Country   New_cases
30        AFRO                   Mauritius     32514.0
91        AMRO    United States of America   4417336.0
98        EMRO  Iran (Islamic Republic of)     64732.0
157       EURO          Russian Federation   1982260.0
171      OTHER                       Charo         0.0
180      SEARO                       India    336066.0
192       WPRO                       China  36877077.0

Países con menor número de casos reportados al 2023 o si quiero comparlos¶

In [32]:
import pandas as pd

# Cargar el dataset
file_path = 'COVID_sets_sin_NaN.csv'
df = pd.read_csv(file_path)

# Convertir la columna de fechas a formato datetime
df['Date_reported'] = pd.to_datetime(df['Date_reported'])

# Filtrar los datos para el año 2023
df_2023 = df[df['Date_reported'].dt.year == 2023]

# Agrupar por WHO_region y Country, y sumar los casos nuevos reportados en 2023
cases_by_region_country = df_2023.groupby(['WHO_region', 'Country']).agg({'New_cases': 'sum'}).reset_index()

# Encontrar el país con el máximo número de casos por región de la OMS
max_cases_by_region = cases_by_region_country.loc[cases_by_region_country.groupby('WHO_region')['New_cases'].idxmax()]

# Encontrar el país con el mínimo número de casos por región de la OMS
min_cases_by_region = cases_by_region_country.loc[cases_by_region_country.groupby('WHO_region')['New_cases'].idxmin()]

# Mostrar los resultados
print("Países con el mayor número de casos en 2023 por región:")
print(max_cases_by_region)

print("\nPaíses con el menor número de casos en 2023 por región:")
print(min_cases_by_region)
Países con el mayor número de casos en 2023 por región:
    WHO_region                     Country   New_cases
30        AFRO                   Mauritius     32514.0
91        AMRO    United States of America   4417336.0
98        EMRO  Iran (Islamic Republic of)     64732.0
157       EURO          Russian Federation   1982260.0
171      OTHER                       Charo         0.0
180      SEARO                       India    336066.0
192       WPRO                       China  36877077.0

Países con el menor número de casos en 2023 por región:
    WHO_region                                Country  New_cases
25        AFRO                                Liberia     -120.0
47        AMRO                               Anguilla        0.0
95        EMRO                                Bahrain        0.0
121       EURO                                Belarus        0.0
171      OTHER                                  Charo        0.0
179      SEARO  Democratic People's Republic of Korea        0.0
219       WPRO                                Vanuatu        6.0

Número de nuevos casos anuales por región¶

In [33]:
# Cargar el dataset
file_path = 'COVID_sets_sin_NaN.csv'
df = pd.read_csv(file_path)

# Convertir la columna de fechas a formato datetime
df['Date_reported'] = pd.to_datetime(df['Date_reported'])

# Agregar una columna para el año
df['Year'] = df['Date_reported'].dt.year

# Agrupar por año y región de la OMS, y sumar los casos nuevos reportados
annual_cases_by_region = df.groupby(['Year', 'WHO_region']).agg({'New_cases': 'sum'}).reset_index()

# Crear un gráfico de líneas para el aumento de casos anuales por año y región
plt.figure(figsize=(12, 8))

for region in annual_cases_by_region['WHO_region'].unique():
    region_data = annual_cases_by_region[annual_cases_by_region['WHO_region'] == region]
    plt.plot(region_data['Year'], region_data['New_cases'], marker='o', label=region)

plt.title('Aumento de casos anuales por año y región de la OMS')
plt.xlabel('Año')
plt.ylabel('Número de casos nuevos')
plt.xticks(annual_cases_by_region['Year'].unique())  # Asegurarse de que los ticks del eje x sean años enteros
plt.legend(title='Región de la OMS')
plt.grid(True)
plt.show()
No description has been provided for this image

Número de nuevos casos anuales por país de Centroamerica¶

En el caso de Costa Rica y el Salvador el mayor número de casos nuevos se presentaron durante el 2022, sin embargo el mayor número de muertes se presentaron durante el 2021, lo cual puede indicar el efecto de las medidas sanitarias o la inmunnidad de rebaño de la población.

In [34]:
import pandas as pd
import matplotlib.pyplot as plt

# Cargar el archivo CSV
file_path = 'COVID_sets_sin_NaN.csv'
df = pd.read_csv(file_path)

# Lista de países de Centroamérica
centro_american_countries = [
    'Costa Rica', 'El Salvador', 'Guatemala', 'Honduras',
    'Nicaragua', 'Belize'
]

# Filtrar el DataFrame para incluir solo estos países
COVID_data_centro = df[df['Country'].isin(centro_american_countries)].copy()

# Asegurarse de que la columna de fecha es de tipo datetime
COVID_data_centro['Date_reported'] = pd.to_datetime(COVID_data_centro['Date_reported'], errors='coerce')

# Filtrar filas con fechas no válidas
COVID_data_centro = COVID_data_centro.dropna(subset=['Date_reported'])

# Extraer el año de la columna de fecha
COVID_data_centro['Year'] = COVID_data_centro['Date_reported'].dt.year

# Agrupar por país y año, y sumar los nuevos casos
annual_cases_centro = COVID_data_centro.groupby(['Country', 'Year'])['New_cases'].sum().reset_index()

# Crear el gráfico de líneas para el número de casos nuevos por país y año en los países de Centroamérica
plt.figure(figsize=(14, 8))
for country in centro_american_countries:
    country_data = annual_cases_centro[annual_cases_centro['Country'] == country]
    plt.plot(country_data['Year'], country_data['New_cases'], marker='o', label=country)

plt.xlabel('Año')
plt.ylabel('Número de Casos Nuevos')
plt.title('Número de Casos Nuevos Anuales por País en Centroamérica')
plt.legend(title='País')
plt.xticks(annual_cases_centro['Year'].unique())
plt.grid(True)
plt.tight_layout()
plt.show()
No description has been provided for this image

Número de muertes casos anuales por país de Centroamerica

In [40]:
import pandas as pd
import matplotlib.pyplot as plt

# Cargar el archivo CSV
file_path = 'COVID_sets_sin_NaN.csv'
df = pd.read_csv(file_path)

# Lista de países de Centroamérica
centro_american_countries = [
    'Costa Rica', 'El Salvador', 'Guatemala', 'Honduras',
    'Nicaragua', 'Belize'
]

# Filtrar el DataFrame para incluir solo estos países
COVID_data_centro = df[df['Country'].isin(centro_american_countries)].copy()

# Asegurarse de que la columna de fecha es de tipo datetime
COVID_data_centro['Date_reported'] = pd.to_datetime(COVID_data_centro['Date_reported'], errors='coerce')

# Filtrar filas con fechas no válidas
COVID_data_centro = COVID_data_centro.dropna(subset=['Date_reported'])

# Extraer el año de la columna de fecha
COVID_data_centro['Year'] = COVID_data_centro['Date_reported'].dt.year

# Agrupar por país y año, y sumar los nuevos casos
annual_cases_centro = COVID_data_centro.groupby(['Country', 'Year'])['New_deaths'].sum().reset_index()

# Crear el gráfico de líneas para el número de casos nuevos por país y año en los países de Centroamérica
plt.figure(figsize=(14, 8))
for country in centro_american_countries:
    country_data = annual_cases_centro[annual_cases_centro['Country'] == country]
    plt.plot(country_data['Year'], country_data['New_deaths'], marker='o', label=country)

plt.xlabel('Año')
plt.ylabel('Número de Casos Nuevos')
plt.title('Número de Muertes Anuales por País en Centroamérica')
plt.legend(title='País')
plt.xticks(annual_cases_centro['Year'].unique())
plt.grid(True)
plt.tight_layout()
plt.show()
No description has been provided for this image

Gráfica de relación entre datos¶

Con este gráfico se puede observar si hay una correlación entre los nuevos casos y las nuevas muertes. Si hay una tendencia ascendente, significa que a medida que aumentan los nuevos casos, también aumentan los casos de muertes. A partir de ello, podemos identificar posibles correlaciones y patrones entre estas variables. Además, con este tipo de gráficas es posible identificar outliers o anomalías en los datos, al observar puntos que se desvían significativamente del resto, puedes investigar más para entender por qué ocurre esto.

In [35]:
# Cargar la base de datos
file_path = 'COVID_sets_sin_NaN.csv'  # Asegúrate de que la ruta sea correcta
df = pd.read_csv(file_path)

# Generar gráficos de relaciones entre pares de características del dataframe
sns.pairplot(df, hue="New_cases", vars=['New_deaths', 'New_deaths', 'Cumulative_cases', 'Cumulative_deaths'])
plt.show()
No description has been provided for this image

Heatmap de nuevas muertes debidas al COVID por fecha por año¶

Con este tipo de gráfico es posible observar cómo los nuevos casos y muertes varían con el tiempo, e identificar de estar forma períodos con picos altos que podrían catalogarse como olas de la pandemia. Además es posible realizar comparaciones entre regiones y ver en cada una de ellas los periodos en el tiempo en que han sido más afectadas.

In [39]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Cargar la base de datos
file_path = 'COVID_sets_sin_NaN.csv'  # Asegúrate de que la ruta sea correcta
df = pd.read_csv(file_path)

# Lista de países de Centroamérica
centroamerica = ['Belize', 'Costa Rica', 'El Salvador', 'Guatemala', 'Honduras', 'Nicaragua', 'Panama']

# Filtrar datos para países de Centroamérica
df_centroamerica = df[df['Country'].isin(centroamerica)].copy()

# Convertir la columna 'Date_reported' a tipo datetime
df_centroamerica['Date_reported'] = pd.to_datetime(df_centroamerica['Date_reported'], errors='coerce')

# Filtrar filas con fechas no válidas
df_centroamerica = df_centroamerica.dropna(subset=['Date_reported'])

# Extraer el año y mes de la columna de fecha
df_centroamerica['YearMonth'] = df_centroamerica['Date_reported'].dt.to_period('M')

# Crear una tabla pivote para representar los datos en forma de heatmap
heatmap_data = df_centroamerica.pivot_table(index='YearMonth', columns='Country', values='New_deaths', aggfunc='sum').fillna(0)

# Crear el heatmap
plt.figure(figsize=(10, 6))
sns.heatmap(heatmap_data, cmap='YlGnBu', linewidths=.5)
plt.title('Heatmap de nuevas muertes en Centroamérica por mes')
plt.xlabel('País')
plt.ylabel('Fecha')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
No description has been provided for this image

Conclusiones:

  • Este proyecto demuestra cómo se pueden utilizar las herramientas de análisis de datos y visualización en Python para explorar y presentar datos del COVID-19 en Centroamérica. A través de gráficos de barras, heatmaps y mapas interactivos, se pueden obtener insights valiosos que ayudan a entender mejor la distribución y evolución de la pandemia en la región.
  • Al observar los datos a lo largo del tiempo, se pueden identificar picos de muertes y de nuevos casos en países específicos y regiones. Esto puede estar relacionado con eventos específicos, tales como la implementación de medidas de distanciamiento social, cuarentenas, introducción de vacunas, apertura de fronteras, etc.

  • Podemos observar que la aregión más afectada a los largo del tiempo ha sido la región AMRO, seguida por la región EURO. Mientras que la región WPRO experimentó un aumento potencial en le número de muertes por covid en el 2023. Finalmente, cabe mencionar que al aparecer la región AFRO ha sido la menos afectada, sin embargo, considero que puede debe a la poca información generada por los sistemas de salud de los paíese que lo componen por lo que llegar a conclusiones sobre esta región requiere de mayor análisis.

  • Finalmente, con los gráficos de dispersión y los heatmaps pueden ayudar a identificar regiones o periodos críticos que requieren la implementación de nuevas medidas sanitarias.

Otras fuentes de consulta:

Data Science For Bio. (n.d.). Python for Bioinformatics: 11 Packages and Cheat Sheets for Biological Data. https://datascienceforbio.com/python-for-bioinformatics-11-packages-and-cheat-sheets-for-biological-data/

BMC Bioinformatics. (n.d.). PyCellBase, an efficient python package for easy retrieval of biological data from heterogeneous sources. https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-019-3143-0

PLOS Computational Biology. (n.d.). An Introduction to Programming for Bioscientists: A Python-Based Primer. https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1004865

GitHub. (n.d.). Biopython: Work with biological sequence data in Python. https://github.com/agmcfarland/biopython_workshop