Définir le type de données de colonne pour JSON Panda SplitJ'utilise JSL pour importer un fichier JSON en utilisant un format Panda Split. Lorsque je fais cela, toutes les colonnes sont importées en tant que caractères, alors qu'en pratique, elles devraient être une combinaison de caractères et de nombres. Je peux écrire un script JSL pour convertir chaque colonne en nombre, mais cela convertira également les colonnes de caractères (et supprimera leurs données).
En utilisant JSL, puis-je détecter si un type de données doit être de type caractère ou numérique et le convertir en conséquence ? Ou existe-t-il un moyen de le faire pendant l'étape d'importation ? Je ne connais pas à l'avance les colonnes d'un fichier spécifique.
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" );
);
);Accès aux donnéesFenêtresRe : Définition du type de données de colonne pour JSON Panda SplitJe n'ai pas d'exemple approprié pour tester cela (JMP plante simplement avec mon exemple JSON que j'ai rapidement obtenu), donc je ne peux pas tester s'il existe un moyen de le faire dans l'assistant JSON.
Vous pouvez convertir uniquement des valeurs numériques en vérifiant d'abord les valeurs de la colonne, puis en les convertissant en conséquence.
Une façon d'effectuer la conversion consiste à vérifier d'abord certaines valeurs de la colonne, puis à les convertir si elles sont correctes. Quelques options que vous pouvez vérifier
- Vérifiez simplement la première valeur
- Vérifiez la première et la dernière valeur
- Vérifiez toutes les valeurs
- Vérifier un sous-ensemble aléatoire de valeurs
De nos jours, je ferais la vérification en utilisant Num(< modifier le type de données de la colonne. Je pense que vous pouvez également utiliser InFormat() pour vérifier la « meilleure » correspondance (peut-être même mieux que Num()).
Re : Définition du type de données de colonne pour JSON Panda SplitOui, ça marche. Merci Jarmo.
Re : Définition du type de données de colonne pour JSON Panda SplitVoici une implémentation JSL pour référence :
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 : Définition du type de données de colonne pour JSON Panda SplitQuelques changements qui pourraient être bons à faire : utilisez Column() au lieu de As Column() et vérifiez si l'ajout de << Restrict dans votre appel Num() est quelque chose que vous souhaitez faire (je l'ai fait pour ma version de quelque chose comme ça).