Actividad de avance del proyecto
Contents
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:
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.