HOWTO · Python
Función de correlación NumPy
Este tutorial analiza la función de correlación de la biblioteca NumPy en Python.
En esta página
Usa la función np.corrcoef() de NumPy para calcular coeficientes de correlación de Pearson entre datos numéricos emparejados. Las entradas fuera de la diagonal del resultado muestran el coeficiente entre los arreglos; un diagrama de dispersión opcional puede ayudarte a observar su patrón.
Correlación en NumPy
Un coeficiente de correlación resume la dirección y la intensidad de la asociación entre dos variables. Un coeficiente positivo describe valores que suelen aumentar juntos, mientras que uno negativo indica que una variable tiende a disminuir cuando la otra aumenta. Un coeficiente cercano a cero señala poca asociación lineal, pero no descarta una relación no lineal. La correlación describe una asociación; no demuestra que una variable cause cambios en otra.
Pearson, Kendall y Spearman son medidas de asociación distintas. np.corrcoef() calcula la correlación de Pearson, que describe la asociación lineal mediante la covarianza escalada por las desviaciones estándar de las variables. No calcula la correlación de Kendall ni la de Spearman; para esas medidas, usa una función adecuada de SciPy. Para calcular la correlación de Pearson en NumPy, usa el nombre exacto de la función: np.corrcoef().
Usa la función np.corrcoef() para calcular la correlación en Python
Pasa a np.corrcoef() dos arreglos con observaciones emparejadas. Deben tener la misma longitud para que cada posición represente un par de observaciones. La función devuelve una matriz de dos por dos: cada entrada fuera de la diagonal es el coeficiente de Pearson entre los arreglos, y ambas entradas son iguales. Cuando las dos correlaciones están definidas, las entradas de la diagonal son 1, porque cada variable está perfectamente correlacionada consigo misma.
En este ejemplo, los arreglos contienen diez pares de valores. Ejecuta el ejemplo para calcular su coeficiente:
import numpy as np
a = np.arange(20, 30)
b = np.array([8, 12, 29, 33, 60, 48, 21, 44, 78, 96])
x = np.corrcoef(a, b)
print(x)
Salida:
[[1. 0.82449488]
[0.82449488 1. ]]
Las dos entradas fuera de la diagonal son aproximadamente 0.82, lo que indica una asociación lineal positiva en estas observaciones. Puedes leer cualquiera de las dos para obtener el coeficiente entre los arreglos; el valor repetido refleja la simetría de la matriz de correlación. La diagonal vale 1 para variables cuya variación está definida y es distinta de cero. Si una entrada es constante, su desviación estándar es cero y su correlación de Pearson no está definida; por eso, el resultado puede contener NaN en lugar de un coeficiente utilizable. Revisa los datos y gestiona estos resultados antes de usarlos en cálculos posteriores.
Usa la correlación con Matplotlib para crear gráficos de correlación
Un diagrama de dispersión sitúa cada par de observaciones en su coordenada correspondiente (x, y). Permite visualizar los datos que sustentan un coeficiente y puede revelar agrupaciones o patrones curvos que un único resumen lineal quizá no describa bien. Usa el gráfico junto con el coeficiente calculado: una tendencia ascendente visible es compatible con una correlación positiva, pero el gráfico por sí solo no calcula ni determina el valor numérico.
El siguiente ejemplo opcional imprime la matriz de coeficientes y muestra las observaciones emparejadas. Usa la interfaz pyplot de Matplotlib; instala NumPy y Matplotlib en tu entorno de Python antes de ejecutarlo. La ventana del gráfico depende del entorno que se use para mostrar las figuras.
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
x = np.arange(20, 30)
y = np.array([8, 12, 29, 33, 60, 48, 21, 44, 78, 96])
print(np.corrcoef(x, y))
# %matplotlib inline
matplotlib.style.use("ggplot")
plt.scatter(x, y)
plt.show()
En esta muestra, los puntos tienden a subir a medida que aumenta x, lo cual coincide con el coeficiente positivo de np.corrcoef(). Los conjuntos de datos reales pueden mostrar patrones más variados, así que al interpretar una asociación, examina tanto los valores emparejados como el coeficiente.