| Conférencier |
Transcription |
| Jordan Hiller |
Salut à tous. Je suis Jordan Hiller et cette présentation s'intitule « Volez ce code ! Trois améliorations pour les scripts obtenus à partir du journal amélioré ». |
| |
Voici ce qui m'a inspiré pour cette intervention : un livre d'Abbie Hoffman, un provocateur et militant. Il l'a intitulé « Volez ce livre », un titre percutant. Difficile de dire si c'est le meilleur choix pour une entreprise, mais il faut avouer que c'est très accrocheur. |
| |
Alors pourquoi voler ce code ? JMP vous incite à voler du code. L'idée est que vous pointiez, cliquiez et effectuiez votre analyse dans JMP. |
| |
Le code associé à votre interaction (pointer-cliquer) est enregistré. Il est sauvegardé dans le journal amélioré et vous pouvez le récupérer et le réutiliser. |
| |
Et cela représente environ 90 % de votre script de production. Vous allez le récupérer et le réutiliser afin de pouvoir |
| |
Automatisez les tâches courantes et faites-le d'un simple clic, au lieu de plusieurs clics successifs. C'est là tout l'objectif : vous faire gagner du temps. |
| |
Le script provient du journal amélioré, et c'est là l'ossature, le squelette de votre script de production. |
| |
Il vous reste environ 10 % de texte à écrire vous-même, et c'est l'objectif de cette présentation. Nous allons aborder les éléments qui assurent la cohérence des scénarios de production. |
| |
Donc, dans cet exposé, je vais me concentrer avec vous, vous savez, pas tellement sur les détails techniques de la syntaxe, |
| |
Cela permet d'avoir une vision d'ensemble, et c'est ce qui me semble être une bonne méthode pour apprendre la programmation JSL. Il est bien plus efficace de partir de code existant et d'apprendre par l'exemple. Utilisez ce code. |
| |
Trouvez l'extrait de code qui correspond à ce que vous souhaitez faire. Vous le trouverez sur le forum des utilisateurs de JMP ou peut-être dans le guide de script. |
| |
Il suffit de le copier et de l'adapter à vos besoins. Inutile de maîtriser toutes les subtilités de la syntaxe. Vous progresserez rapidement ainsi. L'apprentissage de la syntaxe viendra naturellement avec l'expérience. |
| |
Nous allons donc aborder trois études de cas illustrant comment améliorer votre code grâce à la journalisation améliorée. Mais d'abord, un petit rappel sur JSL. Cela permettra peut-être à certains d'entre vous de se familiariser avec les bases de JSL. |
| |
Donc, si vous débutez avec JSL, il est important de savoir que tout est un objet. Tout ce que vous |
| |
Je souhaite effectuer une action sur un objet, ce qui inclut les tables de données et les colonnes de ces tables, ainsi que des plateformes telles que la plateforme de distribution, le générateur de graphiques et l'outil « Ajuster Y par X ». |
| |
et les rapports provenant de ces plateformes. Ainsi, lorsque vous avez des objets, la manière dont vous interagissez avec eux consiste à leur envoyer des messages. Les objets reçoivent donc des messages. Voici un exemple très simple que j'ai copié du journal amélioré. |
| |
Ouvrez le tableau de données Big Class dans le répertoire des exemples de données et effectuez une analyse de distribution simple. Voici à quoi ressemble le code correspondant, copié directement du journal. |
| |
Maintenant. |
| |
Ce que nous voulons faire, la première chose à faire, c'est nommer la table de données. Lui donner un nom, et pour cela, j'ai repris le code de la ligne cinq ici et je l'ai amélioré. |
| |
J'ai ajouté `bctable=` avant le reste, avant la partie `open` de l'instruction. Cela permet, lors de l'ouverture de la table de données, de créer le nom `bctable`. J'ai choisi `bctable`, mais vous verrez `dt` dans la documentation. Utilisez le nom que vous préférez, c'est vous qui le définissez. |
| |
Alors, exécutons ce code en le sélectionnant et en cliquant sur le bouton Exécuter, en ouvrant Big Class et en lui attribuant simultanément le nom bctable. L'intérêt de cette opération, et son importance, réside dans le fait que j'obtiens maintenant ceci : |
| |
« handle » est un point d'ancrage que je pourrai utiliser plus tard dans le code, bctable. Quand je parle de bctable, je fais référence à Big Class. |
| |
Donc |
| |
Voici la ligne suivante, mais il s'agit de la commande de distribution, que j'ai également modifiée. Avant cela, dans le journal, il s'agissait d'une commande de distribution brute. Elle ne contenait pas… |
| |
Il ne pointe pas vers une table de données. Lorsque vous l'exécutez de cette manière, JMP l'exécutera simplement sur la table de données qui a le focus. |
| |
La table de données actuelle, qui se trouve être de la classe « big », puisque vous l'avez ouverte juste avant, est correcte. Mais il est toujours préférable d'être explicite. Il est judicieux de préciser explicitement la table de données sur laquelle vous souhaitez opérer ; nous allons donc procéder ainsi. |
| |
Nous avons ajouté bctable, puis les doubles flèches et enfin les commandes de distribution. Voilà ce que nous avons fait : bctable avec les doubles flèches. |
| |
Voici la syntaxe pour envoyer un message. Nous envoyons donc le message de distribution à droite vers la table de données nommée « bctable » à gauche. Vous pouvez voir qu'il s'agit de « Big Class » lorsque je survole « bctable ». L'exécution complète… |
| |
nous recevons le rapport de distribution |
| |
que nous souhaitions. |
| |
Maintenant, voici… nous pouvons aller plus loin et, souvent, nous devons le faire. Nous allons créer un nom pour la plateforme au fur et à mesure de son utilisation. |
| |
Voici une ligne qui combine la double flèche et le signe égal. Alors, lisons-la de droite à gauche. Nous allons prendre ce message de distribution et l'envoyer à la table bctable. |
| |
Et le résultat de tout cela, c'est-à-dire la plateforme, nous allons l'enregistrer dans cette variable que j'appelle distplat. |
| |
Faisons ça. |
| |
Très bien, ça a l'air identique, mais la différence est que j'ai maintenant cette variable JSL distplat que je peux utiliser plus tard dans mon code. |
| |
À quoi cela vous servirait-il ? Vous pourriez l'utiliser pour ajouter des options triangulaires rouges à l'affichage, alors voyons voir… |
| |
Affichons ce rapport de distribution pour que vous puissiez le consulter. |
| |
Et nous allons prendre cet objet distplat, c'est... c'est la plateforme de distribution. |
| |
Voyez, en survolant l'élément, et exécutons cette ligne. Activez le graphique par quintiles standard dans la plateforme de distribution. Voilà. |
| |
D'accord. |
| |
La dernière étape consiste à prendre le quai, à prendre cet objet ici, et à |
| |
On obtient ainsi un rapport, un objet rapport. C'est cette ligne de code. On envoie le message de rapport à l'objet plateforme, et on obtient alors un objet rapport. |
| |
Et nous devons procéder ainsi si vous souhaitez accéder à ces valeurs dans votre code (nombres, graphiques ou éléments graphiques du rapport). Vous aurez besoin de cet objet : rdistplat. Il suffit donc de l'exécuter une dernière fois : rdistplat. |
| |
Je l'ai exécuté et vous ne voyez rien de visible, mais j'ai maintenant cet objet, rdistplat. Il s'agit d'une boîte d'affichage, et nous verrons plus tard comment l'utiliser pour accéder aux nombres dans ce rapport. |
| |
D'accord, je vais effacer mon journal. |
| |
et commencer par notre |
| |
études de cas. |
| |
La première technique que nous allons apprendre consiste donc à répéter la même commande encore et encore sur différentes colonnes du tableau de données, en itérant sur les colonnes à l'aide de boucles utilisant la commande « for each ». |
| |
C'est un besoin très courant ; parfois, il s'agit simplement de quelque chose de simple à faire, comme modifier le format ou le type de modélisation d'une colonne. |
| |
Cela pourrait être très complexe, comme |
| |
On effectue une transformation de la colonne, on crée une carte de contrôle et on l'exploite. Oui, cette technique est évolutive. |
| |
Voici comment nous allons procéder en JSL. Nous allons d'abord pointer et cliquer, puis effectuer l'action souhaitée. Nous le ferons pour une seule colonne, puis nous récupérerons ce code à l'aide du journal amélioré. |
| |
Voilà donc la structure de base de notre script. Nous allons la modifier afin de parcourir toutes les colonnes sur lesquelles nous souhaitons effectuer cette action. |
| |
La méthode que nous allons utiliser pour la boucle for, pour l'itération, est la boucle for each, et celle-ci a été introduite dans JMP 16, donc cette technique ne fonctionnera pas dans les versions antérieures de JMP. |
| |
Cela utilise également un concept appelé listes JSL, nous allons donc en parler un peu aussi. |
| |
D'accord, je vais commencer. |
| |
Dans JMP, commençons par la fenêtre d'accueil. |
| |
Je vais… laissez-moi juste vérifier le journal, m'assurer qu'il est propre. Non, je dois supprimer une chose, vider le journal. Bien, alors pointons et cliquons sur ce que nous voulons faire. Je vais ouvrir une table de données appelée sc20. |
| |
Ce tableau de données est disponible dans les documents de présentation que vous trouverez en ligne. |
| |
En regardant ce tableau de données, on constate qu'il comporte une colonne ID et environ 20 autres colonnes. |
| |
Ces colonnes de données comportent un très grand nombre de décimales, une précision excessive. Je souhaite donc les tronquer à deux décimales. Modifions donc le format afin de n'afficher que les deux premières décimales. |
| |
C'est une opération simple : il suffit de pointer et de cliquer. Faites un clic droit, puis accédez aux informations de la colonne. |
| |
et nous allons modifier le format d'affichage par défaut pour afficher les décimales à deux chiffres. |
| |
OK, et maintenant que nous l'avons fait pour NPN1, nous avons 19 autres colonnes pour lesquelles nous aimerions le faire également. |
| |
Examinons donc le journal amélioré. |
| |
Et voilà, c'est le code nécessaire pour modifier le format d'une colonne, NPN1. Pour le réutiliser, cliquez sur le triangle rouge ; vous pourrez alors enregistrer le script dans le presse-papiers ou l'ouvrir dans une nouvelle fenêtre de script. |
| |
Je vais passer à un autre fichier, sur lequel j'ai déjà travaillé, afin que nous puissions approfondir un peu plus ce point. |
| |
D'accord. |
| |
Donc, les deux premières lignes ici… trois lignes, c'est le code du journal. Bien, la première chose que nous faisons, c'est ouvrir la table de données. |
| |
Et vous aurez peut-être remarqué que j'ai apporté quelques modifications ; j'ai supprimé le long chemin d'accès à ce fichier. |
| |
Si vous le exécutez de cette façon, |
| |
Cela fonctionnera tant que la table de données JMP, sc20, se trouve dans le même répertoire que ce fichier JSL. Il s'agit donc simplement d'un chemin d'accès local vers ce répertoire. |
| |
Bref, à partir du journal, nous ouvrons simplement la table de données, et nous voici ici, appliquant ce changement de format : décimale fixe de 10 caractères et deux décimales. |
| |
La référence à la colonne, indiquée ici à gauche, est une façon d'y faire référence. Il existe plusieurs méthodes, mais celle-ci, avec les deux points, est très courante. La référence à la colonne se trouve à gauche des deux points, et le nom de la colonne à droite. |
| |
Voici donc à nouveau un extrait direct du journal. |
| |
JMP utilise cette méthode dans le journal pour accéder à la table de données. Je pense qu'il est préférable de faire comme nous l'avons évoqué : il vaut mieux indiquer le nom JSL lors de son ouverture, puis utiliser ce nom par la suite. J'ai donc remplacé ce qui précède les deux-points par « dt ». |
| |
Voici donc le même code, légèrement modifié, et quand je l'exécute, oui, il fonctionne comme prévu. Il ouvre le tableau de données et… |
| |
change le format à deux décimales. Bon, maintenant qu'on a ça, c'est assez facile de |
| |
Il faut modifier les 19 autres colonnes, c'est ça. Voilà… voici NPN1, et ensuite je peux simplement copier cette ligne, modifier tout le monde et la répéter 19 fois. |
| |
Oui, bien sûr, ce n'est pas efficace, et l'un des grands avantages de la programmation, c'est qu'on n'a pas à faire la même chose plusieurs fois. Du coup, la maintenance devient plus facile si on écrit le code une seule fois, au lieu de le répéter 19 ou 20 fois. |
| |
Voici comment procéder. La première étape consiste à obtenir la liste de toutes les colonnes sur lesquelles nous souhaitons effectuer des opérations. |
| |
Et quand je parle de liste, je ne parle pas d'une liste générique. Je parle d'une liste JSL, d'une structure de données particulière utilisée en programmation JSL. |
| |
Une liste est simplement un ensemble d'objets contenus dans un conteneur, et c'est ainsi que nous l'utilisons. Voici donc trois façons de créer une liste d'objets colonnes. |
| |
La première méthode consiste à le faire manuellement, c'est-à-dire à tout saisir. Donc, si je devais exécuter ceci, |
| |
trois références de table...trois références de colonne, NPN1, PNP1, PNP2. |
| |
Remarquez les accolades dans mon code et également lorsque je survole la variable CNames. Ces accolades indiquent que vous manipulez une liste en JSL. |
| |
Très bien, voilà une façon d'obtenir une liste. Voyons-en quelques autres. C'est celle que nous utiliserons finalement pour cet exemple. |
| |
Je dis : « Hé, récupère toutes les colonnes continues de ma table de données actuelle, enfin, de la table de données que j'appelle ici dt. Donc, objet message, crée une nouvelle liste. » |
| |
Alors, lançons-nous. |
| |
Et maintenant, si je survole CNAME, vous verrez que c'est ce que nous recherchons. Il s'agit de la liste des 20 enregistrements sur lesquels nous voulons opérer. |
| |
D'accord, et la dernière méthode consiste à laisser l'utilisateur sélectionner les colonnes du tableau de données. Voici un exemple. Je vais en sélectionner deux : IVP et PNP4. |
| |
Et si je lance ceci, |
| |
Nous obtenons une liste ne contenant que les deux colonnes sélectionnées dans le tableau de données. |
| |
Très bien, donc, quelle que soit la manière dont vous obtenez cette liste, la prochaine étape consiste à appliquer cette ligne de formatage à chacun des éléments de la liste, et c'est ce qu'on appelle la boucle ou l'itération. |
| |
Voici donc l'ancienne méthode. Elle utilise la commande « for » de JMP. C'est ce qu'on faisait avant JMP 16 et je la mentionne ici à titre de référence, au cas où vous utiliseriez encore JMP 15. Mais… |
| |
Vous savez, c'est un peu compliqué et intimidant pour les nouveaux utilisateurs, alors il existe une solution beaucoup plus compacte et lisible si vous utilisez une liste dans JMP 16. Si je veux répéter une action sur chaque élément d'une liste, je peux utiliser ceci pour chaque commande. |
| |
Très bien, examinons cela pour voir ce qu'il fait. Il prend trois arguments, séparés par des virgules ; nous les lirons de droite à gauche. |
| |
Le dernier argument est la commande de format, n'est-ce pas, qui applique le format, et au lieu de le faire pour dt NPN1, au lieu de le faire pour une seule colonne, j'ai mis un espace réservé ici et j'ai choisi élément de liste ; vous choisissez ce que vous voulez. |
| |
Bien, ceci n'est qu'un mot, un nom de variable, que vous choisissez. J'ai choisi « élément de liste ». Voilà donc notre espace réservé, et voici la commande que nous voulons exécuter sur chaque élément de la liste. Quelle liste ? Celle-ci, d'accord. Voilà donc notre liste, c'est la deuxième. |
| |
L'argument. Le premier argument est un espace réservé, n'est-ce pas ? Il nous indique que nous utilisons cet espace réservé pour stocker les valeurs des éléments de la liste. |
| |
Il est entre accolades, alors assurez-vous de les utiliser si vous réutilisez ce code. |
| |
Voici donc à quoi ressemble l'ensemble du processus : au lieu de plus de 20 lignes de code, je n'en ai que trois, et cela comprend l'ouverture du tableau de données. |
| |
On récupère la liste des noms de colonnes, puis on répète l'opération pour chacune des 20 colonnes consécutives. Le résultat final est visible. |
| |
Et voilà. Maintenant, chacune de ces colonnes |
| |
comporte deux décimales affichées au format suivant. |
| |
D'accord, c'était donc un exemple très simple d'utilisation de la boucle « pour chaque » pour effectuer une action très simple. |
| |
sur une colonne. |
| |
Permettez-moi de vous montrer un exemple un peu plus intéressant. |
| |
Voici un exemple où, pour le même ensemble de données, pour sc20, |
| |
Je vais créer une carte de contrôle pour chaque colonne, puis j'ajouterai ces cartes de contrôle à un journal et j'enregistrerai le tout au format PDF, d'accord ? |
| |
Elle utilise la même méthode pour chaque élément, et ses deux premiers arguments sont identiques : l’élément de la liste en premier, et le nom de la liste en second. Mais maintenant, j’ai beaucoup de code en troisième position… en troisième argument de la boucle « for each ». |
| |
Alors, c'est parti. Exécutons ce script en entier. |
| |
J'ai ouvert le logiciel, exécuté plusieurs cartes de contrôle et les ai rassemblées dans un journal. Maintenant, sur mon bureau, j'ai créé un document, mon rapport.pdf, qui contient toutes ces cartes de contrôle, page 1, avec des sauts de page pour les séparer. Donc page 1, page 2, page 3. |
| |
Vous pouvez donc consulter cet exemple à votre convenance. Il figure dans les supports de présentation. |
| |
Très bien, voilà pour la première technique que nous allons aborder. Passons maintenant à la technique suivante. |
| |
D'accord, extraire une valeur d'un rapport. C'est une opération fréquente en JSL. Vous effectuez une analyse, par exemple une distribution ou une régression, et vous devez… |
| |
Extraire des données, recueillir des informations. Il peut s'agir d'une moyenne ou d'une médiane, d'un coefficient de pente issu de la régression ou d'une valeur p. |
| |
Voilà donc notre travail. La difficulté réside dans la structure hiérarchique et très imbriquée des rapports ; il peut donc être un peu compliqué de s'y retrouver pour trouver exactement ce que l'on cherche. Je vais donc vous montrer une astuce. |
| |
L'astuce consiste à parcourir l'analyse en pointant et en cliquant, comme d'habitude, puis à sélectionner l'élément que nous voulons récupérer, |
| |
Je vais changer la couleur du texte en rouge, juste une petite modification de mise en forme. Ensuite, lorsque nous enregistrerons ce script dans le journal, nous l'utiliserons pour apprendre à gérer cet élément rouge. |
| |
en JSL. Alors, passons cela en revue ensemble. |
| |
De retour chez JMP. |
| |
Je vais ouvrir Big Class, le bon vieux Big Class, et effectuer une distribution sur la colonne de hauteur. |
| |
Très bien, voici mon rapport de distribution dont je souhaite extraire une information. Disons la médiane, qui est ici de 63. Je vais la stocker dans une variable JSL afin de pouvoir la réutiliser ultérieurement, par exemple pour écrire ou effectuer des calculs. |
| |
Voici l'astuce pour découvrir comment... comment aborder ce nombre 63. |
| |
Changer la couleur, la police ou autre chose de cet élément que je souhaite sélectionner. Si vous n'avez jamais vu cette fonction, il est utile de savoir comment faire. |
| |
Il y a un bouton pour les propriétés dans la barre d'outils ; je crois que c'est un nouveau bouton de JMP 16. |
| |
Donc, si vous activez les propriétés de ce rapport. |
| |
Nous pouvons descendre le long de cet arbre et trouver ce dont nous avons besoin. Alors regardez ceci. |
| |
Dans la case numérotée, à droite. Notez que lorsque je clique sur différentes parties du rapport, les éléments correspondants |
| |
L'élément, c'est-à-dire le type de boîte d'affichage, est mis en évidence dans le panneau des propriétés. |
| |
D'accord, donc on peut voir que cet élément qui contient tous ces résultats est une colonne numérique avec tous ces nombres dedans et, comme je vous l'ai dit, on va juste prendre cet élément, et je vais changer la couleur du texte en rouge. |
| |
Comme ça. |
| |
Je vais maintenant fermer le panneau des propriétés. |
| |
Voici le rapport, envoyons maintenant ce script au journal amélioré. |
| |
Triangle rouge, enregistrer le script dans le journal. |
| |
Et maintenant, je consulte ce journal. |
| |
Voici la partie qui nous intéresse. Elle contient la commande de distribution, qui permet de colorer en rouge la médiane et les autres statistiques. Examinons cela plus en détail. |
| |
Voilà le code… le même que dans le journal amélioré. Je l'ai simplement copié et légèrement mis en forme pour qu'on puisse discuter plus en détail de nos besoins. |
| |
La raison pour laquelle nous avons procédé ainsi était d'obtenir cette partie, que nous allons maintenant interpréter. Elle utilise la fonction « envoyer » pour générer un rapport et, à l'intérieur de celle-ci, la fonction « dépôt ». |
| |
Nous allons nous concentrer ici sur les quatre arguments de la fonction dispatch. Nous avons besoin des trois premiers ; le quatrième, qui concerne le changement de couleur, ne nous intéresse pas. Ce qui nous intéresse, c'est la boîte d'affichage, l'élément que nous voulons modifier. |
| |
Le premier argument concerne la navigation. Il nous indique de descendre dans « Afficher les boîtes », qui sont en réalité des boîtes délimitées, puis de descendre dans « Boîtes délimitées ». |
| |
Voilà. Alors, regardons ce rapport. Comme vous l'avez sans doute remarqué dans JMP, un rapport comporte plusieurs niveaux d'imbrication, n'est-ce pas ? Et j'ai juste… |
| |
Une distribution de boîte de contour externe. À l'intérieur se trouve une hauteur de boîte de contour, et à l'intérieur de celle-ci se trouve un quantile de boîte de contour, et à l'intérieur de ce quantile se trouve l'élément que je dois extraire. |
| |
Voilà ce que ça me dit. Ça me dit de descendre le long de cet arbre. J'avais juste besoin de la hauteur et des quantiles, et ça va nous permettre de l'identifier. |
| |
Bien. Les deux arguments suivants nous donnent des informations sur cet élément que nous essayons de colorer en rouge. Le troisième argument nous indique de quoi il s'agit : c'est une boîte de colonnes numériques, comme nous l'avons vu dans ses propriétés. |
| |
Et le deuxième argument nous donne le titre |
| |
de cette case de la colonne numérique. Celle-ci est vide. Celle-ci n'a pas de titre, et c'est normal. Nous pouvons quand même utiliser ces informations pour accéder aux données ; il arrive donc qu'un titre apparaisse ici, et parfois non. |
| |
Très bien, maintenant que nous avons ces informations, nous allons les utiliser. |
| |
extraire la médiane. |
| |
Voici le code qui effectue cette opération. Il commence à la ligne 23 et se termine à la ligne 29. |
| |
Nous rouvrons le tableau de données, |
| |
nommer la distribution, effectuer la distribution continue. |
| |
Vous remarquerez que nous n'avons aucune instruction de répartition et d'envoi de rapport, c'est parce que nous n'avons pas besoin de la faire passer en rouge dans notre script de production. |
| |
Donc oui, effectuez l'analyse de distribution, nommez la plateforme. |
| |
C'est important, vous devez... vous accédez à la couche de rapport. Vous l'extrayez avec cette ligne, ce qui crée rdist, cet objet de rapport. |
| |
Et c'est là que la magie opère. C'est là qu'on s'empare de ça. |
| |
Nous allons attribuer cette valeur médiane à la variable JSL `mdn` et l'afficher dans le journal. Je vais vous en dire plus à ce sujet, mais commençons par exécuter le programme une première fois pour que vous puissiez observer son fonctionnement. |
| |
Je vais exécuter la ligne 23… oups, faisons plutôt comme ça. Exécutons les lignes… les lignes 23 à 29. |
| |
La distribution a été effectuée. Elle n'est pas rouge et nous avons extrait la médiane, qui est maintenant stockée dans mdn. Vous pouvez constater que la valeur de cette variable est 63. |
| |
La médiane est de 63. Parfait. |
| |
Bien. |
| |
Voici donc la ligne où nous extrayons le |
| |
la valeur médiane, ce nombre 63 du rapport. |
| |
Voyons voir. Je vais simplement afficher ceci ici pour que nous puissions |
| |
Nous y ferons référence, comme nous le faisons. |
| |
Voici donc cette ligne. Elle est simplement réorganisée de manière à ce que nous puissions examiner chaque élément séparément. |
| |
63, la valeur médiane du rapport. |
| |
Voici comment nous y parvenons. |
| |
C'est ce qu'on appelle l'indexation. Lorsque vous voyez des crochets dans le code JSL, cela signifie que vous indexez un objet. Cet objet est un conteneur, par exemple des boîtes d'affichage, |
| |
Il s'agit souvent d'une liste. On peut aussi indexer les listes de cette manière. Donc, ce que nous faisons, c'est extraire les éléments imbriqués de cet objet rapport. |
| |
Nous allons commencer par le cadre de la hauteur. Vous vous en souvenez ? Ensuite, nous passerons au cadre des quantiles. Vous vous en souvenez aussi. |
| |
Et maintenant, nous sommes au bon endroit. Il nous suffit de prendre ce que nous voulons, c'est-à-dire la case de la colonne numérique, n'est-ce pas ? Et comme elle n'en avait pas… |
| |
Au lieu d'utiliser un titre (qui figurait ici, sans titre), nous y faisons référence par un numéro. Il s'agit de la première colonne numérique dans le cadre des quantiles. |
| |
Vous pourriez regarder ceci et vous dire : « Attendez une minute, il y a des nombres ici. C'est aussi une zone de saisie numérique, non ? » Eh bien non, en fait, c'est une zone de saisie de texte. Et n'oubliez pas, vous pouvez cocher toutes ces options si vous le souhaitez. Cela se trouve, encore une fois, dans les propriétés. |
| |
Et si je clique ici, |
| |
Colonne numérique, colonne de chaînes de caractères, colonne de chaînes de caractères. Vous les voyez ici ? Chaîne de caractères… chaîne de caractères numérique, c’est donc la première colonne numérique. |
| |
Et ça va permettre de récupérer tous ces chiffres. |
| |
Bien, la toute dernière chose à faire est cet indice. Insérer un indice de cette manière signifie : « Récupère le sixième élément… 1, 2, 3, 4, 5, 6. » Il s’agit de la médiane ; elle est de 63. Et lorsque nous exécutons cette ligne, cela insère l’indice dans le rapport ; cela récupère cette médiane, afin que nous puissions la réutiliser plus tard. |
| |
Voici donc comment extraire des informations d'un rapport. J'ai un autre exemple que je partagerai dans les supports de présentation. |
| |
un élément qui possède un titre et que vous pouvez voir, vous pouvez l'utiliser comme modèle pour votre propre travail, si vous rencontrez cette situation. |
| |
Très bien, le dernier point que nous allons aborder est la manière d'obtenir des informations de l'utilisateur, c'est-à-dire la personne qui exécute le script. |
| |
Laissez-les choisir le fichier à analyser, voire la colonne du tableau de données à analyser. C'est sans doute la méthode la plus courante. |
| |
C'est ce que les scripteurs débutants veulent faire. Vous savez, j'ai configuré mon script pour qu'il fasse quelque chose sur une colonne, et je veux en faire profiter d'autres personnes de mon organisation. |
| |
pour leur permettre de le faire eux-mêmes sur des données différentes, n'est-ce pas ? Donc si vous généralisez vos scripts de cette manière pour permettre à vos utilisateurs de choisir un fichier ou une colonne, ou les deux, |
| |
Vous généralisez votre script et vous en augmentez considérablement la valeur. Vous allez le partager avec d'autres personnes de votre organisation. Elles pourront reproduire votre travail rapidement, sans avoir à effectuer toutes les étapes. |
| |
Bon, dans cette section, il s'agit moins d'une étude de cas que d'une liste exhaustive. Je vais vous montrer trois méthodes pour permettre à vos utilisateurs de choisir des fichiers et deux méthodes pour leur permettre de choisir des colonnes. |
| |
Nous allons commencer par les méthodes de sélection des fichiers. Comme d'habitude, nous allons commencer par effectuer une opération dans le journal, puis la copier. Voici… voici à quoi cela ressemble lorsque vous ouvrez Big Class : vous obtenez simplement ceci dans le journal : « ouvrir Big Class ». |
| |
dt. J'utilise dt dans ce cas, et donc, lorsque j'ouvre Big Class, |
| |
Maintenant, c'est fait… dt désigne Big Class, d'accord. Et ensuite, je reprendrais mon script de production, n'est-ce pas ? |
| |
Voilà le truc : pour permettre à l’utilisateur de choisir le fichier qu’il veut, il suffit de trouver un moyen de faire pointer dt vers autre chose. |
| |
Écrivez le reste de votre script, utilisez `dt`, puis vous pourrez modifier ceci au début : `dt` ne pointera plus seulement vers `Big Class`, mais vers autre chose. |
| |
Très bien, et cela aussi est déterminé par l'utilisateur. |
| |
la personne qui exécute le script. Bon, voici la solution la plus simple, je pense : vous pouvez utiliser cette ligne au lieu d'ouvrir une table de données. Si vous l'utilisez au début de votre script pour assigner dt, |
| |
Cela signifie que JMP va exécuter ce script et qu'il fournira ce dt |
| |
associer le nom au tableau de données qui se trouve devant. |
| |
Du point de vue de l'utilisateur, il ouvre une table de données (je vais ouvrir sc20 ici) et crée sc20. |
| |
Voici mon tableau de données actuel. Vous le voyez ici ? Ce qui est affiché dans cette fenêtre, c’est le tableau de données actuel. |
| |
Ainsi, si votre utilisateur ouvre un tableau de données, exécute ensuite le script et rencontre cette ligne, dt pointera désormais vers sc20. |
| |
C'est donc une méthode assez puissante. Le problème, c'est qu'elle exige que l'utilisateur sache exactement quoi faire. Il doit savoir qu'il faut d'abord ouvrir le fichier de données, puis exécuter le script. |
| |
Nous pouvons faire quelque chose d'un peu plus sophistiqué. Nous pouvons leur afficher un sélecteur de fichiers lorsqu'ils exécutent le script, afin qu'ils puissent naviguer dans leur arborescence de répertoires et trouver le fichier à ouvrir. |
| |
En fait, c'est extrêmement simple. Il suffit de supprimer tout le contenu, y compris la référence à Big Class, et de dire simplement « ouvrir » sans aucun argument. |
| |
Et lorsque JSL tente... lorsque JMP tente d'interpréter cette ligne, il dit : « D'accord, l'utilisateur veut ouvrir un fichier, mais je n'ai aucune idée de quoi. Affichons-lui un sélecteur de fichiers pour qu'il puisse choisir. » |
| |
Alors, lançons-nous. dt = ouvert. |
| |
Exécutez le script. Voici votre sélecteur de fichiers standard et, depuis mon bureau, je vais ouvrir Iris. |
| |
Iris est ouvert, et bien sûr, il porte le nom dt. |
| |
Tous les fichiers JMP, tous les fichiers, c'est ça. Il pourrait y avoir beaucoup de choses affichées ici. |
| |
Donc si vous avez besoin de plus de contrôle, oups, si vous avez besoin de plus de contrôle sur |
| |
Pour les choix que votre utilisateur va effectuer, au lieu d'utiliser « ouvrir », nous utiliserons une fonction appelée « sélectionner un fichier ». |
| |
La commande « Sélectionner un fichier » propose plusieurs options. Je n'en utilise que trois. |
| |
Prenons cet exemple. Les trois premiers arguments de la fonction « Choisir un fichier » sont un titre que vous verrez dans la fenêtre de sélection, |
| |
Un répertoire où le sélecteur démarrera, et un filtre indiquant les fichiers ouvrables depuis ce sélecteur. Exécutons donc cette ligne de code, cette section, la commande de sélection de fichier, et enregistrons le résultat dans PF. |
| |
Exécutez ça. |
| |
Notez bien que c'est cet argument-ci : sélectionnez le fichier Excel. C'est ce qui s'affiche en haut de la fenêtre. |
| |
Le dossier, le chemin indiqué dans le deuxième argument, c'est là que tout commence. |
| |
Et le troisième élément, le filtre de fichiers qui limite l'affichage aux seuls fichiers Excel, se trouve ici. Je ne peux pas modifier ce paramètre. Je suis limité aux fichiers Excel. |
| |
Disons donc « sandwichs », et cliquons sur « Ouvrir ». |
| |
Attendez une minute, pourquoi ça ne s'est pas ouvert ? |
| |
Bon, vérifions. PF signifie « sélectionner un fichier ». Qu'est-ce que PF ? Ah, PF est le chemin d'accès au fichier que nous voulons ouvrir. Nous n'avons pas encore exécuté la commande d'ouverture. « Sélectionner un fichier » ne l'ouvre pas, il le sélectionne simplement. |
| |
Pour boucler la boucle, voici ce que nous devons faire : créer notre référence de table en ouvrant le |
| |
La variable PF, qui pointe vers le fichier que nous voulons, le fichier Excel que nous voulons. |
| |
Voilà ! Cela ouvre le tableau de données des sandwichs, et maintenant j'ai mon dt et je suis prêt à poursuivre mon script, comme je le souhaitais. |
| |
Permettez-moi de faire une petite pause pour vous montrer quelque chose d'important. Choisissez un fichier. Si vous rencontrez un problème de ce genre et que vous ne connaissez pas tous les arguments et souhaitez en savoir plus, voici quelques informations utiles. Tout d'abord, vous obtenez un petit |
| |
L'aide contextuelle affiche une petite fenêtre d'information sur la syntaxe. Voici une meilleure option : faites un clic droit dessus dans la fenêtre de script. |
| |
et vous pouvez le rechercher dans l'index des scripts. L'index des scripts est un outil très important pour tout programmeur JSL, et |
| |
Elle contient la commande que vous recherchez. Elle contient la liste des arguments, un texte explicatif et, surtout, quelques exemples que vous pouvez exécuter pour voir son fonctionnement. Si j'exécute cet exemple, il me fournira un fichier de sélection. |
| |
Eh bien, ça m'a envoyé quelque part où je ne veux pas aller. |
| |
Fermons-le, tout simplement. |
| |
Très bien, et ensuite nous pourrons expérimenter, récupérer ce code, le voler et l'utiliser dans notre... dans notre script si nous le souhaitons. |
| |
Voilà l'index des scripts. Il est également accessible depuis le menu Aide. Menu Scripting… cherchez les options disponibles. |
| |
Vous pouvez utiliser la table de données actuelle, une ouverture directe ou un fichier de sélection. Il existe d'autres méthodes, mais ce sont trois bonnes options pour commencer. |
| |
Parlons maintenant de la possibilité pour vos utilisateurs de choisir la colonne sur laquelle ils souhaitent opérer. |
| |
Me voilà… J’ai copié des données du journal. J’ai ouvert un tableau de données appelé « prix » et j’y ai créé un graphique montrant l’évolution du prix des pommes au fil du temps. |
| |
Je ne vais pas vous montrer la partie « pointer-cliquer », je vais simplement exécuter le script. Je pense que vous savez déjà comment extraire le script du journal détaillé, alors voyons ce qu'il fait. Il affiche les prix et voici mon graphique : le prix des pommes en fonction de la date. |
| |
Regardez ce tableau de données : les prix. Oui, il y a des pommes, mais j’ai aussi tous ces autres éléments. Et si je voulais permettre à l’utilisateur de choisir le graphique qu’il souhaite visualiser, la colonne qu’il veut représenter ? |
| |
C’est précisément l’objet de cette section : laisser… laisser vos utilisateurs choisir. |
| |
D'accord. |
| |
Nous allons donc aborder deux méthodes. Voici la première. |
| |
Il fonctionne sur les colonnes sélectionnées par l'utilisateur. |
| |
Et nous avons déjà vu cela, nous avons vu cette syntaxe plus tôt, je crois, dans notre deuxième étude de cas. Oui, c'est comme ça qu'on crée une liste. |
| |
Ce tableau contient les colonnes sélectionnées dans la table de données. Revenons donc à cette table de données. |
| |
Je vais sélectionner, peut-être trois colonnes et |
| |
Allons courir |
| |
Voilà. En fait, je pense que je devrais lancer dt. Lançons les deux. |
| |
poulet, café et œufs. |
| |
D'accord. |
| |
Donc. |
| |
Sur laquelle dois-je opérer ? Vous savez comment faire, comment parcourir une liste à l'aide d'une boucle, mais nous n'allons pas le faire. Je vais simplement utiliser un raccourci. Je vais dire : |
| |
Si l'utilisateur a sélectionné plusieurs éléments, je souhaite afficher uniquement le graphique du premier. Par exemple, l'utilisateur a sélectionné poulet, café et œufs avant d'exécuter le script. Je souhaite lui afficher uniquement le graphique du poulet. |
| |
Très bien, voici la ligne suivante. Il s'agit de notre index. Nous indexons la liste CNames pour obtenir le premier élément. |
| |
Nous allons donc exécuter ceci. |
| |
Maintenant j'ai cette belle variable, ma colonne, |
| |
qui contient le premier élément de la liste, poulet, la référence de colonne avec les deux points. |
| |
Et maintenant, nous pouvons exécuter notre générateur de graphiques. Nous pouvons maintenant reprendre le cours de notre vie ; la seule différence est que nous avons remplacé les pommes qui se trouvaient ici. |
| |
Voilà ma colonne actuelle. C'est le seul changement que nous avons apporté. En exécutant ce calcul, nous allons obtenir un graphique du prix du poulet. |
| |
Bien. |
| |
Très bien, c'est une solution possible, mais comme nous l'avons évoqué précédemment, cela suppose que l'utilisateur sache ce qu'il a à faire. Cela nécessite… |
| |
Cette méthode exige que l'utilisateur sache qu'il doit ouvrir le tableau de données, sélectionner cette option, puis exécuter le script, ce qui est un peu fastidieux. |
| |
Il est plus robuste d'afficher une boîte de dialogue de sélection de colonnes à l'utilisateur lors de l'exécution. Voici à quoi cela ressemble. La syntaxe est un peu complexe. Je ne vais pas entrer dans les détails, mais plutôt me contenter d'une présentation générale. Nous ouvrons le tableau de données comme précédemment. |
| |
Nous utilisons cette commande appelée dialogue de colonne |
| |
Afficher un sélecteur...sélecteur de colonnes à l'utilisateur. |
| |
Encore une fois, il y a beaucoup d'arguments. Je n'en utilise que quelques-uns. En fait, je propose un bouton « Choisir une marchandise » permettant à l'utilisateur de sélectionner au maximum une colonne, mais il doit en choisir au moins une. |
| |
Alors voilà, exécutons ce script à partir de la ligne 60. |
| |
Prix d'ouverture, voici ma boîte de dialogue et regardez comme elle est riche avec si peu de code ! C'est tout l'avantage de cette boîte de dialogue à colonnes. Je vais donc choisir « café » et cliquer sur OK. |
| |
Bien. Revenons au script, nous venons d'exécuter cette ligne. |
| |
Le résultat de notre choix est stocké dans le fichier dlg. Voyons cela de plus près. |
| |
Bon, c'est un peu compliqué. Il est indiqué que dlg est une liste (regardez les accolades), et j'ai des accolades imbriquées, donc c'est comme des listes imbriquées. |
| |
Voici l'index qui vous permettra d'y parvenir. Je ne vais pas m'attarder sur les explications, mais vous pouvez copier ce code si nécessaire. Pour passer du dialogue à la partie contenant « café », il s'agit d'une référence à la colonne « café ». |
| |
Voici l'index pour créer ma colonne, alors exécutez cette ligne. |
| |
Et maintenant, ma colonne contient uniquement cette référence à la colonne « café », et c'est identique à avant. Nous exécutons le générateur de graphiques en utilisant |
| |
Mon pote, je le remplace par des pommes et on obtient du café ou tout autre chose que l'utilisateur a choisie. |
| |
Voilà, c'est tout ce que je voulais partager avec vous. Je vais juste terminer par un petit conseil pour ceux qui débutent en programmation JSL. |
| |
Le conseil, c'est de laisser JMP corriger votre code autant que possible. C'est à ça que sert le journal amélioré : récupérer le code qu'il contient. C'est la majeure partie de votre script. |
| |
Il ne vous reste plus qu'à écrire le code de base, les éléments qui permettent de structurer le tout et d'obtenir un script de production utilisable. Vous pouvez aussi vous inspirer de ce code. Vous pouvez le récupérer dans l'index de scripts, ou tout à fait vous inspirer de cette présentation. |
| |
Tous les documents sont inclus dans cette présentation et vous pouvez également vous inspirer du livre de recettes JSL de la communauté des utilisateurs JMP, une ressource fantastique qui recense de nombreuses tâches JSL courantes et vous fournit le code nécessaire pour les réaliser. |
| |
Et je le répète, ne vous préoccupez pas trop de la syntaxe. Le plus simple est de reprendre le code et d'adapter ce dont vous avez besoin. Vous ne risquez rien et vous maîtriserez les subtilités de cette syntaxe avec l'expérience. |
| |
Merci beaucoup pour votre attention. |