Bonjour à tous, de la part d'Elliot et moi-même. Dans cette présentation, nous allons vous montrer comment nous utilisons l'automatisation du traitement des données dans JMP chez Illumina pour accélérer notre processus de développement produit. Nous commencerons par vous présenter ce processus, notre entreprise et nos méthodes de travail. Nous expliquerons ensuite comment l'automatisation du traitement des données s'y intègre, nous vous donnerons un exemple de notre flux de travail type et nous conclurons par les points clés à retenir.
Illumina est généralement connue comme une entreprise qui conçoit et fabrique des instruments pour la génomique. Aujourd'hui, nous sommes un fournisseur de solutions et de plateformes pour de multiples approches omiques : génomique, transcriptomique et protéomique. Notre instrument phare, un système à haut débit, est la série NovaSeq X, lancée en 2023. La technologie clé du NovaSeq X est la technologie XLEAP.
L'une des principales caractéristiques de la technologie XLEAP est que, par rapport au volume de réactifs nécessaire au fonctionnement d'un instrument à haut débit dans notre précédente version d'instruments à haut débit, nous avons réalisé, grâce à cette technologie, une réduction d'environ 90 % tant au niveau de l'emballage que des efforts de gestion et de stockage côté client.
Cela a été possible car, ici, aucun réactif n'est expédié avec de la glace carbonique ou un emballage réfrigéré ; le réactif est donc transporté dans un seul colis, et le client n'a aucun souci à se faire concernant l'élimination et la gestion des emballages, notamment ceux contenant de la glace carbonique. À l'intérieur de ce colis, le client reçoit ce type de cellule de flux capable d'effectuer environ 300 cycles par analyse, avec 25 milliards de mesures par cycle.
Pour développer ces instruments, nous estimons avoir dû réaliser environ 5 000 essais avec ces cellules d'écoulement. À chaque essai, nous devons amorcer l'instrument avec une cartouche contenant tous les réactifs, soit une vingtaine de réactifs différents, chacun ayant été mis au point grâce à des analyses et un séquençage. C'est là que le traitement automatisé des données intervient.
Nous avons illustré ici l'utilisation de tests analytiques pour développer des réactifs. Comme vous le savez, dans un test sur plaque, le scientifique réalise l'expérience, extrait les données, effectue leur réduction et leur analyse, étape par étape, en copiant-collant les données jusqu'à l'obtention d'un rapport. À ce stade, il peut tirer des conclusions et passer à l'expérience suivante. Il est possible de répéter cette procédure indéfiniment ou d'exploiter les fonctionnalités de JavaScript.
Générez un script qui automatisera l'extraction, la réduction et le traitement des données, puis permettez d'effectuer de manière itérative ce type d'analyse sur des expériences répétitives, ce qui présente de nombreux avantages. Tout d'abord, un gain de temps considérable pour l'expérimentateur. Ensuite, la possibilité de réaliser ces analyses de manière itérative sur plusieurs expériences accélère le processus de développement produit. De plus, en éliminant les saisies manuelles et les copier-coller, le nombre d'erreurs diminue. Moins d'erreurs signifie que nous pouvons standardiser nos procédures.
La standardisation est essentielle pour obtenir des processus reproductibles et robustes. Même les scientifiques peu familiers avec la programmation peuvent y parvenir grâce à l'outil Workflow Builder de JMP et aux ressources de la communauté JMP. Une connaissance minimale en programmation est requise.
Prenons l'exemple de la création d'un processus de traitement de données automatisé et réutilisable grâce à l'outil de création de flux de travail, ne nécessitant qu'une connaissance minimale de GSR. Chez LUNAR, nous développons fréquemment de nouveaux réactifs de séquençage et devons souvent mettre au point un test pour mesurer leur activité. Imaginons un test où un substrat non fluorescent est converti en un produit fluorescent par nos réactifs, puis analysé à l'aide d'un lecteur de plaques afin de mesurer l'évolution temporelle de cette fluorescence.
Il est typique qu'une telle réaction suive une cinétique de premier ordre. La formation du produit P peut donc être décrite par l'équation suivante, qui fait intervenir une fonction du temps et deux paramètres importants : Pₘₐₓ, qui décrit l'intensité maximale atteinte en fin de réaction, et la constante de vitesse k.
Ce qui nous intéresse vraiment, c'est ce taux de réaction : identifier le réactif qui présente le taux le plus élevé possible. Généralement, notre lecteur de plaques génère un fichier de données brutes, souvent un fichier Excel, que nous souhaitons ensuite traiter automatiquement avec JMP. Nous voulons donc importer ce fichier Excel et soustraire les données d'intensité du bruit de fond de nos réponses.
Nous souhaitons effectuer un ajustement exponentiel pour déterminer la constante de vitesse k, puis extraire ces données dans un tableau JMP qui nous fournira un résumé des résultats. Nous allons maintenant ouvrir JMP et je vais vous montrer comment procéder. Mais d'abord, ouvrons notre fichier Excel. Il s'agit d'un type de fichier typique que l'on peut obtenir d'un logiciel de lecture de plaques, au format brut. Comme vous pouvez le constater, le logiciel a déjà renseigné certaines données expérimentales.
Nous disposons d'un schéma de la plaque, et ce n'est qu'à la ligne 21 que nous obtenons nos données expérimentales. Nous souhaitons pouvoir ouvrir ce fichier, utiliser JMP pour traiter les données, puis obtenir un résumé clair. Si nous voulons automatiser ce processus et que nous ne savons pas programmer en JSL, nous pouvons utiliser un générateur de flux de travail. Dans tous nos exemples, nous utilisons la version de base de JMP 18. Nous réalisons ces exemples dans un projet JMP afin de faciliter la compréhension et l'organisation, mais vous pouvez également effectuer ces tâches avec la version standard de JMP.
La première chose à faire est d'aller dans « Nouveau », puis dans « Flux de travail ». Il s'agit de la plateforme de flux de travail. Avant de commencer l'enregistrement, il est important de savoir que vous devez cliquer sur ce bouton rouge. Chaque étape sera alors enregistrée et un script correspondant sera généré automatiquement. Vous pourrez ensuite assembler ces étapes pour créer un script utilisable.
Nous allons importer notre fichier Excel, alors ouvrons-le. Comme je vous l'ai montré précédemment, les données ne commencent pas sur la première ligne. Ici, nous pouvons spécifier où les données commencent et où elles se terminent afin de pouvoir les importer. En cliquant sur « Importer », cette étape sera ajoutée à notre flux de travail, dans l'onglet « Générateur de flux de travail ». Voici à quoi ressemblent les données : l'heure, différents échantillons et l'arrière-plan.
Pour effectuer nos calculs, nous devons ajouter une nouvelle colonne, que nous appellerons Pred pour prédiction. Nous allons prédire l'évolution de la variable en fonction du temps à l'aide de la formule que je vous ai montrée sur la diapositive. Nous avons ici nos deux variables. Nous avons spécifié des valeurs initiales pour les ajustements.
Maintenant, si vous souhaitez interrompre votre activité à tout moment, jouer au golf et explorer, il vous suffit de cliquer à nouveau sur le bouton rouge. Vous pourrez ensuite vous amuser. Vos actions ne seront pas comptabilisées comme une étape. Prenons l'exemple des données actuelles. Si nous accédons à Graph Builder et y réimportons nos données, nous pourrons observer leur aspect brut.
Vous pouvez constater que nous avons ici notre bruit de fond, qui se situe autour de mille unités RFU, et que notre réponse prédite commence à zéro. Il nous faut donc normaliser nos échantillons et supprimer le bruit de fond. Un prétraitement supplémentaire est nécessaire. Ces boutons sont très pratiques. Pour revenir au début, cliquez sur le bouton Réinitialiser. Vous y serez ramené, puis en cliquant sur Lecture, vous pourrez reprendre l'enregistrement là où il s'était arrêté.
Avant de poursuivre l'enregistrement, il est impératif de cliquer à nouveau sur le bouton « Enregistrer ». Nous devons maintenant soustraire le bruit de fond. La meilleure méthode consiste à superposer les colonnes d'échantillons. Nous allons créer un nouveau tableau en les superposant et nommer la colonne de données « RFU » (unité de fluorescence) et la colonne « échantillon ».
Ce qu'il nous faut maintenant, c'est calculer la différence entre le signal de fond et le signal de nos échantillons. Le plus simple est de sélectionner ces deux colonnes. Un clic droit permet d'ajouter une nouvelle colonne de formule. Dans l'onglet « Combiner », on trouve la différence entre ces deux colonnes. Deux options sont disponibles : « Différence en ordre inverse » et « Différence en ordre inverse ». Il faut souvent procéder par essais et erreurs pour trouver la bonne option. Un mauvais choix entraînerait des valeurs négatives. Comme vous pouvez le constater, nous avons maintenant correctement soustrait le signal de fond de nos échantillons.
Nous pouvons maintenant effectuer notre ajustement pour calculer la constante de vitesse. Nous allons dans Analyser, puis Modélisation spécialisée. Nous allons ajuster un modèle non linéaire et ajouter notre formule de prédiction (issue de notre colonne) à la formule du prédicteur X. Comme vous pouvez le constater, la formule que nous avons ajoutée comme attribut de colonne est déjà présente dans le modèle d'ajustement. Nos données d'échantillon corrigées de la valeur de référence serviront de réponse. Comme nous avons plusieurs échantillons, nous devons effectuer l'ajustement échantillon par échantillon.
Si nous cliquons sur OK, nous ouvrons la plateforme d'ajustement non linéaire. Nous constatons qu'un ajustement différent est disponible pour chaque échantillon. La ligne noire épaisse représente nos données expérimentales. La ligne fine représente notre formule de prédiction, qui sert de point de départ. Nous allons modifier itérativement les deux variables jusqu'à obtenir un ajustement satisfaisant. Comme pour toutes les plateformes de JMP, si vous souhaitez effectuer des opérations simultanément, maintenez la touche Ctrl enfoncée et cliquez sur « Go ». Le programme ajustera alors itérativement la réponse à l'aide d'une formule de prédiction pour chaque échantillon.
Vous pouvez maintenant constater que la ligne fine se superpose à la ligne épaisse, et que notre ajustement converge. Voici nos estimations des variables Pₘₐₓ et k. Nous allons maintenant les rassembler dans un tableau récapitulatif. Un clic droit, puis « Créer un tableau de données combinées », permettra d'extraire toutes les données de ces ajustements. Seules les constantes de vitesse nous intéressent ; nous allons donc procéder à un léger nettoyage des données.
Nous souhaitons sélectionner toutes les cellules correspondant à Pₘₐₓ. Pₘₐₓ ne nous intéresse pas ; nous pouvons donc supprimer ces lignes. De même, cette colonne du tableau n'est pas indispensable ici, et comme nous savons que le paramètre est k, nous pouvons également la fermer et la nettoyer.
Nous disposons de nos estimations, de nos constantes de vitesse, ainsi que des limites inférieure et supérieure et de leurs intervalles de confiance. Pour une meilleure lisibilité, nous pouvons réorganiser les estimations afin de les placer entre les valeurs minimale et maximale, ce qui nous donne un tableau récapitulatif clair. Supposons ensuite que nous n'ayons plus besoin des tableaux intermédiaires et que nous souhaitions les supprimer et les fermer sans les enregistrer. Nous pouvons consigner toutes ces étapes dans notre générateur de flux de travail ; voici le résultat final.
Nous pouvons maintenant arrêter l'enregistrement. Il nous faut maintenant vérifier que tout fonctionne correctement. Nous pouvons parcourir chaque étape et nous assurer qu'elle produit l'effet escompté et qu'aucune erreur ne survient. Comme vous pouvez le constater, une coche verte apparaît à chaque exécution réussie. Mais nous rencontrons maintenant un problème. Ce cas est assez fréquent lors de la création d'un tableau de données combiné. Un nouveau tableau nommé « Sans titre » est créé, contenant un numéro. À chaque itération, ce numéro est incrémenté. Le script recherche un numéro très précis, issu de l'outil de création de flux de travail.
Vous pouvez constater qu'il ne trouve pas « Untitled 7 », il vous demande donc lequel vous souhaitez utiliser. Cela révèle un petit problème, comme nous l'avons compris. Nous devons effectuer quelques modifications manuelles pour que notre script fonctionne à plusieurs reprises. Avec un peu de code, nous pouvons résoudre ce problème. Nous pouvons ouvrir le script pour chaque étape. Si nous revenons à la dernière étape qui s'est exécutée avec succès, nous allons définir cette table de données comme une variable, afin de ne pas dépendre d'un numéro « untitled ». Appelons-la « dt ».
On définit dt comme « Tableau de données actuel ». Il faut ensuite procéder étape par étape. Partout où le tableau sans titre est appelé, on le remplace par notre nouvelle variable. Cette opération peut se répéter plusieurs fois ; il suffit donc de remplacer chaque occurrence de « table sans titre » par dt. Une fois le code écrit, on effectue un nouveau test pour vérifier son bon fonctionnement. Ce n'est peut-être pas la méthode la plus élégante, mais elle nous permet de créer notre propre script automatisé et d'apprendre à programmer.
Si nous répétons cette procédure, aurons-nous réussi cette fois-ci ? J'ai oublié une personne, Untitled 7. Nous avons exécuté le script avec succès et obtenu notre tableau récapitulatif. Nous pouvons enregistrer ce flux de travail ou cliquer sur la flèche rouge pour exporter et enregistrer dans la fenêtre des scripts. Comme je l'ai dit, nous souhaitons disposer d'un script générique réutilisable par différents scientifiques.
Pour l'instant, ce script est encore assez spécifique car il ouvre des fichiers bien précis. Avec une simple ligne de code supplémentaire, nous pouvons le rendre beaucoup plus général. Je vais définir une variable F, et je vais simplement lui attribuer la valeur « choisir un fichier ». Cette commande nous permettra de sélectionner le fichier à utiliser si nous remplaçons le chemin d'accès spécifique par la valeur de la variable F. Vérifions le script pour voir s'il fonctionne maintenant.
Nous allons cliquer sur la flèche verte pour exécuter le script. Il nous demande de sélectionner notre fichier. Voyons si cela fonctionne. Et voilà ! C'était tellement rapide que vous n'avez même pas vu ce qui s'est passé. Le script a exécuté en un rien de temps toutes les étapes que nous avons écrites pour interagir avec l'outil de création, et il nous a fourni un tableau récapitulatif. C'est une façon de créer des scripts réutilisables qui automatisent le traitement de nos données. Nous venons de réaliser en quelques secondes un processus qui me prenait 10 minutes auparavant, ce qui représente un gain de temps considérable en R&D.
Maintenant que nous vous avons montré comment générer le flux de travail, prenons un exemple de traitement de données. Il s'agit ici d'un test d'activité enzymatique. Comme indiqué, ce test utilise la fluorescence pour la lecture de l'activité enzymatique. Le rôle du scientifique est de préparer une plaque de test. Sur cette plaque, les différents échantillons à analyser sont représentés en jaune. Chaque échantillon est répété cinq fois dans les puits.
Nous avons ensuite une colonne de contrôles positifs, dont les données servent à extraire le paramètre Pₘₐₓ pour l'ajustement. Des contrôles négatifs, comme dans toute expérience rigoureuse, sont également inclus, ainsi qu'une colonne nommée dt qui fournit la mesure de fluorescence avant le début de la réaction. Ceci permet d'évaluer le bruit de fond, qui peut être soustrait pour aligner les données sur l'origine de l'axe des ordonnées. À ce stade, l'utilisateur a préparé la plaque. Celle-ci est confiée à un lecteur de plaques qui permet le déroulement de la réaction, traite la plaque, génère les données de fluorescence et les enregistre dans un fichier Excel. Parallèlement, l'utilisateur aura rempli un tableau d'identification des échantillons avec les informations relatives à chaque échantillon.
C’est à ce moment que le pipeline automatisé entre en jeu. Il importe les données Excel et les combine dans le tableau d’identification des échantillons, afin que chaque puits soit associé à l’échantillon correspondant. Une normalisation du temps et de la réponse est effectuée, de sorte que les courbes cinétiques débutent à l’instant zéro et à l’origine de l’axe des ordonnées. Un ajustement exponentiel est ensuite réalisé, suivant la cinétique décrite précédemment. La vitesse de réaction est extraite et moyennée sur cinq essais. L’essai divergent est exclu, ce qui donne un N final de 4.
Un test statistique, par exemple une ANOVA dans ce cas précis, sera ensuite utilisé pour comparer les résultats des différents échantillons. De plus, un dossier nommé « process dump » sera créé au début du processus. Ce dossier contiendra toutes les étapes intermédiaires du pipeline, ce qui facilitera le dépannage en cas de dysfonctionnement du pipeline automatisé.
Le résultat consiste essentiellement à transformer les données brutes, de manière itérative, en résultats compréhensibles, ici représentés par une ANOVA. La première fois que l'expérimentateur utilise cette approche, la génération du processus de réduction des données peut prendre environ 45 minutes. Une fois le script prêt, ce processus s'exécute en une minute environ.
Si l'on considère qu'il nous a fallu plus d'une centaine de plaques pour développer un seul réactif de la cartouche que j'ai présentée en début de séminaire, vous pouvez facilement imaginer que nous avons économisé au moins 75 heures sur notre processus de développement, accélérant ainsi le développement de la technologie XLEAP. Je retourne maintenant sur JMP pour vous montrer le fonctionnement du processus de traitement des données d'activité enzymatique. J'exécute le script. Celui-ci me demandera de sélectionner le dossier et le fichier, comme indiqué précédemment.
Voilà, le fichier est ouvert et exporté. Nous disposons maintenant de données supplémentaires extraites du fichier. Plus précisément, celles de la colonne 2 seront utilisées. Il s'agit des valeurs de fluorescence à l'instant zéro, qui serviront à générer un bruit de fond et à aligner chaque courbe temporelle sur l'origine de l'axe des ordonnées. Dans un instant, les données seront exportées et normalisées, ce qui nous donnera un tableau de courbes temporelles normalisées. Sur chacune d'elles, nous avons appliqué le signal à l'instant zéro, soit environ 1 %, et ces données seront ensuite empilées.
Un modèle, le modèle de prédiction, va être ajouté. Voilà. Ce modèle prend en compte chaque point temporel et chaque puits de la plaque, le type de fluorescence attendu, et le compare aux valeurs mesurées. L'interface d'ajustement non linéaire s'ouvrira et permettra l'ajustement automatique de chaque courbe de données temporelles. Vous pouvez maintenant voir les différentes courbes temporelles, comme Elliot l'a montré précédemment, apparaître à l'écran. L'ajustement sera automatique dans une seconde.
Le paramètre de vitesse de réaction, k, sera extrait et présenté sous forme de tableau. L'ajustement a été effectué sur l'ensemble des séries temporelles fournies, les données ont été extraites et le script m'indique maintenant que des données sont déjà disponibles et présentées sous forme d'ANOVA. Si vous avez remarqué que l'exécution du script au ralenti a pris environ une minute, ce qui m'a permis de vous montrer étape par étape le déroulement des opérations, sachez qu'une fois le ralenti terminé, le script s'exécute instantanément et les données sont prêtes.
Notre présentation a mis en lumière deux points essentiels. Premièrement, il est préférable de travailler plus intelligemment, et non plus intensément. Nous espérons vous avoir convaincus que l'utilisation de scripts JMP et le traitement automatisé des données peuvent considérablement accroître la productivité de votre R&D. En automatisant les tâches les plus fastidieuses, nous libérons du temps pour vos scientifiques et ingénieurs afin qu'ils puissent se concentrer sur l'interprétation des résultats et innover en matière de produits et de procédés. Deuxièmement, nous espérons vous avoir également convaincus qu'une expérience minimale n'est pas nécessaire.
Dans l'exemple que j'ai présenté précédemment, deux lignes de JSL ont suffi pour créer un script réutilisable. JMP Workflow Builder change véritablement la donne : il permet d'écrire ses propres scripts personnalisés sans être un expert en JSL. Nous tenons également à remercier tous nos collègues pour leur contribution, et plus particulièrement Steve Mason de l'équipe de chimie. Merci à tous pour votre attention.
Merci.