J'entends régulièrement des utilisateurs de JMP dire qu'ils souhaitent mettre à jour la table de données avec les nouvelles données plutôt que de créer une toute nouvelle table de données. Cela peut avoir diverses raisons : vous avez peut-être déjà effectué un nettoyage ou un recodage des données, souhaitez conserver votre travail et votre analyse précédente enregistrés dans la table de données, ou vous avez simplement besoin d'ajouter de nouvelles données à la table de données existante.
Dans Partie 1 de cette série de deux articles, j'ai parlé du premier scénario - des données structurées verticales dans une feuille de calcul. Ce n'est pas trop compliqué, importez les nouvelles données et concaténez-les à l'originale (en tenant compte des lignes déjà importées).
Aujourd'hui, je veux parler d'un deuxième scénario, qui est un peu plus compliqué. Je vois ce cas assez souvent lorsque je regarde les données des clients provenant, par exemple, des laboratoires. Le tableau de données structurées horizontales :

C'est la première ligne/première colonne est le nom du paramètre, dans les colonnes suivantes sont les données. Dans la deuxième ligne se trouvent les unités, dans la troisième ligne le numéro de lot. Puis une ligne vide et après cela encore la même chose pour un autre paramètre. C'est plus facile à lire dans un tableur mais finalement pas très facile à analyser. Je vois souvent ce genre de données, même s'il serait préférable de former les gens à saisir les données de manière verticale plutôt que d'essayer de contourner la structure horizontale.
Comment pouvez-vous importer et mettre à jour une table comme celle-ci dans JMP ? Qu'y a-t-il de si difficile avec ces données ?
Nous devons comprendre les défis.
- Tout d'abord, les données sont organisées en lignes, mais le plus difficile est qu'il existe plusieurs lignes affichant des informations similaires. Paramètres (P1, P2, P3), unités et même numéro de lot répété pour chaque paramètre
- Deuxièmement, nous avons des lignes vides pour diviser les données afin de faciliter l'interprétation de ce qui appartient à quoi
Pour une analyse de données, ce type de structure n'est rien qu'une machine aimerait, vous devez indiquer spécifiquement où se trouvent les données et effectuer l'analyse appropriée. Si de nouvelles données sont ajoutées à droite, vous devez ajuster les plages de données de l'analyse de manière appropriée.
En raison de ces défis, nous devons traiter les données avant d'arriver là où nous voulons être.
Commençons à créer le modèle de table que nous voulons mettre à jour
1. Accédez aux données actuelles de la feuille de calcul telles qu'elles sont :

2. Ce n'est en fait pas le tableau que nous voulons avoir, nous le renommons donc en "aide" et devons supprimer les lignes vides, en préparation de la transposition des données, dans le codage, cela peut ressembler à ceci :
dt_h1 << Set Name( name_worksheet || "help" );
// Remove rows with only missing values (break lines between measurements)
n = Loc( Column( 1 ) << Get Values, "" );
dt_h1 << Select Rows( n );
dt_h1 << Delete Rows;
- Remarque : j'ai utilisé la commande LOC très utile pour localiser les lignes vides à supprimer
3. La première colonne contient les noms de colonne réels que nous voulons avoir dans les données finales. Nous voulons les enregistrer pour une utilisation ultérieure. Ensuite, nous pouvons transposer le tableau, lui fournir le nom du tableau final (comme la feuille de calcul - car je me référerai au nom du tableau pour trouver automatiquement la feuille de calcul correspondante dans la feuille de calcul) :
// Get names used for column names after transposing the data table
NewNames = dt_h1:Column 1 << Get Values;
// Transpose Column
dt_final = Data Table( name_worksheet || "help" ) << Transpose(
columns( 1 :: N Cols( dt_h1 ) ),
Label column name( "ColName" ),
Output Table( name_worksheet )
);

4. Nous devons maintenant apporter quelques modifications au tableau de données :
- Supprimer la première colonne
- Supprimer la première ligne
- Changer les noms des colonnes
- Et enfin, définissez les types de données et de modélisation corrects (en raison de la première ligne, tout a été défini sur caractère), et enregistrez le fichier
- Pour cet exemple, supprimez également les deux dernières lignes afin que nous puissions tester le script de mise à jour sans ajouter de colonnes à la feuille de calcul
- Remarque : en fonction des paramètres de localisation de votre système ainsi que de la langue d'Office, vous devrez peut-être d'abord prendre en compte les paramètres de préférence dans JMP ou les décimales/virgules (par exemple, avec recode) avant de modifier les données et le type de modélisation.
Le tableau final devrait ressembler à ceci :

Occupons-nous maintenant du script de mise à jour
La plupart de ce dont vous avez besoin a déjà été fait et enregistré automatiquement dans des scripts :
- Le script source d'importation
- Le script source de transposition
- Certaines des manipulations mentionnées ci-dessus avec des exemples de script
Jetons un coup d'œil au script de mise à jour final que nous allons mettre dans ce tableau de modèles en tant que script :
1. Importer une feuille de calcul avec le nom de la table de données actuelle
// Read in Sheet2 of the Excel workbook
excelFile = "TransposedExcelWorksheet.xlsx";
// Get the name of the data table and number of existing rows
cdt = Current Data Table();
cdtName = cdt << get name();
n_Rows = N Rows();
// Import the data invisible
dt_h1 = Open(
excelFile,
Worksheets( cdtName ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 1 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
),Invisible
);
2. Effectuez les modifications décrites ci-dessus pour le modèle de tableau, transposez et nettoyez le tableau de données
dt_h1 << Set Name( cdtName || "help" );
// Remove rows with only missing values (break lines between measurements)
n = Loc( Column( 1 ) << Get Values, "" );
dt_h1 << Select Rows( n );
dt_h1 << Delete Rows;
// Get names used for column names after transposing the data table
NewNames = dt_h1:Column 1 << Get Values;
// Transpose Column
dt_final = Data Table( cdtName || "help" ) << Transpose(
columns( 1 :: N Cols( dt_h1 ) ),
Label column name( "ColName" ),
Output Table( cdtName )
);
// Clean up data table - delete first row of column names and first column (labels)
dt_final << Select Rows( 1 );
dt_final << Delete Rows();
Column( dt_final, "ColName" ) << Set Selected;
dt_final << Delete Columns();
// Set the Column Names appropriately based on deleted first row in this table
For( i = 1, i <= N Cols( dt_final ), i++,
col = Column( i );
col << Set Name( NewNames[i] );
);
3. Supprimez les lignes déjà importées et ajoutez rest à la table de données d'origine avec concaténation :
// remove rows already imported
dt_final << Select Rows( 1 :: n_Rows );
dt_final << Delete Rows();
// Append new data to original data table
cdt << Concatenate( dt_final, Append to first table );
// Close help data table
Close( dt_final );
Close( dt_h1 );<BR />
// this last bracket is to close the whole script!
);
- Remarque : vous n'avez pas à vous soucier des données et du type de modélisation, car JMP sait déjà comment traiter les données en raison des propriétés de colonne existantes.
L'ajout de ce script à la table de données du modèle vous permettra d'appuyer simplement sur un bouton pour obtenir les nouvelles données à partir de données structurées horizontales dans une feuille de calcul.
Conclusion
Cela impliquait tout un tas d'étapes, certaines faciles à faire, d'autres plus avancées. La bonne chose est que vous pouvez le faire dans JMP. Cependant, souvenez-vous toujours :
La préparation des données est ce qui demande le plus de temps pour extraire des informations de vos données !
Si vous souhaitez travailler avec les données, utilisez une structure adaptée à l'analyse des données.
Il s'agit la plupart du temps d'une approche verticale, où chaque colonne représente un paramètre. Mais une approche basée sur les lignes peut également être effectuée, mais s'il vous plaît, choisissez une approche correcte.
Pour donner deux exemples qui faciliteraient l'analyse :


- Remarque : l'ajout d'une nouvelle colonne pour le nom du paramètre supprime la charge de réorganiser les données importées. Et vous avez une variable de regroupement que vous pouvez utiliser en superposition ou par groupe dans les plateformes d'analyse. Cela évite d'exécuter la même analyse pour chaque colonne, mais le fait en une seule fois.
Bien sûr, vous pouvez l'utiliser et l'étendre en ajoutant une analyse aux données, comme la mise à jour d'une carte de contrôle ou d'une autre analyse de tendance. À l'aide de Windows Scheduler, vous souhaiterez peut-être mettre à jour votre rapport et l'envoyer à notre nouveau produit JMP en direct , afin que d'autres personnes (pas nécessairement des utilisateurs JMP titulaires d'une licence) puissent accéder aux rapports dans un navigateur Web avec l'interactivité de JMP, comme un filtre de données, un sélecteur de colonnes, etc.
N'hésitez pas à ajouter vos cas d'utilisation et/ou vos approches pour faire quelque chose de similaire. Je suis heureux d'y jeter un œil.
Tous mes vœux,
Martin
PS : Trois commentaires aux fichiers :
- Dans Sheet2.jmp, vous trouverez un script pour mettre à jour la table de données avec le fichier Excel joint. Les deux fichiers doivent être enregistrés dans le même dossier (c'était pour plus de simplicité, vous pouvez facilement changer le nom de fichier codé en dur avec par exemple Pick File(), et également extraire le nom.
- Le deuxième script est "Supprimer les deux dernières lignes" qui permet de supprimer des lignes dans le tableau de données pour les mettre à jour à nouveau à partir de la feuille Excel, sans avoir à supprimer manuellement les lignes. Alors tout pour votre confort
- Le ScriptUpdateHorizontal.jsl créera la table source initiale avec le script de mise à jour et supprimera les scripts des 2 dernières lignes ajoutés à la table de données. Ce script fait également référence à la première partie du blog, vous pouvez donc suivre.