En este artículo, veremos cómo clasificar arrays Numpy con desempates en Python.
La clasificación es una operación estadística esencial utilizada en numerosos campos como la ciencia de datos, la sociología, etc. Un enfoque de fuerza bruta sería clasificar los índices de la array en orden de sus valores correspondientes. Tal enfoque sería útil en casos que no involucran los mismos valores en el conjunto de números dado. Este artículo lo llevará un paso adelante y explorará la función rankdata() de la biblioteca Scipy de Python e ilustrará su uso para listas que tienen vínculos.
función rankdata()
Para calcular los rangos, usaremos la función rankdata() en la biblioteca scipy.stats en Python. La función tiene cinco estrategias de desempate diferentes, y su sintaxis es la siguiente:
Sintaxis: scipy.stats.rankdata(arr, method=’promedio’, axis=Ninguno)
Parámetros:
- arr: Una array n-dimensional
- método: Una string que menciona la estrategia de desempate. Es de 5 tipos:
- ‘promedio’: A cada valor se le asigna el promedio de los rangos que se habrían asignado a todos los valores empatados.
- ‘min’: A cada valor se le asigna el mínimo de los rangos que se habrían asignado a todos los valores empatados.
- ‘max’: A cada valor se le asigna el máximo de los rangos que se le habrían asignado a todos los valores empatados.
- ‘denso’: al rango del siguiente elemento más alto se le asigna el rango inmediatamente posterior a los asignados a los elementos empatados.
- ‘ordinal’: A todos los valores se les da un rango distinto, correspondiente al orden en que ocurren los valores en arr.
- eje: Eje a lo largo del cual se realiza el ranking. Si es Ninguno, la array de datos primero se aplana.
Devoluciones: una array Numpy de tamaño igual al tamaño de arr, que contiene puntajes de clasificación.
Ejemplo 1: Clasificación en una array Numpy 1-D
En este ejemplo, exploraremos todas las estrategias de desempate en una array Numpy unidimensional.
Python3
import numpy as np from scipy.stats import rankdata arr = np.array([-20, -10, -10, -10, 10, 20, 20, 50, 50, 60, 60, 60, 60, 60]) # Normal ranking; each value has distinct rank print(f"Ordinal ranking: {rankdata(arr, method='ordinal')}") # Average ranking; each value's # rank is averaged over all ties print(f"Average ranking: {rankdata(arr, method='average')}") # Max ranking; each value's rank is the # maximum ordinal rank for the corresponding # tie print(f"Max ranking: {rankdata(arr, method='max')}") # Min ranking; each value's rank is # the minimum ordinal rank for the corresponding # tie print(f"Min ranking: {rankdata(arr, method='min')}") # Dense ranking; each value's rank # is sequentially arranged print(f"Dense ranking: {rankdata(arr, method='dense')}")
Producción:
Ejemplo 2: clasificación en una array Numpy 2-D a lo largo de un eje particular usando el argumento ‘eje’
En este ejemplo, exploraremos todas las estrategias de desempate en una array Numpy bidimensional a lo largo de las filas.
Python3
arr = np.array([[-20, -10, -10, -10, 10, 20, 20], [50, 50, 60, -20, 60, 60, 60], [-20, 50, -10, -30, 60, 20, 60]]) # Normal ranking; each value has distinct rank print(f"Ordinal ranking:\n {rankdata(arr, method='ordinal', axis = 0)}") # Average ranking; each value's # rank is averaged over all ties print(f"Average ranking:\n {rankdata(arr, method='average', axis = 0)}") # Max ranking; each value's rank is # the maximum ordinal rank for # the corresponding tie print(f"Max ranking:\n {rankdata(arr, method='max', axis = 0)}") # Min ranking; each value's rank is the # minimum ordinal rank for the corresponding # tie print(f"Min ranking:\n {rankdata(arr, method='min', axis = 0)}") # Dense ranking; each value's rank # is sequentially arranged print(f"Dense ranking:\n {rankdata(arr, method='dense', axis = 0)}")
Producción:
Como podemos ver, al valor de cada columna en la array 2-D ‘arr’ se le asigna un rango al comparar las entradas correspondientes en la misma fila.
Publicación traducida automáticamente
Artículo escrito por adityasaini70 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA