
Cette démonstration illustre quelques utilisations des matrices. Dans le journal de cours, à la section « Données de temps de durcissement », je clique sur « Données de temps de durcissement ». Supposons que nous devions trouver le temps de durcissement moyen pour chaque date. Nous additionnons donc toutes les valeurs de temps de durcissement de chaque ligne et les divisons par le nombre d'échantillons. J'utiliserai des matrices pour effectuer ce calcul. Ces opérations vectorisées rendront le processus plus efficace. Dans le journal de cours, j'ai un script pré-écrit appelé « Calculer des statistiques avec des matrices ». Je vais le déplacer pour que nous puissions voir à la fois le tableau « Temps de durcissement » (nous allons l'élargir légèrement) et notre script. Le script commence par créer une variable appelée s. s va stocker le résultat de la fonction J. Cette fonction crée une matrice avec un nombre spécifié de lignes, un nombre spécifié de colonnes et une valeur de départ. Dans ce cas, j'utilise la fonction Nrow sans argument. Il s'agit simplement d'examiner le nombre de lignes de la table de données actuelle. J'exécute la ligne. Vous pouvez voir dans le journal que ce qui est maintenant stocké dans s est ce vecteur de colonnes de zéros. Je vais l'utiliser pour ajouter en place chaque valeur de temps de traitement. J'utilise donc une boucle for. J'ai initialisé c à equals, car avec les données de temps de traitement, je veux commencer par la deuxième colonne. Je vérifie que c est inférieur ou égal au nombre de colonnes. Encore une fois, une bonne pratique consiste, surtout si vous travaillez avec des tables de données volumineuses, à effectuer ce comptage en dehors des boucles for, à le stocker dans une variable et à comparer c à cette variable. Ensuite, l'analyseur évalue le corps de la boucle for. Prenons d'abord le côté droit de la fonction assign. J'envoie donc le message get as matrix to column cette première fois, puis j'ajoute cela en place à s. Ensuite, nous mettons à jour c avec l'opérateur de post-incrémentation. Cela ajoute donc un en place à c. Nous vérifions que c est toujours inférieur ou égal au nombre de colonnes. Nous obtenons maintenant la colonne comme matrice et l'ajoutons à s. Je vais donc exécuter des lignes. N'oubliez pas que la fonction for renvoie une valeur manquante au journal. En survolant s, vous constaterez qu'elle contient désormais ces nombres assez importants, la somme des cinq colonnes de temps de traitement. Enfin, je vais envoyer un message à la table de données actuelle, le message de la nouvelle colonne. Le titre de cette nouvelle colonne sera « Moyenne ». Pour les valeurs (valeurs définies ou valeurs), je vais effectuer un calcul. Je peux donc fournir des fonctions à l'argument « valeurs » sans avoir à créer de variables pour les stocker au préalable. La fonction ici… j'ai une fonction de division et une fonction de soustraction. Je prends s, qui est la somme des colonnes de temps de traitement, et je la divise par c moins. Et c'est par c moins parce que nous avons commencé à compter c à Donc cela enlève un au nombre d'éléments que nous avons additionnés. Et bien sûr, c a dû incrémenter après le test. Il a dû échouer au test. Donc la valeur finale de c-- Je peux survoler et voir que c'est Et pourtant, nous n'avons fait qu'ajouter des choses. C'est pourquoi nous divisons par c moins. Donc, je vais continuer et exécuter cette dernière ligne. Et vous pouvez voir que la colonne Moyenne a été créée dans la table de données de temps de traitement. Et indiqué dans le journal, vous pouvez voir que j'ai créé une instance d'un objet colonne. Et en fait, ligne tout sur ligne ce résultat pourrait être affecté à une variable si je voulais continuer à travailler avec cette colonne plus. Maintenant, pour l'étape suivante de la démonstration, je veux travailler avec toutes les données de temps de traitement à la fois, en effectuant des calculs. Je vais donc extraire l'intégralité de la table de données sous forme de matrice, plutôt qu'une colonne à la fois, comme je l'ai fait dans ce script pré-écrit. Avant cela, je souhaite supprimer la colonne que je viens de créer. Je vais donc sélectionner tout le contenu de cette fenêtre d'éditeur de script. J'envoie un message à la table de données actuelle : « Supprimer les colonnes ». La colonne que je souhaite supprimer est celle intitulée « Moyenne ». Je tiens à souligner que l'utilisation de la table de données actuelle est très pratique pour les tests ou les présentations. Dans un script de production, nous souhaitons utiliser des références plus explicites à notre table. La table de données actuelle est donc utile pour s'entraîner à l'écriture de scripts et tester le fonctionnement. En pratique, pour un script que vous prévoyez de déployer ou d'utiliser et que vous souhaitez maintenir sur plusieurs versions de JMP et dans plusieurs situations d'utilisation, nous utiliserons cette référence explicite à la table de données plutôt que la table de données actuelle. Je vais donc l'exécuter. La colonne que je souhaitais supprimer a été supprimée. J'ai renvoyé ce message scriptable au journal. Je vais maintenant effacer le contenu de la fenêtre de l'éditeur de script. Je vais extraire l'intégralité de la table de données sous forme de matrice et la stocker dans la variable m. Le résultat de l'envoi d'un message à la table de données actuelle sera donc affecté à m. Ce message est « get as matrix ». Je vais donc l'exécuter. Vous pouvez voir dans le journal, ou en survolant m, que j'ai maintenant cette matrice. La première colonne contient des nombres énormes. Bien sûr, c'est parce que lorsque j'envoie « get as matrix » à une table de données, toutes les colonnes numériques sont extraites, y compris les dates. Le jour est donc traité comme numérique. Vous pouvez le voir grâce à l'icône de type de modélisation, car il est continu. Le type de données doit être numérique. Vous pouvez également, en élargissant la variable, même si « day » semble contenir des caractères, ce n'est qu'une question de formatage. Il est donc justifié à droite car c'est un nombre. « get as matrix » a également extrait cette valeur. Et si je veux effectuer des calculs sur le temps de traitement – et en fait, ces calculs impliquent de trouver une valeur minimale et maximale – je ne veux pas de grandes valeurs pour la journée dans cette matrice. Je vais donc ouvrir une nouvelle ligne. Et je serai prudent. Je veux que le code déjà inséré dans la fenêtre reste visible pendant toute la lecture, mais je ne veux pas tout recommencer. Je vais donc faire très attention à exécuter une ligne à la fois. Pour supprimer la première colonne, j'utiliserai la variable m et l'inscrirai avec un zéro et un un. Et si vous vous souvenez, cet indice signifie simplement ne sélectionner aucune ligne en particulier. Autrement dit, afficher toutes les lignes de la première colonne. Et je vais lui assigner la matrice vide, c'est-à-dire les crochets vides. Et encore une fois, pour exécuter cette seule ligne, je peux la sélectionner et utiliser n'importe quelle méthode utilisée pour exécuter un script complet. Mais cela n'exécutera que la partie sélectionnée ou en surbrillance. Ou, sur le pavé numérique d'un clavier de bureau standard, je peux utiliser la touche Entrée à l'extrême droite. Ainsi, ce qui est renvoyé au journal est simplement la matrice vide. Mais si je survole m maintenant ou si je l'ai sélectionné et exécuté, vous pouvez voir que nous n'avons plus que les valeurs de temps de traitement. Nous avons supprimé la première colonne avec ces grands nombres de date. Je vais passer à une nouvelle ligne et examiner certaines des autres fonctions matricielles que nous pouvons utiliser. Je vais donc créer une variable, a, à laquelle sera assigné le résultat de l'utilisation de la fonction loc, LOC. Et je vais trouver les positions dans cette matrice, m, où les valeurs sont supérieures à. Et lorsque j'exécute uniquement cette ligne, nous traitons la matrice, m, comme s'il s'agissait d'un vecteur ligne et comptons à partir de la première position et ne renvoyons que les positions, les positions d'indice simple, de tous les éléments de la matrice qui sont supérieurs à. Maintenant, si je veux les valeurs réelles, je vais créer une variable appelée avals. Je vais signer le résultat de l'indice de la matrice stockée dans m avec la variable a. J'exécuterai cette ligne. Les valeurs de temps de durcissement réelles dépassent… Et bien sûr, pour simplifier ce script, si je n'avais pas besoin de stocker les positions de toutes ces valeurs, j'aurais pu simplement indicier – laissez-moi simplement copier ceci – la matrice m avec la fonction loc. Je n'ai pas besoin de cette étape supplémentaire consistant à stocker les emplacements et à les utiliser, à moins que j'aie une autre raison de travailler avec les positions initialement stockées dans a dans cet exemple. La prochaine chose que je veux faire avec cette matrice est de calculer des valeurs transformées. Cette transformation va prendre chaque observation du temps de durcissement moins le minimum sur l'ensemble de la table, divisée par la plage des valeurs de temps de durcissement maximales à minimales, et multiplier cela par… C'est un peu comme prendre la distance à chaque observation par rapport au temps de durcissement minimal comme proportion de la plage. Cela illustre un autre avantage de travailler avec des matrices. Pour trouver une valeur minimale dans une table de données entière, que ce soit par script ou en mode interactif, travailler avec les colonnes individuelles de la table nécessiterait de nombreuses étapes. Mais avec une matrice, je peux le faire en une seule ligne de code. Dans mon éditeur de script (je vais effacer le contenu maintenant), je vais créer une variable minCT (min cure time) à laquelle j'affecterai le résultat de la fonction min avec m comme argument. J'exécuterai cette ligne. La valeur minimale est donc : je créerai également une variable maxCT, à laquelle j'affecterai le résultat de la fonction max avec m comme argument. J'exécuterai cette ligne. Et voilà, je peux maintenant utiliser ces variables dans le calcul de cette transformation. Je créerai une variable, t, pour stocker les valeurs de la transformation. Je vais passer à une nouvelle ligne. On va donc attribuer à t le résultat de fois, puis ouvrir des parenthèses pour le numérateur, m moins minCT, fermer des parenthèses pour le signe de division, puis ouvrir des parenthèses pour le dénominateur, maxCT moins minCT. Je peux donc exécuter cette ligne et obtenir ces valeurs de transformation : chaque observation moins le minimum en proportion de la plage de valeurs de temps de traitement. Ça fait beaucoup de décimales. La précision est vraiment limitée. On peut donc arrondir ces valeurs. Je vais à nouveau sur une nouvelle ligne. Je vais écraser les valeurs de t en réaffectant le résultat de la fonction d'arrondi à t. Vous pourriez le faire dans une nouvelle variable si vous souhaitez conserver l'original. Mais je vais saisir t, puis l'opérateur d'affectation, la fonction d'arrondi. Les arguments sont : d'abord, qu'est-ce que j'arrondis ? J'arrondis donc les valeurs stockées dans t. Ensuite, combien de décimales dois-je arrondir ? Je veux zéro. Cela va tronquer les valeurs de la matrice. Ce n'est pas la même chose que de formater une colonne de données avec zéro décimale, où les valeurs complètes sont stockées en arrière-plan. Je ne formate donc pas ici. Je tronque les valeurs. Je vais exécuter cette fonction. J'ai maintenant les valeurs entières des valeurs transformées. Si vous souhaitez réintégrer ces valeurs dans la table de données de temps de traitement, vous pouvez parcourir la matrice et créer de nouvelles colonnes. Pour créer une nouvelle table de données, il existe une fonction très simple appelée « as table ». Des arguments optionnels permettent de nommer cette table et les colonnes. Pour cette démonstration, je vais simplifier les choses en utilisant simplement la variable t comme argument de « as table ». Lorsque j'exécute cette fonction, j'obtiens une table sans titre avec des noms de colonnes génériques. Cependant, toutes les valeurs de la matrice de transformation sont renseignées dans cette table. Je peux également spécifier le nom et les en-têtes de colonne dans l'argument « as table ». Ou utiliser le script pour modifier ces informations ultérieurement. Nous avons donc examiné plusieurs manières différentes d'extraire des valeurs numériques d'une table de données, soit par colonne, soit par la table de données entière, toutes les colonnes numériques, la table de données entière et certaines manipulations que nous pouvons effectuer avec des matrices.