Très bien. Merci de nous rejoindre aujourd'hui. Je vais vous parler de JMP, bien sûr, et plus précisément de son utilisation pour automatiser les flux de travail analytiques chez Amirys. Nous aborderons également des processus plus complexes et la généralisation de l'automatisation, notamment l'automatisation des données, grâce aux plateformes JMP natives. Avant de commencer, permettez-moi de me présenter brièvement. Je m'appelle Stefan. Je suis directeur adjoint de la science des données chez Amirys et j'ai 15 ans d'expérience dans l'industrie des sciences de la vie, avec des parcours très variés. J'ai travaillé dans de nombreux laboratoires de chimie, de fermentation et au sein d'équipes de criblage à haut débit. J'ai également travaillé dans le domaine de la qualité, des statistiques, de l'analyse de données et, bien sûr, de la science des données. Je suis passionné par tout ce qui touche aux données, de leur stockage à leur utilisation et leur accès. J'accompagne actuellement la communauté scientifique d'AMRA dans le développement de ses outils et de ses méthodologies d'analyse. Aujourd'hui, je vais aborder trois points principaux. Je vais vous donner quelques informations générales sur l'étude de cas que nous allons utiliser, et qui me servira à illustrer certains exemples d'automatisation. Nous commencerons par des choses très simples.
Comment utiliser JMP pour automatiser les flux de travail d'analyse ? Il peut s'agir d'analyses que vous effectuez quotidiennement et que vous souhaitez optimiser. Dans la dernière partie, nous aborderons une automatisation plus avancée, en nous penchant sur des flux de travail plus complexes. Nous examinerons notamment comment analyser ces flux de travail utilisés par une équipe technique plus large et comment les généraliser pour prendre en charge à la fois le traitement et l'ingestion des données, ainsi que leur analyse. Notre étude de cas du jour provient de l'entreprise pour laquelle je travaille, Amirys. Amirys est une entreprise de biologie synthétique. Nous sommes spécialisés dans la programmation de levures et la fermentation industrielle, en nourrissant ces levures avec du sucre et en convertissant ce sucre en ingrédients purs ou en produits chimiques. Notre siège social est situé à Emeryville, en Californie, et la majeure partie de notre production est réalisée au Brésil. Notre étude de cas d'aujourd'hui portera sur la recherche et non sur la production. À Emeryville, nous disposons de plusieurs laboratoires hautement automatisés, que nous appelons nos laboratoires de criblage et d'analyse, où nous passons au crible des centaines de milliers de souches par mois dans ces plaques murales de 96 pouces.
Vous pouvez voir ici une photo de plaques à code-barres. Ce sont nos fermenteurs à échelle réduite. C'est notre première étape de test pour déterminer la production de ces souches. Nous recherchons des phénotypes spécifiques. Nous les cultivons dans des plaques 96 puits, puis nous utilisons une gamme complète d'analyses pour générer des mesures, souvent multidimensionnelles, sur ces puits. Nous disposons également de nombreuses bases de données internes. Une grande partie des données, ainsi que les métadonnées associées, sont stockées dans des bases de données applicatives et un entrepôt de données accessibles avec des outils comme JMP. C'est là que JMP intervient. Bien sûr, la dernière étape de ce criblage consiste à analyser un grand nombre de souches et à générer une grande quantité de données. Il nous faut maintenant interpréter ces données, décider quelle souche sélectionner pour l'achat d'un fermenteur en réacteur, et potentiellement pour une production au Brésil.
Nous allons commencer par l'automatisation simple dans JMP. Si vous n'avez jamais automatisé avec JMP, si vous n'avez jamais utilisé ces plateformes, je souhaite vous les présenter de manière accessible, sans trop de code, et vous donner une compréhension de base de leur fonctionnement, ainsi que de ce que j'ai appris en me formant moi-même et en apprenant des autres utilisateurs.
J'aime à dire que si vous effectuez une tâche plus de 10 fois, son automatisation est probablement judicieuse. Le point de départ idéal, pour les débutants en automatisation, est sans doute votre propre analyse. L'avantage, si vous maîtrisez déjà ces analyses, est que vous pouvez vous auto-évaluer. Bien sûr, ces analyses sont généralement plus simples que celles d'une équipe plus importante. Dans notre exemple, il s'agira d'une mesure très simple : une mesure unique sur une plaque. Nous procédons à une propagation en série des plaques, de la pré-culture à la production. Sur la deuxième plaque, nous effectuons une seule mesure. Dans cet exemple fictif, nous dirions : « Nous répétons exactement le même type d'expérience. » À chaque fois, nous importons les données dans JMP. Nous ajoutons une colonne calculée. Nous filtrons ensuite les données sur cette colonne, puis nous générons des tests visuels et statistiques pour faciliter notre prise de décision. Le faire une seule fois, ça ne prend pas énormément de temps, mais si vous le faites tous les jours, sans cesse, ça commence à représenter beaucoup de temps.
Avant d'aborder l'automatisation, je tiens à évoquer brièvement la structuration des données, qui est un prérequis indispensable. Votre travail sera grandement facilité si la standardisation et la structuration sont effectuées en amont, lors de la collecte et de l'intégration des données dans une base de données (ou des fichiers CSV, par exemple). Dans notre cas, la base de données est déjà structurée. Bien sûr, JMP permet de réaliser une grande partie du traitement des données, en fonction de l'application ou de l'analyse effectuée. Mais réfléchissez bien à la source des données : plus vous remontez en amont, mieux c'est. Si vous utilisez des données de base de données, je recommande l'utilisation de Query Builder. Nous n'entrerons pas dans les détails aujourd'hui. C'est ma recommandation générale. Le journal est l'élément fondamental de la programmation dans JMP. Que vous le sachiez ou non, JMP enregistre par défaut en permanence vos actions : le JSL et le script exécutés pour générer les interactions que vous effectuez en cliquant dans l’interface. Dans le menu Affichage, cliquez sur Journal pour afficher l’historique ; vous y trouverez la plupart des étapes que vous avez réalisées.
Si vous cliquez sur une étape, le code JSL utilisé pour son exécution s'affichera. Dans cet exemple, nous effectuons la première étape, l'ajout d'une colonne calculée. J'ai cliqué dessus et mis en surbrillance le code JSL correspondant. C'est un moyen rapide d'afficher le code JSL exécuté pour une étape. Vous pouvez ensuite, directement depuis le journal, exécuter ce code ou réexécuter du code précédent. Cela dit, je ne recommande pas d'utiliser le journal pour automatiser des tâches complexes. Il contient simplement une grande partie du code source. Une solution pour extraire des éléments du journal et les intégrer, par exemple, à une table de données consiste à utiliser des scripts de table de données. Cette méthode a longtemps été utilisée pour automatiser les étapes dans JMP. Dans cet exemple, je suis allé dans ce tableau de données, j'ai cliqué sur le petit point chaud rouge, j'ai généré un nouveau script, ce qui m'a simplement donné une fenêtre vide, et je l'ai collé directement à partir du journal : deux étapes de code, l'une créant la nouvelle colonne et l'autre définissant une formule pour cette colonne.
Vous pouvez aller plus loin et nettoyer le code. C'est tout à fait facultatif. Mais dans les sections suivantes, lorsque nous aborderons des exemples plus complexes, vous voudrez peut-être réfléchir à la manière de rendre votre code le plus maintenable et le plus propre possible. Ici, nous avons procédé à un nettoyage en deux étapes : la première a consisté à supprimer la référence redondante à la table de données. La seconde a permis de le compresser davantage en évitant de renommer la colonne 21, puis en la renommant. Nous lui donnons directement le nom correct. Chaque bloc de code fonctionnera. Ils feront exactement la même chose. Vous ne remarquerez aucune différence de performance, mais cela peut conduire à un code plus propre et plus maintenable. Si vous débutez en JSL et que vous voyez ce code, vous vous demanderez peut-être à quoi il sert. Vous pouvez copier-coller ces éléments dans votre LLM préféré. Nous utilisons Copilot, ChatGPT, ou autre. Si vous avez accès au bot d'apprentissage JMP, vous pouvez lui demander une explication du type : « Que fait ce code ? » Il vous donnera généralement une bonne idée de son fonctionnement.
Nous avons extrait des données du journal, ou plutôt du code, et l'avons collé dans les scripts du tableau de données. C'est la méthode la plus manuelle pour générer automatiquement du JSL. Vous pouvez le voir ici. Comme nous l'avons nommé, la première étape consiste à ajouter une colonne calculée. Sur la plupart des plateformes, il existe d'autres méthodes simples pour générer ces scripts de tableau et enregistrer le script ayant produit un résultat spécifique. De nombreuses plateformes proposent ces options dans le menu contextuel (icône rouge). En bas, vous trouverez l'option « Enregistrer le script » qui offre plusieurs possibilités. Vous pouvez l'enregistrer dans le presse-papiers, directement dans le tableau de données (ce que nous allons faire), ou choisir parmi d'autres options. C'est un moyen très simple de générer automatiquement du JSL directement depuis l'interface utilisateur. Nous l'avons enregistré dans le tableau de données. Dans ce cas précis, nous avons simplement renommé le script. Deuxième étape : le filtrage des données, et nous avons poursuivi l'analyse. Nous pouvons le faire ici, dans notre dernière étape, qui consiste à générer un graphique Y par X, et nous appliquons également un test de Dunnett avec un groupe de référence.
On revient ici à la zone cliquable, on sélectionne « Enregistrer le script » et on l'enregistre dans la table de données. On a ainsi créé un pseudo-flux de travail. Il s'agit d'une automatisation en trois étapes : ajout d'une colonne calculée à la table, ajout ou application d'un filtre de données, puis réalisation d'une analyse univariée avec un test de Dunnett. On utilise alors des scripts de table, et ce, pendant longtemps, jusqu'à l'arrivée des flux de travail dans JMP 16 ou 17, je crois. Les flux de travail ont permis d'enrichir ces scripts de table avec des fonctionnalités supplémentaires. Il s'agit d'une nouvelle plateforme autonome intégrée à JMP. On y accède via Fichier > Nouveau > Flux de travail. De nombreuses fonctionnalités facilitent le développement de ces flux de travail et améliorent l'expérience utilisateur. Par exemple, un simple clic permet d'exécuter toutes les étapes d'un flux de travail. Il existe une fonction d'enregistrement des étapes, qui enregistre vos actions dans JMP et les ajoute automatiquement au flux de travail. Vous pouvez annoter les scripts directement dans le flux de travail et ajouter des éléments tels que des portes logiques, de l'interactivité, des invites utilisateur, et bien plus encore. Nous n'avons malheureusement pas le temps de tout aborder aujourd'hui.
Je vais vous montrer quelques exemples, notamment dans la version avancée. Nous pouvons maintenant utiliser ces scripts de tableau pour créer un pseudo-flux de travail. Imaginons que nous ayons créé ce flux de travail avant l'apparition des workflows ; JMP a ensuite intégré la plateforme de workflow, et nous l'avons ajouté au générateur de workflow. J'ai simplement ajouté trois étapes. J'ai copié le JSL de chaque étape, et vous pouvez constater que nous retrouvons exactement les trois étapes du flux de travail présentes dans les scripts de tableau de données. Je vais vous montrer une brève démonstration avec nos données réelles ou de démonstration. Dans ce premier exemple, nous avons nos données structurées : plusieurs mesures et leurs valeurs. Nous souhaitons à nouveau effectuer ces trois étapes. Avec cette approche par script de tableau de données, il suffit d'appuyer sur chaque bouton l'un après l'autre. J'appuie sur celui-ci. Nous avons maintenant ajouté une colonne calculée. Nous appliquons un filtre de données ; une fenêtre s'affiche et applique ce filtre, puis nous générons une analyse à un facteur pour cette expérience spécifique.
C'est vraiment simple, n'est-ce pas ? Ça fonctionne très bien. C'est parfait pour quelque chose de simple comme ça. Avez-vous besoin de passer à un flux de travail ? De faire quelque chose de plus sophistiqué ? Pas forcément. Si ça marche, c'est parfait. On pourrait réinitialiser, et vous voyez que je dois le faire manuellement ici. On va effacer l'état de la ligne, s'assurer que le filtre de données est fermé, puis on pourra examiner le flux de travail. Il se compose encore une fois de trois étapes. L'avantage ici, c'est que je peux maintenant voir le code automatiquement. Ce n'est pas possible ici. Ici, je devrais faire un clic droit, aller dans « Modifier » et voir la définition dans une nouvelle fenêtre. Alors que dans cette autre option, je vois le code de chaque étape. Ici, je peux appuyer sur « Lecture », et les trois étapes s'exécuteront ensemble. J'ai ces petites coches vertes qui indiquent que l'exécution s'est déroulée sans erreur. Vous voyez, notre nouvelle colonne est là. On a appliqué un filtre, et la même analyse s'est ouverte. C'est un peu plus clair. Dans la section suivante, nous aborderons plus en détail les autres fonctionnalités avancées offertes par ce flux de travail.
Un point que je souhaite aborder rapidement, concernant la démo, est le bouton d'enregistrement. Il est très pratique, surtout si vous n'êtes pas familier avec JSL, voire même avec la programmation en général. C'est la façon la plus simple de créer vos propres automatisations. Il vous suffit d'appuyer sur « Enregistrer », et tout ce que vous ferez sur cette plateforme sera capturé dans ce flux de travail. Prenons un exemple simple : je vais dessiner une distribution de mes mesures qui génère une certaine distribution. Supposons que cela ait une signification particulière. Lorsque je retournerai à mon flux de travail, vous verrez une nouvelle étape : notre script JSL. Je peux le renommer, ajouter des notes, le modifier, etc. Ce bouton d'enregistrement est une fonctionnalité vraiment intéressante du générateur de flux de travail. Passons à l'étape supérieure. Imaginez que vous ayez automatisé une tâche pour votre canapé, une application très spécifique. Peut-être que cela fonctionne pour un seul type d'expérience. Comment passer à des processus plus complexes ? C'est la question que nous nous sommes posée.
Chez Amirys, la réalité est que nous menons de nombreux types d'expérimentations différents, et nous souhaitons pouvoir les prendre en charge avec le moins de flux de travail possible. Nous ne voulons pas créer un flux de travail unique pour chaque itération, car cela deviendrait impossible à maintenir et très difficile à développer. Pour des développements plus avancés, je suggère, et j'ai trouvé cette information dans une vidéo de la communauté JMP, d'utiliser des projets JMP pour organiser ce que j'appellerais l'environnement de développement. L'une des difficultés liées à l'automatisation de ces tâches complexes est la multitude de tableaux de données, de fenêtres et d'éléments qui s'affichent, ce qui peut rendre leur gestion difficile. Avec un projet, vous pouvez l'utiliser comme une interface pour votre développement, ainsi que pour l'utilisation ultérieure de l'outil.
Ici, j'ai ouvert certaines plateformes de projet par défaut, comme l'Espace de travail et le Contenu. J'ai ajouté un journal comme espace réservé. C'est ici que tout ce que le flux de travail ouvre, toute nouvelle fenêtre, s'ouvrira dans un nouvel onglet plutôt que dans une nouvelle fenêtre sur mon bureau. Vous pouvez aussi utiliser ce journal, bien sûr, pour la documentation ou les instructions. À droite, j'ai mon flux de travail que j'ai créé. En bas, j'ai également ajouté mon journal.
Si je dois effectuer un dépannage ou examiner plus en détail les messages d'erreur, j'ai le journal à portée de main et je peux le faire directement depuis une seule fenêtre. C'est d'ailleurs ainsi que je présente ce flux de travail dans ce projet. Les retours des utilisateurs sont globalement très positifs quant à l'absence de tableaux et de visualisations superflues. Lorsque nous parlons de généralisation de l'automatisation, nous privilégions les applications à fort impact, car généraliser l'automatisation est un processus complexe, qu'il s'agisse d'automatisation des données, d'automatisation physique (en laboratoire ou en production, par exemple). Cela demande beaucoup d'efforts, d'argent, de travail et de temps. En général, si vous souhaitez automatiser les flux de données, privilégiez leur application à la standardisation des flux existants ou utilisez-les comme levier pour promouvoir la standardisation. Par exemple : « Si nous standardisons ceci, nous pourrons aussi automatiser ce fastidieux traitement de données que vous effectuez quotidiennement. »
Les flux de données nécessitent souvent une certaine flexibilité, que ce soit en raison du processus lui-même ou de la manière dont les données sont analysées. C'est là que l'automatisation progressive entre en jeu. C'est d'ailleurs le principal atout de JMP : on m'a souvent demandé pourquoi ne pas utiliser Python pour automatiser, ou une plateforme entièrement basée sur le code. Le problème, c'est que toute solution purement basée sur le code représente un obstacle majeur à l'adoption. À moins d'une automatisation complète, si l'utilisateur doit intervenir à un certain stade et qu'on lui demande de maîtriser Python, cela constitue un frein important, même au sein de communautés très techniques comme celle des scientifiques avec lesquels je travaille.
JMP est vraiment génial car on peut automatiser la première étape, puis l'utilisateur final se retrouve dans JMP. Il a l'interface utilisateur et peut l'utiliser librement. Il peut faire ce qu'il veut, il a cette liberté et tire parti de l'automatisation. Bien sûr, nous voulons identifier les opportunités à fort impact car cela demande des efforts. Dans notre cas, nous avons examiné ces expériences sur plaques et nous avons demandé aux scientifiques : « Combien de temps consacrez-vous à la récupération de ces données ? » Nous avons constaté que les gens effectuaient ces tâches très manuellement, par copier-coller, en répétant des étapes répétitives.
Nous avions 17 scientifiques dans l'équipe. Après une petite étude, nous avons estimé que nous consacrions le temps d'une personne à temps plein, un temps précieux et coûteux, à toutes ces tâches. Nous avons vu là l'occasion de nous dire : « Beaucoup de ces tâches semblent manuelles, répétitives et automatisables. Essayons ! » Le principal défi que vous rencontrerez sans aucun doute est la complexité. Lorsqu'on parle d'automatisation, il y a deux axes : le nombre total d'étapes du flux de travail et le nombre de variations à chaque étape. Une variation correspond à une bifurcation du processus. J'apprécie le schéma de droite, car le problème peut rapidement devenir exponentiel lorsqu'on essaie de résoudre un trop grand nombre d'itérations ou de variations possibles d'un même processus. Il faut se poser la question suivante : est-ce gérable ? Et si ce n'est pas le cas, comment le rendre gérable ? Vous pouvez soit éliminer les variations par la standardisation, comme nous l'avons mentionné, soit dire : « Attention, ce cas particulier ne sera pas pris en charge par cette analyse de données. »
Vous pouvez même ajouter un message d'erreur, comme vous le verrez dans votre flux de travail. Vous pouvez également supprimer des étapes grâce à une fonction d'arrêt automatique. C'est ce que j'évoquais : laisser l'utilisateur reprendre le contrôle. Si une étape de contrôle qualité est très spécifique et artisanale, vous pouvez interrompre le flux de travail, laisser l'utilisateur effectuer les actions nécessaires, puis le reprendre à partir de là. Plusieurs options s'offrent à vous, mais une bonne planification est essentielle pour l'automatisation. Dans notre cas, nous nous intéressions aux procédés de propagation de plaques, et voici l'exemple initial que j'ai donné. Pour une propagation de plaque unique, nous effectuons une seule mesure ; nous appellerons ce processus « propagation 1 ».
Lorsque nous avons commencé à examiner l'étendue des variations d'une expérience à l'autre, nous avons constaté que, parfois, nous effectuions deux mesures sur une même plaque, et non une seule. Parfois, nous mesurions également sur la première plaque de la propagation en série. Parfois, nous effectuions deux mesures pour chaque plaque. Parfois, nous divisions même les plaques. Nous n'effectuons pas seulement une mesure par rapport à une autre, mais aussi par rapport à deux ou à plusieurs.
Nous effectuons des mesures sur ces données. Parfois, nous les divisons et prenons des mesures différentes sur chacune d'elles. Je ne m'attends pas à ce que vous suiviez tout cela, mais ce que j'essaie de démontrer, c'est la grande diversité de notre processus. Je ne vous présente ici que quelques exemples. Nous avons des dizaines de variantes de notre processus. Nous nous sommes simplement intéressés à la complexité du processus lui-même, celui qui, dans nos laboratoires, génère les données. Nous n'avions même pas encore commencé à nous interroger sur la standardisation des méthodes d'analyse des données. Quels tests statistiques sont utilisés ? Utilisent-ils des indicateurs de synthèse, la médiane ou la moyenne ?
La complexité peut vite devenir accablante, il est donc essentiel de bien se renseigner au préalable. Nous travaillons actuellement sur un projet en cours de développement. Il est déployé, mais nous l'améliorons constamment. C'est pourquoi je recommande de déterminer les fonctionnalités minimales utiles, puis de recueillir régulièrement les retours des utilisateurs finaux. Nous avons ainsi élaboré cette approche généralisée pour l'analyse de nos plans.
Voici à quoi ressemble un flux de travail plus complexe. Nous ajustons directement les données de notre base de données et invitons l'utilisateur à les filtrer en fonction de l'expérience recherchée. Nous effectuons un travail de préparation des données important : correction des types de données, uniformisation des conventions de nommage, etc. Nous segmentons ensuite les données selon ce processus. Nous avons observé une propagation sérielle. Il est nécessaire d'identifier la plaque à laquelle correspond chaque mesure. Nous effectuons des vérifications afin de déterminer si un processus ou une mesure n'est pas pris en charge par l'automatisation. Dans ce cas, une erreur est générée et un message d'erreur est affiché à l'utilisateur. Nous poursuivons le traitement des données en effectuant des pivots. Nous offrons même à l'utilisateur la possibilité d'ajouter des données hors ligne, notamment des annotations manuelles de ses génotypes. Enfin, nous générons un ensemble de visualisations et d'analyses par défaut.
Pour vous expliquer cela plus en détail, je vais vous montrer à quoi cela ressemble. Ici, comme je l'ai montré, nous sommes dans le projet. Nous avons le contenu de notre espace de travail. Nous avons notre journal. Nous avons notre journal de bord ici. Je vais d'ailleurs fermer le journal de bord car nous n'en avons pas besoin pour la démonstration, et il occupe de l'espace précieux sur notre écran.
Voici notre flux de travail. J'ai simplifié au maximum ces étapes pour qu'elles soient claires et compréhensibles. Vous pouvez également activer ou désactiver des étapes, notamment pour les besoins de cette conférence. Nous importons uniquement des données statiques, car nous n'allons pas nous connecter aux bases de données de notre entreprise pour extraire des données expérimentales réelles. Ces données brutes sont directement intégrées. Vous remarquerez aussi la présence de portes logiques. Ces instructions « si/sortie » permettent de créer des bifurcations logiques : si les données correspondent à tel état, effectuez telle action ; sinon, effectuez une autre.
Je vais lancer l'importation. Nous importons les données. J'ai une petite remarque un peu passive-agressive ici… On peut afficher des fenêtres contextuelles pour informer l'utilisateur. J'ai dit : « Super ! Vous n'avez que les mesures de type B pour vos plaques PC, c'est bien ça ? C'est la seule chose que nous autorisons. Bravo ! » Ils ont cliqué sur OK. L'importation continue. On leur demande maintenant s'ils souhaitent ajouter des métadonnées créées manuellement.
Il s'agit généralement des données de génotype de cet ensemble de données. Lors de la première analyse, je vais simplement cliquer sur « Non ». En fait, je n'ai aucune donnée. On va donc lancer l'analyse. Maintenant que tout est généré et analysé, toutes les données sont validées. À gauche, vous verrez plusieurs tableaux de données, ainsi que des visualisations par défaut des performances et la normalisation que nous effectuons sur les plaques pour la sélection des souches.
Ce qui est vraiment pratique ici, c'est que je peux cliquer sur ce bouton de réinitialisation pour fermer toutes les fenêtres ouvertes et réinitialiser le flux de travail. Voilà, c'est fait. On revient au journal et aux petites flèches du début. Je peux relancer le processus. Dans la même fenêtre, je vais répondre « Oui ». Cela va m'orienter différemment. Je vais confirmer l'ajout de données manuelles. Une autre fenêtre apparaît alors, me demandant quelle colonne utiliser pour joindre les données. Je vais utiliser le numéro X, qui est un identifiant unique.
Nous utilisons quatre souches. Cliquez sur OK. Le système affichera le message : « Je ne trouve pas ces données dans votre jeu de données. » Normal, puisqu'il s'agit de mes propres données hors ligne. Je vais donc les rechercher sur mon ordinateur. Dans ce cas précis, elles sont enregistrées dans un fichier CSV. Nous allons les fusionner avec les données principales, puis exécuter le script. Vous remarquerez que nous arrivons au même résultat à ce stade : la normalisation et la visualisation des mesures sous forme de diagramme en boîte (Graph Builder). Mais nous avons également ajouté des informations supplémentaires, notamment des colonnes sur les mutations du promoteur, issues des données hors ligne que nous avons fusionnées avec les données principales.
Ces flux de travail généralisés peuvent s'avérer extrêmement puissants. Lorsque je les publie, je les enregistre également dans un projet. Il s'agit du flux de travail intégré au projet. J'y ajoute la documentation utilisateur ainsi que tous les liens hypertextes vers la documentation interne pertinente. Un utilisateur accède à cette page, clique sur « Lecture », un message lui demande de saisir l'identifiant de l'expérience. Les données extraites sont alors modifiées dynamiquement, puis le processus s'exécute.
Vous remarquerez que j'ai également inclus des options comme la gestion des erreurs. Cela concerne des cas spécifiques où nous ne prenons pas en charge cette fonctionnalité, ou un type d'expérience inattendu. Un autre conseil : si vous souhaitez généraliser, sachez que par défaut, de nombreuses références aux tables et colonnes sont générées automatiquement. Que vous utilisiez un bouton d'enregistrement ou le menu déroulant rouge de la plateforme, ces références sont généralement explicites. Elles indiquent le nom de la table et celui de la colonne. Or, cette syntaxe n'est pas toujours adaptée à la généralisation.
Vous pourriez être amené à apprendre et à modifier manuellement le JSL concernant les références aux colonnes et aux tables de données : comment les gérer et les rendre dynamiques. Le nombre de colonnes importées peut varier selon les données fournies par l'utilisateur, et je dois pouvoir m'adapter à cette situation. Une fois familiarisé avec ce domaine, vous devrez presque certainement écrire et coder du JSL. Cependant, JMP prendra en charge 90 % du travail, notamment l'enregistrement des flux de travail, le journal, ainsi que les zones cliquables et les options d'enregistrement des scripts.
Vous vous retrouvez à devoir écrire du JSL ? Où trouver de l'aide ? J'ai travaillé avec de nombreux outils et logiciels de données, ainsi qu'avec différents langages de programmation. Les ressources d'apprentissage de JMP sont vraiment excellentes. L'application intègre nativement un index de scripts. Aujourd'hui, on peut utiliser l'assistance LLM pour le dépannage ou même la génération de JSL. Ce n'est pas aussi performant que Python, notamment parce que l'ensemble de données d'entraînement est beaucoup plus restreint, mais cela peut tout de même vous permettre de démarrer.
Ce qui est vraiment incomparable avec la communauté JMP, c'est l'utilisation des forums. Voici un exemple concret du début de l'année : j'ai posé une question, et ce qui m'a le plus marqué, c'est le timing. Je l'ai soumise à 19h15. Jim, la légende, a répondu à 21h45, le jour même. Le lendemain matin, Mark a répondu environ 12 heures plus tard. J'ai obtenu deux réponses d'experts à mes questions en moins de 24 heures. C'est ce que j'ai constaté à chaque fois que j'ai posté sur un forum.
Un grand merci à tous, et plus particulièrement à Mark et Jim. Je vois vos noms partout, mais en réalité, tous les membres des forums les utilisent. Ils sont une ressource inestimable pour votre apprentissage. Pour conclure, je vous encourage vivement à explorer votre organisation, vos équipes, vos laboratoires, quel que soit votre domaine d'activité, et à rechercher des opportunités à fort impact où vous pourriez appliquer une automatisation généralisée. Dans notre cas, nous avons constaté que nous passions des heures par expérience, et ce, pour plus de 50 expériences de ce type réalisées chaque mois. Cela représentait le temps de travail total d'une seule personne, consacré au traitement de ces données.
Une fois cet engagement pris, il faut gérer et planifier la complexité. Nous avions une grande variabilité dans notre conception expérimentale et notre processus de criblage sur plaques. Nous y avons remédié en offrant des options à l'utilisateur, en limitant les rapports pris en charge, mais aussi en tirant parti de l'interface utilisateur de JMP pour lui dire : « À partir de là, c'est vous qui décidez. » Vous pouvez toujours visualiser les données comme vous le souhaitez. Cela permet de mettre en œuvre des flux de travail avancés, ce qui élimine les tâches répétitives et sert également à standardiser les analyses. J'ai souvent constaté que nous aimons standardiser les choses, mais que l'analyse des données a tendance à rester artisanale.
C'est vrai, mais il y a aussi des opportunités pour définir des bonnes pratiques. Comment analyser ces données ? Quel est le test statistique approprié pour les caractéristiques qu'elles présentent ? Cela vous permet de les formaliser dans un flux de travail JMP, par exemple.