
In questa dimostrazione, esamineremo la selezione di righe specifiche e l'utilizzo del comando "subset", che si trova interattivamente nel menu "Tabelle", per estrarre un sottoinsieme della tabella dati. Nel diario del corso, nella sezione "Ski Lodge Temperature Data", cliccherò su "Ski Lodge Temperature Data". Questa è una tabella dati ampia, ma piuttosto breve. Il nostro scenario prevede una stazione sciistica con una stazione meteorologica che registra la temperatura ogni ora e la salva in un file. Quindi, per ogni osservazione, il file conterrà la data e le letture orarie della temperatura. La stazione è impostata alle ore 17:00, così come la temperatura alle ore 17:00. Ora, supponiamo che, quando la temperatura scende sotto i -10 °C, intendiamo accendere i cannoni sparaneve, perché a quelle temperature potrebbe essere troppo freddo per nevicare. Vogliamo quindi esaminare il nostro archivio di dati storici per trovare i giorni in cui avremmo utilizzato quel cannoni sparaneve. Forse stiamo cercando di giustificare l'aggiunta di un altro cannoni o la sostituzione di quello esistente. Ecco un paio di cose. In primo luogo, questa temperatura è stata registrata su una scala Fahrenheit, non Celsius. In secondo luogo, stiamo utilizzando solo un piccolo sottoinsieme di dati. Questi sono in ordine di giorno, ma rappresentano una delle nostre best practice: quando si lavora su un ampio set di dati, si cerca di ottenere un campione rappresentativo di osservazioni per lo sviluppo del proprio script, in modo da poterlo sviluppare e testare su un sottoinsieme più piccolo. Di nuovo, si spera che rappresenti eventuali problemi che ci si potrebbe aspettare di trovare nei dati. E poi si può testare il tutto sull'intero set di dati. Quindi, in questo esempio, si spera che sia rappresentativo, abbiamo preso in considerazione solo una settimana di dati. L'altra cosa è che abbiamo registrato temperature Fahrenheit, ma il nostro limite è di -10 gradi Celsius. Quindi, sebbene possiamo certamente convertire -10 gradi Celsius in Fahrenheit, invece ribadiremo il concetto di lavorare con le operazioni vettoriali ed estrarremo tutte le temperature Fahrenheit come matrice e le convertiremo in temperature Celsius. Nel diario c'è uno script preimpostato chiamato Isolate Snow-Making Days Script. E lo eseguirò un pezzo alla volta. In questa dimostrazione, userò l'opzione del log incorporato invece di navigare avanti e indietro nella finestra del log. Quindi farò clic con il pulsante destro del mouse nella finestra dell'editor di script e selezionerò Mostra log incorporato. Lo ridimensionerò in modo che possiamo ancora vedere l'intero script nella parte dell'editor della finestra. Quindi seleziono la riga e la eseguo. In questo modo ottengo il riferimento per la tabella dati corrente, la tabella dati della temperatura del rifugio sciistico, e la memorizzo in dt. Quindi invierò il messaggio get as matrix e lo memorizzerò nella variabile tempF. Quindi eseguirò la riga. E spesso con una matrice più grande, invece di visualizzare la matrice nel log, otteniamo solo le dimensioni della matrice e l'indicazione che è stata assegnata. Ora notate che ci sono sette righe e colonne. E se torno alla tabella dati, ci sono delle colonne in questa tabella dati. Perché abbiamo estratto solo le colonne? Beh, se si guarda la colonna data, per prima cosa si può vedere che è nominale. Questo suggerisce che forse viene trattata come dati di tipo carattere piuttosto che numerici. E posso ulteriormente confermarlo, potrei andare alle informazioni sulla colonna, ovviamente, ma posso anche confermarlo allargando leggermente la colonna e notando che i valori sono giustificati a sinistra, che è il modo in cui JMP gestisce i dati di tipo carattere. Quindi, quando ho inviato get as matrix alla tabella dati, ha ignorato questa colonna di tipo carattere ed estratto solo le colonne numeriche. La riga quindi prenderà ogni elemento nella variabile tempF, la matrice che è memorizzata lì, e lo convertirà in Celsius e lo memorizzerà in tempC. E di nuovo ricevo lo stesso messaggio nel log, ma potete passare il mouse su tempf o tempc, ovviamente, per vederne i valori. Poi voglio contare le righe in tempC e ho menzionato questa come best practice, contare righe o colonne al di fuori di un ciclo. Quindi conto le righe nella matrice tempC e le memorizzo nella variabile nr. Quindi eseguirò la riga e ovviamente ce ne sono sette. L'altra cosa che voglio fare è creare due matrici. Una che fornisce la temperatura minima in un dato giorno, minTemp, e l'altra che indicherà se la macchina per la neve avrebbe dovuto essere accesa o meno, e si chiama Macchina. Ed entrambe inizieranno con un certo numero di righe, una colonna e valori mancanti. Quindi, in riga, stiamo eseguendo la funzione di assegnazione a cascata. Uso quella funzione J per creare una matrice con un certo numero di righe, ecco il numero di righe di tempC, quella singola colonna come ho detto, e il valore mancante. E se Macchina, minTemp e qualsiasi altra variabile iniziano con lo stesso valore, possiamo semplicemente assegnarle a cascata come si vede in riga. Quindi eseguirò questa operazione e nel log, se si passa il mouse su Macchina o minTemp, si vede solo quella colonna di valori mancanti. Poi voglio fare un ciclo, e inizio con un contatore per verificare che r sia minore o uguale ai numeri memorizzati in nr, e quindi il corpo del ciclo for è questo: avrò una variabile chiamata obs che prenderà, in questo caso, la prima riga e tutte le colonne di tempC. Troverò il valore minimo in quella riga e lo inserirò nella posizione r-esima, o prima, in minTemp. Quindi confronterò il valore che ho appena inserito in minTemp in quella posizione con minus e, se questo confronto è vero, se il valore è minore di minus otterrò un valore booleano 1 come risultato e lo inserirò nella prima posizione in Machine, mentre se è falso, se è maggiore o uguale a minus, inserirò in Machine. Quindi aggiorniamo, eseguiamo un altro test e ora obs verrà sovrascritto con la riga successiva nella tabella dati. E ripeteremo gli stessi passaggi finché non avremo popolato sia minTemp che Machine. Quindi scorrerò le righe e potremo passare il mouse su minTemp. E di nuovo compare nella guida al passaggio del mouse, compare anche in fondo alla finestra di inserimento dello script che potete vedere qui sotto. E posso passare il mouse su "Machine" e ci sono quelli e Ora, negli ultimi due passaggi, avremmo potuto concatenare questi messaggi, ma a scopo dimostrativo, li separeremo. Quindi invierò un messaggio per una nuova colonna a dt. Si chiamerà minTemp e i valori saranno solo quelli che ho appena ottenuto da quel ciclo for. Quindi eseguirò le righe attraverso E potete vedere sullo sfondo che quella nuova colonna è stata creata. Avrei potuto aggiungere un argomento di formato a "new column" per avere un numero fisso di cifre decimali, ad esempio. Questo ha anche restituito un riferimento a un oggetto colonna che avrei potuto memorizzare in una variabile se avessi pianificato di lavorare di nuovo con quella colonna. Quindi il prossimo pezzo di codice imposta un messaggio per "new columns" a dt. Questo si chiama "Make Snow". E i valori provengono da quel vettore di colonne della macchina, che ha e E qui il mio script richiederà di usare etichette di valore dove se c'è un per il valore dei dati l'etichetta sarà no, e se c'è un per il valore dei dati l'etichetta sarà sì. E poi ovviamente usiamo il valore booleano per attivare l'opzione per usare le etichette di valore. Quindi eseguirò le linee attraverso Di nuovo, stiamo creando un'istanza di un oggetto colonna. E voglio tornare alla tabella e scorrere. Quindi nella colonna in questo momento quello che stiamo visualizzando è no e sì. Nel pannello delle colonne Se scorro verso il basso, puoi ancora vedere che Make Snow è continuo, il che significa che si tratta di dati numerici per i valori dei dati effettivi. E un'altra cosa con le etichette di valore quando le uso - e quell'asterisco nel pannello delle colonne indica anche che c'è una proprietà, e se cliccassi su quella vedresti questa - quando uso le etichette di valore, se passo il mouse su una cella nella tabella dati mi mostra il valore dei dati effettivo. Ma se dovessi creare un grafico in questo momento o qualsiasi tipo di analisi, userebbe queste etichette finché sono attivate. E poi, tornando allo script, potremmo di nuovo inviare questi messaggi a cascata alla tabella dati, ma a scopo dimostrativo, li seguiremo in questi passaggi. Invio select where alla tabella dati e cerco le righe in cui il valore nella colonna Make Snow è uguale a Quindi eseguirò line E potete vedere sullo sfondo che ci sono quattro righe che sono state selezionate. E infine invio il comando subsect alla tabella dati. Fornisco un nome per la tabella di output e specifico le colonne. E poiché ho quattro righe selezionate, non devo dire quali righe voglio. Quelle saranno automaticamente quelle inserite nella tabella dei sottoinsiemi. Quindi eseguirò lines attraverso E ora abbiamo quella tabella dei sottoinsiemi. Di nuovo, a questo punto, potremmo scegliere di formattare i dati della temperatura minima. Lo script sorgente riflette il sottoinsieme. E diamo un'occhiata veloce a questo, se faccio clic con il pulsante destro del mouse su source e seleziono modifica. Ogni volta che creo un nuovo script usando un comando dal menu Tabelle, sia in modo interattivo che con uno script, ottengo lo script sorgente. Quindi mostra semplicemente che il comando di tabella utilizzato era subset. L'avvertenza con subset è che non sa perché queste righe sono state estratte, quindi le codifica in modo rigido. Non c'è alcuna base per quella selezione nello script che JMP scrive. E JMP ignora anche questa tendenza predefinita a estrarre solo le righe selezionate inserendo a come argomento per selected rows. Quindi, se si volesse catturare lo script e adattarlo a un altro script che si sta scrivendo, si vorrebbe eliminare le due righe che ho mostrato e, prima di inviare il messaggio di subset, effettuare qualsiasi selezione logica richiesta dallo script. Quindi annullerò quello script. Quindi questo è stato un esempio di utilizzo di un comando dal menu della tabella, ma anche di utilizzo dei dati come matrici.