Pandas práctico(6): Estadísticas Descriptivas

Pandas proporciona muchas opciones para calcular estadísticas descriptivas y otras operaciones de reducción con solo una simple llamada a función. Podrías querer calcular estos valores como parte de un pipeline de ML/Análisis de Datos, o simplemente porque quieres obtener una mejor comprensión de los datos con los que estás lidiando.

La mayoría de estas operaciones son similares a las reducciones de NumPy, ya que calculan y retornan un único valor. En algunos casos, retorna una estructura con dimensiones iguales-o-menores que la original.

En este artículo, exploraremos algunas de las funciones más usadas y veremos algunos ejemplos. ¡Perfecto, comencemos!

import pandas as pd
import numpy as np

frame = pd.DataFrame(np.random.rand(4,5),
                     index=['A', 'B', 'C', 'D'],
                     columns=['One', 'Two', 'Three', 'Four', 'Five'])
frame
One Two Three Four Five
A 0.973939 0.427195 0.790004 0.027722 0.686339
B 0.190250 0.891813 0.238110 0.636394 0.104428
C 0.951482 0.207945 0.081066 0.815889 0.785882
D 0.699541 0.154921 0.752932 0.066052 0.825628

Lo primero que aprenderemos es cómo realizar sumas. La función sum realiza sumas a lo largo del eje de filas por defecto (retorna la suma de los valores de cada columna). Puedes pasar axis='columns' como parámetro adicional para realizar la suma a lo largo del eje de columnas:

frame.sum()
One      2.815213
Two      1.681874
Three    1.862111
Four     1.546057
Five     2.402276
dtype: float64
frame.sum(axis='columns')
A    2.905198
B    2.060995
C    2.842264
D    2.499073
dtype: float64

Pandas también te permite calcular los valores mínimos y máximos en las columnas o filas de un dataframe, para esto, proporciona las funciones min y max. Como antes, puedes especificar el eje:

frame.max()
One      0.973939
Two      0.891813
Three    0.790004
Four     0.815889
Five     0.825628
dtype: float64
frame.min(axis='columns')
A    0.027722
B    0.104428
C    0.081066
D    0.066052
dtype: float64

Si en cambio, estás interesado en los índices donde están los valores mínimos y máximos, solo usa idxmax e idxmin:

frame.idxmax() # Todas las columnas tienen sus valores máximos en la fila D
One      A
Two      B
Three    A
Four     C
Five     D
dtype: object
frame.idxmin(axis='columns') # Todas las filas tienen su mínimo en la columna One
A     Four
B     Five
C    Three
D     Four
dtype: object

Pandas también tiene funciones para calcular (entre muchas otras) la media, mediana, desviación estándar y varianza:

frame.mean()
One      0.703803
Two      0.420468
Three    0.465528
Four     0.386514
Five     0.600569
dtype: float64
frame.median(axis='columns')
A    0.686339
B    0.238110
C    0.785882
D    0.699541
dtype: float64
frame.var()
One      0.132691
Two      0.112631
Three    0.129139
Four     0.159410
Five     0.112835
dtype: float64
frame.var(axis='columns')
A    0.134738
B    0.113646
C    0.155681
D    0.129304
dtype: float64
frame.std()
One      0.364268
Two      0.335605
Three    0.359358
Four     0.399262
Five     0.335909
dtype: float64
frame.std(axis='columns')
A    0.367067
B    0.337114
C    0.394564
D    0.359588
dtype: float64

Pandas también tiene una función increíblemente útil llamada describe. Calculará una batería de reducciones estándar y te mostrará el resumen:

frame.describe()
One Two Three Four Five
count 4.000000 4.000000 4.000000 4.000000 4.000000
mean 0.703803 0.420468 0.465528 0.386514 0.600569
std 0.364268 0.335605 0.359358 0.399262 0.335909
min 0.190250 0.154921 0.081066 0.027722 0.104428
25% 0.572218 0.194689 0.198849 0.056470 0.540861
50% 0.825512 0.317570 0.495521 0.351223 0.736110
75% 0.957096 0.543349 0.762200 0.681268 0.795818
max 0.973939 0.891813 0.790004 0.815889 0.825628

Lo último que aprenderemos es sobre correlación. Puedes usar el método corr para calcular la correlación entre dos columnas (o filas) de un dataframe. Esto es algo que probablemente harás seguido si te gusta la exploración/análisis de datos:

# Calcula la correlación entre las columnas One y Three
frame['One'].corr(frame['Five'])

0.879646855332041

Puedes proporcionar un parámetro adicional method para especificar el método de correlación usado, las opciones son:

  • pearson : Coeficiente de correlación estándar
  • kendall : Coeficiente de correlación Kendall Tau
  • spearman : Correlación de rango de Spearman
frame['One'].corr(frame['Five'], method='spearman')
0.19999999999999998

Alternativamente, puedes calcular la matriz de correlación del dataframe simplemente llamando al método corr:

frame.corr()
One Two Three Four Five
One 1.000000 -0.795497 0.275002 -0.269384 0.879647
Two -0.795497 1.000000 -0.275345 0.271683 -0.982924
Three 0.275002 -0.275345 1.000000 -0.999982 0.370300
Four -0.269384 0.271683 -0.999982 1.000000 -0.366111
Five 0.879647 -0.982924 0.370300 -0.366111 1.000000

Entender los datos usualmente comienza con una llamada a describe o corr

Calcular algunos valores de tus datos puede otorgarte una mejor comprensión del fenómeno que los generó.

Una de las primeras cosas que harás al seleccionar características para un algoritmo de ML es graficar el resultado de la matriz de correlación. Esto te dará una idea de qué características tienen una mejor oportunidad de predecir etiquetas si pretendes entrenar un modelo supervisado.

Esto, de nuevo, es solo un ejemplo de las muchas aplicaciones del análisis estadístico, y estas son solo algunas funciones básicas para ayudarte en el proceso.

Ahora que aprendimos lo básico, necesitamos hablar sobre traer los datos a Pandas. En el próximo artículo, aprenderemos cómo crear dataframes a partir de formatos de archivo comunes.

¡Gracias por leer!

Qué hacer después

Juan Luis Orozco Villalobos

¡Hola! Soy Juan, ingeniero de software y consultor en Budapest. Me especializo en computación en la nube e IA, y me encanta ayudar a otros a aprender sobre tecnología e ingeniería