Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?Prêt à en savoir plus sur l'enchaînement de tout dans un véritable script ? Bienvenue à nouveau dans ma série sur les bases des scripts dans JMP . Il s'agit de la cinquième entrée d'une série structurée pour que vous puissiez travailler dessus. Si vous venez de nous rejoindre, vous allez vraiment vouloir jeter un œil aux entrées précédentes dans les séries , parce que celui-ci est un doozy. Voici les liens vers eux pour que vous puissiez les consulter :
D'accord? Toujours ici ? Avez-vous regardé les épisodes précédents ? Excellent! En avant vers la gloire !
D'après les devoirs d'il y a quelques semaines, nous devrions tous avoir un tas d'extraits JSL d'utilisation Enregistrer le script à la fenêtre de script ou le Scripting Index pour obtenir les morceaux de code dont nous avons besoin. Toi a fait fais tes devoirs, droite ? Bien! Entrons dans l'enchaînement de tout dans un script réel. Mais d'abord, on doit avoir une petite conversation.
L'un des animaux de compagnie de Mikey agace
Okey-dokey, les gens. Laissez-moi, juste un instant, me lever sur ma tribune à propos de quelque chose. Lorsque nous écrivons du code, nous devons toujours commentez-le ! Nous ne pouvons faire aucune hypothèse sur la personne qui lira notre code après nous, y compris nous-mêmes.
De retour à l'université, j'ai suivi un cours de codage Visual Basic. La première chose que nous avons apprise était comment commenter du code et écrire du pseudocode. Soit dit en passant, les pseudocodes sont des commentaires que vous écrivez avant d'écrire du code pour vous aider à définir ce que vous devez faire (ils sont similaires à la liste de points que je vous ai fait écrire ce premier message ). L'instructeur a appelé les commentaires et le pseudocode "être un bon citoyen dans la communauté du codage". Nous avons même été notés sur la façon dont nous avons commenté le code que nous avons soumis. C'est si important.
La vérité est que vous avez rarement un contrôle total sur qui voit votre code. Exemple : dans cette série de blogs, je vous ai donné des instructions étape par étape sur la façon de désosser le complément de quelqu'un d'autre. Je peux garantir que certaines (sinon la plupart) des personnes qui ont écrit ces compléments ne s'attendaient pas à ce que d'autres regardent sous le capot leur code. Je peux également vous garantir que vous ne trouverez pas autant de commentaires dans le code pour vous aider à comprendre ce qui se passe que vous l'espérez.
Vous devez commenter votre code pour vous assurer que quelqu'un qui le verra plus tard pourra comprendre facilement ce que vous faites. Oui, commenter est une douleur. Et, oui, cela prend du temps supplémentaire. Mais, Non , vous ne pouvez pas vous passer de le faire. Cela rapportera des dividendes à long terme. Et je pratique ce que je prêche ici. J'ai des compléments que j'ai écrits il y a cinq ans et que je peux encore comprendre parce que j'ai fait des commentaires détaillés (et je me souviens encore à quel point c'était fastidieux à faire !).
Donc, ceux d'entre vous qui codent déjà, assurez-vous de commenter votre code afin que quelqu'un d'autre puisse comprendre ce que vous faites. Ceux d'entre vous qui apprennent, prenez l'habitude et gardez l'habitude de commenter abondamment votre code. Maintenant, laissez-moi descendre de cette tribune et vous montrer comment.
Commenter en JSL
Ouvrons JMP et ouvrons cette table de données Big Class Families.jmp que nous avons utilisée. Si vous n'avez pas enregistré l'exemple de script de la dernière session, continuez et recréez-le. Vous devriez avoir quelque chose qui ressemble à ceci :

Il existe deux manières de mettre des commentaires dans votre code JSL. La première consiste à commenter les lignes individuelles à l'aide d'une double barre oblique ("//"). Tout ce qui suit les barres obliques jusqu'à un retour chariot (en appuyant sur retour sur le clavier) sera ignoré. J'utilise généralement cette méthode pour faire mes courts commentaires en ligne. Il est également utile de désactiver les lignes de code uniques que vous ne souhaitez pas exécuter. Voyons ce que cela signifie :

La deuxième façon de commenter est utilisée dans les cas où vous souhaitez désactiver de gros blocs de code ou générer de gros blocs de commentaires et de texte. Ce type de commentaire s'appelle un bloc de commentaires. Cela se fait en utilisant un drapeau de commentaire d'ouverture composé d'une barre oblique et d'un astérisque ("/*") et un drapeau de commentaire de fermeture composé d'un astérisque et d'une barre oblique ("*/"). Voici un exemple de la façon dont cela pourrait être utilisé :

Notez que je ne parle pas de commenter style ici. C'est en fait à vous de décider. Vous développerez votre propre style au fur et à mesure et pourrez même avoir différents styles de commentaires à des fins différentes. Mes commentaires en ligne (comme ceux des exemples) sont complètement différents des commentaires que je fais dans quelque chose comme une application. Le but est d'écrire les commentaires et d'être cohérent en interne dans un script avec la façon dont vous le faites.
Les parties les plus difficiles de toute cette série
Vraiment, toute cette série a mené à ces prochains articles. Il y a trois choses essentielles que vous devez savoir pour démarrer avec JSL. Le premier est le commentaire (voir le sermon plus haut dans cet article). Les deuxième et troisième sont comment nommer les choses et comment envoyer des messages pour eux.
Je suppose qu'il est possible de coder votre propre algorithme ANOVA (un de mes collègues raconte une histoire très amusante à ce sujet). Mais, il est beaucoup plus facile de dire à une table de données d'exécuter une ANOVA en utilisant Fit Y by X via un message, comme nous l'avons appris dans l'épisode précédent. Ce flux de travail de base (nommer quelque chose, lui envoyer un message) représente une grande partie de ce qu'est JSL. Oui, vous pouvez entrer dans la logique et les boucles, le développement d'interface graphique, etc., mais les scripts de force brute ne nécessitent vraiment que des noms, des messages et une petite recherche dans l'index de script.
Nommer les choses
Commençons par nommer les choses. Vous nommez les choses en donnant à JMP un nom suivi d'un signe égal, puis en écrivant le texte, le nombre, le code, etc., que vous voulez que ce nom représente. Le nom s'appelle un variable . Vous pouvez considérer les variables comme des conteneurs dans lesquels vous pouvez mettre des éléments ou comme des surnoms pour les rapports ouverts dans JMP .
Regardons un exemple utilisant une ANOVA. Pour créer le code d'une ANOVA, exécutez d'abord l'analyse dans Fit Y by X (sous Analyze), puis activez le test ANOVA, puis enregistrez le code dans une fenêtre de script. Voici le rapport pour cela en utilisant Big Class Families.jmp et le code JSL résultant enregistré à partir du menu du triangle rouge (hauteur en Y, sexe en X et sélection Moyenne/Anova/t groupé sous le triangle rouge) :


Ce petit extrait JSL produira une ANOVA pour toute table de données qui a les mêmes noms de colonne que la table de données d'origine. (Nous n'allons pas nous soucier du paramétrage dans cette série, cependant. C'est un peu hors sujet.)
Maintenant, que se passe-t-il si vous avez un tas de tables de données ouvertes et que vous voulez contrôler sur quelle table de données vous voulez exécuter cette ANOVA ? Eh bien, vous pouvez modifier le script en donnant un nom à la table de données sur laquelle vous souhaitez exécuter l'ANOVA, puis en envoyant le code généré par JMP sous forme de message. Si vous deviez regarder dans l'index des scripts (voir l'article sur l'obtention d'aide), vous trouverez plusieurs façons de le faire. Vous pouvez soit appeler directement une table de données, soit saisir une référence à la table de données sur laquelle JMP se concentre actuellement en utilisant Current Data Table(). Il existe une troisième option un peu plus avancée, où vous donnez un nom à une table de données lorsque vous l'ouvrez. J'ai mis des exemples des trois ci-dessous (et notez à nouveau l'utilisation de commentaires pour transmettre des informations !) :

L'appel de la table de données par son nom fonctionnera tant qu'il y a une table de données ouverte portant le nom que vous essayez d'utiliser. Cela peut être pratique si vous avez une liste de noms de tables de données à partir de laquelle travailler. Cela peut également être pratique si vous avez masqué ou réduit votre tableau de données. Dans les deux cas, vous pouvez toujours envoyer des messages à la table de données même si vous ne pouvez pas nécessairement la voir. Cette méthode utilise la forme :
= Table de données(“”);
La manière la plus utile d'affecter une variable à une table de données pour nos besoins est probablement d'utiliser la fonction Table de données actuelle (). Cette fonction saisit tout ce qui est la table de données active ou actuelle et l'affecte à la variable que vous avez indiquée. Une fois que le tableau est assigné à la variable, peu importe si un autre tableau de données devient "courant" (par exemple, en créant un tableau récapitulatif, vous aurez toujours une référence au premier tableau de données jusqu'à ce que vous redéfinissiez la variable). Il a une forme plus simple :
= table de données actuelle();
La dernière méthode est utile si vous voulez supposer que la table de données n'est peut-être pas ouverte lorsque quelqu'un exécute le script. En utilisant cette méthode, JMP génère une boîte de dialogue de fichier qui permet à l'utilisateur de sélectionner le fichier qu'il souhaite ouvrir. Lorsque l'utilisateur confirme son choix, le fichier sera ouvert et se verra attribuer le nom de variable que vous lui avez donné. Encore une fois, c'est un formulaire simple :
= Ouvrir();
En utilisant le Ouvrir(…); peut également être pratique si vous êtes à l'aise avec les chemins de fichiers et les répertoires. Vous pouvez placer le chemin du fichier entre parenthèses pour indiquer à JMP où rechercher le fichier, comme ceci :

Notez également que j'utilise quelque chose appelé un Variable de chemin dans le Ouvrir(…); commande pour raccourcir la chaîne. Il y a une section sur eux dans le Guide de script .
Envoi de messages
Maintenant, une fois que vous avez nommé quelque chose, il est possible de lui envoyer un message. Cela fonctionne de la même manière que l'envoi d'un message texte à quelqu'un sur votre téléphone. Lorsque vous envoyez un SMS, la première chose que vous devez connaître est le nom, l'adresse e-mail ou le numéro de téléphone du destinataire, de quoi les identifier. Vous entrez cela dans l'application de messagerie, puis vous envoyez le message. Voici comment procéder à l'aide de l'ANOVA Big Class. Je vais m'amuser et demander à JMP d'ouvrir un fichier dans ce cas :

Déballons ce que nous voyons ici à partir de la ligne 5. La première chose que nous voyons est le nom de la variable de la table de données à laquelle nous voulons donner une instruction. Tout comme lorsque nous envoyons un SMS ou donnons une instruction à une personne, nous devons identifier à qui nous parlons. Ensuite, il y a deux symboles "inférieur à" (<<). Nous avons déjà vu quelque chose comme ça avec l'opérateur Glue (;). Le symbole "<<" est appelé l'opérateur de message. Il permet au destinataire du message de savoir que ce qui suit est un message. Après cela, nous voyons une fonction appelée Oneway(…); avec les arguments dont la fonction a besoin pour créer le rapport ANOVA. Remarque : vous pouvez obtenir toutes les informations sur les options de cette fonction dans la documentation ou dans l'Index des scripts, mais vous n'avez pas besoin de les écrire à la main. Exécutez simplement l'analyse une fois et récupérez le script fini (avec toutes les options) en utilisant l'un des Enregistrer le script dans... commandes que je vous ai montrées plus tôt.
Quelques bric et de broc
Bon, il y a trois derniers détails qui doivent être réglés. Le premier est la question de l'enchaînement des choses. Par exemple, si vous souhaitez effectuer une ANOVA et créer un générateur de graphiques dans le même script, vous devez avertir JMP que d'autres instructions doivent suivre. Pour ce faire, utilisez cet opérateur Glue (;) que je ne cesse de mentionner.

Comme un point-virgule en anglais écrit, le point-virgule à la fin d'une commande permet à JMP de savoir que d'autres instructions sont à venir. La colle se trouve à la fin d'une instruction comme Bivariate(...) ; , ou Distribution(...) ; , ou donner un nom à quelque chose : stuff = 5 + 6 ; . Comme vous vous en souvenez peut-être, JMP inclut automatiquement le point-virgule lorsque nous utilisons Enregistrer le script… dans la fenêtre de script , mais lors de la création de scripts à main levée, il s'agit de l'erreur la plus courante que je commets lors de la création de scripts : oublier de coller les éléments ensemble.
Le deuxième détail consiste à s'assurer que vos scripts sont de bons citoyens dans une session JMP. Cela se fait en affectant toutes les variables que vous créez à un espace de noms . Un espace de noms est un petit bac à sable qui empêche les noms de variables que vous créez d'interférer avec d'autres parties du logiciel. L'espace de noms par défaut est appelé l'espace de noms "Here". Dans les scripts, cela ressemble à ceci (voir ligne 2):

Cette instruction doit toujours figurer au début d'un script (jusqu'à ce que vous sachiez quand ne pas l'utiliser !) pour éviter que vos noms de variables n'entrent en collision avec d'autres scripts ou parties de JMP. Avant de commencer à vous arracher les cheveux sur ce point, voici une version TL; DR de ce que je viens de dire : n'oubliez pas de toujours mettre "Names Default To Here(1);" au début de votre script et tout ira bien pour le moment. Si vous voulez en savoir plus sur les espaces de noms, il y a un paragraphe sur le sujet dans cet autre post que j'ai écrit il y a quelque temps .
Le dernier détail dont j'ai besoin de discuter est de savoir comment changer un nom de colonne dans un script enregistré. C'est vraiment simple. Regardez dans votre script enregistré. Vous devriez voir les noms de vos colonnes précédés de deux points (" : "). Ces deux-points indiquent qu'il s'agit de noms de colonnes (cela peut signifier d'autres choses, mais pour l'instant, cela signifie des noms de colonnes). Pour changer le nom d'une colonne, changez-le simplement, mais n'oubliez pas de mettre les deux-points devant. Si vos noms de colonne contiennent des caractères spéciaux, vous pouvez rencontrer quelque chose comme :Name("...") lorsque JMP génère le script pour vous. C'est ainsi que JMP gère le fait que le nom de votre colonne comporte des caractères qui poseraient des problèmes s'il n'était pas clair qu'ils faisaient partie d'une chaîne. Même si c'est une mauvaise forme de codage d'utiliser :Name("...") dans nos scripts, le logiciel arrive à l'utiliser car il n'a pas le choix. Vous devriez essayer de choisir de meilleurs noms de colonne.
Mais tu as oublié...
OK, je me rends compte que certains d'entre vous deviennent probablement un peu nerveux à ce stade. Vous pensez peut-être, "VOUS AVEZ OUBLIÉ LES FONCTIONS !!!" ou "MAIS QU'EN EST-IL DES EXPRESSIONS !!!" ou même, "YOU TWIT !!! VOUS AVEZ COMPLÈTEMENT GLOSSÉ LA LOGIQUE ET LA BOUCLE ! » Tout d'abord, ce n'est pas agréable d'appeler des noms. Deuxièmement, je n'ai rien oublié de tout cela. je consciemment l'a omis.
Le fait est que cette série n'est pas destinée à vous faire exploser les cheveux. Comme je l'ai dit au début de la série, il est destiné à pointer votre nez sur la bonne voie, à vous donner une bonne carte, des collations, une tape dans le dos et à vous montrer où chercher de l'aide au cas où vous seriez coincé. C'est un point de départ. (Vous avez ma permission de prendre une collation à ce stade, btw.)
Pour ceux d'entre nous qui scénarisent régulièrement, une grande partie de ce dont je parle ici est si fondamentale - si basique - que c'est la mémoire musculaire. La chose que nous avons oubliée est que, juste en utilisant les connaissances fondamentales que je couvre ici, un scripteur néophyte peut couvrir beaucoup de terrain. Quoi qu'il en soit, si vous hyperventilez parce que je n'ai rien couvert de super sophistiqué, détendez-vous. Nous allons descendre dans le terrier du lapin dans la prochaine série. Pour l'instant, revenons à la discussion et parlons des devoirs de cette semaine.
Devoirs
Très bien - nous y sommes. Le grand devoir à la maison. Cette semaine, vous allez prendre les morceaux de code que vous avez créés la semaine dernière et les coller ensemble. Faites ceci un peu à la fois. Si votre script doit vivre en dehors d'une table de données (en tant que fichier JSL), commencez par ouvrir votre table de données et placez-la dans une variable. Après cela, quel que soit l'endroit où votre script va vivre, ajoutez un peu et vérifiez qu'il fait ce que vous attendez. Ensuite, ajoutez-en plus et vérifiez à nouveau que vous obtenez le résultat attendu. N'oubliez pas que la communauté, les fichiers d'aide, etc. sont vos amis. Si vous obtenez des messages d'erreur, consultez le journal ( Affichage > Journal pour PC et Fenêtre > Journal pour MacOS) et le épisode précédent .
Bonne chance et à la semaine prochaine !