Dans mon précédent article de blog JMP et Excel – Une histoire sans fin ? - Partie 1 J'ai terminé par un exemple d'importation de feuilles de calcul avec des en-têtes hiérarchiques et des cellules fusionnées. Cette fois, je me concentre sur l'importation d'un fichier de feuille de calcul contenant de nombreuses feuilles de calcul ainsi que sur la lecture de plusieurs feuilles de calcul (déposées dans un dossier spécifique) dans JMP. Je ne veux pas rendre les choses trop compliquées, c'est pourquoi je suppose que la structure et les noms des paramètres dans les feuilles de calcul ainsi que dans les différentes feuilles de calcul sont les mêmes !
(Remarque : s'ils ne sont pas identiques, vous devrez spécifier les paramètres de chaque classeur et les importer sous forme de tableaux distincts. Leur combinaison ultérieure peut être effectuée à l'aide des fonctionnalités de jointure/concaténation ou de JMP Query Builder pour les tables de données JMP. Si vous souhaitez automatiser ce type d'étapes, des scripts supplémentaires sont généralement nécessaires pour vérifier le rôle de chaque variable, feuille de calcul et/ou fichier que vous souhaitez lire).
PLUSIEURS FEUILLES DE TRAVAIL - IMPORTER ET AUTOMATISER
Examinons donc d'abord les données dans Excel :

On peut voir les différents classeurs, ayant tous la même forme et structure non triviale. Souligné en rouge on peut voir les différents numéros de lots sur chaque classeur. Je veux lire les données mais pas dans des tableaux séparés. J'aimerais plutôt avoir un seul tableau et en utilisant l'assistant d'importation Excel de JMP, c'est assez facile à réaliser :
- Faites glisser la feuille Excel dans n'importe quelle fenêtre JMP pour ouvrir l'assistant d'importation Excel :

- Modifiez les paramètres des champs d'en-tête et de données, le cas échéant. Nous avons un en-tête que nous ne voulons pas inclure dans les données, et l'en-tête réel commence à la ligne 4 et s'étend sur trois lignes. Ensuite, il y a une ligne avec des champs vides. Nous commençons donc les données une ligne plus tard (8 au lieu de 7). La première colonne ne contient pas de données pour l'analyse, c'est pourquoi nous la sautons.

- En cliquant sur le bouton "Suivant", nous pouvons utiliser le paramètre Dernière ligne, indiquant que nous ne souhaitons pas inclure les informations d'horodatage. En sélectionnant la ligne où se terminent les données et en appuyant sur le signe plus (+), vous n'avez pas à vous soucier du numéro de ligne qui est le bon.

- Il ne reste plus qu'à utiliser la même structure dans toutes les feuilles de calcul. Nous pouvons cocher le marqueur « Utiliser pour toutes les feuilles de calcul » ainsi que le marqueur « Concaténer les feuilles de calcul et essayer de faire correspondre les colonnes ». Cela modifiera l'aperçu de 30/30 lignes à 90/90 lignes. Étant donné que chacune des trois feuilles de calcul contient 30 lignes, cela semble fonctionner comme prévu. Lorsque vous concaténez, il est fortement recommandé de cocher également le drapeau « Créer une colonne avec le nom de la feuille de calcul lors de la concaténation ». Sinon, il sera difficile de déterminer plus tard d’où proviennent les données.
- La dernière étape consiste à importer et bien sûr à toujours vérifier les données importées
Si vous voulez voir cela en action, je peux vous recommander ceci courte vidéo (en utilisant JMP 12). Remarque au cas où vous venez de commencer à utiliser l'assistant d'importation : il enregistrera le dernier paramètre, ce qui peut conduire à des vues surprenantes sur les données, lors de l'importation de données nouvelles mais différentes. À l'aide du bouton « Restaurer les paramètres par défaut », vous pouvez réinitialiser vos paramètres dans l'assistant.
Dans chaque table de données importées, vous trouverez un script source pour refaire l'importation avec les paramètres que vous avez choisis précédemment. Cela permet de lire un tableau de données mis à jour, au cas où vous auriez de nouvelles données de lot dans la feuille de calcul. Eh bien, lorsque je collecte fréquemment des données, j'envisagerais probablement d'utiliser des bases de données plutôt que des feuilles de calcul, mais c'est une autre histoire.
AUTOMATISER L'IMPORTATION DE PLUSIEURS FEUILLES DE TABLEUR - UN DÉFI DIFFÉRENT
Vous savez maintenant comment lire une feuille de calcul contenant plusieurs feuilles de calcul ayant la même structure dans JMP. Cependant, vous avez peut-être également été confronté au défi « Comment lire plusieurs feuilles de calcul avec la même structure dans JMP sans le faire manuellement pour chaque fichier, c'est-à-dire le faire automatiquement. La réponse courte, en utilisant le langage de script JMP. En utilisant le script source comme base, vous pouvez soit réexécuter ce script pour chaque feuille de calcul, soit utiliser une boucle for parcourant tous les fichiers d'un dossier. Il existe un script partagé dans la communauté File Exchange que vous pouvez utiliser (peut-être avec quelques ajustements), qui fait exactement ceci : Combiner plusieurs fichiers txt ou csv
En bref, vous effectuez les étapes suivantes (juste des parties du script affiché) :
- Choisissez le répertoire et filtrez les fichiers qui sont des fichiers Excel
prefilepath = munger(Pick Directory( "Browse to the Directory of the Target Excel Files " ),1,"/","");
filepath = Convert File Path( prefilepath, Windows );
prefilelist = Files In Directory( filepath );
n2=nitems(prefilelist);
//filter out any non-Excel files
For( i2 = 1, n2 >= i2, i2++,
file=(prefilelist[i2]);
If( Item( 2, prefilelist[i2], "." ) == "xls" | Item( 2, prefilelist[i2], "." ) == "xlsx",
Insert Into( filelist,file),
//show(file)
)
);
- Parcourez les fichiers et importez-les. Pour économiser de la mémoire, ouvrez-en seulement deux et mettez à jour la première table importée avec la nouvelle, fermez cette dernière et ouvrez la suivante. Sinon, vous pourriez rencontrer des problèmes sous Windows en raison du nombre de handles de fenêtre utilisés ainsi que de la mémoire utilisée (en cas de feuilles de calcul nombreuses ou très volumineuses).
n=nitems(filelist); //number of items in the working list
cctable= New Table( "Combined data table");//make an empty table
ExcelSheetName = "Sheet1"; // change this if you have a special sheet name you want to read the data from
//Iterate through building the SQL string to query the Excel files
For( i = 1, i < n+1, i++,
filenow = ( filelist[i] );
fileopen=(filepath||filenow);
dt=open(fileopen, Worksheets( ExcelSheetName ) );
dt << New Column( "File Name", formula( filenow ) );
cctable << Concatenate( Data Table( dt ), Append to first table );
Close( dt, NoSave );
);//end of for loop
Jusqu'à présent, vous avez découvert plusieurs façons d'importer des données structurées triviales, ainsi que la façon de gérer des ensembles de données hiérarchiques et/ou fusionnés à l'aide de l'assistant d'importation Excel dans JMP. Enfin, je vous ai montré comment importer plusieurs feuilles de calcul à la fois et comment lire automatiquement plusieurs feuilles Excel avec un script JSL. Dans mon prochain article, je parlerai des défis potentiels basés sur le format des données et autres.
J'attends avec impatience vos commentaires et expériences partagées.