Guía de discretización de datos de Python: instrucción manuscrita if-elif e implementación del método cut() en pandas

Cuando realizamos análisis de datos, a veces necesitamos discretizar datos numéricos y dividirlos en diferentes etiquetas o categorías. Hacerlo facilita nuestros propósitos estadísticos y analíticos y nos ayuda a comprender mejor los datos.

En este artículo, presentamos dos métodos comunes de discretización y proporcionamos código de implementación.

Método 1: Usa sentencias condicionales

El primer enfoque es usar declaraciones condicionales para verificar explícitamente si el valor de entrada x cae dentro de cada intervalo y devolver las etiquetas correspondientes. Este enfoque es adecuado para la segmentación personalizada, que requiere la configuración manual de cada umbral y la etiqueta correspondiente.

El siguiente es el código de implementación de una función de ejemplo transform_num:

def transfor_num(x):
    if x ==0:
        label = '无交易'
    elif 0 < x <=0.01:
        label = '0-0.01'
    elif 0.01 < x <=0.04:
        label = '0.01-0.04'
    elif 0.04 < x <=0.09:
        label = '0.04-0.09'
    elif 0.09 < x <=0.49:
        label = '0.09-0.49'  
    elif 0.49 < x <=0.99:
        label = '0.49-0.99'
    elif 0.99 < x <=4.99:
        label = '0.99-4.99'    
    elif 4.99 < x <=9.99:
        label = '4.99-9.99'
    elif 9.99 < x <=19.99:
        label = '9.99-19.99'
    elif 19.99 < x <=49.99:
        label = '19.99-49.99'
    elif 49.99 < x <=99.99:
        label = '49.99-99.99'
    elif x > 99.99 :
        label = '100及以上'
    return label
    
# 你可以通过调用 transfor_num(x) 函数并将所需的值传递给 x 参数来使用该函数。例如:
label = transfor_num(5.67)
print(label)

La salida debe ser '0.01-0.04' porque 5.67 está dentro del intervalo especificado.

Método 2: utilice el método pd.cut()

La segunda forma es usar el método cut() de la biblioteca pandas para asignar el valor de entrada x a diferentes etiquetas y devolver las etiquetas. Este método es más conciso y fácil de usar y, al mismo tiempo, el método y el resultado de la segmentación se pueden controlar de manera flexible ajustando el parámetro de contenedores.

El siguiente es el código de implementación de una función de ejemplo transform_num1:

def transfor_num1(x):
    bins = [-1,0, 0.01, 0.04, 0.09, 0.49, 0.99, 4.99, 9.99, 19.99, 49.99, 99.99, float('inf')]
    labels = [ '无交易','0-0.01', '0.01-0.04', '0.04-0.09', '0.09-0.49', '0.49-0.99', '0.99-4.99', '4.99-9.99', '9.99-19.99', '19.99-49.99', '49.99-99.99', '100及以上']
    return pd.cut(x, bins=bins, labels=labels)

Puede usar esta función llamando a la función transform_num1(x) y pasando el valor deseado al parámetro x. Por ejemplo:

import pandas as pd

data = {
    
    'transaction': [0, 0.005, 0.0125, 0.044, 0.067, 0.55, 2.99, 8.75, 15.6, 30.25, 80.5, 150]}
df = pd.DataFrame(data)

df['tran_amount_label'] = transfor_num1(df['transaction'])

print(df)

# 输出结果将会是如下数据框的形式:
    transaction  tran_amount_label
0       0.00000              无交易
1       0.00500            0-0.01
2       0.01250        0.01-0.04
3       0.04400        0.01-0.04
4       0.06700        0.04-0.09
5       0.55000        0.49-0.99
6       2.99000        0.99-4.99
7       8.75000        4.99-9.99
8      15.60000      9.99-19.99
9      30.25000     19.99-49.99
10     80.50000    49.99-99.99
11    150.00000           100及以上

Entre ellos, tran_amount_label es una columna recién agregada que muestra la etiqueta y la categoría de cada monto de transacción.

Ambos métodos tienen ventajas y desventajas. El uso de sentencias condicionales requiere la configuración manual de los umbrales y las etiquetas correspondientes, lo cual es engorroso, mientras que el método pd.cut() puede dividir automáticamente los intervalos, pero no es muy flexible. Por lo tanto, en un uso específico, es necesario elegir según la situación real.

Espero que este artículo pueda ayudarlo a comprender mejor el concepto y la implementación de la discretización.

Supongo que te gusta

Origin blog.csdn.net/weixin_44976611/article/details/130711678
Recomendado
Clasificación