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.
# 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
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)
# Cargar el conjunto de datos COVID
COVID_data = pd.read_csv("COVID_sets.csv")
# Ver la composición de los datos
COVID_data.columns.tolist()
['Date_reported', 'Country_code', 'Country', 'WHO_region', 'New_cases', 'Cumulative_cases', 'New_deaths', 'Cumulative_deaths']
# Imprimir la primera fila
COVID_data[:40]
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 |
# Imprimir el tamaño del conjunto
COVID_data.shape
print(COVID_data.shape)
(54720, 8)
# Dimensión del conjunto
## COVID_data_df.ndim
# Dimensión del conjunto
COVID_data.ndim
2
# 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')
# 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
# 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
# *** 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: []
## 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]
## 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
# 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
# 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]
## 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
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
# 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
# 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: []
# 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
## 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: []
## 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.
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()
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.
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()
Muertes totales en todos los años por región de la OMS región:¶
## 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)
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()
Países con mayor número de muertes por Who_region¶
#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()
Cantidad de muertes por año para cada país centroamericano¶
# 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()
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¶
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()
Países con mayor número de casos reportados al 2023¶
# 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¶
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¶
# 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()
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.
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()
Número de muertes casos anuales por país de Centroamerica
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()
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.
# 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()
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.
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()
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