API · SciPy

Función SciPy stats.zscore

Este tutorial le dirá qué es la función de puntuación z de las estadísticas mediante el uso del módulo Scipy en Python

En esta página

La puntuación z estandariza un valor midiendo su distancia respecto a la media de los datos en unidades de desviación estándar:

z = (X - μ) / σ

Aquí, X es un valor, μ es la media y σ es la desviación estándar. Una puntuación z describe cuán lejos se encuentra un valor de la media y es útil para comparar observaciones en la misma escala. Esta guía muestra cómo calcular puntuaciones z con SciPy para arrays y un DataFrame de pandas.

Usar scipy.stats.zscore

La función scipy.stats.zscore calcula puntuaciones estandarizadas a partir de una entrada de tipo array utilizando su media y su desviación estándar. Su firma de llamada es scipy.stats.zscore(a, axis=0, ddof=0, nan_policy='propagate').

Parámetro Propósito
a Entrada requerida de tipo array que contiene las observaciones.
axis Eje a lo largo del cual se calculan la media y la desviación estándar. El valor predeterminado es 0; para un array unidimensional usa todos los valores, mientras que para un array multidimensional calcula por separado a lo largo del eje 0. Use axis=None para calcular sobre todos los valores en conjunto.
ddof Grados de libertad delta utilizados por el cálculo de la desviación estándar. El valor predeterminado 0 usa la desviación estándar poblacional; establezca ddof=1 para la desviación estándar muestral.
nan_policy Controla cómo se tratan los valores NaN. propagate (el valor predeterminado) permite que los NaN afecten los resultados a lo largo de su eje de cálculo; raise informa un error si hay NaN presentes; omit excluye los NaN del cálculo y deja sus posiciones de salida como NaN.

Solo a es obligatorio. Elija axis según si cada fila, cada columna o toda la entrada debe compartir una media y una desviación estándar.

Calcular puntuaciones z para un array unidimensional

Para un array unidimensional, el valor predeterminado axis=0 usa el conjunto completo de valores. Ejecute este ejemplo con NumPy y SciPy instalados:

import numpy as np
from scipy import stats

values = np.array([10, 20, 30, 40, 50])
scores = stats.zscore(values)
print(np.round(scores, 3))

Este ejemplo se proporciona como código ejecutable; su salida no ha sido ejecutada en este paso de redacción. Una puntuación negativa significa que el valor está por debajo de la media, una puntuación positiva significa que está por encima de la media, y una puntuación de cero marca la media. La magnitud da la distancia en unidades de desviación estándar.

Calcular puntuaciones z para un array multidimensional

Para un array bidimensional, el valor predeterminado axis=0 calcula las puntuaciones de cada columna a través de sus filas. El resultado mantiene la forma de la entrada. Pase axis=1 para calcular por separado a través de cada fila, o axis=None para usar una media y una desviación estándar para todo el array.

import numpy as np
from scipy import stats

data = np.array([[1, 10], [2, 20], [3, 30]])
scores = stats.zscore(data, axis=0)
print(np.round(scores, 3))

El código ilustra la estandarización por columnas y no se ejecuta aquí; no se afirma ninguna salida.

Calcular puntuaciones z para un DataFrame de pandas

DataFrame.apply() aplica una función a cada columna de forma predeterminada (axis=0). Aplicar stats.zscore de esta manera estandariza cada columna de forma independiente. Este DataFrame fijo hace que la entrada sea reproducible:

import pandas as pd
from scipy import stats

data = pd.DataFrame({"height": [150, 160, 170], "weight": [50, 60, 70]})
scores = data.apply(stats.zscore)
print(scores.round(3))

Este ejemplo no se ejecuta aquí, por lo que no se afirma ningún resultado mostrado. Cada columna tiene su propia media y desviación estándar; use data.apply(stats.zscore, axis=1) cuando el cálculo deseado sea a través de cada fila.