Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?Pronto a imparare a mettere insieme tutto in una sceneggiatura vera e propria? Bentornati alla mia serie sulle basi dello scripting in JMP . Questa è la quinta voce di una serie strutturata in modo che tu possa lavorare. Se ti stai appena unendo a noi, vorrai davvero dare un'occhiata alle voci precedenti la serie , perché questo è un doozy. Ecco i link a loro per la tua revisione:
Va bene? Ancora qui? Hai guardato gli episodi precedenti? Eccellente! Avanti verso la gloria!
Dai compiti a casa un paio di settimane fa, dovremmo tutti avere un mucchio di frammenti JSL da usare Salva copione alla finestra dello script o lo Scripting Index per ottenere pezzi di codice di cui abbiamo bisogno. Voi fatto Fai i tuoi compiti, Giusto ? Bene! Iniziamo a mettere insieme tutto in una sceneggiatura vera e propria. Ma prima, dobbiamo fare una piccola chiacchierata.
Uno degli animali da programma di Mikey irrita
Va bene, gente. Lasciami, solo per un momento, alzarmi sulla mia scatola di sapone per qualcosa. Quando scriviamo codice, dobbiamo Sempre commentalo! Non possiamo fare ipotesi sulla persona che leggerà il nostro codice dopo di noi, inclusi noi stessi.
Al college, ho seguito un corso di codifica in Visual Basic. La prima cosa che abbiamo imparato è stata come commentare il codice e scrivere pseudocodice. Gli pseudocodici, tra l'altro, sono commenti che scrivi prima di scrivere il codice per aiutarti a mappare ciò che devi fare (sono simili alla punch list che ti ho fatto scrivere quel primo post ). L'istruttore ha definito i commenti e lo pseudocodice "essere un buon cittadino nella comunità dei programmatori". Siamo stati persino valutati in base al modo in cui abbiamo commentato il codice che abbiamo inviato. È così importante.
La verità è che raramente hai il controllo completo su chi vede il tuo codice. Caso in questione: in questa serie di blog, ti ho fornito istruzioni dettagliate su come decodificare il componente aggiuntivo di qualcun altro. Posso garantire che alcune (se non la maggior parte) delle persone che hanno scritto quei componenti aggiuntivi non si aspettavano che altri sbirciassero sotto il cofano del loro codice. Posso anche garantire che non troverai tanti commenti nel codice per aiutarti a capire cosa sta succedendo come speri.
Devi commentare il tuo codice per assicurarti che qualcuno che lo visualizzerà in un secondo momento possa capire facilmente cosa stai facendo. Sì, commentare è un dolore. E, sì, ci vuole più tempo. Ma, NO , non puoi semplicemente saltare l'operazione. Pagherà dividendi nel lungo periodo. E pratico quello che predico qui. Ho dei componenti aggiuntivi che ho scritto cinque anni fa che posso ancora capire perché ho fatto commenti dettagliati (e ricordo ancora quanto fosse noioso farlo!).
Quindi, quelli di voi che già programmano, assicuratevi di commentare il vostro codice in modo che qualcun altro possa capire cosa state facendo. Quelli di voi che stanno imparando, prendono l'abitudine e mantengono l'abitudine di commentare pesantemente il proprio codice. Ora, fammi scendere da questa scatola di sapone e mostrarti come fare.
Commentando in JSL
Apriamo JMP e apriamo la tabella dati Big Class Families.jmp che abbiamo utilizzato. Se non hai salvato l'esempio di script dall'ultima sessione, vai avanti e ricrealo. Dovresti avere qualcosa che assomigli a questo:

Esistono due modi per inserire commenti nel codice JSL. Il primo consiste nel commentare le singole righe utilizzando una doppia barra ("//"). Tutto ciò che segue le barre fino a un ritorno a capo (premendo Invio sulla tastiera) verrà ignorato. Generalmente uso questo metodo per fare i miei brevi commenti in linea. È anche utile disattivare singole righe di codice che non si desidera eseguire. Diamo un'occhiata a cosa significa:

Il secondo modo in cui puoi commentare viene utilizzato nei casi in cui desideri disattivare grandi blocchi di codice o generare grandi blocchi di commenti e testo. Questo tipo di commento è chiamato blocco di commento. È fatto usando un flag di commento di apertura composto da una barra e un asterisco ("/*") e un flag di commento di chiusura composto da un asterisco e una barra ("*/"). Ecco un esempio di come potrebbe essere utilizzato:

Nota che non sto discutendo di commentare stile Qui. In realtà dipende da te. Svilupperai il tuo stile man mano che procedi e potresti persino avere stili di commento diversi per scopi diversi. I miei commenti in linea (come quelli negli esempi) sono completamente diversi dai commenti che faccio in qualcosa come un'applicazione. Il punto è scrivere i commenti ed essere internamente coerenti in uno script con il modo in cui lo fai.
I pezzi più difficili di tutta questa serie
Davvero, l'intera serie ha portato a questi prossimi articoli. Ci sono tre cose fondamentali che devi sapere per iniziare in JSL. Il primo è commentare (vedi il sermone all'inizio di questo articolo). Il secondo e il terzo lo sono come dare un nome alle cose E come inviare messaggi a loro.
Suppongo sia possibile codificare il proprio algoritmo ANOVA (un mio collega racconta una storia molto divertente a riguardo). Tuttavia, è molto più semplice dire a una tabella di dati di eseguire un'ANOVA utilizzando Stima Y per X tramite un messaggio, come abbiamo appreso nell'episodio precedente. Quel flusso di lavoro di base (nominare qualcosa, inviare un messaggio ad esso) è molto di ciò che riguarda JSL. Sì, puoi entrare nella logica e nei loop, nello sviluppo della GUI, ecc., Ma lo scripting di forza bruta richiede davvero solo nomi, messaggi e una piccola ricerca nell'indice di scripting.
Dare un nome alle cose
Iniziamo con il nominare le cose. Dai un nome alle cose dando a JMP un nome seguito da un segno di uguale e quindi scrivendo il testo, il numero, il codice, ecc., che vuoi che quel nome rappresenti. Il nome si chiama a variabile . Puoi pensare alle variabili come contenitori in cui puoi inserire elementi o come soprannomi per i report aperti JMP .
Diamo un'occhiata a un esempio utilizzando un ANOVA. Per creare il codice per un'ANOVA, eseguire prima l'analisi in Stima Y per X (in Analizza), quindi attivare il test ANOVA e quindi salvare il codice in una finestra di script. Ecco il rapporto per quello usando Big Class Families.jmp e il codice JSL risultante salvato dal menu del triangolo rosso (altezza come Y, sesso come X e selezionando Mezzi/Anova/Raccolta t sotto il triangolo rosso):


Questo piccolo frammento JSL produrrà un'ANOVA per qualsiasi tabella di dati che ha gli stessi nomi di colonna della tabella di dati originale. (Non ci preoccuperemo della parametrizzazione in questa serie, però. È un po' fuori portata.)
Ora, cosa succede se hai un sacco di tabelle di dati aperte e vuoi controllare su quale tabella di dati vuoi eseguire l'ANOVA? Bene, puoi modificare lo script dando un nome alla tabella dati su cui vuoi eseguire l'ANOVA e quindi inviando il codice generato da JMP come messaggio. Se dovessi guardare nello Scripting Index (vedi l'articolo su come ottenere aiuto), troverai un paio di modi per farlo. È possibile chiamare direttamente una tabella di dati o acquisire un riferimento alla tabella di dati su cui JMP si concentra attualmente utilizzando Current Data Table(). C'è una terza opzione un po' più avanzata, in cui si assegna un nome a una tabella di dati mentre la si apre. Di seguito ho inserito esempi di tutti e tre (e ancora una volta notare l'uso dei commenti per trasmettere informazioni!):

Chiamare la tabella dati per nome funzionerà finché è aperta una tabella dati con il nome che si sta tentando di utilizzare. Questo può essere utile se hai un elenco di nomi di tabelle di dati su cui lavorare. Può anche essere utile se hai nascosto o ridotto a icona la tabella dei dati. In entrambi i casi, puoi comunque inviare messaggi alla tabella dati anche se non puoi necessariamente vederla. Questo metodo utilizza la forma:
= Tabella dati(“”);
Probabilmente il modo più utile per assegnare una variabile a una tabella di dati per i nostri scopi è utilizzare la funzione Current Data Table(). Questa funzione prende qualunque sia la tabella dati attiva o corrente e la assegna alla variabile che hai indicato. Una volta assegnata la tabella alla variabile, non ha importanza se un'altra tabella dati diventa “corrente” (ad esempio, creando una tabella riassuntiva, avrai sempre un riferimento alla prima tabella dati finché non ridefinisci la variabile). Ha una forma più semplice:
= Tabella dati corrente();
L'ultimo metodo è utile se si desidera presumere che la tabella dati potrebbe non essere aperta quando qualcuno esegue lo script. Utilizzando questo metodo, JMP genererà una finestra di dialogo file che consente all'utente di selezionare il file che desidera aprire. Quando l'utente conferma la sua scelta, il file verrà aperto e gli verrà assegnato il nome della variabile che gli hai dato. Di nuovo, è una forma semplice:
= Open();
Usando il Aprire(…); metodo può anche essere utile se sei a tuo agio nel lavorare su percorsi di file e directory. È possibile inserire il percorso del file tra parentesi per indicare a JMP dove cercare il file, in questo modo:

Inoltre, nota che sto usando qualcosa chiamato a Variabile di percorso nel Aprire(…); comando per accorciare la stringa. C'è una sezione su di loro nel Guida alla sceneggiatura .
Invio di messaggi
Ora, una volta che hai nominato qualcosa, è possibile inviargli un messaggio. Funziona in modo simile all'invio di un messaggio di testo a qualcuno sul telefono. Quando invii un SMS, la prima cosa che devi sapere è il nome, l'indirizzo email o il numero di telefono del destinatario, qualcosa per identificarlo. Lo inserisci nell'app di messaggistica e poi invii il messaggio. Ecco come farlo usando Big Class ANOVA. Mi divertirò e farò in modo che JMP mi chieda di aprire un file in questo caso:

Decomprimiamo ciò che stiamo vedendo qui a partire dalla riga 5. La prima cosa che vediamo è il nome della variabile della tabella dati a cui vogliamo dare un'istruzione. Proprio come quando inviamo un messaggio o diamo istruzioni a una persona, dobbiamo identificare con chi stiamo parlando. Successivamente ci sono due simboli "minore di" (<<). Abbiamo già visto qualcosa di simile con l'Operatore Glue (;). Il simbolo "<<" è indicato come Message Operator. Consente al destinatario del messaggio di sapere che ciò che segue è un messaggio. Successivamente, vediamo una funzione chiamata Oneway(...); con gli argomenti necessari alla funzione per creare il report ANOVA. Nota: puoi ottenere tutte le informazioni sulle opzioni per quella funzione nella documentazione o nell'indice di scripting, ma in realtà non devi scriverne nessuna a mano. Esegui semplicemente l'analisi una volta e prendi lo script finito (con tutte le opzioni) utilizzando uno dei file Salva script in... comandi che ti ho mostrato prima.
Alcune cianfrusaglie
Ok, ci sono tre ultimi dettagli che devono essere affrontati. Il primo è il problema di mettere insieme le cose. Ad esempio, se si desidera eseguire un'ANOVA e creare un Costruttore di grafici nello stesso script, è necessario avvisare JMP che devono seguire ulteriori istruzioni. Per fare ciò, usa quell'operatore di colla (;) che continuo a menzionare.

Come un punto e virgola nell'inglese scritto, il punto e virgola alla fine di un comando fa sapere a JMP che ci sono altre istruzioni in arrivo. La colla si trova alla fine di un'istruzione come Bivariate(...) ; , o Distribuzione(...) ; , o dare un nome a qualcosa: roba = 5 + 6 ; . Come forse ricorderete dai post precedenti, JMP include automaticamente il punto e virgola quando lo utilizziamo Salva script... nella finestra dello script , ma durante lo scripting a mano libera, questo sembra essere l'errore più comune che commetto durante lo scripting: dimenticare di incollare le cose insieme.
Il secondo dettaglio è garantire che i tuoi script siano buoni cittadini in una sessione JMP. Questo viene fatto assegnando tutte le variabili che crei a a spazio dei nomi . Uno spazio dei nomi è una piccola sandbox che impedisce ai nomi delle variabili che crei di interferire con altre parti del software. Lo spazio dei nomi predefinito è chiamato spazio dei nomi "Here". Negli script ha questo aspetto (vedi riga 2):

Questa istruzione dovrebbe sempre essere inserita all'inizio di uno script (fino a quando non si apprende quando non usarla!) per evitare che i nomi delle variabili entrino in collisione con altri script o parti di JMP. Prima di iniziare a strapparti i capelli su questo punto, ecco una versione TL; DR di ciò che ho appena detto: ricorda solo di mettere sempre "Names Default To Here (1);" all'inizio della tua sceneggiatura e per il momento starai bene. Se vuoi saperne di più sui namespace, c'è un paragrafo sull'argomento in quest'altro post l'ho scritto tempo fa .
L'ultimo dettaglio che devo discutere è come modificare il nome di una colonna in uno script salvato. È davvero semplice. Guarda nel tuo script salvato. Dovresti vedere i nomi delle colonne preceduti da due punti (":"). Quei due punti indicano che sono nomi di colonne (può significare altre cose, ma per ora significa nomi di colonne). Per cambiare il nome di una colonna, basta cambiarlo, ma ricordarsi di mettere i due punti davanti. Se i nomi delle colonne contengono caratteri speciali, potresti imbatterti in qualcosa come :Name(“…”) quando JMP emette lo script per te. È così che JMP gestisce il fatto che il nome della colonna contenga caratteri che causerebbero problemi se non fosse chiaro che fanno parte di una stringa. Anche se è una cattiva forma di codifica usare :Name(“…”) nei nostri script, il software lo usa perché non ha scelta. Dovresti provare a scegliere nomi di colonna migliori.
Ma ti sei dimenticato di...
OK, mi rendo conto che alcuni di voi probabilmente stanno diventando un po' nervosi a questo punto. Potresti pensare: "TI SEI DIMENTICATO DELLE FUNZIONI!!!" o "MA PER LE ESPRESSIONI!!!" o anche, “TU TWIT!!! HAI COMPLETAMENTE GLOSSATO SU LOGICA E LOOPING! Prima di tutto, non è carino fare nomi. In secondo luogo, non ho dimenticato nulla di tutto ciò. IO consapevolmente omesso.
Il fatto è che questa serie non ha lo scopo di farti saltare i capelli indietro. Come ho detto all'inizio della serie, ha lo scopo di puntare il naso sulla strada giusta, darti una buona mappa, degli snack, una pacca sulla spalla e mostrarti dove cercare aiuto nel caso rimani bloccato. È un punto di partenza. (Hai il mio permesso di fare uno spuntino a questo punto, btw.)
Per quelli di noi che sceneggiano regolarmente, molto di ciò di cui sto parlando qui è così fondamentale - così basilare - che è la memoria muscolare. La cosa che abbiamo dimenticato è che, solo usando la conoscenza fondamentale che sto trattando qui, uno sceneggiatore neofita può coprire un sacco di terreno. Ad ogni modo, se stai andando in iperventilazione perché non ho coperto niente di super stravagante, rilassati. Andremo giù nella tana del coniglio nella prossima serie. Per ora, torniamo alla discussione e parliamo dei compiti di questa settimana.
Compiti a casa
Va bene - eccoci qui. Il grande esercizio dei compiti. Questa settimana prenderete i pezzi di codice che avete creato la scorsa settimana e li incollerete insieme. Fallo un po' alla volta. Se il tuo script vivrà al di fuori di una tabella di dati (come un file JSL), inizia aprendo la tua tabella di dati e inserendola in una variabile. Dopodiché, indipendentemente da dove vivrà il tuo script, aggiungi un po 'e controlla che faccia quello che ti aspetti. Quindi aggiungi altro e controlla di nuovo di ottenere il risultato previsto. Ricorda che la Community, i file di aiuto, ecc., sono tuoi amici. Se ricevi messaggi di errore, guarda il registro ( Visualizza > Registro per pc e Finestra > Registro per MacOS) e il episodio precedente .
Buona fortuna e alla prossima settimana!