I programmi di analisi richiedono dati strutturati rigorosamente in righe e colonne, e le righe sono generalmente trattate come osservazioni indipendenti. Il diagramma causa-effetto organizza le righe in una gerarchia, descritta da coppie di relazioni padre-figlio. Originariamente concepito per documentare i risultati del brainstorming nella gestione della qualità, questo strumento si è rivelato efficace anche per visualizzare altre strutture.
Le strutture dati generiche nello scripting JSL sono gli array associativi e le liste. I loro elementi possono essere valori, oltre che liste e array associativi, fornendo un framework per la gestione rapida ed efficiente di strutture dati complesse. Le interfacce JSON, ben consolidate nella comunicazione di sistema, sono un altro esempio di strutture dati gerarchiche. Se gli elementi vengono trattati in modi diversi e, dopo il trattamento, vengono misurati parametri variabili, le combinazioni effettive possono essere documentate allo stesso modo.
In questa presentazione viene illustrata (e fornita) una funzione JSL che scorre un elenco o un array e inserisce tutto il contenuto in una tabella di dati. Il diagramma causa-effetto visualizza il contenuto in modo grafico. Esempi applicativi illustrano la versatilità e la potenza di questo concetto.
Benvenuti, e siete invitati a seguirmi nell'abisso delle profonde strutture gerarchiche. Iniziamo con una tabella di dati. Questo è il layout che vogliamo vedere: una griglia completa, senza spazi vuoti, senza valori mancanti. Ma quando osserviamo questa tabella di dati, notiamo che per layout e ID wafer abbiamo valori replicati. Questo indica una gerarchia.
Iniziamo con qualcosa di più semplice e usiamo JSL, il linguaggio di scripting di JMP, per capire cosa sono una gerarchia e le strutture. Questa è una lista. Le liste sono racchiuse tra parentesi graffe e i loro elementi sono valutati in base alla posizione. La seconda posizione qui è il mio cognome, Heinen.
Questo è lo stesso contenuto, ma come array associativo. Gli array associativi sono racchiusi tra parentesi quadre e i loro elementi hanno dei nomi. Questo elemento si chiama fn, che sta per first name (nome), e i dati sono associati. Il contenuto di first name è associato.
Esistono due modi diversi per costruire strutture per i dati. Queste strutture possono essere impilate l'una sull'altra e dare origine a trasformazioni combinate come queste. Si vedono molte parentesi graffe e quadre, e alla fine si notano due parentesi quadre e le parentesi graffe chiuse. È piuttosto difficile capire cosa si trova dove in una struttura di questo tipo.
Ma è importante saperlo soprattutto perché, ad esempio, nelle cosiddette interfacce REST, dove i computer comunicano con i servizi internet, i dati vengono scambiati in strutture JSON, e la struttura JSON è proprio una combinazione di liste e array associativi. È fondamentale capire cosa si trova dove.
Eseguire questa operazione manualmente è un po' macchinoso. Esiste un programma che lo fa per te. L'ho scritto io e lo metto a disposizione. Non è necessario avere grandi conoscenze di programmazione. Ci sono solo due istruzioni importanti: For e Recurse.
Il simbolo "for" indica che si tratta di un ciclo. Tutto ciò che è racchiuso tra parentesi quadre viene ripetuto più volte. La ricorsione è un concetto interessante. Indica a JMP di tenere a mente il punto in cui ci troviamo nel programma e di eseguire nuovamente l'intera applicazione. Quindi, una volta terminato, di tornare a questo punto e proseguire. La ricorsione, per sua natura, può essere ripetuta un numero arbitrario di volte.
Cosa fa questo programma? Prende l'intera struttura all'inizio. Chiede: "Si tratta di una lista o di un array associativo?". In caso affermativo, assegniamo il ruolo di genitore. Quando pensiamo alle gerarchie, possiamo pensare alle generazioni: nonno, genitore, figli, nipoti e così via. Questa è la prima generazione, quella dei genitori.
Prendiamo il primo elemento, il primo figlio di essi, incrementiamo il livello dello stack, tenendo presente che ora siamo nella seconda generazione, e poi ricominciamo l'intero processo di interrogazione finché non arriviamo alla fine. La fine è sempre un elemento dati.
Quindi teniamo presente che salviamo tutte le informazioni di questo elemento dati, decrementiamo il livello dello stack, quindi torniamo indietro di una generazione. Siamo nella generazione dei nipoti, ora torniamo indietro di una generazione e chiediamo: hai fratelli in quella generazione? Se sì, prendiamo il fratello successivo e l'intero processo ricomincia finché non ci sono più fratelli, e questo avviene alla fine nella posizione più alta, quindi nella generazione dei nonni. Quindi creiamo l'output.
In questo caso, o per fare un esempio, nei confronti tra lampi, i pezzi, i pezzi standardizzati vengono inviati ai laboratori dove vengono testati con diversi analizzatori, e questi restituiscono diversi gruppi di valori di misurazione.
Questi dati vengono quindi analizzati e visualizzati in questa tabella. Notiamo una colonna padre e una colonna figlio, e ho colorato leggermente quest'ultima per rendere più facile capire cosa è successo. Questo è il primo percorso verso il primo elemento dati, poi tutti i suoi elementi fratelli, un livello più in alto, e lì troviamo che c'è già la fine, nessun altro elemento figlio, e poi ancora un livello più in alto e il successivo elemento strutturale.
Poiché abbiamo salvato anche i dati, sappiamo per ogni passaggio di cosa stiamo parlando. Di un laboratorio, di un componente, di un gruppo di valori di misurazione dell'analisi di laboratorio. Qui in basso, trovate un valore che in questo caso specifico viene chiamato cv, ovvero coefficiente di variazione.
Cosa facciamo con una tabella di dati come questa? Vogliamo creare questo diagramma. Lo troviamo nel menu Analizza, Analizza, Qualità e processo, Diagramma. L'ho già fatto in precedenza, quindi posso compilarlo automaticamente. Non è niente di complicato.
Il diagramma predefinito è quello a lisca di pesce. Proprio alla fine, abbiamo l'intero insieme qui. È difficile da leggere. Con un clic destro, un clic destro qui, possiamo cambiare questo tipo in gerarchia. Ora vediamo che abbiamo una gerarchia fino a sette livelli, e qui inizia l'intero insieme e così via. Abbiamo array associativi. Abbiamo anche liste.
Come ci muoviamo in questi gruppi? Iniziamo dall'intero insieme, ovviamente. Poi scendiamo di un livello in un array associativo delle parti, e poi di un altro livello nel primo giro. Come potete vedere, la linea si sposta molto a destra, quindi ci sono molti altri giri. Prendiamo uno degli analizzatori, in questo caso E2. Abbiamo questo gruppo di valori di misurazione in una lista, e il terzo elemento della lista è il punto dati con valore sei.
Ecco esattamente come un programmatore accederebbe a quel dato. È molto più facile da scoprire e da seguire rispetto a dover orientarsi in una struttura come questa. Abbiamo un programma che esegue l'analisi. Abbiamo applicazioni, interfacce JSON, interfacce REST, strutture JSON, in cui questo è molto utile.
Tutto perfetto? Beh, lo script presuppone che la struttura sia già una struttura JSL. Sarebbe forse utile se ci fosse un'interfaccia utente in cui l'utente potesse dire: "Questa è la mia tabella dati. Questa è la gerarchia delle mie colonne. Per favore, genera un grafico come questo." A quel punto il programma creerebbe il grafico.
Quando si lavora con questo diagramma, si potrebbe notare che non è integrato al 100% in JMP come avviene nelle piattaforme moderne. Sembra che il problema risalga alla versione 2 o 3 di JMP. Se c'è qualcuno del team di sviluppo di JMP in ascolto, per favore, riformuli quella piattaforma.
Potete scaricare la sceneggiatura dalla pagina web della mia presentazione Discovery. Se siete curiosi, se avete domande, se volete incontrarmi al Discovery Summit di giovedì 7 marzo, mi troverete nella Sala da Ballo, allo stand numero 2. Sarò lì.