La prima cosa che vorrei sapere quando ho iniziato a scrivere script: ci sono diversi tipi di scriptAncora una volta verso la breccia!
Stavo parlando con mio padre qualche settimana fa. Non per uscire con lui, ma lo sta usando JMP dalla versione 1.0. Ricordo di aver visto i dischi da 3,5 pollici accanto al nostro Mac II-se quando stavo imparando a usare il mouse per la prima volta. La stessa macchina è stata esposta alla conferenza Discovery Summit del 2019 a Tucson, in Arizona. Eccone una foto:

Comunque, io e mio padre stavamo discutendo la mia prima serie di blog Five Things . Ha detto che desiderava che qualcuno scrivesse una serie su come iniziare con lo scripting in JMP. All'epoca stavo già scrivendo altri articoli, quindi li ho messi da parte per un progetto futuro. La vita, però, aveva altri piani. Una settimana dopo, mi è stato chiesto di aiutare con una presentazione al cliente e, con mia sorpresa, uno degli argomenti che volevano che trattassi era un'introduzione allo scripting! L'universo ama gli scherzi, a quanto pare.
Comunque, ci risiamo! Seguendo il formato della mia prima serie Five Things, ecco le cinque (più o meno) cose che penso che tutti dovrebbero sapere quando iniziano a scrivere la sceneggiatura. In primo luogo, un pensiero concettuale.
Vedi un bisogno, soddisfa un bisogno
Prima di iniziare a scrivere script, devi considerare la necessità. Le probabilità sono che, se vuoi scrivere una sceneggiatura, c'è qualche motivo. Forse lo stai facendo per renderti più efficiente sul lavoro. Forse stai cercando di standardizzare i metodi analitici per un gruppo. O forse sei, in effetti, una di quelle rare persone che hanno deciso di prenderlo per sorrisi e risatine. Nessuno di questi è un cattivo motivo, anche se l'ultimo può rendere le cose un po' più difficili (spiegherò il perché tra poco). Il punto è che dovresti avere una ragione in testa e uno scopo specifico per il tuo primo copione.
Ci sono script e poi ci sono script
Ci sono, nella mia mente comunque, due diversi tipi di script: quelli che agiscono su dati esistenti e quelli che creano dati. Gli script che funzionano su dati esistenti interagiscono con una tabella di dati e piattaforme esistenti in JMP per creare un nuovo output definito dall'utente. Queste possono essere cose semplici come avvolgere una finestra attorno a più report o complesse come un report personalizzato in Application Builder. La chiave in comune è che gli script come questo lo sono modificare il contenuto esistente .
Il secondo gruppo sono script che creano dati. Gli script che creano dati possono essere strumenti di simulazione, grafica personalizzata, strumenti per la gestione dei metadati in un file JMP, ecc. Questo gruppo è un po' più nebuloso, ma il tema comune è che gli script estendono JMP in modi che vanno oltre l'arricchimento di dati o analisi esistenti. La maggior parte delle volte, questi script lo faranno creare nuovi contenuti da zero.
Gli script che modificano il contenuto esistente sono in genere il punto di partenza delle persone quando pensano di imparare il linguaggio di scripting di JMP (JSL). Questo è anche il punto in cui inizieremo la nostra discussione. Quindi, facciamo un passo indietro e pensiamo al motivo per cui sei interessato a imparare JSL.
Dammi una frase, Vasily. Una sola frase, per favore.
Prenditi un momento e pensa al tuo Bisogno . Quale punto dolente speri di affrontare con JSL? Ora capisci perché lo scripting per sorrisi e risatine (almeno all'inizio) può essere complicato? È molto più probabile che tu riesca a superare la curva di apprendimento se hai un motivo per raggiungere la vetta. Non sto dicendo che non puoi prendere JSL per il gusto di farlo, solo che la lotta è più dura senza la motivazione extra.
Il passo successivo, e quello finale che tratteremo in questo episodio, è cosa fare con quel bisogno. La semplice risposta è che farai due cose. Per prima cosa, scriverai quell'idea (forse nebulosa) che ti sta spingendo a imparare JSL in una singola frase: una dichiarazione del problema. E intendo solo una frase. Assicurati di essere in grado di cristallizzare l'idea in qualcosa di tangibile da cui partire. Aiuterà anche a frenare lo scorrimento dell'ambito. Ecco alcuni esempi:
- Voglio automatizzare tutta la generazione di grafici per il mio rapporto settimanale in uno script.
- Voglio automatizzare il lavoro di formattazione per una tabella di dati fornita dal cliente.
- Desidero generare una serie di carte di controllo da un file di dati fornito dal mio sistema informatico di fabbrica.
Nota che non sto parlando di dettagli; Sto semplicemente affermando il punto dolente che mi fa guardare a JSL. E poi ho smesso di scrivere.
Fai la tua lista di cose da fare
Hai la tua dichiarazione del problema? Bene! Ora scriveremo una serie di risultati specifici per la tua sceneggiatura. Sarà la nostra punch list ad aiutarci a individuare le risorse fornite da SAS per l'apprendimento di JSL. Non elencare alcuna interfaccia utente grafica (GUI) o interfaccia utente (UI) in modo specifico. Elenca le azioni che lo script deve eseguire. Ecco alcuni esempi per le affermazioni del problema di cui sopra:
Dichiarazione del problema 1: Voglio automatizzare tutta la generazione di grafici per il mio rapporto settimanale in uno script.
Lista di controllo:
- Estrai un set di dati dal nostro database di produzione contenente i dati delle ultime tre settimane.
- Crea un grafico del tempo rispetto alla temperatura per il mio prodotto.
- Esegui un'analisi del tempo rispetto alla temperatura utilizzando un modello polinomiale.
- Esporta i grafici e i report in un file PowerPoint.
Dichiarazione del problema 2: Voglio automatizzare il lavoro di formattazione per una tabella di dati fornita dal cliente.
Lista di controllo:
- Rinominare le colonne in base a standard interni (utilizzando la tabella delle specifiche).
- Assegna le unità alle colonne necessarie (utilizzando la tabella delle specifiche).
- Converti Lat e Long in coordinate geografiche.
- Modifica unità difettose colonna da continuo A ordinale .
Dichiarazione del problema 3: Desidero generare una serie di carte di controllo da un file di dati fornito dal mio sistema informatico di fabbrica.
Lista di controllo:
- Importa i dati dal percorso di rete.
- Assegna i limiti delle specifiche.
- Costruisci carte di controllo.
Nota qui che non mi sto inscatolando troppo. Sto solo costruendo un elenco di cose che devo fare con la sceneggiatura. Dato che presumo che tu non abbia mai lavorato in JSL prima, presumo anche che tu non sappia come affrontare questi problemi. Scrivendoli, sai cosa devi cercare nell'aiuto e nelle risorse. Ed è qui che riprenderò nella prossima puntata di questa serie.
Pensiero di chiusura per questa settimana
Dato che questa serie durerà alcune settimane, ho deciso di renderla più una serie di lavoro che qualcosa che hai appena letto. Quindi, prendi questi ultimi punti che ho fatto come compiti a casa. Se desideri responsabilità o feedback, inseriscili nei commenti qui sotto. Interverrò se posso aiutarti o farti sapere se potresti prepararti per qualche problema lungo la strada.
Per ottenere punti bonus, apri una finestra di script in JMP ( File > Nuovo > Script ) e inserire la dichiarazione del problema e gli elenchi puntati nella finestra dello script, uno per riga con una doppia barra ("//") all'inizio della riga. È possibile che il colore del testo diventi verde per quelle righe nell'editor di script JSL. Parleremo di quello che hai appena fatto in un prossimo episodio.
Oh, e se ti stai chiedendo chi sia Vasily e perché dovrebbe darti una frase singolare, dai un'occhiata Qui .

Esistono due diversi tipi di script: quelli che agiscono sui dati esistenti e quelli che creano dati.
Ri: La prima cosa che avrei voluto sapere quando ho iniziato a scrivere script: ci sono diversi tipi di scriptOttimo pensiero! Dai un'occhiata alla parte 2 della serie per ulteriori aiuti: La seconda cosa che vorrei sapere quando ho iniziato a scrivere script: ottenere aiuto
Migliore,
M
Re: La prima cosa che avrei voluto sapere quando ho iniziato a scrivere script: ci sono diversi tipi di scriptBuoni pensieri.Per imparare JMP, la nuova edizione di Entra nello script JMP , di Murphrey e Lucas mi è stato utile.
Oggetto: La prima cosa che avrei voluto sapere quando ho iniziato a scrivere sceneggiature: Esistono diversi tipi di sceneggiatureIl mio linguaggio di programmazione principale è SAS. Data Step, linguaggio macro, PROC SQL, PROC IML, quindi non si tratta propriamente di un unico linguaggio, ma ho seguito un breve corso su JMP e mi ha subito incuriosito. Perché? Nel corso degli anni ho capito che in realtà ci sono solo due cose importanti.
1. Inizialmente ho chiesto se il software fornisse la risposta corretta, ma poi ho cambiato la domanda in se il software fornisse una risposta che si potesse difendere in caso di contestazione o critica.
2. Quanto velocemente riesci a ottenere la risposta al punto 1?
Inizialmente utilizzavo solo le funzionalità "punta e clicca" di JMP, ma ho scoperto di dover imparare un po' di JSL per poterlo usare in modo più efficiente.
Ad esempio, sto mostrando ai miei studenti come usare k-nn per prevedere un risultato continuo. Ci sono 12 possibili predittori (un mix di variabili continue e nominali) con un risultato continuo e una variabile di validazione. Voglio mostrare come cambiano R² , RASE e AAE quando si rimuovono i predittori. Ciò richiede un'esecuzione con 12 predittori, poi con 11, ... fino a un'esecuzione finale con due predittori. Dal tuo terzo post in questa serie di blog ho appreso della Nuova Finestra
New Window("My Window",
// Launch platform: K Nearest Neighbors 12 Variables
Data Table( "Boston Housing Plus Validation Column" ) <<
K Nearest Neighbors(
Validation( :Validation ),
Y( :MEDV ),
X(:CRIM, :ZN, :INDUS, :CHAS, :NOX, :RM, :AGE, :DIS, :RAD, :TAX, :PTRATIO, :LSTAT),
K( 20 )
);
additional analyses with 10 predictors down to last run with 2. So, a total of 11 analyses.
);
"Nuova finestra" che visualizza i risultati in un'unica finestra, a differenza delle 11 finestre generate dall'esecuzione dell'algoritmo k-NN con 11 diverse liste di predittori. Successivamente, posso fare clic con il pulsante destro del mouse sulla tabella dei risultati, selezionare "Crea tabella dati combinata" e ottenere i risultati di tutte le 11 analisi in un'unica tabella.
Penso sia ovvio che devo convertire il codice con 11 analisi diverse (da 12 predittori a 2) in un ciclo. Questo è il mio prossimo passo nell'apprendimento di JSL.
JMP e JSL per principianti.
Grazie per i tuoi post. Sto usando JMP Student 19 su un computer Windows.
Giovanni
Oggetto: La prima cosa che avrei voluto sapere quando ho iniziato a scrivere sceneggiature: Esistono diversi tipi di sceneggiature@jkeighley , grazie per le gentili parole! Sono contento che la serie ti sia stata utile. È un po' un labirinto, ma dai un'occhiata a questo esempio... potrebbe darti qualche spunto su come strutturare il nuovo report (l'indice degli script dovrebbe aiutarti con alcuni dettagli più specifici):
Names Default To Here( 1 );
Clear Log();
// data table goes here
dt = Open( "$Sample_Data/penguins.jmp" );
// report names go here (this is what the tabs will be named)
reportNames = {"report 1", "report 2", "report 3", "report 4", "report 5"};
// jsl for each tab's contents go here. One tab per Expr() call. They
// should be in the same order as the report names.
reportScripts = {Expr(
dt << Scatterplot 3D(
Y( :Culmen Length, :Culmen Depth, :Flipper Length ),
Coloring( :Species ),
Normal Contour Ellipsoids( 1, :Species ),
Nonpar Density Contour( 1, :Species ),
Legend( 1 ),
Frame3D(
Set Graph Size( 655, 672 ),
Legend( 1 ),
Set Grab Handles( 0 ),
Set Rotation( -72.1900689453449, -1.75327107936844, 34.4563606108469 )
),
SendToReport( Dispatch( {}, "Density Contour Controls", OutlineBox, {Close( 1 )} ) )
)
), Expr(
dt << Hierarchical Cluster(
Y( :Culmen Length, :Culmen Depth, :Flipper Length, :Body Mass, :Delta 15 N, :Delta 13 C ),
Label( :Species ),
Method( "Centroid" ),
Standardize By( "Columns" ),
Color Clusters( 1 ),
Show Dendrogram( 0 ),
Dendrogram Scale( "Distance Scale" ),
Number of Clusters( 4 ),
Constellation Plot( 1 ),
Cluster Summary( 1 )
)
), Expr(
dt << Graph Builder(
Size( 662, 560 ),
Show Control Panel( 0 ),
Variables( X( :Species ), Y( :Culmen Length ) ),
Elements( Points( X, Y, Legend( 3 ) ) )
)
), Expr(
dt << Graph Builder(
Size( 662, 552 ),
Show Control Panel( 0 ),
Variables( X( :Body Mass ), Y( :Flipper Length ), Overlay( :Species ) ),
Elements( Points( X, Y, Legend( 13 ) ), Contour( X, Y, Legend( 16 ), Contour Type 2D( "HDR" ) ) ),
SendToReport(
Dispatch( {}, "Graph Builder", FrameBox,
{DispatchSeg( Contour Seg( "Contour (Adelie penguin (Pygoscelis adeliae))" ), {Line Color( {230, 159, 0} )} ),
DispatchSeg( Contour Seg( "Contour (Chinstrap penguin (Pygoscelis antarctica))" ), {Line Color( {86, 180, 233} )} ),
DispatchSeg( Contour Seg( "Contour (Gentoo penguin (Pygoscelis papua))" ), {Line Color( {0, 158, 115} )} )}
)
)
)
), Expr(
dt << Fit Group(
Bivariate( Y( :Flipper Length ), X( :Culmen Length ), Nonpar Density( {Contour Fill( 1 ), Color Theme( "Spectral" )} ) ),
Bivariate( Y( :Flipper Length ), X( :Culmen Depth ), Nonpar Density( {Contour Fill( 1 ), Color Theme( "Spectral" )} ) ),
Bivariate( Y( :Body Mass ), X( :Culmen Length ), Nonpar Density( {Contour Fill( 1 ), Color Theme( "Spectral" )} ) ),
Bivariate( Y( :Body Mass ), X( :Culmen Depth ), Nonpar Density( {Contour Fill( 1 ), Color Theme( "Spectral" )} ) ),
<<{Arrange in Rows( 2 )}
)
)};
// I'm creatng an Associative array to manage the looping for me
reports = Associative Array( reportNames, reportScripts );
// build the window wrapper
nw = New Window( "Example Report", tb = Tab Box() );
// loop through the AA and append each tab page box to the tab box in the report
For Each( {{k, v}, i}, reports, tb << Append( Tab Page Box( Title( k ), Eval( v ) ) ) );
// set the view back to the first report.
tb << Set Selected( 1 );