Cette démonstration va donc illustrer certaines des façons dont vous pouvez utiliser les matrices. Donc, dans le journal du cours dans la section, je vais cliquer sur Cure Time Data. Et supposons que nous ayons besoin de trouver le temps de cure moyen pour chaque date. Nous allons donc additionner toutes les valeurs de temps de durcissement dans chaque ligne et diviser par le nombre d'échantillons. Et je vais utiliser des matrices pour effectuer ce calcul. C'est, encore une fois, ces opérations vectorisées rendront cela plus efficace. Donc, de retour dans le journal du cours, j'ai un script pré-écrit appelé Compute Statistics With Matrices. Et permettez-moi de déplacer ceci afin que nous puissions voir à la fois le tableau Cure Time - nous allons l'élargir un peu, même - et notre script. Le script commence donc par créer une variable appelée s. Et s va stocker le résultat de la fonction J. Et la fonction J crée une matrice avec un nombre spécifié de lignes, un nombre spécifié de colonnes et une valeur de départ. Et dans ce cas, j'utilise la fonction Nrow sans arguments. Il va donc simplement regarder le nombre de lignes dans la table de données actuelle. Je vais donc exécuter la ligne Et vous pouvez voir dans le journal que ce qui est maintenant stocké dans s est ce vecteur colonne de zéros. Et je vais l'utiliser pour ajouter à la place chacune des valeurs de temps de durcissement. J'utilise donc une boucle for. J'ai initialisé c égal car avec les données de temps de durcissement, je veux commencer par la deuxième colonne. Je teste que c est inférieur ou égal au nombre de colonnes. Et encore une fois, une meilleure pratique serait, surtout si vous travaillez avec des tables de données plus volumineuses, de faire ce comptage en dehors des boucles for, de le stocker dans une variable et de comparer c à cette variable. Ensuite, l'analyseur évalue le corps de la boucle for. Et donc nous prenons-- regardez d'abord le côté droit de la fonction d'assignation. J'envoie donc le message get as matrix à la colonne cette première fois, puis j'ajoute cela à la place de s. Ensuite, nous mettons à jour c avec l'opérateur de post-incrémentation. Cela en ajoute donc un en place à c. Nous testons pour nous assurer que c est toujours inférieur ou égal au nombre de colonnes. Et maintenant, nous obtenons la colonne en tant que matrice et l'ajoutons à la place de s. Je vais donc continuer et parcourir les lignes Et rappelez-vous que la fonction for renvoie une valeur manquante dans le journal. Mais vous pouvez survoler s pour voir qu'il contient maintenant ces nombres assez grands, la somme des cinq colonnes de temps de durcissement. Enfin, je vais envoyer un message à la table de données actuelle, le nouveau message de colonne. Et le titre de la nouvelle colonne sera Moyenne. Et pour les valeurs - et encore une fois, cela pourrait être des valeurs définies ou des valeurs - je vais en fait faire un calcul. Encore une fois, je peux fournir des fonctions à l'argument des valeurs sans avoir à créer de variables pour les stocker en premier. Donc 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 durcissement, et je le divise par c moins Et c'est par c moins parce que nous avons commencé à compter c à Donc, cela enlève un du nombre d'éléments que nous avons ajoutés en haut. Et bien sûr, c a dû incrémenter passé 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 Je vais continuer et exécuter cette dernière ligne. Et vous pouvez voir que la colonne Moyenne a été créée dans le tableau des données de temps de durcissement. Et indiqué dans le journal, vous pouvez voir que j'ai créé une instance d'un objet de colonne. Et en fait, alignez tout sur la ligne, ce résultat pourrait être affecté à une variable si je voulais continuer à travailler davantage avec cette colonne. Maintenant, pour la prochaine étape de la démonstration, je veux travailler avec toutes les données de Cure Time à la fois, en effectuant des calculs. Je vais donc extraire toute 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. Et avant de faire cela, je veux me débarrasser de cette colonne que je viens de créer. Je vais donc sélectionner tout le contenu de cette fenêtre de l'éditeur de script. Et je vais envoyer un message à la table de données actuelle. Supprimer des colonnes. Et la colonne que je veux supprimer est celle qui s'appelle Moyenne. Et je soulignerais, encore une fois, que l'utilisation du tableau de données actuel est très pratique lorsque vous testez des choses ou que je présente. Dans un type de script de production, nous voulons vraiment utiliser des références plus explicites à notre table. Donc, la table de données actuelle est agréable lorsque vous vous entraînez avec des scripts, testez simplement pour voir comment quelque chose fonctionne. Mais en pratique, un script que vous prévoyiez de déployer ou d'utiliser et que vous souhaitez conserver sur les versions de JMP et dans plusieurs situations où vous l'utilisez, nous voudrions utiliser cette référence de table de données explicite plutôt que la table de données actuelle. Je vais donc continuer et exécuter ceci. Et cela a supprimé la colonne dont je voulais me débarrasser. A renvoyé ce message scriptable dans le journal. Alors maintenant, laissez-moi effacer le contenu de la fenêtre de l'éditeur de script. Je vais extraire toute la table de données sous forme de matrice et la stocker dans la variable m. Ainsi, m sera affecté le résultat de l'envoi d'un message à la table de données actuelle. Et ce message est obtenu comme matrice. Je vais donc lancer ça. Et vous pouvez voir dans le journal, ou vous pouvez survoler m, que j'ai maintenant cette matrice. Et la première colonne est ces chiffres vraiment énormes. Et bien sûr, c'est parce que lorsque j'envoie get comme matrice à une table de données en général, cela va extraire toutes les colonnes numériques. Et cela inclura les dates. Ainsi, le jour ici est traité comme numérique. Vous pouvez le voir par l'icône du type de modélisation, car il est continu. Le type de données doit être numérique. Vous pourriez en fait aussi-- si je rends cela plus large-- même si le jour semble contenir des caractères, c'est juste du formatage. C'est donc justifié parce que c'est un nombre. Donc, obtenez également cette valeur en tant que matrice extraite. Et si je veux faire des calculs sur Cure Time - et en fait, les calculs que je veux faire vont impliquer de trouver une valeur minimale et maximale - je ne veux pas ces grandes valeurs pour le jour dans cette matrice. Je vais donc passer à une nouvelle ligne. Et je serai prudent. Je veux garder ce que j'ai déjà - le code que j'ai déjà mis dans la fenêtre visible au fur et à mesure que je progresse, mais je ne veux pas tout recommencer. Je vais donc faire très attention à exécuter une ligne à la fois. Pour supprimer cette première colonne, je vais utiliser la variable m et l'indicer avec un zéro et un un. Et si vous vous souvenez, cet indice signifie simplement, ne sélectionnez aucune ligne particulière. En d'autres termes, donnez-moi toutes les lignes de la première colonne. Et je vais lui attribuer la matrice vide, qui est juste les crochets sans rien dedans. Et encore une fois, pour n'exécuter qu'une seule ligne, je peux mettre en surbrillance la ligne et utiliser l'une des méthodes que nous utilisons pour exécuter un script entier. Mais il 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. Et donc ce qui est renvoyé au journal n'est que la matrice vide. Mais si je survole m maintenant ou si je surligne m et que je l'exécute, vous pouvez voir que nous n'avons que des valeurs de temps de durcissement maintenant. Nous nous sommes débarrassés de cette première colonne avec ces grands nombres de dates. 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 attribué 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 quand j'exécute juste cette ligne, nous traitons la matrice, m, comme s'il s'agissait d'un vecteur ligne et comptons à partir du premier position et renvoyant simplement les positions, les positions en indice unique, de tous les éléments de la matrice qui sont supérieurs à Maintenant, si je voulais les valeurs réelles, je vais créer une variable appelée avals. Et je vais signer que le résultat de l'indice de la matrice stockée dans m avec la variable a. Et je vais courir juste cette ligne. Et il y a les valeurs de temps de durcissement réelles qui dépassent Et bien sûr, pour rationaliser ce script, si je n'avais pas besoin de stocker les positions de toutes ces valeurs, j'aurais pu simplement avoir un indice -- laissez-moi juste copier ceci -- indice de la matrice m avec la fonction loc. Je n'ai pas besoin de cette étape supplémentaire consistant à stocker les emplacements puis à les utiliser, à moins que j'aie une autre raison de travailler avec les positions que j'avais initialement stockées dans un dans cet exemple. Donc, la prochaine chose que je veux faire avec cette matrice est de calculer des valeurs transformées. Ans cette transformation va prendre chaque observation de Cure Time moins le minimum sur l'ensemble du tableau divisé par la plage des valeurs maximales à minimales de Cure Time et multiplier cela par Donc, c'est un peu comme prendre la distance à chaque observation de la cure minimale temps en proportion de la plage. Cela illustre un autre avantage de travailler avec des matrices. Afin de trouver une valeur minimale dans une table de données entière, que je fasse des scripts ou que je travaille de manière interactive, travailler avec les colonnes individuelles de la table de données nécessiterait de nombreuses étapes pour trouver cette valeur minimale ou la valeur maximale. Mais en travaillant avec une matrice, je peux le faire en une très courte ligne de code. Donc, dans la fenêtre de mon éditeur de script - permettez-moi d'aller de l'avant et d'effacer le contenu maintenant - je vais créer une variable minCT - donc un temps de traitement minimum, et je vais attribuer à cette variable le résultat de l'utilisation de la fonction min avec m comme argument. Et je vais aller de l'avant et exécuter cette ligne. La valeur minimale est donc Et puis je vais également créer une variable maxCT. Et je vais lui attribuer le résultat de l'utilisation de la fonction max avec m comme argument. Et je vais courir juste cette ligne. Et c'est Et maintenant je peux utiliser ces variables dans mon calcul de cette transformation. Je vais créer une variable, t, pour stocker les valeurs de transformation. Permettez-moi de passer à une nouvelle ligne. Ainsi, t recevra le résultat des temps, puis ouvrira des parenthèses pour le numérateur m moins minCT, fermera des parenthèses pour le signe de division, puis ouvrira des parenthèses pour le dénominateur, maxCT moins minCT. Je peux donc exécuter uniquement cette ligne, puis j'obtiens ces valeurs de transformation. Chaque observation moins le minimum en tant que proportion de la plage de valeurs de temps de durcissement. Cela fait beaucoup de décimales. Nous n'avons vraiment pas beaucoup de précision. Nous pouvons donc arrondir ces valeurs. Et je vais encore passer à une nouvelle ligne. Je vais écraser les valeurs de t en attribuant le résultat de la fonction round à t. Vous pouvez le faire dans une nouvelle variable si vous souhaitez conserver l'original. Mais je vais taper t puis l'opérateur assign, la fonction round. Les arguments sont les premiers, qu'est-ce que j'arrondis? J'arrondis donc les valeurs stockées dans t. Et puis combien de décimales est-ce que je veux ? Je veux zéro. Maintenant, cela va tronquer les valeurs dans la matrice. Ce n'est pas la même chose que de formater une colonne de données pour n'avoir que zéro décimale où les valeurs complètes sont toujours stockées en arrière-plan. Donc je ne formate pas ici. En fait, je tronque les valeurs. Je vais aller de l'avant et exécuter cela. Et maintenant, j'ai les valeurs entières pour les valeurs transformées. Maintenant, si vous vouliez remettre ces valeurs dans la table de données de temps de durcissement, vous pouvez parcourir la matrice et créer de nouvelles colonnes. Si je voulais simplement créer entièrement une nouvelle table de données, il existe une fonction très simple appelée as table. Et il existe des arguments facultatifs pour nommer cette table et pour nommer les colonnes. Je vais garder les choses simples pour cette démonstration en utilisant simplement la variable t comme argument de as table. Et quand je lance ça, j'obtiens cette table sans titre avec des noms de colonnes génériques. Mais toutes ces valeurs de cette matrice de transformation sont renseignées dans ce tableau. Et encore une fois, je pourrais spécifier le nom et les en-têtes de colonne dans le cadre de l'argument as table. Ou je pourrais utiliser le script pour modifier cela après coup. Nous avons donc examiné différentes manières d'extraire des valeurs numériques d'une table de données, soit par colonne, soit par l'ensemble de la table de données, toutes les colonnes numériques, l'intégralité de la table de données et certaines manipulations que nous pouvons effectuer avec des matrices.