Ottieni il conteggio per il raggruppamento (riquadri) nel generatore di grafici per verificare che la visualizzazione sia ragionevoleQuindi ho scritto un po' di JSL che è in grado di prendere una tabella di dati e dare suggerimenti di grafici. Verifica il numero di valori univoci, il tipo di dati della colonna e il nome della colonna per valutare quale grafico sarebbe più appropriato.
Un problema che sto riscontrando è quando utilizza Page, Group X, Group Y e/o Wrap e non ci sono molti punti dati nei pannelli risultanti. Di seguito è riportato un esempio sciocco che utilizza Big Class.Chiaramente il nome è una variabile di raggruppamento scadente perché ogni pannello del grafico contiene solo un punto.

Una volta che il mio codice ha scelto una potenziale visualizzazione, quale sarebbe il modo migliore per verificare che il layout non contenga principalmente pannelli che sono dati scarsi/vuoti?
- Poiché so come sono correlate le mie variabili, posso creare una tabella usando tabulate, creare una tabella di dati nascosta, creare una matrice e quindi controllare la scarsità della matrice. Questo sembra prolisso.
- Ho bisogno di un conteggio che non credo sia possibile usando la funzione JSL summarise() (in JMP 12) che non crea una tabella.
- C'è un modo elegante per costruire la matrice di conteggio?
- Tipicamente il codice suggerisce tre grafici per ogni elemento nell'elenco più numeroso (X, Y o Legend), quindi voglio evitare di creare tabelle se possibile.
Grazie,
Stefano
Re: Ottieni il conteggio per il raggruppamento (riquadri) nel generatore di grafici per verificare che la visualizzazione sia ragionevoleSi scopre che esiste un componente aggiuntivo JMP che può convertire tutte le colonne di caratteri in numeriche . Grazie a @M_Anderson per facendolo notare .
Questo rende davvero facile usare summarise().
Re: Ottieni il conteggio per il raggruppamento (riquadri) nel generatore di grafici per verificare che la visualizzazione sia ragionevoleSe tutte le variabili di raggruppamento fossero numeriche, sarebbe più veloce, perché il riepilogo sarebbe in grado di eseguire rapidamente il conteggio. Ma questo è molto restrittivo per i dati e/o per l'utente. È possibile convertire le chiamate della funzione di riepilogo in piattaforme "Riepilogo" e creare tabelle in grado di gestire colonne sia numeriche che di caratteri. Potresti fare dei test di cronometraggio per vedere se funzionerà.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\car physical data.jmp" );
dtsumm=dt << Summary(private,
Group( :type),
N( :type ),
Freq( "None" ),
Weight( "None" )
);
show(dtsumm:type<<GET values=""></GET>
Re: Ottieni il conteggio per il raggruppamento (riquadri) nel generatore di grafici per verificare che la visualizzazione sia ragionevoleGrazie per quell'esempio. Se ho un gruppo Y e un gruppo X (anche potenzialmente X) tutti come carattere, allora devo annidare tre cicli for? Questo diventa rapidamente un modo per legare JMP in loop poiché le tabelle di dati sono di dimensioni sconosciute (potenzialmente un utente potrebbe richiedere 30 grafici che richiedono tutti il calcolo della matrice del pannello - ho bloccato il programma per visualizzare solo i primi 30 suggerimenti) .
Forse questo è un esempio migliore usando i dati fisici delle auto, quello che speravo era una matrice 3x5 o un elenco di 15 elementi.

È meglio ricodificare le colonne dei caratteri come numeriche per utilizzare al meglio summarise()? È probabile che sia più veloce/più ordinato dei cicli for?
Re: Ottieni il conteggio per il raggruppamento (riquadri) nel generatore di grafici per verificare che la visualizzazione sia ragionevoleRiassumere è la strada da percorrere. Non può eseguire conteggi per colonne di caratteri, ma può ottenere i valori di raggruppamento da cui è possibile ottenere i conteggi. Vedi lo script qui sotto
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
// Numeric Column
dt = Open( "$SAMPLE_DATA\big class.jmp" );
Summarize( dt, bygroup = by( :age ), counts = Count( :age ) );
Show( "Numeric Column", bygroup, counts );
// Character Column
Summarize( dt, bygroup = by( :sex ) );
counts = {};
For( i = 1, i <= N Items( bygroup ), i++,
Insert Into( counts, N Rows( dt << get rows where( :sex == bygroup[i] ) ) )
);
Show( "Character Column", bygroup, counts );