Actividad de avance del proyecto#

Después de realizar los ejercicios previos, es momento de incorporarlos a tu cuaderno de proyecto. Al finalizar, deberás tener un cuaderno de Google Colab similar a este:

Open In Colab

Importar datos#

Con “importar datos” nos referimos a la manera en la que preparamos la fuente de datos para ser leída por nuestro programa.

Existen múltiples maneras de importar la información. Por ejemplo, podemos sencillamente utilizar el mismo método que usamos con nuestro archivo ejemplo-1.txt.

Descarga el archivo que quieras utilizar en el directorio de Drive en el que vayas a almacenar tus datos.

Como ejemplo, voy a utilizar los casos nacionales de COVID-19 registrados diariamente durante el primer semestre de 2022: https://datos.cdmx.gob.mx/dataset/casos-asociados-a-covid-19/resource/e5f65f40-5904-492a-ae33-1ea98fb73d78?inner_span=True

Descargo el archivo CSV en un directorio de mi computadora. Posteriormente lo subo a mi directorio de datos de Google Drive:

Volvemos a nuestro cuaderno de Google Colab. Me aseguro de haber activado Google Drive en mi Google Colab y busco el directorio en el cual está mi archivo. En mi caso: '/content/drive/MyDrive/Colab Notebooks/curso_datos/casos_nacionales_covid-19_2022_semestre1.csv'

Con esos pasos, podemos hacer la importación:

datos = '/content/drive/MyDrive/Colab Notebooks/curso_datos/casos_nacionales_covid-19_2022_semestre1.csv'

with open(datos, 'r') as f:
  data = f.readlines(10) # agrego este argumento porque el archivo es muy extenso.

data
['"","fecha_actualizacion","id_registro","origen","sector","entidad_um","sexo","entidad_nac","entidad_res","municipio_res","tipo_paciente","fecha_ingreso","fecha_sintomas","fecha_def","intubado","neumonia","edad","nacionalidad","embarazo","habla_lengua_indig","indigena","diabetes","epoc","asma","inmusupr","hipertension","otra_com","cardiovascular","obesidad","renal_cronica","tabaquismo","otro_caso","toma_muestra_lab","resultado_lab","toma_muestra_antigeno","resultado_antigeno","clasificacion_final","migrante","pais_nacionalidad","pais_origen","uci"\n']

De esta manera hemos logrado incluir el archivo en nuestro cuaderno, pero será muy complejo manipularlo. Por esta razón, es preferible utilizar una librería que nos ayude a procesar estos datos. En nuestro caso, usaremos ‘pandas’

Para hacer que nuestro programa funcione, solamente debemos importar la librería:

import pandas as pd

Y posteriormente podremos abrir nuestro archivo desde Python:

import pandas as pd

covid_nacional = pd.read_csv(datos)
covid_nacional.head()
/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py:2882: DtypeWarning: Columns (13) have mixed types.Specify dtype option on import or set low_memory=False.
  exec(code_obj, self.user_global_ns, self.user_ns)
Unnamed: 0 fecha_actualizacion id_registro origen sector entidad_um sexo entidad_nac entidad_res municipio_res ... otro_caso toma_muestra_lab resultado_lab toma_muestra_antigeno resultado_antigeno clasificacion_final migrante pais_nacionalidad pais_origen uci
0 1 2022-06-26 0793b8 FUERA DE USMER SSA CIUDAD DE MÉXICO HOMBRE CIUDAD DE MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1 2 2022-06-26 0fef08 USMER SSA CIUDAD DE MÉXICO HOMBRE CIUDAD DE MÉXICO NaN NaN ... NO SI POSITIVO A SARS-COV-2 NO NO APLICA (CASO SIN MUESTRA) CASO DE SARS-COV-2 CONFIRMADO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
2 3 2022-06-26 11e31a FUERA DE USMER SSA CIUDAD DE MÉXICO HOMBRE CIUDAD DE MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
3 4 2022-06-26 0741e4 FUERA DE USMER ISSSTE CIUDAD DE MÉXICO HOMBRE CIUDAD DE MÉXICO NaN NaN ... NO SI RESULTADO NO ADECUADO NO NO APLICA (CASO SIN MUESTRA) NO REALIZADO POR LABORATORIO NO ESPECIFICADO MÉXICO NO APLICA NO
4 5 2022-06-26 13c92b FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... SI NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA

5 rows × 41 columns

De esta manera, nuestro archivo estará listo para ser procesado :)

Análisis de estructuras de datos y preparación#

Describe la fuente de datos#

Una descripción simple de la forma de la fuente de datos es la siguiente:

# número de filas
filas = covid_nacional.shape[0]
filas
1323501

Esta es una fuente de datos con suficientes campos como para justificar una lectura distante de la información. Difícilmente una persona podría comprender la información que hay en ella solamente “leyendo” los datos de esas tablas.

# número de columnas
columnas = covid_nacional.shape[1]
columnas
41

Además, vemos que es un conjunto de datos con una cantidad significativa de categorías. Esto permite que con una sola fuente de información se puedan realizar operaciones de comparación entre columnas para analizar la información.

# nombre de las columnas
covid_nacional.columns
Index(['Unnamed: 0', 'fecha_actualizacion', 'id_registro', 'origen', 'sector',
       'entidad_um', 'sexo', 'entidad_nac', 'entidad_res', 'municipio_res',
       'tipo_paciente', 'fecha_ingreso', 'fecha_sintomas', 'fecha_def',
       'intubado', 'neumonia', 'edad', 'nacionalidad', 'embarazo',
       'habla_lengua_indig', 'indigena', 'diabetes', 'epoc', 'asma',
       'inmusupr', 'hipertension', 'otra_com', 'cardiovascular', 'obesidad',
       'renal_cronica', 'tabaquismo', 'otro_caso', 'toma_muestra_lab',
       'resultado_lab', 'toma_muestra_antigeno', 'resultado_antigeno',
       'clasificacion_final', 'migrante', 'pais_nacionalidad', 'pais_origen',
       'uci'],
      dtype='object')

El nombre de las columnas nos ayuda a identificar las categorías y posibles datos que contienen nuestra fuente de datos.

No todas las fuentes de datos nombran sus columnas de manera significativa. En el caso de nuestro ejemplo, es bastante sencillo identificar qué tipo de información contiene cada categoría o columna, incluso qué tipo de dato sería deseable que tuviese cada una.

Tipos de datos con dtypes()#

covid_nacional.dtypes
Unnamed: 0                int64
fecha_actualizacion      object
id_registro              object
origen                   object
sector                   object
entidad_um               object
sexo                     object
entidad_nac              object
entidad_res              object
municipio_res            object
tipo_paciente            object
fecha_ingreso            object
fecha_sintomas           object
fecha_def                object
intubado                 object
neumonia                 object
edad                      int64
nacionalidad             object
embarazo                 object
habla_lengua_indig       object
indigena                 object
diabetes                 object
epoc                     object
asma                     object
inmusupr                 object
hipertension             object
otra_com                 object
cardiovascular           object
obesidad                 object
renal_cronica            object
tabaquismo               object
otro_caso                object
toma_muestra_lab         object
resultado_lab            object
toma_muestra_antigeno    object
resultado_antigeno       object
clasificacion_final      object
migrante                 object
pais_nacionalidad        object
pais_origen              object
uci                      object
dtype: object

La mayoría de los datos se encuentran representados como tipo object, es decir, que son de tipo texto, numérico-textual o mixto.

Aunque hay columnas que podrían tener un tipo de dato datetime, están representadas en tipo object. Esas columnas deberán ser transformadas para poder hacer operaciones y visualizaciones.

Descripción de los datos con describe()#

covid_nacional.describe()
Unnamed: 0 edad
count 1.323501e+06 1.323501e+06
mean 6.617510e+05 3.774596e+01
std 3.820620e+05 1.728453e+01
min 1.000000e+00 0.000000e+00
25% 3.308760e+05 2.500000e+01
50% 6.617510e+05 3.600000e+01
75% 9.926260e+05 5.000000e+01
max 1.323501e+06 1.220000e+02

De modo predeterminado, pandas describe los datos numéricos int64. De estos solamente nos sería útil edad, pues Unnamed: 0 es un índice (valor nominal).

covid_nacional.describe(include='all')
Unnamed: 0 fecha_actualizacion id_registro origen sector entidad_um sexo entidad_nac entidad_res municipio_res ... otro_caso toma_muestra_lab resultado_lab toma_muestra_antigeno resultado_antigeno clasificacion_final migrante pais_nacionalidad pais_origen uci
count 1.323501e+06 1323501 1323501 1323501 1323501 1323501 1323501 1323501 149707 149707 ... 1323501 1323501 1323501 1323501 1323501 1323501 1323501 1323501 1320040 1323501
unique NaN 1 1323501 2 12 32 2 33 23 1190 ... 3 2 5 2 3 7 3 122 1 4
top NaN 2022-06-26 0793b8 FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER CIUDAD DE MÉXICO MÉXICO NEZAHUALCÓYOTL ... NO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
freq NaN 1323501 1 1170267 793606 1314661 733991 1052272 133374 26282 ... 848434 1152385 1152385 1204565 771647 792364 1305180 1304673 1320040 1297093
mean 6.617510e+05 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
std 3.820620e+05 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
min 1.000000e+00 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
25% 3.308760e+05 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
50% 6.617510e+05 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
75% 9.926260e+05 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
max 1.323501e+06 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

11 rows × 41 columns

El parámetro include='all' obliga a realizar la operación en todas las columnas.

Esto permite identificar algunas columnas con ciertas frecuencias que podrían ser sujeto de análisis. Por ejemplo, correlaciones entre enfermedades crónicas y resultados (positivos o negativos), o frecuencias de casos de migrantes, mujeres o indígenas relacionadas con un área geográfica.

Debido a que esta fuente de datos no cuenta con información georeferenciada (contamos con los nombres de los municipios, pero no la información de latitud y longitud) será necesario utilizar una fuente de datos que permita agregar esa información.