Describir la fuente de datos con la función describe()#

Previamente vimos cómo identificar los tipos de datos de pandas con el método dtypes. Ahora veremos un método muy sencillo para ‘describir’ de manera muy preliminar lo que podemos hacer con nuestra fuente de datos.

La función describe()#

De acuerdo con la documentación de pandas, la función describe() realiza una descripción estadística de nuestros datos. Incluye aquellos “que resumen las medidas de tendenca central, dispersión y forma de una fuente de datos, descartando los valores nulos (NaN)”.

Esta es una función muy sencilla de utilizar y a la vez muy poderosa, puesto que puede realizar sus análisis tanto en valores numéricos como de objeto, incluso de datos mixtos.

Veámos qué sucede cuando utilizamos nuestra fuente de datos de ejemplo.

import pandas as pd

ejemplo1 = pd.DataFrame(
    {"Nombre": ["Andrea", "Berenice", "Carlos"], # tipo de datos string
    "Edad": [34, 51, 26], # tipo de datos int
    "Registro": [True, False, True], # tipo de datos bool
    "Promedio": [9.5, 8.5, 10], # tipo de datos float
    "Origen": [
        {"Ciudad": "Ciudad de México", "Estado": "CDMX"}, 
        {"Ciudad": "Guadalajara", "Estado": "Jalisco"}, 
        {"Ciudad": "Toluca", "Estado": "Estado de México"}
        ], # tipo de datos dict 
    "Calificaciones": [(9, 8, 10), (8, 7, 9), (7, 6, 8)] # tipo de datos tuple
    })

ejemplo1.describe()
Edad Promedio
count 3.000000 3.000000
mean 37.000000 9.333333
std 12.767145 0.763763
min 26.000000 8.500000
25% 30.000000 9.000000
50% 34.000000 9.500000
75% 42.500000 9.750000
max 51.000000 10.000000

Vemos cómo pandas selecciona las dos columnas numéricas (‘Edad’ y ‘Promedio’) para hacer la descripción del dataframe. Las operaciones resultantes son el conteo de los valores, la media, la desviación estándar, el valor mínim y el valor máximo, sí como el percentil bajo (25) y el percentil alto (75). El percentil 50 es igual que la mediana.

Si queremos obtener una descripción más amplia, que incluya todas las columnas sin importar su tipo de datos, simplemente añadimos el argumento include='all':

ejemplo1.describe(include='all')
Nombre Edad Registro Promedio Origen Calificaciones
count 3 3.000000 3 3.000000 3 3
unique 3 NaN 2 NaN 3 3
top Andrea NaN True NaN {'Ciudad': 'Ciudad de México', 'Estado': 'CDMX'} (9, 8, 10)
freq 1 NaN 2 NaN 1 1
mean NaN 37.000000 NaN 9.333333 NaN NaN
std NaN 12.767145 NaN 0.763763 NaN NaN
min NaN 26.000000 NaN 8.500000 NaN NaN
25% NaN 30.000000 NaN 9.000000 NaN NaN
50% NaN 34.000000 NaN 9.500000 NaN NaN
75% NaN 42.500000 NaN 9.750000 NaN NaN
max NaN 51.000000 NaN 10.000000 NaN NaN

Vemos que en este caso incluye otros valores como top, que corresponde al valor más común; unique que representa la cantidad de valores únicos, y freq que representa la fecuencia del valor más común. Para los valores de timestamp también serán mostrados el primer y último valor.

Ahora realicemos el ejercicio con nuestra fuente de datos de ejemplo.

import pandas as pd
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

Al igual que en nuestro dataframe de ejemplo, pandas solamente selecciona los valores numéricos: Unnamed: 0 (que corresponde al índice de los datos) y edad. Veámos ahora qué información nos muestra cuando incluímos el parámetro include='all'.

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

Como vemos es una tabla con todas las columnas de nuestro dataframe. Reliza una revisión rápida del resultado para que puedas observar algunos detalles del conjunto de datos que podrían ser útiles. Por ejemplo, es claro que en la columna sexo es mayor la frecuencia de casos en mujeres (733,991 casos sobre 1’323,501). También, si vemos la columna entidad_nac vemos que de las 33 entidades nacionales incluidas, la mayor frecuencia (por mucho) está representada por casos de la Ciudad de México (1’052,272 del total de los casos).

Para mejorar la legibilidad, podemos segmentar la descripción por unas cuantas columnas, por ejemplo:

covid_nacional[['origen', 'sector', 'sexo', 'entidad_nac', 
       'tipo_paciente', 'fecha_ingreso', 'fecha_sintomas', 'fecha_def']].describe(include='all')
origen sector sexo entidad_nac tipo_paciente fecha_ingreso fecha_sintomas fecha_def
count 1323501 1323501 1323501 1323501 1323501 1323501 1323501 3589
unique 2 12 2 33 2 177 223 166
top FUERA DE USMER SSA MUJER CIUDAD DE MÉXICO AMBULATORIO 2022-01-12 2022-01-10 2022-01-29
freq 1170267 793606 733991 1052272 1297093 40197 46175 101

En este caso, podemos incluso narrar un poco nuestros datos, ya que encontramos que la mayoría de pacientes fueron ambulatorios, mujeres, de la Ciudad de México, que la mayor parte de reportes provienen de unidades por fuera de las USMER (Unidades de Salud Monitoras de Enfermedad Respiratoria Viral). También podemos afirmar que la mayoría de los reportes de síntomas se dieron el 10 de enero, la mayoría de ingresos el 12 de enero y la mayor cantidad de defunciones el 29 de enero.

Como habrás notado, todavía estamos en una fase muy descriptiva. Esto nos permite tener una perspectiva de lo que podemos obtener de nuestro conjunto de datos, lo que nos facilitará la tarea de planear qué transformaciones requeriremos en nuestros datos para poderlos visualizar correctamente.

Actividad#

Usando el método describe() analiza los datos que seleccionaste y responde en el foro lo siguiente:

  • ¿Qué columnas brindan información significativa para analizar?

  • ¿Qué te gustaría descubrir de tu fuente de datos?

  • ¿Es suficiente con tu fuente de datos? ¿Necesitas una fuente de datos adicional?

Responder estas preguntas te ayudará a entender tu fuente de datos y qué puedes lograr con ella.