<jupyter_start><jupyter_text>Análisis de datos vacunales 2021: Argentina y PerúAnálisis de datos de la vacunación contra Covid-19 en algunos países de América Latina, presentado en PyCon Latam 2021 durante la charla "Análisis exploratorio de datos: tecnología social y gobiernos democráticos".Fontes:- Perú (https://www.datosabiertos.gob.pe/dataset/vacunacion)- Argentina (https://www.datos.gob.ar/dataset/salud-vacunas-contra-covid-19-dosis-aplicadas-republica-argentina---registro-desagregado)<jupyter_code>from matplotlib import pyplot as plt
from zipfile import ZipFile
 
import datetime
import py7zr
import requests
 
import numpy as np
import pandas as pd<jupyter_output><empty_output><jupyter_text>Preprocesamiento de datos  Argentina<jupyter_code>url_argentina = "https://sisa.msal.gov.ar/datos/descargas/covid-19/files/datos_nomivac_covid19.zip"
request_get = requests.get(url_argentina)
request_get
with open('datos_nomivac_covid_19.zip', 'wb') as zip_argentina:
  zip_argentina.write(request_get.content)
with ZipFile('datos_nomivac_covid_19.zip', 'r') as zip_argentina:
  title = zip_argentina.namelist()
  zip_argentina.extract(member=title[0])
vacunacion_argentina = pd.read_csv('/content/datos_nomivac_covid19.csv', parse_dates=['fecha_aplicacion'])
vacunacion_argentina
vacunacion_argentina.info()<jupyter_output><class 'pandas.core.frame.DataFrame'>
RangeIndex: 41408689 entries, 0 to 41408688
Data columns (total 15 columns):
 #   Column                      Dtype         
---  ------                      -----         
 0   sexo                        object        
 1   grupo_etario                object        
 2   jurisdiccion_residencia     object        
 3   jurisdiccion_residencia_id  int64         
 4   depto_residencia            object        
 5   depto_residencia_id         int64         
 6   jurisdiccion_aplicacion     object        
 7   jurisdiccion_aplicacion_id  int64         
 8   depto_aplicacion            object        
 9   depto_aplicacion_id         int64         
 10  fecha_aplicacion            datetime64[ns]
 11  vacuna                      object        
 12  condicion_aplicacion        object        
 13  orden_dosis                 int64         
 14  lote_vacuna                 object        
dtypes: datetime64[ns](1), int64(5), object(9)
memory usage: 4.6+ GB<jupyter_text>Perú<jupyter_code>dict_peru = pd.read_excel('https://www.datosabiertos.gob.pe/sites/default/files/Diccionario_Datos%20%285%29.XLSX')
dict_peru
url_peru = "https://cloud.minsa.gob.pe/s/To2QtqoNjKqobfw/download"
request_get_peru = requests.get(url_peru)
request_get_peru
with open('peru_vacunacion_covid_19.7z', 'wb') as zip_peru:
  zip_peru.write(request_get_peru.content)
with py7zr.SevenZipFile('peru_vacunacion_covid_19.7z', mode='r') as zip_peru:
  zip_peru.extractall()
vacunacion_peru = pd.read_csv("/content/vacunas_covid.csv", encoding='utf-8-sig', parse_dates=['FECHA_CORTE', 'FECHA_VACUNACION'])
vacunacion_peru.info()<jupyter_output><class 'pandas.core.frame.DataFrame'>
RangeIndex: 17847210 entries, 0 to 17847209
Data columns (total 12 columns):
 #   Column            Dtype         
---  ------            -----         
 0   FECHA_CORTE       datetime64[ns]
 1   UUID              object        
 2   GRUPO_RIESGO      object        
 3   EDAD              int64         
 4   SEXO              object        
 5   FECHA_VACUNACION  datetime64[ns]
 6   DOSIS             int64         
 7   FABRICANTE        object        
 8   DIRESA            object        
 9   DEPARTAMENTO      object        
 10  PROVINCIA         object        
 11  DISTRITO          object        
dtypes: datetime64[ns](2), int64(2), object(8)
memory usage: 1.6+ GB<jupyter_text>ExplotaciónLo que buscamos:- La distribuición etária de la población vacunada;- Comparación entre los 2 países del porcentaje de la población vacunada;  Argentina, PerúPara facilitar nuestro análisis, crearemos un dataframe apenas con los datos que importa para lo que buscamos. Además, uniremos los dataframes para facilitar nuestro trabalho, por lo tanto tendremos que poner el mismo estandarde en los dataframes de ambos los países. Estandarización del dataframe de Argentina<jupyter_code>vacunacion_argentina.columns
vacunacion_argentina_estandar = vacunacion_argentina[['grupo_etario', 'fecha_aplicacion', 'vacuna', 'orden_dosis']].copy()
vacunacion_argentina_estandar['pais'] = 'Argentina'
vacunacion_argentina_estandar['fecha_aplicacion'] = vacunacion_argentina_estandar['fecha_aplicacion'].dt.strftime('%m-%Y')
vacunacion_argentina_estandar.to_csv('/content/drive/MyDrive/Comunidades/Palestras/datos/vacunacion_argentina_estandar.csv')

vacunacion_argentina_estandar.head()<jupyter_output><empty_output><jupyter_text>Para aplicar los mismos grupos etários en los datos de Perú, sacaremos un listado de estos primeros datos que estamos manejando.<jupyter_code>grupo_etario = vacunacion_argentina_estandar['grupo_etario'].unique().tolist()
grupo_etario.sort()
grupo_etario
grupo_etario.pop(-1)
grupo_etario<jupyter_output><empty_output><jupyter_text>Estandarización del dataframe de Perú<jupyter_code>vacunacion_peru.columns
vacunacion_peru_estandar = vacunacion_peru[['EDAD', 'FECHA_VACUNACION', 'FABRICANTE', 'DOSIS']].copy()
vacunacion_peru_estandar['pais'] = 'Perú'
vacunacion_peru_estandar['FECHA_VACUNACION'] = vacunacion_peru_estandar['FECHA_VACUNACION'].dt.strftime('%m-%Y')
vacunacion_peru_estandar.to_csv('/content/drive/MyDrive/Comunidades/Palestras/datos/vacunacion_peru_estandar.csv')
cortes = [18, 30, 40, 50, 60, 70, 80, 90, 100, 300]
vacunacion_peru_estandar['EDAD'] = pd.cut(vacunacion_peru_estandar['EDAD'], cortes, include_lowest=True, labels=grupo_etario)
vacunacion_peru_estandar.head()<jupyter_output><empty_output><jupyter_text>Para concatenar los dataframes, hace falta que los títulos de las columnas sean los mismos. Así que, vamos usar los mismos títulos del dataframe de Argentina<jupyter_code>vacunacion_peru_estandar.columns = ['grupo_etario', 'fecha_aplicacion', 'vacuna', 'orden_dosis', 'pais']
vacunacion_ar_pe = pd.concat([vacunacion_argentina_estandar, vacunacion_peru_estandar], ignore_index=True)<jupyter_output><empty_output><jupyter_text>Las próximas 3 celdas no hace falta que lo hagas. Están aquí para que veas cómo leer los datos ya declarando los tipos de cada columna.<jupyter_code>vacunacion_ar_pe.to_csv('/content/drive/MyDrive/Comunidades/Palestras/datos/vacunacion_ar_pe_estandar.csv')
dtype = {'grupo_etario': str,
         'fecha_aplicacion': str,
         'vacuna': str,
         'orden_dosis': int,
         'pais': str}
vacunacion_ar_pe = pd.read_csv('/content/drive/MyDrive/Comunidades/Palestras/datos/vacunacion_ar_pe_estandar.csv', dtype=dtype, parse_dates=['fecha_aplicacion']) #linea duplicada
vacunacion_ar_pe.shape
vacunacion_ar_pe.info()<jupyter_output><class 'pandas.core.frame.DataFrame'>
RangeIndex: 59255899 entries, 0 to 59255898
Data columns (total 6 columns):
 #   Column            Dtype         
---  ------            -----         
 0   Unnamed: 0        int64         
 1   grupo_etario      object        
 2   fecha_aplicacion  datetime64[ns]
 3   vacuna            object        
 4   orden_dosis       int64         
 5   pais              object        
dtypes: datetime64[ns](1), int64(2), object(3)
memory usage: 2.6+ GB<jupyter_text>Edad- Hay distociones en la edad?<jupyter_code>fig1, ax1 = plt.subplots()
fig1.set_size_inches(10,10)
ax1.set_title('Perú - Distribuión etária')
ax1.boxplot(vacunacion_peru['EDAD'].to_list())
plt.show()<jupyter_output><empty_output><jupyter_text>- Cuál es la cantidade de vacunas aplicadas en cada grupo etário?<jupyter_code>vacunacion_ar_pe['grupo_etario'].unique()
vacunacion_ar_pe['grupo_etario'] = vacunacion_ar_pe.loc[:, 'grupo_etario'].replace({'S.I.': np.nan})
vacunacion_ar_pe.columns
vacunacion_ar_pe[['pais','grupo_etario', 'vacuna']].groupby(by=['pais', 'grupo_etario']).count()
vacunacion_ar_pe[['pais','grupo_etario', 'vacuna']].groupby(by=['pais', 'grupo_etario'], as_index=False).count().to_csv('/content/drive/MyDrive/Comunidades/Palestras/datos/grupo_etario_ar_pe.csv')<jupyter_output><empty_output><jupyter_text>- Comparación del percentual de la población vacunada entre los 2 países;<jupyter_code>poblacion_argentina = 44940000	# fuente: https://www.ign.gob.ar/NuestrasActividades/Geografia/DatosArgentina/Poblacion2
poblacion_peru = 32510000 # fuente: https://www.inei.gob.pe/estadisticas/indice-tematico/poblacion-y-vivienda/

poblacion = [poblacion_argentina, poblacion_peru]
paises = primera_dosis_ar_pe['pais'].unique().tolist()
paises
vacunacion_ar_pe[vacunacion_ar_pe['pais'] == 'Argentina']['orden_dosis'].value_counts()
dosis_argentina = vacunacion_ar_pe[vacunacion_ar_pe['pais'] == 'Argentina']['orden_dosis'].value_counts().to_list()
dosis_argentina
vacunacion_ar_pe[vacunacion_ar_pe['pais'] == 'Perú']['orden_dosis'].value_counts()
dosis_peru = vacunacion_ar_pe[vacunacion_ar_pe['pais'] == 'Perú']['orden_dosis'].value_counts().to_list()
dosis_peru
datos = {'pais': paises, 'poblacion': poblacion, 'primera_dosis': [dosis_argentina[0], dosis_peru[0]], 'segunda_dosis': [dosis_argentina[1], dosis_peru[1]]}
panorama_vacunacion_ar_pe = pd.DataFrame(data=datos)
panorama_vacunacion_ar_pe
panorama_vacunacion_ar_pe['primera_dosis_porcentaje'] = round((panorama_vacunacion_ar_pe['primera_dosis']*100/panorama_vacunacion_ar_pe['poblacion']), 2)
panorama_vacunacion_ar_pe['segunda_dosis_porcentaje'] = round((panorama_vacunacion_ar_pe['segunda_dosis']*100/panorama_vacunacion_ar_pe['poblacion']), 2)
panorama_vacunacion_ar_pe
panorama_vacunacion_ar_pe.to_csv('/content/drive/MyDrive/Comunidades/Palestras/datos/panorama_vacunacion_ar_pe.csv')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10646387832699619, 'fraction_numerical': 0.026102147775151577, 'mean_word_length': 4.529545454545454, 'pattern_counts': {'":': 0, '<': 45, '<?xml version=': 0, '>': 45, 'https://': 7, 'lorem ipsum': 0, 'www.': 5, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '11', 'dir': 'jupyter-structured-clean-dedup', 'id': '619985', 'license': 'MIT', 'n_tokens_mistral': 3906, 'n_tokens_neox': 3636, 'n_words': 588, 'path': 'analisis_datos_vacunales_ar_pe_2021.ipynb', 'repo_name': 'cecivieira/analisis-datos-vacunales-ar-pe-ago2021', 'size': '9731'}