Cómo mejorar el rendimiento al transformar la columna categórica en numéricaExtraigo datos, los proceso a lo largo de la línea de producción, de una base de datos que devuelve datos como pares parámetro-valor (el valor puede faltar).
Utilizo una división de tabla para tener datos con parámetro como columna (se espera que falten más en muchas columnas).
Luego ejecuto un script para convertir caracteres en numéricos cuando sea apropiado.
El problema es que la cantidad de columnas puede ser muy alta, en mi ejemplo alrededor de 60000 (11 filas en el ejemplo)
Entonces, en mi ejemplo, tengo 8 segundos para recuperar datos de la base de datos,
18 segundos para aplicar el algoritmo que marca todas las columnas que se convierten en 80 segundos para transformar la columna también.
¿Alguien puede sugerir una forma más eficiente de obtener el resultado final?
Este es el algoritmo que he usado:
names = <FONT face="Courier New" size="3">current data table()</FONT> << Get Column Names( Character, String );
for(I = 1, I <=N items(names), I++,
values= column( names[I]) << get values;
numerical=1;
for(j=1, j<=N items(values),j++,
if(!Is Missing(values[j]) & Is Missing( Num(values[j]) ),
numerical=0;
break();
);
);
if(numerical,
column( names[I]) << data Type("Numeric") << set Modeling Type ("Continuous");
);
);ScriptingRe: Cómo mejorar el rendimiento al transformar la columna categórica en numérica¿Quizás esto funcione más rápido?
Evita el bucle a través de filas y permite que los algoritmos de tabla de JMP funcionen, asumiendo que son más eficientes.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// set all columns to character
For( i = 1, i <= N Cols( dt ), i++,
Column( i ) << set data type( character )
);
wait(3);
// copy data table
dt_copy = dt << Subset( All rows, Selected columns only( 0 ) );
// Convert only numerics, use copied table for testing
For( i = 1, i <= N Cols( dt ), i++,
Column( dt_copy, i ) << set data type( numeric );
If( Col N Missing( Column( dt_copy, i ) ) == Col N Missing( Column( dt, i ) ),
Column( dt, i ) << set data type( numeric ) << set modeling type( continuous )
);
);
Close(dt_copy, nosave );
Re: Cómo mejorar el rendimiento al transformar la columna categórica en numéricaEl depurador JSL también tiene un generador de perfiles que mostrará qué declaraciones están usando más tiempo. No es obvio para mí por qué 60,000 columnas por 11 filas deberían tomar tanto tiempo, pero el generador de perfiles podría sugerir algo. (Si estuviera adivinando, podría adivinar el cambio real de carácter a numérico, no todo el bucle).
Usando el generador de perfiles del depurador: elija el script de depuración, luego presione el ícono #clock y luego presione el botón Go.
Primero presione el ícono #clock
el resultado
¡Colores del mapa de calor!