| Vocero |
Transcripción |
| Jordan Hiller |
Hola a todos. Soy Jordan Hiller y esta charla se titula ¡Roba este código! Tres mejoras para scripts obtenidas del registro mejorado. |
| |
Y aquí está la inspiración para esta charla. Es un libro de Abbie Hoffman, un provocador y activista. Sí, lo tituló «Roba este libro», un título genial. No sé si sea una buena estrategia comercial, pero bueno, es muy pegadizo. |
| |
¿Por qué robar este código? JMP quiere que robes código. La idea es que hagas clic y analices directamente en JMP. |
| |
Y ese código que hay detrás de tu acción de apuntar y hacer clic se guarda. Se guarda en el registro ampliado y puedes copiarlo y reutilizarlo. |
| |
Y eso representa aproximadamente el 90% de tu guion de producción. Vas a tomarlo y reutilizarlo para poder |
| |
Automatiza las tareas comunes y hazlas con un solo clic, en lugar de una secuencia de clics. Ese es el objetivo principal: ahorrar tiempo. |
| |
El script del registro mejorado es la base, el esqueleto de tu script de producción. |
| |
Queda aproximadamente un 10% que debes escribir tú mismo, y ese es el objetivo de esta charla. Vamos a hablar sobre esos elementos que dan cohesión a los guiones de producción. |
| |
Así que en esta charla, me voy a centrar con ustedes, ya saben, no tanto en los detalles de la sintaxis, |
| |
Se trata de una visión mucho más amplia, y eso coincide con mi opinión sobre la mejor manera de aprender a programar en JSL. Es mucho mejor tomar código existente y aprender con ejemplos. Utiliza ese código. |
| |
Busca ese fragmento de código que haga lo que quieres. Lo encontrarás en la comunidad de usuarios de JMP o quizás en la guía de scripting. |
| |
Simplemente cópialo y adáptalo a tus necesidades. No necesitas conocer todas las complejidades de la sintaxis. Así llegarás muy lejos. Aprenderás la sintaxis con la práctica. |
| |
Vamos a analizar tres casos prácticos sobre cómo mejorar el código a partir del registro mejorado, pero primero repasemos JSL. Quizás para algunos sea una introducción a los conceptos básicos de JSL. |
| |
Así que lo importante que debes saber sobre JSL si estás empezando es que todo es un objeto. Todo lo que... |
| |
Se desea realizar alguna acción sobre un objeto, lo que incluye tablas de datos y columnas en tablas de datos, y plataformas, como la plataforma de distribución, el generador de gráficos, Ajustar Y por X, |
| |
y los informes que provienen de esas plataformas. Cuando tienes objetos, la forma de operar con ellos es enviándoles mensajes. Así, los objetos reciben mensajes. Aquí tienes un ejemplo muy sencillo que copié del registro ampliado. |
| |
Abre la tabla de datos de la clase grande en el directorio de datos de muestra y ejecuta un análisis de distribución simple, ¿de acuerdo? Y este es el aspecto del código, copiado directamente del registro. |
| |
Ahora. |
| |
Lo primero que queremos hacer es nombrar la tabla de datos. Darle un nombre, y para ello tomé el código de la línea cinco y lo mejoré. |
| |
Añadí `bctable=` antes del resto del código, antes de la parte de apertura de la instrucción. Esto hace que, al abrir la tabla de datos, se cree una tabla con el nombre `bctable`. Yo elegí `bctable`, pero en la documentación verás `dt`. Puedes usar el nombre que prefieras; este lo asignas tú. |
| |
Así que ejecutemos esto seleccionándolo y haciendo clic en el botón "Ejecutar", abriendo Big Class y asignándole simultáneamente el nombre "bctable". Ahora bien, la ventaja de hacer esto, ¿por qué es importante?, es porque ahora tengo esto |
| |
handle. Es un gancho que puedo usar más adelante en el código, bctable. Cuando digo bctable, me refiero a Big Class. |
| |
Entonces |
| |
Aquí está la siguiente línea, pero es un comando de distribución, y también lo he modificado. Y ya sabes, antes de esto, según el registro, era un comando de distribución sin formato. No tenía... |
| |
No está apuntando a ninguna tabla de datos. Al ejecutarlo de esta manera, JMP simplemente lo ejecutará en la tabla de datos que tenga el foco. |
| |
La tabla de datos actual, que resulta ser de clase grande, porque la abriste justo antes, ¿de acuerdo? Pero siempre es bueno ser explícito. Es recomendable indicar explícitamente con qué tabla de datos quieres trabajar, así que lo haremos de esta manera. |
| |
bctable, luego las flechas dobles y después los comandos de distribución. Eso es lo que hemos añadido: bctable con las flechas dobles. |
| |
Y esta es la sintaxis para enviar un mensaje. Enviamos el mensaje de distribución de la derecha a la tabla de datos, que recibe el nombre de `bctable`, a la izquierda. Y se puede ver que se trata de `Big Class` al pasar el cursor sobre `bctable`. Así que, al ejecutar todo el proceso... |
| |
Recibimos el informe de distribución |
| |
que queríamos. |
| |
Ahora bien... podemos ir un paso más allá y, a menudo, necesitamos hacerlo. Vamos a crear un nombre para la plataforma a medida que la ejecutemos, así que |
| |
Aquí tenemos una línea que incluye tanto la doble flecha como el signo igual, bien. Así que... leamos esto de derecha a izquierda. Vamos a tomar ese mensaje de distribución y enviarlo a la tabla bctable. |
| |
Y el resultado de todo eso, que es la plataforma, lo vamos a guardar en esta variable que estoy llamando distplat. |
| |
Ejecutemos eso. |
| |
De acuerdo, se ve igual, pero la diferencia es que ahora tengo esta variable JSL distplat que puedo usar más adelante en mi código. |
| |
¿Para qué lo usarías? Podrías usarlo para añadir opciones de triángulo rojo a la salida, así que veamos cómo hacerlo... |
| |
Llevemos ese informe de distribución a un lugar donde pueda consultarlo. |
| |
Y vamos a tomar ese objeto distplat, que es... esa es la plataforma de distribución. |
| |
Mira, pasa el cursor por encima y ejecutemos esta línea. Activa el gráfico de quintiles normales en la plataforma de distribución. Ahí está. |
| |
Bueno. |
| |
El último paso es tomar la plataforma, llevar este objeto aquí y a |
| |
Obtén un informe, un objeto de informe. Esa es esta línea. Envía el mensaje del informe al objeto de la plataforma y ahora obtenemos un objeto de informe. |
| |
Y necesitamos hacer esto si quieres acceder a estos valores en tu código; cualquier número, gráfico o elemento gráfico del informe, lo necesitarás, ¿de acuerdo? Este objeto, rdistplat. Así que, ejecutándolo una vez más, rdistplat. |
| |
Lo ejecuté y no se ve nada a simple vista, pero ahora tengo este objeto, rdistplat. Indica que es un cuadro de visualización, y más adelante hablaremos sobre cómo usarlo para acceder a los números aquí en el informe. |
| |
Vale, voy a borrar mi registro. |
| |
y comencemos con nuestro |
| |
estudios de caso. |
| |
La primera técnica que vamos a aprender consiste en repetir el mismo comando una y otra vez en diferentes columnas de la tabla de datos, iterando sobre las columnas con bucles usando el comando "for each". |
| |
Esta es una necesidad muy común; a veces se trata simplemente de algo sencillo que hay que hacer, como cambiar el formato o el tipo de modelo de una columna. |
| |
Podría ser muy complejo, como |
| |
Se trata de transformar la columna, generar un gráfico de control y trabajar con él. Así que sí, es escalable; esta técnica es escalable. |
| |
Así es como vamos a lograr esto en código JSL. Primero haremos clic con el ratón, ¿verdad?, haremos lo que queramos. Lo haremos para una sola columna y luego capturaremos ese código usando el registro mejorado. |
| |
Y ese es el esqueleto de nuestro script. Lo vamos a modificar para iterar sobre todas las columnas en las que queremos realizar esa acción. |
| |
El método que vamos a usar para el bucle for, para iterar, es for each, y eso se introdujo en JMP 16, por lo que esta técnica no va a funcionar en versiones anteriores de JMP. |
| |
Esto también utiliza un concepto llamado listas JSL, así que también hablaremos un poco sobre eso. |
| |
Vale, voy a empezar |
| |
En JMP, permítanme comenzar en la ventana de inicio. |
| |
Voy a... déjenme revisar el registro, asegurarme de que esté limpio. No, tengo que eliminar algo, borrar el registro. Bien, ahora vamos a seleccionar lo que queremos hacer. Voy a abrir una tabla de datos llamada sc20. |
| |
Esta tabla de datos está disponible en los materiales de presentación que encontrará en línea. |
| |
Y al observar esta tabla de datos, tiene una columna de ID y luego tiene aproximadamente 20 |
| |
Columnas de datos. Estas tienen muchísimos decimales, demasiada precisión, y quiero truncarlas a dos decimales. Así que vamos a cambiar el formato para que solo se muestren los dos primeros decimales. |
| |
Es una simple operación de apuntar y hacer clic. Haga clic con el botón derecho, acceda a la información de la columna, |
| |
y cambiaremos el formato de visualización predeterminado para corregir el decimal con dos cifras. |
| |
Bien, y ahora que hicimos eso para NPN1, tenemos otras 19 columnas para las que también nos gustaría hacerlo. |
| |
Examinemos entonces el registro ampliado. |
| |
Y aquí está, este es el código que necesitamos para cambiar el formato de una columna, NPN1, ¿verdad? Para reutilizarlo, ve al triángulo rojo y podrás guardar el script en el portapapeles o en una nueva ventana de script. |
| |
Voy a cambiar a otro archivo, donde he trabajado un poco más, para que podamos profundizar un poco más en esto. |
| |
Bueno. |
| |
Las dos primeras líneas... tres líneas, este es el código del registro. Bien, lo primero que haremos será abrir la tabla de datos. |
| |
Y tal vez hayan notado que he editado un poco; he eliminado la ruta larga, la ruta larga del directorio a este archivo. |
| |
Si lo ejecutas de esta manera, |
| |
Funcionará siempre que la tabla de datos JMP, sc20, se encuentre en el mismo directorio que este archivo JSL. Es decir, es como una ruta de archivo local al mismo directorio en el que te encuentras actualmente. |
| |
En fin, desde el registro simplemente abrimos la tabla de datos, y luego estamos aquí, aplicando ese cambio de formato, decimal fijo de 10 caracteres con dos decimales. |
| |
La referencia a la tabla y a la columna, aquí a la izquierda, es una forma de referirse a una columna. Existen varias maneras, pero esta es muy común y se utiliza con dos puntos. La referencia a la tabla se coloca a la izquierda de los dos puntos y el nombre de la columna a la derecha. |
| |
Esto proviene directamente del registro. |
| |
JMP utiliza este método en el registro para referirse a la tabla de datos. Creo que es mejor hacer lo que hablamos: especificar el nombre JSL al abrirla y usarlo en adelante. Por lo tanto, en lugar de lo que estaba antes de los dos puntos, lo cambié a dt. |
| |
Aquí está el mismo código, solo que... un poco corregido, y cuando lo ejecuto, sí, funciona correctamente. Abre la tabla de datos y... |
| |
cambia el formato a dos decimales. Vale, sí, ahora que tenemos eso, es bastante fácil de |
| |
Cambia las otras 19 columnas, ¿verdad? Ahí está NPN1, y luego puedo copiar esa línea, cambiar todos los valores y escribirlo 19 veces más. |
| |
Sí, claro que es ineficiente, y una de las grandes ventajas de la programación es que... es que no tienes que hacer lo mismo más de una vez, ¿verdad? Así que resulta más fácil de mantener si... si lo escribimos solo una vez, en lugar de escribirlo 19 o 20 veces. |
| |
Así es como lo hacemos. Lo primero que haremos será obtener una lista de todas las columnas con las que queremos trabajar. |
| |
Y cuando digo lista, no me refiero a una lista genérica. Hablo de una lista JSL, de una estructura de datos específica que se utiliza al programar en JSL. |
| |
Una lista es simplemente un conjunto de objetos contenidos en un contenedor, y así es como la usamos. Aquí tienes tres maneras de crear una lista de objetos de columna. |
| |
La primera forma es hacerlo manualmente, es decir, escribirlo todo. Así que si ejecutara esto, |
| |
Tres referencias a tablas... tres referencias a columnas, NPN1, PNP1, PNP2. |
| |
Fíjate en las llaves tanto en mi código como al pasar el cursor sobre la variable CNames. Cuando veas esas llaves, sabrás que estás trabajando con una lista en JSL. |
| |
Bien, esa es una forma de obtener una lista. Veamos otras dos. Esta es la que usaremos en este ejemplo. |
| |
diciendo, oye, obtén todas las columnas continuas de mi tabla de datos actual, bueno, de la tabla de datos que nombro aquí, dt. Entonces, objeto de mensaje, crea una nueva lista. |
| |
Así que, ¡vamos a ejecutar esta! |
| |
Y ahora, si paso el cursor sobre CNAMES, verán que eso es lo que buscamos. Esa es la lista de los 20 registros con los que queremos trabajar. |
| |
Bien, y la última forma de hacerlo es permitir que el usuario seleccione las columnas de la tabla de datos. Se vería así. Voy a seleccionar solo dos. Seleccionemos IVP y PNP4, dos columnas seleccionadas. |
| |
Y si ejecuto esto, |
| |
Obtenemos una lista con solo esas dos columnas seleccionadas de la tabla de datos. |
| |
Muy bien, entonces, sea cual sea la forma en que obtengas esa lista, el siguiente paso es aplicar esa línea de formato a cada uno de los elementos de la lista, y eso se llama bucle o iteración. |
| |
Así que aquí está la forma antigua de hacerlo. Utiliza el comando `for` en JMP. Eso es lo que se hacía antes de JMP 16 y lo pongo aquí como referencia en caso de que todavía uses JMP 15. Pero, |
| |
Como sabes, es un poco complicado y desalentador para los nuevos usuarios, así que hay una forma mucho más compacta y legible de hacerlo si usas una lista en JMP 16. Si quiero repetir una acción en cada elemento de una lista, puedo usar esto para cada comando. |
| |
De acuerdo, vamos a analizarlo y ver qué hace. Recibe tres argumentos, separados por comas; los analizaremos de derecha a izquierda. |
| |
El último argumento es ese comando de formato, ¿verdad?, aplicando el formato, y en lugar de hacerlo para dt NPN1, en lugar de hacerlo para una columna, puse un marcador de posición aquí y elegí elemento de lista; usted elige lo que quiera. |
| |
Bien, esto es solo una palabra, un nombre de variable; tú la eliges. Yo elegí "elemento de lista". Así que ese es nuestro marcador de posición, y este es el comando que queremos ejecutar en cada elemento de la lista. ¿Qué lista? Esta lista, de acuerdo. Esa es nuestra lista, esa es la segunda. |
| |
argumento. Y el primer argumento es el marcador de posición, ¿verdad? Nos indica que estamos usando ese marcador de posición para almacenar los valores de los elementos de la lista. |
| |
Está entre llaves, así que asegúrese de usarlas si reutiliza este código. |
| |
Así es como se ve todo: en lugar de más de 20 líneas de código, solo tengo tres, y eso incluye abrir la tabla de datos. |
| |
Se obtiene una lista de nombres de columnas y se repite el proceso para las 20 columnas consecutivas. Así se ejecuta todo el proceso y se puede ver cómo queda. |
| |
Y ahí está. Ahora, cada una de estas columnas |
| |
Tiene dos decimales mostrados en el formato. |
| |
Bien, ese fue un ejemplo muy simple de cómo usar un bucle `for each` para hacer algo muy simple en |
| |
sobre una columna. |
| |
Permítanme mostrarles un ejemplo un poco más interesante. |
| |
Aquí hay un ejemplo donde, para el mismo conjunto de datos, para sc20, |
| |
Voy a crear un gráfico de control para cada columna, y voy a adjuntar esos gráficos de control a un documento y guardar todo como un PDF, ¿de acuerdo? |
| |
Utiliza el mismo bucle `for each` y tiene los mismos dos primeros argumentos: el primero es el elemento de la lista y el segundo, el nombre de la lista. Pero ahora tengo mucho código como tercer elemento... como tercer argumento del bucle `for each`. |
| |
¡Empecemos! Ejecutemos todo este script. |
| |
Abrí el archivo, generé varios gráficos de control y los junté en un cuaderno. Ahora, en mi escritorio, veo que he creado este archivo, mi informe.pdf, que contiene todos esos gráficos de control, página uno, y los saltos de página para separarlos. Es decir, página uno, página dos, página tres. |
| |
Así que también puedes consultar este ejemplo cuando tengas tiempo. Está incluido en los materiales de la presentación. |
| |
Bien, y esa es la primera técnica de la que vamos a hablar. Borremos el registro para la siguiente técnica. |
| |
Bien, extraer un valor de un informe. Esto sucede con frecuencia en JSL. Se realiza algún tipo de análisis, tal vez una distribución, tal vez una regresión, y se necesita |
| |
Obtén algo, extrae algún dato de allí. Quizás sea la media o la mediana. Quizás sea el coeficiente de pendiente de la regresión o un valor p. |
| |
Ese es nuestro trabajo, y lo complicado es que los informes tienen una estructura jerárquica muy compleja, y puede resultar un poco difícil navegar por esa jerarquía para encontrar exactamente lo que buscamos. Así que les voy a enseñar un truco. |
| |
El truco consiste en que vamos a seguir el análisis haciendo clic y seleccionando, como siempre, y luego lo que queremos obtener, |
| |
Voy a cambiar el color del texto a rojo; es solo un pequeño cambio de formato. Luego, cuando guardemos ese script en el registro, lo usaremos para aprender a abordar ese elemento rojo. |
| |
en JSL. Así que vamos a repasarlo juntos. |
| |
De vuelta en JMP. |
| |
Voy a abrir Big Class, el buen y viejo Big Class, y vamos a ejecutar una distribución en la columna de altura. |
| |
Bien, aquí está mi informe de distribución del que quiero extraer algo. Digamos que es la mediana, en este caso la mediana es 63, y voy a guardarla en una variable JSL para poder reutilizarla más tarde, y ya sabes, escribir con ella o hacer algún cálculo o algo así. |
| |
Aquí está el truco para descubrir cómo... abordar ese número 63. |
| |
Cambiar el color, la fuente o lo que sea de esto que quiero seleccionar. Si nunca has visto esto, te recomiendo saber cómo hacerlo. |
| |
Hay un botón en la barra de herramientas para propiedades, creo que es un botón nuevo en JMP 16. |
| |
Entonces, si activas las propiedades para este informe. |
| |
Podemos descender por este árbol y encontrar lo que necesitamos. Así que mira esto. |
| |
Cuadro de columna numérica, derecha. Y tenga en cuenta que cuando hago clic en diferentes partes del informe, aparece la columna correspondiente. |
| |
El tipo de caja de visualización del elemento se resalta en el panel de propiedades. |
| |
Bien, entonces podemos ver que esto que contiene todos estos resultados es una columna numérica con todos estos números dentro y, como les dije, vamos a tomar esto y voy a cambiar el color del texto a rojo. |
| |
Así. |
| |
Ahora voy a cerrar el panel de propiedades. |
| |
Aquí está el informe, y enviemos este script al registro mejorado. |
| |
Triángulo rojo, guardar script en el registro. |
| |
Y ahora estamos viendo ese registro. |
| |
Esta es la parte que nos interesa. Contiene el comando de distribución, que cambia el color del texto de la mediana y las demás estadísticas a rojo. Veamos esto con más detalle. |
| |
Bien, aquí está el código... el mismo código del registro ampliado. Simplemente lo copié y le di un poco de formato para que podamos hablar mejor sobre lo que necesitamos. |
| |
Así que la razón principal por la que hicimos esto fue para obtener esta parte, que ahora vamos a interpretar, ¿de acuerdo? Utiliza enviar para informar y, dentro de eso, despachar. |
| |
Y nos vamos a centrar aquí en los cuatro argumentos para el envío. Necesitamos los tres primeros; el cuarto argumento cambia el color, pero eso no nos interesa. Nos interesa modificar el cuadro de visualización, el elemento que queremos, ¿de acuerdo? |
| |
El primer argumento es la navegación. Nos indica que bajemos a "Mostrar cuadros", que en realidad son cuadros con contorno. |
| |
Aquí está. Veamos ese informe. Como seguramente habrás notado en JMP, en un informe existen estos niveles de anidamiento, ¿verdad? Y yo solo tengo un... |
| |
Una distribución de caja delimitada exteriormente. Dentro de esta, hay una distribución de altura de caja delimitada y, dentro de esta, una distribución de cuantiles de caja delimitada, y dentro de esta última se encuentra la información que necesito extraer. |
| |
Eso es lo que me está diciendo. Me está diciendo que baje de ese árbol. Solo necesitaba la altura y los cuantiles, y eso nos permitirá identificarlo. |
| |
Bien. Los dos argumentos siguientes nos dicen algo sobre este elemento que estamos probando, el que pusimos en rojo. El tercero nos indica qué es: una columna numérica, como vimos en las propiedades. |
| |
Y el segundo argumento nos dice el título |
| |
de esa columna numérica. Esta está en blanco. Esta no tiene título y no hay problema. Podemos... podemos usar esta información para acceder a esos datos, así que a veces verás un título aquí, a veces no. |
| |
Bien, ahora que tenemos esto, vamos a tomar esa información y la vamos a usar. |
| |
para extraer la mediana. |
| |
Aquí está el código que lo hace. Comienza aquí en la línea 23 y termina en la línea 29. |
| |
Volvemos a abrir la tabla de datos. |
| |
nombrar la distribución, realizar la distribución continua. |
| |
Como podrán observar, no tenemos ninguna de esas instrucciones de envío ni de reporte, eso se debe a que no necesitamos que aparezca en rojo en nuestro script de producción. |
| |
Sí, realiza el análisis de distribución y nombra la plataforma. |
| |
Esto es importante, tienes que... estás accediendo a la capa de informes. La estás extrayendo con esta línea, así que eso crea rdist, este objeto de informe. |
| |
Y entonces, aquí es donde ocurre la magia. Aquí es donde lo agarramos. |
| |
Ese valor mediano se asigna a la variable JSL `mdn`, y en este caso, lo vamos a registrar. Les explicaré esto con más detalle, pero primero ejecutémoslo una vez para que vean cómo funciona. |
| |
Voy a ejecutar la línea 23, ¡ups!, mejor hagámoslo así. Ejecutemos las líneas... de la 23 a la 29. |
| |
Se realizó la distribución. No es roja y se extrajo la mediana, que ahora está almacenada en mdn; se puede ver que el valor de esa variable es 63. |
| |
La mediana es 63. Perfecto. |
| |
Está bien. |
| |
Aquí está la línea de donde extraemos el |
| |
el valor mediano, ese número 63 del informe. |
| |
Vamos a analizarlo. Voy a mostrar esto aquí para que podamos |
| |
Nos referimos a esto, como nosotros, mientras lo hacemos. |
| |
Aquí está esa línea. Está organizada de nuevo para que podamos analizar cada elemento por separado. |
| |
63, el valor mediano del informe. |
| |
Así es como llegamos a eso. |
| |
Esto se llama subíndice. Cuando veas corchetes en el código JSL, significa que estás subindexando un objeto. Ese objeto es un contenedor, ya sean cajas de visualización, |
| |
Suele ser una lista. También se pueden indexar listas de esta manera. Así que lo que estamos haciendo es, sí, extraer elementos anidados en este objeto de informe. |
| |
Lo primero que vamos a hacer es el cuadro del contorno de altura. Recuerda eso, y luego desde ahí pasaremos al cuadro de cuantiles, recuerda eso. |
| |
Y ahora estamos en el lugar correcto. Solo tenemos que agarrar lo que queremos; lo que queremos es la columna numérica, ¿verdad?, y como no la tenía... |
| |
Podríamos usar un título (el que estaba aquí arriba no tenía título), pero en su lugar nos referimos a él por su número. Es la primera columna numérica en el cuadro de esquema de cuantiles. |
| |
Entonces, al ver esto, podrías pensar: «Un momento, aquí hay números. Eso también es una columna numérica, ¿no?». No, en realidad no. Es una columna de texto. Recuerda que puedes comprobarlo todo si quieres. Eso, de nuevo, se encuentra en las propiedades. |
| |
Y si hago clic aquí, |
| |
Cuadro de columna numérica, cuadro de columna de texto, cuadro de columna de texto. ¿Los ves aquí? Texto... texto numérico, así que es el primer cuadro de columna numérica. |
| |
Y eso va a captar todas estas cifras. |
| |
Bien, lo último que necesitamos hacer es este subíndice. Al usar subíndices de esta manera, le decimos: obtén el sexto elemento... 1, 2, 3, 4, 5, 6. Esa es la mediana; es 63. Y cuando ejecutamos esta línea, se agrega un subíndice al informe; se obtiene esa mediana, para que podamos reutilizarla más adelante. |
| |
Así que aquí les muestro cómo extraer información de un informe. Tengo otro ejemplo que compartiré en los materiales de la presentación. |
| |
Si un elemento tiene un título y se puede ver, puedes usarlo como modelo para realizar tu propio trabajo si te encuentras en esa situación. |
| |
Muy bien, lo último que vamos a tratar es cómo obtener información del usuario, la persona que ejecuta el script. |
| |
Y dejar que elijan qué archivo van a analizar o incluso qué columna de la tabla de datos van a analizar. Este es quizás el método más común. |
| |
Es algo que los programadores principiantes quieren hacer. Ya sabes, he configurado mi script para que haga algo en una columna y quiero compartirlo con otras personas de mi organización. |
| |
para que lo hagan ellos mismos con datos diferentes, ¿verdad? Entonces, si generalizas tus scripts de esta manera para que tus usuarios puedan elegir un archivo, una columna o ambos, |
| |
Estás generalizando tu script y aumentando considerablemente su valor. Se lo vas a dar a otras personas de tu organización. Podrán replicar tu trabajo y hacerlo rápidamente sin tener que hacer tantos clics. |
| |
Bien, en esta sección, más que un estudio de caso, se trata de una lista. Voy a mostrarles tres métodos para que los usuarios seleccionen archivos y dos métodos para que seleccionen columnas. |
| |
Y comenzaremos con los métodos para seleccionar archivos. Como siempre, empezaremos haciendo algo en el registro y luego copiándolo. Esto es lo que aparece al abrir Big Class: simplemente aparece esto en el registro, al abrir Big Class. |
| |
Estoy usando dt en este caso, y entonces, cuando abro Big Class, |
| |
Ahora sí... dt apunta a Big Class, de acuerdo. Y luego continuaría con mi script de producción, ¿verdad? |
| |
Lo que tenemos que hacer es encontrar una manera de que dt apunte a otra cosa. |
| |
Escribe el resto de tu script, usa dt, y luego, al principio, puedes cambiar esto. dt ya no apunta simplemente a Big Class; apuntará a otra cosa. |
| |
De acuerdo, y eso es algo más que determina el usuario. |
| |
la persona que ejecuta el script. Bien, creo que lo más sencillo que puedes hacer es usar esta línea en lugar de abrir una tabla de datos. Si la usas al principio del script para asignar dt, |
| |
Eso significa que JMP va a ejecutar este script y le dará ese dt |
| |
nombre de la tabla de datos que se encuentre delante. |
| |
Entonces, desde la perspectiva del usuario, lo que hacen es abrir una tabla de datos, voy a abrir sc20 aquí, y hacer que sc20 |
| |
Mi tabla de datos actual. ¿Ves eso aquí arriba? Lo que aparece en esta ventana es la tabla de datos actual. |
| |
Entonces, si su usuario abre una tabla de datos y luego ejecuta el script y luego encuentra esta línea, dt ahora apuntará a sc20. |
| |
Es un método bastante potente. El problema es que requiere que el usuario sepa exactamente qué hacer. Debe saber que primero tiene que abrir el archivo de datos y luego ejecutar el script. |
| |
Podemos hacer algo un poco más robusto. Podemos mostrarles un selector de archivos cuando ejecuten el script, para que puedan navegar por su estructura de directorios y encontrar el archivo correcto para abrir. |
| |
Resulta que es muy sencillo. Simplemente eliminas todo lo que hay aquí, eliminas la referencia a Big Class y simplemente pones "abrir" sin ningún argumento. |
| |
Y cuando JSL intenta... cuando JMP intenta interpretar esta línea, dice: «Vale, el usuario quiere abrir algo, pero no tengo ni idea de qué. Vamos a mostrarle un selector de archivos para que pueda decidir». |
| |
Así que... ejecutemos esto. dt = abierto. |
| |
Ejecuta el script. Aquí tienes el selector de archivos genérico y, desde mi escritorio, voy a abrir Iris. |
| |
Iris está abierta y, por supuesto, tiene el nombre dt. |
| |
Todos los archivos JMP, todos los archivos, ¿verdad? Podría estar mostrando mucha información aquí. |
| |
Así que si necesitas más control, ups, si necesitas más control sobre |
| |
Las opciones que elija el usuario, en lugar de usar "abrir", utilizaremos algo llamado "seleccionar archivo". |
| |
Seleccionar archivo es un comando que tiene varias opciones diferentes. Yo solo estoy usando tres de ellas. |
| |
Analicemos este ejemplo. Los tres primeros argumentos para seleccionar archivo son un título que verá en la ventana de selección, |
| |
Un directorio donde se iniciará el selector y un filtro que indica qué archivos se pueden abrir desde él, ¿de acuerdo? Ejecutemos esta línea, esta sección de código, el comando para seleccionar archivos, y guardemos el resultado en PF. |
| |
Ejecuta eso. |
| |
Bien, observe que ese es el argumento de aquí, seleccione archivo de Excel. Eso es lo que vemos aquí arriba en el título de la ventana. |
| |
La carpeta, la ruta que se indica en el segundo argumento, ahí es donde empieza todo. |
| |
Y la tercera opción, el filtro de archivos que dice: «Oye, solo muestra al usuario archivos de Excel para abrir», está aquí abajo. No puedo cambiar de archivo. Estoy restringido a archivos de Excel. |
| |
Digamos que son sándwiches, y hagamos clic en abrir. |
| |
Un momento, ¿por qué no se abrió? |
| |
A ver, comprobemos. PF significa seleccionar archivo. ¿Qué es PF? Ah, PF es la ruta al archivo que queremos abrir. Todavía no hemos ejecutado el comando para abrirlo. Seleccionar archivo no abre un archivo, solo lo selecciona. |
| |
Para cerrar el círculo, esto es lo que tenemos que hacer. Crear nuestra referencia de tabla abriendo el |
| |
Variable PF, que apunta al archivo que queremos, el archivo de Excel que queremos. |
| |
Ahí está. Eso abre la tabla de datos de los sándwiches, y ahora tengo mi tabla de datos y estoy listo para continuar con mi script, tal como quería. |
| |
Permítanme hacer una pausa para mostrarles algo importante. Seleccionen el archivo. Si se encuentran con algo similar y desconocen todos los argumentos y desean obtener más información, les cuento un par de cosas. En primer lugar, obtendrán un poco de información adicional. |
| |
Al pasar el cursor sobre la ayuda, aparece una pequeña ventana emergente con información sobre la sintaxis. Aquí tienes una mejor opción: haz clic con el botón derecho en la ventana del script. |
| |
y puedes consultarlo en el índice de scripts. El índice de scripts es una herramienta muy importante para cualquier programador de JSL, y |
| |
Contiene el comando que buscas. Incluye la lista de argumentos, un texto explicativo y, lo que es muy importante, un par de ejemplos que puedes ejecutar para ver qué hace. Por ejemplo, si ejecuto este comando, me mostrará un archivo seleccionado. |
| |
Bueno, me envió a un lugar al que no quiero ir. |
| |
Cerremos esto. |
| |
Bien, entonces podemos experimentar y obtener este código, robar este código y usarlo en nuestro... en nuestro script si queremos. |
| |
Bien, ese es el índice de scripts. También está disponible en el menú de ayuda. Menú de scripts... busca información ahí. |
| |
Tabla de datos actual, apertura directa o selección de archivo. Existen otras opciones, pero estas tres son buenas para empezar. |
| |
Ahora hablemos de permitir que sus usuarios elijan sobre qué columna desean operar. |
| |
Aquí estoy... He copiado algo del registro. Abrí una tabla de datos llamada "precios" e hice un gráfico que muestra la evolución del precio de las manzanas a lo largo del tiempo. |
| |
No voy a mostrarles la parte de apuntar y hacer clic, simplemente voy a ejecutar el script. Creo que ya saben cómo extraer el script del registro ampliado, así que veamos qué hace. Abre la página de precios y ahí está mi gráfico: manzanas versus fecha, precio de las manzanas a lo largo del tiempo. |
| |
Miren esta tabla de datos: precios, sí, hay manzanas, pero también tengo todos estos otros, ¿verdad? ¿Qué tal si quiero que el usuario me diga qué gráfico quiere ver, qué columna quiere que se grafique? |
| |
De eso trata esta sección: de permitir... permitir que tus usuarios elijan. |
| |
Bueno. |
| |
Así que vamos a hablar de dos métodos. Aquí está el primero. |
| |
Funciona con las columnas que el usuario ha seleccionado. |
| |
Y ya lo hemos visto antes, vimos esta sintaxis anteriormente, creo, en nuestro segundo caso práctico. Sí, así es como creamos una lista. |
| |
que contiene las columnas seleccionadas en la tabla de datos. Así que volvamos a esa tabla de datos. |
| |
Voy a seleccionar, tal vez tres columnas y |
| |
¡Corramos! |
| |
Esto. De hecho, creo que debería ejecutar dt. Ejecutemos ambos. |
| |
Pollo, café y huevos. |
| |
Está bien. |
| |
Entonces. |
| |
¿Con cuál quiero operar? Bueno, ya sabes cómo operar, cómo iterar sobre una lista usando un bucle, pero no vamos a hacer eso. Voy a usar un atajo. Voy a decir, mira, |
| |
Si el usuario seleccionó más de una opción, solo quiero mostrarle la gráfica de la primera. Por ejemplo, si el usuario seleccionó pollo, café y huevos antes de ejecutar el script, quiero mostrarle la gráfica del pollo. |
| |
Bien, esa es la siguiente línea. Aquí está nuestro indexado. Estamos indexando la lista CNames para obtener el primer elemento. |
| |
Entonces, vamos a ejecutar esto. |
| |
Ahora tengo esa útil variable, mi columna, |
| |
que contiene el primer elemento de la lista, pollo, y la referencia de columna con los dos puntos. |
| |
Y ahora podemos ejecutar nuestro generador de gráficos. Ahora podemos seguir con nuestra vida; la única diferencia es que hemos sustituido las manzanas por otras palabras aquí arriba. |
| |
Esa es ahora mi columna. Ese es el único cambio que hemos hecho, así que al ejecutar esto, obtendremos un gráfico del precio del pollo. |
| |
Bien. |
| |
Bien, esa es una manera, pero, como comentamos antes, esto requiere que el usuario sepa lo que tiene que hacer. Esto requiere... |
| |
Este método requiere que el usuario sepa que tiene que abrir la tabla de datos, seleccionarla y luego ejecutar el script, lo cual resulta un poco engorroso. |
| |
En cambio, resulta un poco más robusto mostrar un cuadro de diálogo de selección de columnas al usuario en tiempo de ejecución. Así es como se ve. La sintaxis es algo compleja. No voy a entrar en todos los detalles; solo hablaré de forma general. Abrimos la tabla de datos como antes. |
| |
Estamos utilizando este comando llamado diálogo de columna. |
| |
para mostrar un selector...selector de columnas al usuario. |
| |
Repito, tiene muchos argumentos. Solo usaré un par. Lo que propongo es: "Denme un botón que diga 'Elegir producto', y el usuario puede seleccionar como máximo una columna y debe elegir al menos una". |
| |
Así que aquí, ejecutemos este script a partir de la línea 60. |
| |
Precio inicial. Aquí está mi diálogo, y fíjense qué diálogo tan completo tengo con tan poco código. Esa es la ventaja de este diálogo de columnas que estamos usando. Así que voy a seleccionar café y haré clic en Aceptar. |
| |
Bien. Volvamos al guion, acabamos de ejecutar esta línea. |
| |
Y el resultado de nuestra elección se almacena en dlg. Veamos. |
| |
De acuerdo, esto es un poco complicado. Dice que dlg es una lista, fíjate en las llaves, y tengo llaves anidadas, así que es como listas anidadas. |
| |
Aquí tienes el subíndice que te permite lograrlo. No voy a dedicar mucho tiempo a explicarlo, pero puedes copiar este código si... si necesitas hacerlo. Para obtener del diálogo solo la parte que dice "café", una referencia de columna a "café" allí, |
| |
Aquí está el subíndice para crear mi columna, así que ejecuta esta línea. |
| |
Y ahora, mi columna contiene solo esa referencia a la columna de café, y esto es idéntico a antes. Ejecutamos el generador de gráficos usando |
| |
mi col, sustituyéndolo por manzanas y así obtenemos café o cualquier otra cosa que el usuario haya elegido. |
| |
Bueno, eso es todo lo que quería compartir con ustedes. Para terminar, les dejo un pequeño consejo a quienes se inician en la programación con JSL. |
| |
El consejo es, ya sabes, dejar que JMP escriba tu código, la mayor parte posible. Y para eso sirve el registro ampliado: para extraer ese código del registro. Eso es la mayor parte de tu script. |
| |
Luego, solo tienes que escribir el código de conexión, las partes que lo unen todo y lo convierten en un script de producción funcional. También puedes usar ese código. Lo vas a usar del índice de scripting, y sin duda puedes usarlo de esta presentación. |
| |
Todos los materiales están incluidos en esta presentación y también puedes consultar el libro de recetas de JSL en la Comunidad de Usuarios de JMP, un recurso fantástico que contiene muchas tareas comunes de JSL y te proporciona el código que necesitas para llevarlas a cabo. |
| |
Y de nuevo, quiero recalcar que no te preocupes demasiado por la sintaxis. Es más fácil copiar el código y sustituir lo que necesites. No vas a romper nada, y con la práctica irás aprendiendo los matices de esta sintaxis. |
| |
Muchas gracias por su atención. |