Bene. Grazie per essere intervenuti oggi. Parlerò di JMP, ovviamente, ma in particolare del suo utilizzo per automatizzare i flussi di lavoro analitici in Amirys, ma anche di processi più complessi e di generalizzazione dell'automazione o dell'automazione dei dati utilizzando le piattaforme JMP native. Prima di iniziare, vorrei presentarmi brevemente. Mi chiamo Stefan. Sono Associate Director of Data Science in Amirys e ho 15 anni di esperienza nel settore delle scienze biologiche, con background molto diversificati. Ho lavorato in molti laboratori di chimica, laboratori di fermentazione, team di screening ad alto rendimento. Ho lavorato nel settore della qualità, in molti settori della statistica, dell'analisi dei dati e ora, ovviamente, della data science. Amo molto tutto ciò che riguarda i dati, dal modo in cui li archiviamo al modo in cui le persone li utilizzano e vi accedono. Attualmente supporto la più ampia comunità scientifica di AMRA con i loro strumenti e metodologie di analisi. Oggi, oggi, tratterò tre aspetti principali. Vi fornirò qualche informazione di base e contesto sul caso di studio che utilizzeremo, che userò per illustrare alcuni di questi esempi di automazione. Inizieremo davvero con qualcosa di semplice.
Come utilizziamo JMP per automatizzare i flussi di lavoro di analisi di run-off? Potrebbe trattarsi di analisi che svolgi quotidianamente e che desideri rendere un po' più efficienti. Nell'ultimo articolo, approfondiremo un'automazione più avanzata, in cui esamineremo flussi di lavoro più complessi. Potremmo analizzare come analizzare questi flussi di lavoro utilizzati da un team tecnico più ampio. Come generalizzare tutto ciò per supportare sia l'elaborazione e l'ingestione dei dati, sia la parte di analisi? Il nostro caso di studio di oggi riguarda l'azienda per cui lavoro, Amirys. Amirys ha un po' di esperienza. Siamo un'azienda di biologia sintetica. Siamo specializzati nella programmazione del lievito e nella fermentazione industriale, alimentando il lievito con lo zucchero e convertendolo in ingredienti puri o prodotti chimici. Abbiamo sede a Emeryville, in California, e la maggior parte della nostra produzione è in Brasile. Il nostro caso di studio di oggi non riguarderà la produzione, ma piuttosto la ricerca. A Emeryville disponiamo di numerosi laboratori altamente automatizzati, che chiamiamo laboratori di analisi e screening, dove al mese analizziamo centinaia di migliaia di ceppi in queste 96 piastre a muro.
Lì potete vedere l'immagine di un codice a barre di piastre. È quello che usiamo come fermentatori in scala ridotta. È il nostro primo luogo di test per vedere quanto producono questi ceppi? Cosa producono? Stiamo cercando fenotipi specifici di quei ceppi. Li coltiviamo in queste piastre a 96 pozzetti e poi utilizziamo un'intera suite di analisi diverse per generare misurazioni, spesso multidimensionali, su questi pozzetti. Disponiamo anche di numerosi database interni; molti dati, così come i relativi metadati, sono archiviati in database applicativi e in un data warehouse a cui possiamo accedere con strumenti come JMP. È qui che entra in gioco JMP. Naturalmente, la fase finale di questo screening è lo screening di molti ceppi, la generazione di molti dati. Ora dobbiamo dare un senso a questi dati, prendere una decisione su quale ceppo promuovere per acquistare un reattore di fermentazione e potenzialmente per la produzione in Brasile.
Inizieremo con l'automazione semplice in JMP. Quello che voglio fare oggi è, se non avete mai automatizzato in JMP, se non avete mai utilizzato queste piattaforme, presentarvele in modo accessibile, relativamente privo di codice, e fornirvi una comprensione di base di come sono strutturate queste piattaforme e di cosa ho imparato imparando da solo e dagli altri nell'uso di queste piattaforme di automazione.
Mi piace dire che se si fa qualcosa più di 10 volte, probabilmente vale la pena automatizzarla. Penso che il punto di partenza perfetto, se non si ha familiarità con l'automazione, sia la propria analisi. Il bello di queste analisi, o se si ha molta familiarità con esse, è che si può ottenere un feedback. Naturalmente, di solito sono più semplici rispetto a cercare di analizzare un'analisi più ampia per un team più numeroso. Nel nostro esempio, si tratterà di una misurazione molto semplice, una singola misurazione su una piastra. Abbiamo questa propagazione seriale di piastre dalla pre-coltura a quella che chiamiamo produzione. In quella seconda piastra, stiamo eseguendo una singola misurazione. In questo esempio simulato, diremmo: "Ehi, stiamo eseguendo esattamente lo stesso tipo di esperimento più e più volte". Ogni volta che lo facciamo, inseriamo i dati in JMP. Aggiungiamo una colonna calcolata. Quindi filtriamo su quella colonna e infine generiamo alcuni test visivi e statistici per aiutarci a prendere una decisione. Se lo fai una volta, non è un'impresa titanica, ma se lo fai più e più volte al giorno, ripetutamente, il tempo inizia a sommarsi.
Prima di addentrarci nell'automazione, vorrei soffermarmi brevemente sui dati strutturati, che sono un vero e proprio prerequisito per l'automazione. Ora, la vostra vita sarà molto più semplice se gran parte di questa standardizzazione e strutturazione avviene a monte, quando raccogliete i dati e li inserite in un database, o in file CSV. Nel nostro caso, il database è già strutturato. Naturalmente, gran parte di questa elaborazione dei dati può essere eseguita in JMP, e spesso dovrete dipendere dall'applicazione o dall'analisi che state cercando di eseguire. Ma pensate davvero a qual è la fonte dei dati? Più a monte riuscite a gestirla, meglio è. Se utilizzate dati di database, vi consiglio di usare Query Builder. Oggi non approfondiremo questo aspetto. Questa è la mia raccomandazione generale. Alla base, e in realtà, il fondamento dello scripting in JMP c'è il log. Che tu lo sappia o no, per impostazione predefinita, JMP registra sempre ciò che stai facendo, quale JSL, quale script viene eseguito per generare ciò che stai facendo cliccando nell'interfaccia utente. Se vai al menu Visualizza, clicchi su Registro, apri il registro e vedrai la maggior parte dei passaggi che hai eseguito registrati lì.
Cliccando su un qualsiasi passaggio, verrà visualizzato il codice JSL utilizzato per eseguirlo. In questo esempio, stiamo eseguendo il primo passaggio, ovvero l'aggiunta di una colonna calcolata, e ho cliccato su di esso evidenziando il codice JSL. È un modo rapido per visualizzare il codice JSL eseguito per un passaggio, ed è possibile, dal log, eseguire direttamente quel codice o rieseguire il codice precedente. Detto questo, il log non è il luogo in cui consiglierei di provare ad automatizzare davvero le cose. Rappresenta solo gran parte della fonte da cui proviene questo codice. Un modo per estrarre elementi dal log e inserirli, ad esempio, in una tabella dati è utilizzare gli script per le tabelle dati. Per molto tempo, questo è stato il metodo per realizzare l'automazione graduale in JMP. In questo esempio, sono andato su questa tabella dati, ho cliccato sul piccolo hotspot rosso, ho generato un nuovo script, che mi ha appena aperto una finestra vuota, e l'ho incollato direttamente dal registro in due passaggi di codice, uno per creare la nuova colonna e il secondo per impostare una formula per quella colonna.
Potresti andare oltre e ripulire il codice. È completamente facoltativo. Ma nelle sezioni successive, quando inizieremo a parlare di esempi più complessi, potresti chiederti: come posso rendere il mio codice il più manutenibile o il più pulito? In questo caso, abbiamo eseguito una pulizia in due fasi: nella prima abbiamo rimosso il riferimento ridondante alla tabella dati. Nella seconda, l'abbiamo ulteriormente compresso non rinominando la nostra colonna, la colonna 21, e poi rinominandola. Le stiamo semplicemente dando il nome giusto fin dall'inizio. Ognuna di queste caselle funzionerà. Farà esattamente la stessa cosa. In questo caso, non noterai alcuna differenza nelle prestazioni, ma può portare a un codice più pulito e manutenibile. Se sei nuovo di JSL e vedi questo codice, ti chiedi: "Che cosa sta facendo?". Puoi incollare queste cose nel tuo LLM preferito. Noi usiamo Copilot, ChatGPT, qualsiasi cosa sia. Se hai accesso al bot di apprendimento JMP, puoi chiedere spiegazioni del tipo: "Ehi, cosa fa questo codice?". In genere, ti dà una buona idea di cosa sta facendo.
Abbiamo estratto i dati dal log, o meglio, abbiamo estratto il codice dal log e lo abbiamo incollato negli script della tabella dati. Questo è il modo più manuale per generare automaticamente JSL. Potete vederlo qui. Lo abbiamo come lo abbiamo chiamato, passo uno, aggiungi colonna calcolata. Nella maggior parte delle piattaforme, ci sono modi più semplici per generare questi script di tabella e salvare lo script che ha generato un determinato output. Molte piattaforme hanno queste opzioni sotto l'hotspot rosso. Sotto l'hotspot rosso, potete guardare fino in fondo. C'è un'opzione "Salva script" che offre diverse opzioni. Potete semplicemente salvarlo negli appunti, direttamente nella tabella dati, che è quello che faremo, così come altre opzioni. Questo diventa un modo davvero semplice per generare automaticamente JSL direttamente dall'interfaccia utente. Lo abbiamo salvato nella tabella dati. Tutto ciò che abbiamo fatto in questo caso è stato rinominare lo script, passo numero due, filtro dati, e proseguire con l'analisi. Possiamo farlo qui nel nostro passaggio finale, che consiste nel generare un grafico Y per X, e applichiamo anche un test di Dunnett con un gruppo di riferimento.
Di nuovo, andiamo al punto rosso, selezioniamo Salva script e salviamolo nella tabella dati. Abbiamo creato questo pseudo flusso di lavoro. Abbiamo questa automazione in tre fasi. Aggiungiamo una colonna calcolata in questa tabella, aggiungiamo un filtro dati o applichiamo un filtro dati, e poi eseguiamo un'analisi unidirezionale con un test di Dunnett. Questo ci porta nell'ambito dell'utilizzo di script di tabella, e questo per molto tempo, fino a quando, credo, JMP 16 o 17, più o meno in quel periodo, è arrivato il flusso di lavoro. Il flusso di lavoro ha davvero portato a un punto in cui è possibile potenziare questi script di tabella con funzionalità aggiuntive. Il flusso di lavoro è una nuova piattaforma. È una piattaforma autonoma in JMP. È possibile accedervi andando su File, Nuovo, Flusso di lavoro. Ci sono diverse funzionalità che possono davvero amplificare non solo la facilità di sviluppo di questi flussi di lavoro, ma anche l'esperienza dell'utente finale nell'utilizzo di questi flussi di lavoro. Ad esempio, c'è un singolo pulsante su cui è possibile fare clic per eseguire tutti i passaggi di un flusso di lavoro. C'è la registrazione dei passaggi, che registra ciò che si sta facendo in JMP e lo aggiunge automaticamente al flusso di lavoro. È possibile annotare gli script direttamente nel flusso di lavoro e aggiungere elementi come porte logiche, interattività, prompt utente e molto altro che non abbiamo il tempo di approfondire oggi.
Ma mostrerò alcuni esempi, soprattutto nella versione più avanzata. Quello che possiamo fare ora è prendere questi script di tabella, quindi abbiamo lo pseudo flusso di lavoro. Possiamo immaginare di averlo creato prima che esistessero i flussi di lavoro, JMP ha aggiunto la piattaforma di flusso di lavoro e ora lo abbiamo aggiunto al generatore di flussi di lavoro. Tutto ciò che ho fatto qui è stato aggiungere tre passaggi. Ho incollato il JSL da ogni passaggio e potete vedere che abbiamo esattamente i tre passaggi nel flusso di lavoro come negli script della tabella dati. Mostrerò qui una breve demo di come appaiono con i nostri dati reali o dati demo. In questo primo esempio, abbiamo i nostri dati strutturati. Abbiamo una serie di misurazioni. Abbiamo quei valori di misurazione. Quello che vogliamo fare di nuovo è eseguire questi tre passaggi. Possiamo vedere in questo approccio allo script della tabella dati, tutto ciò che si fa qui è premere uno alla volta. Premo quello. Ora abbiamo aggiunto questa colonna calcolata. Applichiamo un filtro dati, in modo che si apra e applichi questo filtro, quindi generiamo un'analisi unidirezionale per questo specifico esperimento.
Davvero semplice, vero? Funzionano benissimo. Funzionano benissimo per qualcosa di semplice come questo. Devi passare a un flusso di lavoro? Devi fare qualcosa di più sofisticato? Non necessariamente. Se funziona, è fantastico. Potremmo reimpostarlo e vedrai che dovrò farlo manualmente qui. Cancelleremo lo stato della riga, ci assicureremo che il filtro dati sia chiuso e poi potremo esaminare il flusso di lavoro. Anche in questo caso, si tratta di tre passaggi. La cosa più bella è che ora posso vedere automaticamente il codice. Non posso farlo qui. Qui, dovrei fare clic con il pulsante destro del mouse, andare su Modifica e vedere effettivamente la definizione in una nuova finestra. Mentre in quest'altra opzione, vedo il codice per ogni passaggio. Quello che potrò fare qui è premere play e verranno eseguiti tutti e tre i passaggi insieme. Ho questi piccoli segni di spunta verdi che mi dicono che l'esecuzione è avvenuta senza errori. Vedrai che abbiamo la nostra nuova colonna. Abbiamo applicato un filtro e ha aperto la stessa analisi. È un po' più pulito. Nella prossima sezione approfondiremo gli altri vantaggi offerti dal flusso di lavoro.
Un aspetto che vorrei toccare brevemente, nella demo, è il pulsante di registrazione, che è fantastico, soprattutto, ripeto, se non avete familiarità con JSL, anche se non avete familiarità con la programmazione. Questo è il modo più semplice per iniziare a creare la vostra automazione. Tutto ciò che potete fare qui è premere "Registra", e ora tutto ciò che faccio su questa piattaforma verrà acquisito in quel flusso di lavoro. Farò solo un esempio fittizio. Disegnerò una distribuzione delle mie misurazioni che genera una certa distribuzione qui. Daremo per scontato che significhi qualcosa di veramente significativo. Quando torno al mio flusso di lavoro, vedrete che ho un nuovo passaggio qui. Abbiamo il nostro script JSL qui. Posso rinominarlo, aggiungere note, modificarlo, eccetera. Una funzionalità davvero interessante del generatore di flussi di lavoro è questo pulsante di registrazione. Facciamo un ulteriore passo avanti, giusto? Forse avete automatizzato qualcosa per il vostro divano, un'applicazione molto specifica. Forse funziona per un tipo di esperimento. Come possiamo passare da questo all'applicazione a processi più complessi? Questa è la domanda che ci ponevamo.
In Amirys la realtà è che abbiamo molti tipi diversi di esperimenti e vogliamo essere in grado di supportarli idealmente con il minor numero possibile di flussi di lavoro. Non vogliamo creare un flusso di lavoro unico per ogni possibile iterazione, perché diventa impossibile da mantenere e molto difficile da sviluppare. Quando si entra nello sviluppo più avanzato, una cosa che suggerirei, e l'ho trovata in un video da qualche parte nella community di JMP, è di utilizzare i progetti JMP per organizzare quello che chiamerei l'ambiente di sviluppo. Uno dei punti dolenti nell'automatizzare queste cose complesse è che si avranno tutte queste tabelle di dati, finestre, cose che spuntano fuori, e può essere difficile da gestire. Se si utilizza un progetto, è possibile utilizzarlo come wrapper per lo sviluppo. Così come per l'eventuale utilizzo di quello strumento.
Qui ho aperto alcune delle piattaforme predefinite del progetto, come Area di lavoro e Contenuto. Ho aggiunto un diario come segnaposto. Qui è dove tutto ciò che viene aperto dal flusso di lavoro, eventuali nuove finestre, si apriranno come nuove schede anziché come nuove finestre sul desktop. Naturalmente, potete usare quel diario anche per la documentazione o le istruzioni. Sul lato destro, ho il mio flusso di lavoro effettivo che ho creato. In basso, ho anche aggiunto il mio registro.
Se devo risolvere un problema, se devo esaminare più nel dettaglio i messaggi di errore, ho il log a portata di mano e posso farlo direttamente da un'unica finestra. È così che dimostro anche il flusso di lavoro all'interno del progetto. Il feedback generale degli utenti che ho ricevuto è molto positivo riguardo all'assenza di quella proliferazione di tabelle e immagini. Quando parliamo di generalizzare l'automazione, vogliamo concentrarci su applicazioni ad alto impatto, perché non è uno sforzo banale generalizzare l'automazione, che si tratti di automazione dei dati, di automazione fisica, se l'avete mai fatto in laboratorio o in produzione, giusto? Richiede molto impegno, denaro, lavoro e tempo. In generale, se state cercando di automatizzare i flussi di lavoro dei dati, date priorità alla loro applicazione per standardizzare i flussi di lavoro o usateli come un modo per promuovere la standardizzazione. Dite: "Ehi, guarda, se standardizziamo questo, possiamo automatizzare anche questa laboriosa elaborazione di dati che fate ogni giorno".
Spesso i flussi di lavoro dei dati richiedono una certa flessibilità, sia per via del processo, sia per via del modo in cui le persone li visualizzano. È qui che si può automatizzare passo dopo passo. Questo è davvero il punto forte di JMP, perché mi è stato chiesto se si sta automatizzando, perché non usare semplicemente Python? Perché non usare una piattaforma basata esclusivamente sul codice per automatizzare? Il problema è che, non appena si crea qualcosa basato esclusivamente sul codice, si crea una grande barriera all'ingresso per le persone. A meno che non si riesca ad automatizzare dall'inizio alla fine, se si arriva a un certo punto e l'utente deve prendere il controllo, e ora si dice: "Ehi, ho bisogno che anche tu conosca Python", diventa un'enorme barriera all'ingresso, anche in comunità molto tecniche come quelle degli scienziati con cui lavoro.
JMP è davvero utile perché consente di automatizzare solo il primo passaggio, e poi l'utente finale si ritrova in JMP. Ha l'interfaccia utente e può lavorare con quella. Può fare ciò che vuole, può avere la libertà di sfruttare l'automazione. Naturalmente, vogliamo identificare opportunità ad alto impatto, perché richiedono impegno. Nel nostro caso, stavamo esaminando questi esperimenti su piastra e abbiamo parlato con gli scienziati chiedendo: "Quanto tempo impiegate per recuperare questi dati?". Abbiamo notato che le persone eseguivano questo processo in modo molto manuale, copiando e incollando passaggi ripetitivi.
Avevamo 17 scienziati nel team. Abbiamo fatto un piccolo sondaggio e stimato che stiamo impiegando circa il tempo di una persona intera, un tempo piuttosto costoso, per fare tutto questo. Per noi è stata l'opportunità di dire: "Ehi, molto di questo sembra manuale, ripetitivo e automatizzabile". Proviamoci. La sfida più grande che incontrerete sicuramente è la complessità. Quando pensiamo all'automazione, ci sono due assi. Uno è il numero totale di passaggi nel flusso di lavoro, ma anche il numero di varianti a ogni passaggio. Una variante è in realtà un bivio. Mi piace questo diagramma a destra perché può trasformarsi molto rapidamente in un problema esponenziale in cui si cerca di risolvere troppe possibili iterazioni o varianti di un certo processo. Bisogna pensare a come procedere, chiedersi: è gestibile? E se non lo è, cosa si può fare per renderlo gestibile? È possibile eliminare le variazioni tramite la standardizzazione, come abbiamo detto, oppure dicendo: "Ehi, questo caso limite non sarà supportato da questa analisi dei dati".
Puoi persino aggiungere un messaggio di errore, come vedrai nel tuo flusso di lavoro. Puoi anche semplicemente eliminare i passaggi con l'automazione off-ramp. Questo è ciò di cui parlavo, lasciare che sia l'utente a prendere il controllo. Se c'è una fase di controllo qualità molto artigianale e unica, puoi mettere in pausa un flusso di lavoro, lasciare che l'utente faccia ciò che deve fare e poi può riprendere il flusso di lavoro da lì. Hai opzioni a cui pensare, ma sicuramente la pianificazione sarà a tuo favore quando pensi all'automazione. Nel nostro caso, stavamo esaminando questi processi di lastra, e questo è l'esempio originale che ho fornito. Se abbiamo una singola propagazione di lastra, eseguiamo una singola misurazione e chiameremo questo processo "propagazione uno".
Quando abbiamo iniziato a considerare l'ampiezza delle differenze tra un esperimento e l'altro, ci siamo resi conto che a volte prendiamo due misurazioni da questa piastra, non solo una singola misurazione. A volte, in realtà, misuriamo anche dalla prima piastra nella propagazione seriale. A volte misuriamo due misurazioni per entrambe. A volte dividiamo effettivamente le piastre. Non stiamo semplicemente procedendo da uno a uno, ma da uno a due o da uno a molti.
Stiamo effettuando delle misurazioni su questi dati. A volte li dividiamo e in realtà eseguiamo misurazioni diverse su entrambi. Non mi aspetto che tu tenga traccia di questo, ma quello che sto cercando di dimostrare è che c'è molta variabilità nel nostro processo. Sto solo mostrando alcuni esempi. Abbiamo decine di varianti diverse del nostro processo. Stavamo solo esaminando la complessità del processo stesso, il processo nei nostri laboratori che genera i dati. Non avevamo nemmeno iniziato a pensare, ok, quanto è standard il modo in cui le persone guardano i loro dati, li analizzano? Quali test statistici stanno usando? Se stanno usando metriche di riepilogo o stanno usando la mediana o la media.
La complessità può diventare rapidamente opprimente, ma è importante effettuare la propria ricerca in anticipo. Quello su cui stiamo lavorando è un work in progress. È già implementato, ma è qualcosa su cui stiamo lavorando continuamente. L'altra cosa che consiglierei è di capire qual è il minimo che sarà utile, e poi ottenere un feedback frequente dall'utente finale. Abbiamo elaborato questo approccio generalizzato per la nostra analisi del piano.
Ecco come appare un flusso di lavoro più complesso. Quello che stiamo facendo è adattare direttamente i dati dal nostro database, chiedendo all'utente di filtrarli in base all'esperimento specifico che sta cercando. Stiamo analizzando i dati, correggendo i tipi di dati, le convenzioni di denominazione, rendendo tutto coerente. Stiamo suddividendo le cose in base a questo processo. Abbiamo visto quella propagazione seriale. Dobbiamo capire quale misurazione è associata a quale piastra. Eseguiamo alcuni controlli, ed è lì che stiamo cercando: forse questo è un processo che non supportiamo? Questa misurazione non è supportata da questa automazione? Generiamo un errore, diamo un messaggio all'utente. Elaboriamo ulteriormente i dati in base al pivoting. Diamo persino all'utente la possibilità di aggiungere dati offline. Gli utenti potrebbero avere annotazioni manuali dei loro genotipi. Infine, generiamo un set di visualizzazioni e analisi predefinite.
Analizzando meglio questo aspetto, vi mostrerò come appare. Qui, come vi ho mostrato ora, siamo nel progetto. Abbiamo i contenuti della nostra area di lavoro. Abbiamo il nostro diario. Abbiamo il nostro log qui sotto. In realtà chiuderò il log perché non ci serve per la demo e sta occupando spazio prezioso sullo schermo.
Ma qui abbiamo il nostro flusso di lavoro. Ho reso questi passaggi il più leggibili possibile, in modo che possiate capire a cosa serve ogni passaggio. Potete anche vedere che potete attivare o disattivare i passaggi, in questo caso, ai fini di questa conferenza. Stiamo solo importando dati statici perché non ci collegheremo ai database aziendali per estrarre dati sperimentali reali. Abbiamo semplicemente i dati grezzi qui in modo nativo. Noterete anche alcune di queste porte logiche, giusto? Ci sono queste istruzioni if/out che consentono di avere switch logici o percorsi diversi, diverse biforcazioni nella riga per dire, se i dati sono così, fai questa cosa. Altrimenti, fai quest'altra cosa.
Procedo con l'esecuzione. Stiamo importando i dati. Ho un'affermazione forse leggermente passivo-aggressiva qui, che è solo un po'... Si possono avere piccoli pop-up per fornire feedback all'utente. Ho detto, fantastico. Hai solo le misurazioni della misura B per le tue piastre PC, giusto? È l'unica cosa che permettiamo. Ottimo lavoro. Premono OK. Continua l'esecuzione. Ora stiamo dando loro un prompt. Dice, ehi, vuoi unire i metadati creati manualmente?
Di solito si tratta di dati genotipici per questo set di dati. Al primo tentativo, clicco semplicemente su "no". In realtà, non ho dati lì. È come se, ok, li esaminiamo e basta. Ora che abbiamo generato, abbiamo esaminato tutto. Abbiamo tutti i segni di spunta verdi. Qui a sinistra, vedrete diverse tabelle di dati, alcune visualizzazioni predefinite delle prestazioni e una normalizzazione che stiamo eseguendo sulle piastre per la selezione dei ceppi.
Ora, la cosa davvero interessante qui, di nuovo, il flusso di lavoro è che posso premere questo pulsante qui, questo reset, e chiuderà tutto ciò che il flusso di lavoro ha aperto e lo ripristinerà all'inizio. Ora ho resettato. Notate che siamo tornati al diario e alle nostre piccole frecce all'inizio. Ora posso rieseguire questa operazione di nuovo. Nello stesso prompt, invece, dirò di sì. Questo mi porterà su un percorso leggermente diverso. Dirò di sì, voglio aggiungere dati manuali. Ora aggiunge un altro prompt che chiede quale colonna voglio usare per unire i dati? Userò questo numero X, che è un identificatore univoco.
Usiamo quattro ceppi. Premi OK. Dirà: "Ehi, non vedo questo nel tuo set di dati". Ovviamente, non lo vede, perché sono i miei dati offline. Vado al computer e cerco dove si trova. In questo caso, l'ho salvato in un file CSV, lo uniamo e lo script viene eseguito. Notate che a quel punto arriviamo effettivamente allo stesso risultato. Abbiamo questa normalizzazione. Abbiamo questa visualizzazione box plot del Generatore di Grafici della misurazione. Ma quello che abbiamo fatto è stato aggiungere anche altre... Ci sono queste colonne, Mutazioni del Promotore, altre informazioni che erano presenti in quei dati offline e che abbiamo unito ai dati principali, cosa che altrimenti non sarebbe stata fatta.
Questi flussi di lavoro generalizzati possono diventare davvero potenti. Quando li pubblico, li salvo anche in un progetto. È il flusso di lavoro di un progetto. Aggiungo qui la documentazione utente e qualsiasi collegamento ipertestuale ad altra documentazione interna che potrebbe essere rilevante. Un utente accederebbe qui, prema play, gli verrebbe chiesto di inserire l'ID dell'esperimento, che modificherebbe dinamicamente i dati inseriti e poi verrebbe elaborato.
Noterete che ho anche qui alcune opzioni, come la generazione di errori. Questo vale per casi specifici in cui non lo supportiamo, o forse si tratta di un tipo di esperimento inaspettato. Un altro suggerimento, se state generalizzando, è che per impostazione predefinita molti dei riferimenti a tabelle e colonne vengono generati automaticamente. Che utilizziate un pulsante di registrazione o il menu a discesa rosso della piattaforma, questi sono generalmente espliciti. Diranno "tabella dati questo nome", "colonna questo nome". Questo non sempre è scalabile quando si generalizza.
Una cosa che potresti ritrovarti a dover imparare e modificare manualmente il JSL riguarda i riferimenti a colonne e tabelle dati, come gestirli e come renderli dinamici. Il numero di colonne che importo potrebbe variare a seconda di ciò che un utente inserisce, e devo essere in grado di supportarlo. Una volta che ti sarai addentrato in questo ambito, quasi certamente dovrai scrivere del codice JSL e codificarlo. Ma, ripeto, JMP farà il 90% del lavoro per te, con gran parte della registrazione del flusso di lavoro, il log, così come tutti quegli hotspot rossi e le opzioni di salvataggio degli script.
Ti ritrovi a dover scrivere codice JSL, dove vai? Credo di aver lavorato con molti strumenti di dati, software di dati e linguaggi di programmazione diversi. Le risorse di apprendimento di JMP sono davvero fantastiche. Di base, l'indice di scripting è incluso nell'applicazione stessa. Oggigiorno, puoi usare l'assistenza LLM per la risoluzione dei problemi o persino per la generazione di codice JSL. Non credo sia valido quanto Python, in parte perché il set di dati di training è molto più piccolo di quello che abbiamo per Python, ma può comunque aiutarti.
Questa è davvero la parte ineguagliabile della community JMP. Usate i forum. Ecco un esempio specifico di inizio anno. Ho scritto questa domanda e l'unica cosa che voglio dire è l'ora. L'ho inviata alle 19:15. Jim, la leggenda, ha risposto alle 21:45, lo stesso giorno. La mattina dopo, Mark ha risposto in circa 12 ore. Ho ricevuto due risposte da esperti alle mie domande in meno di 24 ore. Questa è stata la mia esperienza ogni volta che ho pubblicato un post sul forum.
Un saluto a tutti, a Mark, a Jim. Vedo i vostri nomi di continuo, ma in realtà tutti sui forum li usano. Sono preziosi per il vostro apprendimento. Con questo, vorrei concludere e incoraggiarvi a guardare all'interno della vostra organizzazione, all'interno dei vostri team, all'interno dei vostri laboratori, qualunque sia il vostro lavoro, e a cercare opportunità ad alto impatto in cui potreste applicare l'automazione generalizzata. Nel nostro caso, abbiamo visto un'area in cui dedicavamo ore per esperimento, eseguendo più di 50 di questi tipi di esperimenti per un mese. Si trattava dell'intero tempo di una persona dedicata a gestire quei dati.
Una volta che ci si impegna a gestire e pianificare la complessità, si è presentata una notevole variabilità nella progettazione sperimentale e nel processo di screening delle piastre. Abbiamo affrontato questo problema sia offrendo opzioni utente, sia limitando il reporting di supporto, ma anche sfruttando l'interfaccia utente di JMP per dire: "Ehi, da qui in poi, la scelta è tua". È comunque possibile visualizzare il tutto come si desidera. Questo porta all'implementazione di flussi di lavoro avanzati, che possono eliminare attività ripetitive e anche essere utilizzati come un modo per standardizzare l'analisi. Credo che quello che ho visto spesso è che ci piace standardizzare le cose, ma quando si tratta di analisi dei dati, la consideriamo artigianale.
C'è del vero in questo, ma ci sono anche elementi in cui è possibile definire le best practice. Come dovremmo analizzare questi dati? Qual è il test statistico corretto per le caratteristiche che questi dati assumono? Questo offre l'opportunità di codificarli in qualcosa di simile a un flusso di lavoro JMP.