Establecer el tipo de datos de columna para JSON Panda SplitEstoy usando JSL para importar un archivo JSON con un formato Panda Split. Cuando hago esto, todas las columnas se importan como caracteres, cuando en la práctica deberían ser una combinación de caracteres y números. Puedo escribir un script JSL para convertir cada una de ellas a números, pero esto también convertirá las columnas de caracteres (y eliminará sus datos).
¿Puedo utilizar JSL para detectar si un tipo de datos debe ser de carácter o numérico y convertirlo en consecuencia? ¿O hay alguna forma de hacerlo durante el paso de importación? No conozco de antemano las columnas de un archivo específico.
JMP 18.1.1
dt_cols = dt << Get Column Names();
For Each({col, i}, dt_cols,
Try(
// No warning, just converts everything.
As Column(dt, col) << Data Type("Numeric");
As Column(dt, col) << Modeling Type( "Continuous" );
);
);Acceso a datosVentanasRe: Establecer el tipo de datos de columna para JSON Panda SplitNo tengo un ejemplo adecuado para probar esto (JMP simplemente falla con mi ejemplo JSON que obtuve rápidamente), por lo que no puedo probar si hay una manera de hacerlo en el Asistente JSON.
Puede convertir solo valores numéricos verificando primero los valores de la columna y luego convirtiéndolos en consecuencia.
Una forma de realizar la conversión es comprobar primero algunos valores de la columna y luego convertirlos si están bien. Algunas opciones que puede comprobar
- Simplemente verifique el primer valor
- Compruebe el primer y el último valor
- Verificar todos los valores
- Comprobar subconjunto aleatorio de valores
Hoy en día yo haría la comprobación usando Num(< Cambiar el tipo de datos de la columna. Creo que también puedes usar InFormat() para comprobar la "mejor" coincidencia (puede ser incluso mejor que Num()).
Re: Establecer el tipo de datos de columna para JSON Panda SplitSí, funciona. Gracias Jarmo.
Re: Establecer el tipo de datos de columna para JSON Panda SplitA continuación se muestra una implementación JSL como referencia:
rows_to_check_for_conversion = 100;
// Get column names.
dt_cols = dt << Get Column Names();
// Change data types.
For Each( {c, i}, dt_cols,
non_missing_rows = dt << Get Rows Where( !Is Missing( As Column( dt, c ) ) );
row_check = 0;
convert_to_number = 1;
While( row_check < rows_to_check_for_conversion & row_check < N Items( non_missing_rows ) & convert_to_number == 1,
row_check = row_check + 1;
r = non_missing_rows[row_check];
val = Num( dt:c[r] );
If( Is Missing( val ),
convert_to_number = 0
);
);
If( convert_to_number == 1,
As Column( dt, c ) << Data Type( "Numeric" );
As Column( dt, c ) << Modeling Type( "Continuous" );
);
);Re: Establecer el tipo de datos de columna para JSON Panda SplitAlgunos cambios que podría ser bueno hacer: use Column() en lugar de As Column() y verifique si agregar << Restrict en su llamada Num() es algo que desea hacer (lo he hecho para mi versión de algo como esto).