Okay. Danke fürs Einschalten. Ich werde heute über JMP sprechen, insbesondere über dessen Einsatz zur Automatisierung analytischer Workflows bei Amirys. Ich werde aber auch komplexere Prozesse betrachten und die Automatisierung von Daten mithilfe der nativen JMP-Plattformen allgemein anwenden. Bevor ich loslege, möchte ich mich kurz vorstellen. Mein Name ist Stefan. Ich bin Associate Director of Data Science bei Amirys und verfüge über 15 Jahre Erfahrung in der Life-Science-Branche mit sehr unterschiedlichen Schwerpunkten. Ich habe in zahlreichen Chemielaboren, Fermentationslaboren und Hochdurchsatz-Screening-Teams gearbeitet. Meine Tätigkeiten umfassten Qualitätssicherung, Statistik, Datenanalyse und jetzt natürlich Data Science. Ich bin von allem begeistert, was mit Daten zu tun hat – von der Speicherung bis hin zur Nutzung und dem Zugriff. Aktuell unterstütze ich die gesamte wissenschaftliche Community von AMRA mit ihren Tools und Analysemethoden. Heute werde ich drei Hauptpunkte behandeln. Ich werde Ihnen kurz den Hintergrund und Kontext der Fallstudie erläutern, anhand derer ich einige Automatisierungsbeispiele durchgehen werde. Wir fangen ganz einfach an.
Wie können wir JMP nutzen, um Analyse-Workflows zu automatisieren? Dabei handelt es sich möglicherweise um Analysen, die Sie täglich durchführen und die Sie effizienter gestalten möchten. Im letzten Teil befassen wir uns mit fortgeschrittener Automatisierung und komplexeren Workflows. Wir betrachten beispielsweise die Analyse von Workflows, die von einem größeren technischen Team genutzt werden. Wie können wir diese Analysen so verallgemeinern, dass sie sowohl die Datenverarbeitung und -erfassung als auch die Analyse selbst unterstützen? Unsere heutige Fallstudie stammt von meinem Arbeitgeber, Amirys. Amirys ist ein Unternehmen im Bereich der synthetischen Biologie. Wir sind spezialisiert auf die Programmierung von Hefe und die industrielle Fermentation, bei der wir die Hefe mit Zucker füttern und diesen in reine Inhaltsstoffe oder Chemikalien umwandeln. Unser Hauptsitz befindet sich in Emeryville, Kalifornien, und der Großteil unserer Produktion findet in Brasilien statt. Unsere heutige Fallstudie konzentriert sich jedoch nicht auf die Produktion, sondern auf den Forschungsbereich. In Emeryville verfügen wir über eine Reihe hochautomatisierter Labore, die wir unsere Screening- und Analyselabore nennen. Dort untersuchen wir monatlich Hunderttausende von Stämmen in diesen 96 Wandplatten.
Dort sehen Sie ein Bild von Barcodes auf Platten. Diese verwenden wir für die Verkleinerung der Fermentationsprozesse. Sie dienen uns als erste Testumgebung, um die Produktionsmenge und die Art der produzierten Stoffe der Stämme zu ermitteln. Wir suchen nach spezifischen Phänotypen dieser Stämme. Wir kultivieren sie in 96-Well-Platten und nutzen anschließend verschiedene Analysemethoden, um Messwerte, oft auch multidimensionale, in den Wells der Platten zu generieren. Wir verfügen außerdem über zahlreiche interne Datenbanken. Viele Daten sowie die zugehörigen Metadaten werden in Anwendungsdatenbanken und einem Data Warehouse gespeichert, auf die wir mit Tools wie JMP zugreifen können. Hier kommt JMP ins Spiel. Im letzten Schritt dieses Screenings screenen wir natürlich viele Stämme und generieren eine große Datenmenge. Diese Daten müssen wir nun auswerten, um zu entscheiden, welchen Stamm wir für die Fermentation in einem Reaktor und gegebenenfalls für die Produktion in Brasilien empfehlen.
Wir beginnen mit einfacher Automatisierung in JMP. Mein heutiges Ziel ist es, Ihnen, falls Sie noch nie Automatisierungen in JMP durchgeführt oder diese Plattformen überhaupt genutzt haben, diese auf eine zugängliche und weitgehend codefreie Weise vorzustellen und Ihnen ein grundlegendes Verständnis für den Aufbau dieser Plattformen zu vermitteln. Außerdem möchte ich Ihnen meine eigenen Erfahrungen im Umgang mit diesen Automatisierungsplattformen und die Erkenntnisse, die ich durch das Lernen von anderen gewonnen habe, weitergeben.
Ich sage immer: Wenn man etwas mehr als zehnmal macht, lohnt sich die Automatisierung wahrscheinlich. Gerade für Einsteiger in die Automatisierung ist der beste Einstieg die eigene Analyse. Der Vorteil dabei – oder wenn man damit sehr vertraut ist – ist, dass man sich selbst Feedback geben kann. Natürlich sind solche Analysen meist einfacher als die umfassendere Analyse eines größeren Teams. In unserem Beispiel geht es um eine einfache Einzelmessung auf einer Petrischale. Wir haben eine serielle Vermehrung der Petrischalen von der Vorkultur bis zur Produktion. Auf der zweiten Petrischale nehmen wir eine Einzelmessung vor. In diesem Beispiel würden wir sagen: „Wir führen genau diesen Versuchstyp immer wieder durch.“ Jedes Mal importieren wir die Daten in JMP. Wir fügen eine berechnete Spalte hinzu, filtern die Daten nach dieser Spalte und generieren anschließend visuelle und statistische Tests, die uns bei der Entscheidungsfindung helfen. Wenn man es einmal macht, ist es nicht viel Zeitaufwand, aber wenn man das jeden Tag wiederholt, summiert sich das.
Bevor wir uns mit der Automatisierung beschäftigen, möchte ich kurz auf strukturierte Daten eingehen, die eine Grundvoraussetzung für die Automatisierung darstellen. Es wird Ihnen die Arbeit deutlich erleichtern, wenn die Standardisierung und Strukturierung bereits im Vorfeld erfolgt, also beim Sammeln und Importieren der Daten in eine Datenbank oder als CSV-Dateien. In unserem Fall ist die Datenbank bereits strukturiert. Viele dieser Datenverarbeitungsschritte können Sie natürlich in JMP durchführen, wobei Sie oft von der jeweiligen Anwendung oder Analyse abhängig sind. Überlegen Sie sich aber immer, woher die Daten stammen. Je früher Sie die Datenquelle ansprechen, desto besser. Wenn Sie Datenbankdaten verwenden, empfehle ich den Abfrage-Generator. Darauf gehen wir heute nicht näher ein. Das ist meine allgemeine Empfehlung. Die Basis und das Fundament der Skripterstellung in JMP bildet das Protokoll. Ob Sie es wissen oder nicht: JMP zeichnet standardmäßig immer Ihre Aktionen auf, also welches JSL-Skript ausgeführt wird, um die Aktionen zu generieren, die Sie durch Klicken auf die Benutzeroberfläche ausführen. Wenn Sie im Menü „Ansicht“ auf „Protokoll“ klicken, wird das Protokoll angezeigt, in dem die meisten Ihrer Schritte protokolliert sind.
Wenn Sie auf einen beliebigen Schritt klicken, wird Ihnen der JSL-Code angezeigt, der zu dessen Ausführung verwendet wurde. In diesem Beispiel fügen wir im ersten Schritt eine berechnete Spalte hinzu. Ich habe darauf geklickt und den entsprechenden JSL-Code markiert. Dies ist eine schnelle Möglichkeit, den für einen Schritt ausgeführten JSL-Code anzuzeigen. Sie können den Code direkt aus dem Protokoll ausführen oder vorherigen Code erneut ausführen. Allerdings empfehle ich nicht, das Protokoll für die Automatisierung von Abläufen zu verwenden. Es ist lediglich die Hauptquelle des Codes. Eine Möglichkeit, Code aus dem Protokoll in beispielsweise eine Datentabelle zu übertragen, besteht in der Verwendung von Datentabellen-Skripten. Dies war lange Zeit die gängige Methode zur schrittweisen Automatisierung in JMP. In diesem Beispiel habe ich die Datentabelle aufgerufen, auf den kleinen roten Hotspot geklickt und ein neues Skript generiert. Dadurch wurde ein leeres Fenster geöffnet, in das ich zwei Codeschritte direkt aus dem Protokoll eingefügt habe: einen zum Erstellen der neuen Spalte und einen zum Festlegen einer Formel für diese Spalte.
Sie könnten den Code noch weiter optimieren. Das ist aber völlig optional. In späteren Abschnitten, wenn wir komplexere Beispiele behandeln, sollten Sie sich jedoch überlegen, wie Sie Ihren Code möglichst wartungsfreundlich und sauber gestalten können. In diesem Fall haben wir den Code in zwei Schritten optimiert: Zuerst haben wir die redundante Datentabellenreferenz entfernt. Im zweiten Schritt haben wir den Code weiter komprimiert, indem wir die Spalte „Spalte 21“ nicht erst umbenannt, sondern sie gleich richtig benannt haben. Alle diese Elemente funktionieren und erfüllen dieselbe Funktion. Sie werden in diesem Fall keinen Leistungsunterschied feststellen, aber der Code wird dadurch sauberer und wartungsfreundlicher. Wenn Sie JSL noch nicht kennen und diesen Code sehen, fragen Sie sich vielleicht: Was soll das überhaupt? Sie können diese Elemente in Ihr bevorzugtes LLM einfügen. Wir verwenden Copilot, ChatGPT oder ein anderes Tool. Sie haben den JMP Learn Bot, falls Sie Zugriff darauf haben, und können nach einer Erklärung fragen: „Hey, was macht dieser Code?“ Das gibt Ihnen in der Regel einen guten Überblick darüber, was er bewirkt.
Wir haben Daten aus dem Log extrahiert – genauer gesagt, Code aus dem Log und ihn in die Datentabellen-Skripte eingefügt. Das ist die einfachste Methode, JSL automatisch zu generieren. Sie können es hier sehen. Wir haben es wie benannt: Schritt eins, berechnete Spalte hinzufügen. Auf den meisten Plattformen gibt es weitere, einfachere Möglichkeiten, diese Tabellen-Skripte zu generieren und das Skript zu speichern, das eine bestimmte Ausgabe erzeugt hat. Viele Plattformen bieten diese Optionen unter dem roten Hotspot an. Dort finden Sie ganz unten die Option „Skript speichern“ mit verschiedenen Optionen. Sie können es einfach in die Zwischenablage oder direkt in die Datentabelle speichern, was wir jetzt tun werden, sowie weitere Optionen nutzen. So lässt sich JSL ganz einfach direkt über die Benutzeroberfläche automatisch generieren. Wir haben es in der Datentabelle gespeichert. In diesem Fall haben wir lediglich den Namen des Skripts geändert (Schritt zwei, Datenfilter) und mit der Analyse fortgefahren. Das können wir hier in unserem letzten Schritt tun, nämlich der Erstellung eines Y-x-Plots, und wir wenden außerdem einen Dunnett-Test mit einer Referenzgruppe an.
Wir gehen also wieder zum roten Hotspot, wählen „Skript speichern“ und speichern es in der Datentabelle. Dadurch entsteht ein Pseudo-Workflow mit drei Automatisierungsschritten: Wir fügen eine berechnete Spalte hinzu, wenden einen Datenfilter an und führen anschließend eine Einweganalyse mit einem Dunnett-Test durch. So arbeitet man lange mit Tabellenskripten, bis mit JMP 16 oder 17 die Workflow-Funktion eingeführt wurde. Mit Workflows lassen sich Tabellenskripte um zusätzliche Funktionen erweitern. Workflow ist eine neue, eigenständige Plattform in JMP. Sie ist über „Datei“ > „Neu“ > „Workflow“ zugänglich. Zahlreiche Funktionen vereinfachen die Workflow-Entwicklung und verbessern die Benutzerfreundlichkeit. Beispielsweise gibt es eine Schaltfläche, mit der alle Schritte eines Workflows ausgeführt werden können. Es gibt eine Schrittaufzeichnung, die Ihre Aktionen in JMP aufzeichnet und automatisch dem Workflow hinzufügt. Sie können Skripte direkt im Workflow kommentieren und Elemente wie Logikgatter, Interaktivität, Benutzereingabeaufforderungen und vieles mehr hinzufügen, worauf wir heute leider nicht alles eingehen können.
Ich zeige Ihnen einige Beispiele, insbesondere in der fortgeschritteneren Version. Wir können nun diese Tabellenskripte verwenden, um einen Pseudo-Workflow zu erstellen. Stellen Sie sich vor, wir hätten diesen Workflow erstellt, bevor es Workflows gab. JMP hat dann die Workflow-Plattform hinzugefügt, und wir haben ihn nun dem Workflow-Builder hinzugefügt. Ich habe hier lediglich drei Schritte hinzugefügt. Ich habe den JSL-Code jedes Schritts eingefügt, und Sie sehen, dass wir genau die gleichen drei Schritte im Workflow haben wie in den Datentabellenskripten. Ich zeige Ihnen hier eine kurze Demo, wie das mit unseren echten oder Demodaten aussieht. In diesem ersten Beispiel haben wir unsere strukturierten Daten. Wir haben eine Reihe von Messungen und deren Messwerte. Wir möchten nun diese drei Schritte ausführen. Wie Sie sehen, müssen Sie bei diesem Ansatz mit Datentabellenskripten nur nacheinander die einzelnen Schritte anklicken. Ich klicke darauf. Wir haben nun diese berechnete Spalte hinzugefügt. Wir wenden einen Datenfilter an, der daraufhin angezeigt wird und diesen Filter anwendet. Anschließend generieren wir eine Einweganalyse für dieses spezifische Experiment.
Ganz einfach, oder? Das funktioniert einwandfrei. Für so etwas Simples wie dieses ist es ideal. Brauchen Sie einen Workflow? Oder etwas Komplexeres? Nicht unbedingt. Wenn es so funktioniert, ist das super. Wir könnten das zurücksetzen, und Sie sehen, dass ich das hier manuell machen muss. Wir löschen den Zeilenstatus, stellen sicher, dass der Datenfilter geschlossen ist, und sehen uns dann den Workflow an. Auch dieser besteht aus drei Schritten. Der Vorteil hier ist, dass ich den Code jetzt automatisch sehe. Das geht hier nicht. Hier müsste ich mit der rechten Maustaste klicken, auf „Bearbeiten“ gehen und die Definition in einem neuen Fenster öffnen. Bei dieser anderen Option sehe ich den Code für jeden Schritt. Ich kann hier einfach auf „Start“ klicken, und alle drei Schritte werden gleichzeitig ausgeführt. Die kleinen grünen Häkchen zeigen mir an, dass alles fehlerfrei lief. Sie sehen unsere neue Spalte. Wir haben einen Filter angewendet, und die gleiche Analyse wurde geöffnet. Es ist etwas übersichtlicher. Im nächsten Abschnitt werden wir etwas genauer auf die weiteren Vorteile eingehen, die Ihnen die Nutzung des Workflows bietet.
Eine Sache, die ich kurz ansprechen möchte, ist die Aufnahmetaste in der Demo. Sie ist wirklich toll, besonders wenn man sich mit JSL nicht auskennt oder überhaupt nicht programmieren kann. Das ist der einfachste Weg, eigene Automatisierungen zu erstellen. Man muss nur auf „Aufnahme“ klicken, und alles, was man auf dieser Plattform macht, wird im Workflow erfasst. Ich zeige euch ein einfaches Beispiel: Ich zeichne eine Verteilung meiner Messwerte, die hier eine bestimmte Verteilung erzeugt. Wir gehen davon aus, dass diese Verteilung eine sinnvolle Bedeutung hat. Wenn ich zu meinem Workflow zurückkehre, seht ihr jetzt einen neuen Schritt. Hier ist unser JSL-Skript. Ich kann es umbenennen, Notizen hinzufügen, es bearbeiten usw. Die Aufnahmetaste ist wirklich eine praktische Funktion des Workflow-Builders. Gehen wir noch einen Schritt weiter. Vielleicht habt ihr etwas für eure Couch oder eine ganz bestimmte Anwendung automatisiert. Vielleicht funktioniert es für einen bestimmten Experimenttyp. Wie können wir es nun auf komplexere Prozesse anwenden? Genau diese Frage stand vor uns.
Bei Amirys haben wir viele verschiedene experimentelle Ansätze und möchten diese idealerweise mit so wenigen Workflows wie möglich unterstützen. Wir wollen nicht für jede Iteration einen eigenen Workflow erstellen, da dies die Wartung unmöglich und die Entwicklung sehr aufwendig macht. Für fortgeschrittenere Entwicklungsprojekte empfehle ich – und das habe ich in einem Video der JMP-Community gesehen – die Verwendung von JMP-Projekten zur Organisation der Entwicklungsumgebung. Ein Problem bei der Automatisierung komplexer Prozesse ist die Vielzahl an Datentabellen, Fenstern und Pop-ups, die schnell unübersichtlich werden. Mit Projekten lässt sich die Entwicklung übersichtlich gestalten und später auch das Tool selbst nutzen.
Hier sind einige der Standard-Projektplattformen geöffnet, wie z. B. Arbeitsbereich und Inhalte. Ich habe ein Journal als Platzhalter hinzugefügt. Hier werden alle vom Workflow geöffneten Fenster als neue Tabs und nicht als neue Fenster auf meinem Desktop geöffnet. Sie können dieses Journal natürlich auch für Dokumentationen oder Anleitungen verwenden. Rechts befindet sich mein eigentlicher Workflow. Unten habe ich außerdem mein Protokoll hinzugefügt.
Wenn ich Fehler beheben oder Fehlermeldungen genauer untersuchen muss, habe ich das Protokoll direkt zur Hand und kann alles in einem einzigen Fenster erledigen. So zeige ich diesen Workflow auch in diesem Projekt. Das allgemeine Feedback der Nutzer ist sehr positiv, da die Darstellung nicht so viele Tabellen und Visualisierungen enthält. Wenn wir über die Generalisierung von Automatisierung sprechen, konzentrieren wir uns auf Anwendungen mit hoher Wirkung, denn die Generalisierung von Automatisierung ist nicht trivial – egal ob es sich um Datenautomatisierung oder physische Automatisierung handelt, falls Sie das schon einmal in einem Labor oder in der Fertigung gemacht haben, nicht wahr? Es erfordert viel Aufwand, Geld, Arbeit und Zeit. Wenn Sie Daten-Workflows automatisieren möchten, priorisieren Sie deren Anwendung zur Standardisierung von Workflows oder nutzen Sie sie als Mittel zur Förderung der Standardisierung. Sagen Sie: „Sehen Sie, wenn wir das standardisieren, können wir auch diese wirklich mühsame Datenverarbeitung automatisieren, die Sie täglich durchführen.“
Daten-Workflows erfordern oft Flexibilität, sei es aufgrund des Prozesses selbst oder aufgrund der unterschiedlichen Datenanalyse. Hier bietet sich die schrittweise Automatisierung an. Das ist die große Stärke von JMP, denn ich werde oft gefragt: „Wenn Sie automatisieren, warum nutzen Sie dann nicht einfach Python? Warum nicht eine rein codebasierte Plattform?“ Das Problem ist: Sobald etwas rein codebasiert ist, entsteht eine hohe Einstiegshürde. Solange die Automatisierung nicht vollständig gelingt, wird sie, sobald der Benutzer an einem bestimmten Punkt eingreifen muss und beispielsweise Python-Kenntnisse vorausgesetzt werden, zu einem enormen Hindernis – selbst in technisch anspruchsvollen Kreisen wie den Wissenschaftlern, mit denen ich zusammenarbeite.
JMP ist wirklich praktisch, weil man nur den ersten Schritt automatisieren kann und der Endnutzer dann direkt in JMP arbeitet. Er hat Zugriff auf die Benutzeroberfläche und kann damit arbeiten. Er hat freie Hand und kann die Automatisierung optimal nutzen. Natürlich wollen wir die wirkungsvollsten Optimierungsmöglichkeiten identifizieren, denn das erfordert Aufwand. In unserem Fall haben wir uns Plattenexperimente angesehen und die Wissenschaftler gefragt: „Wie viel Zeit benötigen Sie für die Datenabfrage?“ Wir stellten fest, dass dies sehr manuell, mit Kopieren und Einfügen und sich wiederholenden Schritten, erfolgte.
Unser Team bestand aus 17 Wissenschaftlern. Wir führten eine kurze Umfrage durch und schätzten, dass wir etwa die Arbeitszeit einer ganzen Person – und zwar eine ziemlich teure – für all das aufwenden. Das war für uns die Gelegenheit zu sagen: „Hey, vieles davon sieht manuell, repetitiv und automatisierbar aus.“ Lasst es uns versuchen. Die größte Herausforderung ist definitiv die Komplexität. Bei der Automatisierung gibt es zwei Achsen: die Anzahl der Gesamtschritte im Workflow und die Anzahl der Variationen in jedem Schritt. Eine Variation ist im Grunde eine Abzweigung. Mir gefällt das Diagramm rechts, weil es sehr schnell zu einem exponentiellen Problem werden kann, wenn man versucht, zu viele mögliche Iterationen oder Variationen eines bestimmten Prozesses zu lösen. Man muss sich vorher fragen: Ist das überhaupt machbar? Und wenn nicht, was kann man tun, um es machbar zu machen? Entweder man beseitigt Abweichungen durch Standardisierung, wie bereits erwähnt, oder man sagt: „Dieser Sonderfall wird durch diese Datenanalyse nicht unterstützt.“
Sie können sogar Fehlermeldungen hinzufügen, wie Sie in Ihrem Workflow sehen werden. Sie können auch Schritte durch Automatisierungsausstiege komplett eliminieren. Genau das meinte ich: die Kontrolle dem Benutzer zu überlassen. Bei einem besonders anspruchsvollen, einzigartigen Qualitätskontrollschritt können Sie den Workflow pausieren, dem Benutzer die Möglichkeit geben, die notwendigen Schritte durchzuführen, und ihn anschließend fortsetzen lassen. Es gibt verschiedene Optionen, die Sie in Betracht ziehen sollten, aber eine gute Planung ist bei der Automatisierung definitiv von Vorteil. In unserem Fall haben wir uns diese Plattenprozesse angesehen, und dies ist das ursprüngliche Beispiel, das ich genannt habe. Bei einer einzelnen Plattenausbreitung führen wir eine einzelne Messung durch und nennen diesen Prozess „Ausbreitung 1“.
Als wir uns genauer ansahen, wie sich die Ergebnisse von Experiment zu Experiment unterscheiden, stellten wir fest: „Manchmal nehmen wir zwei Messungen an dieser Platte vor, nicht nur eine.“ Manchmal messen wir auch an der ersten Platte der seriellen Propagation. Manchmal nehmen wir zwei Messungen an beiden Platten vor. Manchmal teilen wir die Platten sogar auf. Wir vergleichen nicht nur eins zu eins, sondern eins zu zwei oder eins zu vielen.
Wir nehmen Messungen daran vor. Manchmal teilen wir sie auf und führen an beiden unterschiedliche Messungen durch. Ich erwarte nicht, dass Sie das im Auge behalten, aber ich möchte Ihnen verdeutlichen, dass unser Prozess sehr variabel ist. Ich zeige Ihnen hier nur einige Beispiele. Wir haben Dutzende verschiedener Varianten unseres Prozesses. Wir haben uns hier gerade die Komplexität des Prozesses selbst angesehen, des Prozesses in unseren Laboren, der die Daten generiert. Wir hatten uns noch gar nicht Gedanken darüber gemacht, wie standardisiert die Art und Weise ist, wie andere ihre Daten betrachten und analysieren. Welche statistischen Tests werden verwendet? Werden zusammenfassende Kennzahlen, Median oder Mittelwert verwendet?
Die Komplexität kann schnell überwältigend werden, daher ist es wichtig, sich im Vorfeld gründlich zu informieren. Wir arbeiten an einer Lösung, die sich noch in der Entwicklung befindet. Sie ist zwar bereits im Einsatz, wird aber kontinuierlich verbessert. Ich empfehle daher, zunächst den minimalen, aber dennoch nützlichen Funktionsumfang zu definieren und regelmäßig Feedback von den Endnutzern einzuholen. Für unsere Flugzeuganalyse haben wir diesen allgemeinen Ansatz entwickelt.
So sieht ein komplexerer Workflow aus. Wir passen die Daten direkt aus unserer Datenbank an und fordern den Benutzer auf, diese Daten anhand des gewünschten Experiments zu filtern. Wir führen umfangreiche Datenaufbereitungen durch, korrigieren Datentypen und Namenskonventionen und sorgen für Konsistenz. Basierend auf diesem Prozess teilen wir die Daten auf. Wir haben die serielle Propagation beobachtet. Wir müssen verstehen, welche Messung zu welcher Platte gehört. Wir führen Prüfungen durch und suchen nach Prozessen, die wir möglicherweise nicht unterstützen, oder nach Messungen, die von dieser Automatisierung nicht unterstützt werden. In diesem Fall geben wir eine Fehlermeldung aus und informieren den Benutzer. Wir führen weitere Datenaufbereitungen durch, um Pivot-Tabellen zu erstellen. Wir bieten dem Benutzer sogar die Möglichkeit, Offline-Daten hinzuzufügen. Benutzer haben möglicherweise manuelle Annotationen ihrer Genotypen. Abschließend generieren wir einen Satz von Standardvisualisierungen und -analysen.
Ich erkläre Ihnen das genauer und zeige Ihnen, wie das aussieht. Hier, wie ich bereits gezeigt habe, befinden wir uns im Projekt. Wir haben den Inhalt unseres Arbeitsbereichs. Wir haben unser Journal. Hier unten befindet sich unser Protokoll. Ich werde das Protokoll jetzt schließen, da wir es für die Demo nicht benötigen und es wertvollen Platz auf unserem Bildschirm einnimmt.
Wir haben hier unseren Workflow. Ich habe die einzelnen Schritte so verständlich wie möglich gestaltet, damit Sie deren Funktion nachvollziehen können. Sie können die Schritte auch aktivieren oder deaktivieren, in diesem Fall speziell für diese Konferenz. Wir importieren statische Daten, da wir keine Verbindung zu unseren Firmendatenbanken herstellen, um echte experimentelle Daten abzurufen. Die Rohdaten liegen uns direkt vor. Sie sehen hier auch einige Logikgatter, nicht wahr? Es gibt diese Wenn/Aus-Anweisungen, mit denen Sie logische Schalter oder verschiedene Pfade, also Verzweigungen in der Zeile, definieren können, um festzulegen: Wenn die Daten so aussehen, führe dies aus. Wenn nicht, führe jenes aus.
Ich starte das jetzt. Wir importieren die Daten. Ich habe hier eine vielleicht etwas passiv-aggressive Aussage, die nur ein bisschen... Man kann kleine Pop-ups einblenden, um dem Benutzer Feedback zu geben. Ich sagte: „Super. Sie haben nur Messwerte der Kategorie B für Ihre PC-Platten, richtig? Das ist das Einzige, was wir zulassen. Gut gemacht.“ Sie haben auf „OK“ geklickt. Der Vorgang läuft weiter. Jetzt geben wir ihnen eine Frage: „Möchten Sie manuell erstellte Metadaten hinzufügen?“
Dies sind üblicherweise Genotypdaten für diesen Datensatz. Beim ersten Durchlauf klicke ich einfach auf „Nein“. Tatsächlich sind hier noch keine Daten vorhanden. Ich denke mir dann: „Okay, wir lassen das einfach mal laufen.“ Jetzt haben wir alles generiert und durchlaufen. Alle Häkchen sind grün. Links sehen Sie mehrere Datentabellen sowie einige Standardvisualisierungen der Leistung und eine Normalisierung, die wir für die Stammselektion auf den Platten durchführen.
Das wirklich Tolle daran ist, dass ich hier auf diesen Button „Zurücksetzen“ klicken kann. Dadurch werden alle vom Workflow geöffneten Prozesse geschlossen und auf den Anfang zurückgesetzt. Jetzt habe ich den Workflow zurückgesetzt. Sie sehen, wir sind wieder beim Journal und den kleinen Pfeilen am Anfang. Ich kann den Workflow jetzt erneut ausführen. In derselben Eingabeaufforderung wähle ich „Ja“. Das führt mich auf einen etwas anderen Pfad. Ich wähle „Ja“, um manuelle Daten hinzuzufügen. Nun erscheint eine weitere Eingabeaufforderung, in der ich gefragt werde, welche Spalte ich zum Verknüpfen der Daten verwenden möchte. Ich verwende diese X-Nummer, die eine eindeutige Kennung ist.
Wir verwenden vier Stämme. Klicken Sie auf „OK“. Es erscheint die Meldung: „Hey, ich sehe das nicht in Ihrem Datensatz.“ Das stimmt natürlich, denn es handelt sich um meine Offline-Daten. Ich gehe zu meinem Computer und suche die Daten. In diesem Fall habe ich sie in einer CSV-Datei gespeichert. Wir fügen sie nun hinzu und lassen das Skript laufen. Sie sehen, dass wir an diesem Punkt dasselbe Ergebnis erhalten. Wir haben die Normalisierung und die Boxplot-Visualisierung der Messung mit Graph Builder. Zusätzlich haben wir aber noch einige weitere Informationen hinzugefügt … Es gibt Spalten wie „Promotormutationen“ und andere Informationen aus den Offline-Daten, die wir mit den Hauptdaten verknüpft haben.
Diese allgemeinen Workflows können sehr leistungsstark sein. Wenn ich sie veröffentliche, speichere ich sie auch in einem Projekt. Es handelt sich um den Workflow innerhalb eines Projekts. Ich füge hier die Benutzerdokumentation sowie alle relevanten Hyperlinks zu anderen internen Dokumenten hinzu. Ein Benutzer klickt auf „Start“, wird aufgefordert, seine Experiment-ID einzugeben. Dadurch werden die abgerufenen Daten dynamisch angepasst, und der Workflow wird anschließend ausgeführt.
Sie werden feststellen, dass ich hier auch Fehlermeldungen einbaue. Diese sind für spezielle Fälle gedacht, in denen wir dies nicht unterstützen oder es sich um einen unerwarteten Experimenttyp handelt. Ein weiterer Tipp: Wenn Sie generalisieren möchten, sollten Sie beachten, dass viele Tabellen- und Spaltenreferenzen standardmäßig automatisch generiert werden. Ob Sie nun eine Aufnahmetaste oder das rote Dropdown-Menü der Plattform verwenden – diese Referenzen sind in der Regel explizit. Dort steht dann beispielsweise „Datentabelle [Name], Spalte [Name]“. Das ist bei der Generalisierung nicht immer skalierbar.
Eine Sache, die Sie lernen und möglicherweise manuell im JSL-Code anpassen müssen, betrifft Spalten- und Datentabellenreferenzen: Wie verwaltet und dynamisch gestaltet man diese? Die Anzahl der importierten Spalten kann je nach Benutzerdaten variieren, und das muss unterstützt werden. Sobald Sie sich mit diesem Thema auseinandersetzen, werden Sie mit ziemlicher Sicherheit JSL-Code schreiben müssen. Aber auch hier gilt: JMP übernimmt 90 % der Arbeit für Sie, indem es Workflows aufzeichnet, Protokolle führt und alle wichtigen Hotspots sowie Skriptspeicheroptionen bereitstellt.
Wenn man JSL schreiben muss, wo findet man dann die passenden Ressourcen? Ich habe schon mit vielen verschiedenen Datenanalyse-Tools, Softwareprogrammen und Programmiersprachen gearbeitet. Die Lernressourcen von JMP sind wirklich hervorragend. Der Skriptindex ist direkt in der Anwendung integriert. Heutzutage kann man die LLM-Unterstützung für die Fehlersuche oder sogar die Generierung von JSL-Code nutzen. Ich finde sie nicht so gut wie beispielsweise Python, unter anderem weil der Trainingsdatensatz deutlich kleiner ist als bei Python, aber sie hilft einem trotzdem beim Einstieg.
Das ist wirklich das Unübertroffene an der JMP-Community. Nutzt die Foren! Hier ein konkretes Beispiel von Anfang des Jahres: Ich habe diese Frage gestellt, und was mir besonders aufgefallen ist, ist die Zeit. Ich habe sie um 19:15 Uhr eingereicht. Jim, die Legende, antwortete noch am selben Tag um 21:45 Uhr. Am nächsten Morgen meldete sich Mark innerhalb von etwa zwölf Stunden zurück. Ich erhielt also innerhalb von weniger als 24 Stunden zwei Antworten von Experten auf meine Fragen. So war es jedes Mal, wenn ich in einem Forum gepostet habe.
Ein großes Dankeschön an alle, besonders an Mark und Jim! Ich sehe eure Namen ständig, aber eigentlich benutzt sie ja jeder in den Foren. Sie sind unschätzbar wertvoll für euer Lernen. Damit möchte ich zum Schluss kommen und euch dringend bitten, in eurer Organisation, euren Teams, euren Laboren – wo auch immer ihr arbeitet – nach wirkungsvollen Möglichkeiten zu suchen, wo ihr allgemeine Automatisierung einsetzen könnt. Wir haben zum Beispiel einen Bereich entdeckt, in dem wir stundenlang pro Experiment gearbeitet haben und über 50 solcher Experimente einen Monat lang durchgeführt haben. Das war die gesamte Arbeitszeit einer Person, die sich mit diesen Daten beschäftigt hat.
Sobald man sich darauf einlässt, Komplexität zu managen und einzuplanen, stellten wir eine hohe Variabilität in unserem Versuchsdesign und unserem Plattenscreening-Prozess fest. Wir begegneten diesem Problem, indem wir den Nutzern Optionen boten, die unterstützten Berichtsfunktionen einschränkten und gleichzeitig die JMP-Benutzeroberfläche nutzten, um ihnen freie Hand zu lassen. Sie können die Visualisierung weiterhin nach Belieben gestalten. Dies ermöglicht die Implementierung fortschrittlicher Workflows, wodurch sich repetitive Aufgaben eliminieren lassen und die Analyse standardisiert werden kann. Ich habe oft beobachtet, dass wir Dinge gerne standardisieren, die Datenanalyse jedoch oft als individuell betrachten.
Das stimmt zwar, aber es gibt auch Bereiche, in denen sich Best Practices etablieren lassen. Wie sollten wir diese Daten analysieren? Welcher statistische Test eignet sich für die Merkmale dieser Daten? Das bietet die Möglichkeit, diese in einem JMP-Workflow zu dokumentieren.