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?¿Listo para aprender a unir todo en un guión real? Bienvenido de nuevo a mi serie sobre los conceptos básicos de la creación de scripts en JMP . Esta es la quinta entrada de una serie que está estructurada para que usted pueda trabajar. Si acaba de unirse a nosotros, realmente querrá echar un vistazo a las entradas anteriores en las series , porque este es un doozy. Aquí están los enlaces a ellos para que los revises:
¿Está bien? ¿Aún aquí? ¿Miraste los episodios anteriores? ¡Excelente! ¡Adelante a la gloria!
De la tarea de hace un par de semanas, todos deberíamos tener un montón de fragmentos de JSL del uso Guardar guión a la ventana de secuencia de comandos o el índice de secuencias de comandos para obtener las piezas de código que necesitamos. Tú hizo Haz tu tarea, bien ? ¡Bien! Empecemos a unir todo en un guión real. Pero primero, tenemos que tener una pequeña charla.
Una de las mascotas codificadoras de Mikey manías
Okey-dokey, amigos. Permítanme, solo por un momento, subirme a mi tribuna por algo. Cuando escribimos código, debemos siempre ¡coméntalo! No podemos hacer suposiciones sobre la persona que leerá nuestro código después de nosotros, incluidos nosotros mismos.
De vuelta en la universidad, tomé una clase de codificación de Visual Basic. Lo primero que aprendimos fue cómo comentar el código y escribir pseudocódigo. El pseudocódigo, por cierto, son comentarios que escribes antes de escribir el código para ayudarte a planificar lo que debes hacer (son similares a la lista de verificación que te pedí que escribieras esa primera publicación ). El instructor llamó a los comentarios y al pseudocódigo “ser un buen ciudadano en la comunidad de codificación”. Incluso nos calificaron por lo bien que comentamos el código que enviamos. Es así de importante.
La verdad del asunto es que rara vez tienes control total sobre quién ve tu código. Caso en cuestión: en esta serie de blogs, le he dado instrucciones paso a paso sobre cómo aplicar ingeniería inversa al complemento de otra persona. Puedo garantizar que algunas (si no la mayoría) de las personas que escribieron esos complementos no esperaban que otros miraran bajo el capó de su código. También puedo garantizar que no encontrarás tantos comentarios en el código para ayudarte a descubrir qué está pasando como esperas.
Debe comentar su código para asegurarse de que alguien que lo vea más tarde pueda entender lo que está haciendo fácilmente. Sí, comentar es un fastidio. Y, sí, se necesita tiempo extra. Pero, No , no puedes simplemente omitir hacerlo. Pagará dividendos a largo plazo. Y practico lo que predico aquí. Tengo complementos que escribí hace cinco años que todavía puedo entender porque hice comentarios detallados (¡y todavía recuerdo lo tedioso que era hacerlo!).
Entonces, aquellos de ustedes que ya programan, asegúrese de comentar su código para que alguien más pueda entender lo que está haciendo. Aquellos de ustedes que están aprendiendo, adquieran el hábito y mantengan el hábito de comentar mucho su código. Ahora, déjame bajar de esta tarima y mostrarte cómo hacerlo.
Comentando en JSL
Abramos JMP y abramos la tabla de datos Big Class Families.jmp que hemos estado usando. Si no guardó el ejemplo de secuencia de comandos de la última sesión, continúe y vuelva a crearlo. Deberías tener algo parecido a esto:

Hay dos formas de poner comentarios en su código JSL. La primera es comentar líneas individuales usando una barra inclinada doble ("//"). Cualquier cosa después de las barras inclinadas hasta un retorno de carro (pulsando retorno en el teclado) será ignorado. Generalmente uso este método para hacer mis breves comentarios en línea. También es útil desactivar líneas individuales de código que no desea ejecutar. Echemos un vistazo a lo que eso significa:

La segunda forma de comentar se utiliza en casos en los que desea desactivar grandes bloques de código o generar grandes bloques de comentarios y texto. Este tipo de comentario se denomina bloque de comentarios. Se hace usando una marca de comentario de apertura hecha de una barra inclinada y un asterisco ("/*") y una marca de comentario de cierre hecha de un asterisco y una barra inclinada ("*/"). Aquí hay un ejemplo de cómo se podría usar esto:

Tenga en cuenta que no estoy hablando de comentar estilo aquí. Eso depende de ti. Desarrollará su propio estilo a medida que avanza e incluso puede tener diferentes estilos de comentarios para diferentes propósitos. Mis comentarios en línea (como los de los ejemplos) son completamente diferentes de los comentarios que hago en algo como una aplicación. El punto es escribir los comentarios y ser consistente internamente en un guión con la forma en que lo haces.
Las partes más difíciles de toda esta serie.
Realmente, toda esta serie ha estado conduciendo a estos próximos artículos. Hay tres cosas básicas que debe saber para comenzar a usar JSL. El primero es comentar (ver el sermón anterior en este artículo). La segunda y tercera son como nombrar las cosas y como enviar mensajes a ellos
Supongo que es posible codificar tu propio algoritmo ANOVA (un colega mío cuenta una historia muy entretenida al respecto). Pero es mucho más fácil decirle a una tabla de datos que ejecute un ANOVA usando Ajustar Y por X a través de un mensaje, como aprendimos en el episodio anterior. Ese flujo de trabajo básico (nombra algo, envíale un mensaje) es mucho de lo que se trata JSL. Sí, puede ingresar a la lógica y los bucles, el desarrollo de GUI, etc., pero las secuencias de comandos de fuerza bruta realmente solo requieren nombres, mensajes y un poco de búsqueda en el Índice de secuencias de comandos.
nombrar cosas
Empecemos por nombrar las cosas. Usted nombra cosas dándole a JMP un nombre seguido de un signo igual y luego escribiendo el texto, número, código, etc., que desea que ese nombre represente. El nombre se llama un variable . Puede pensar en las variables como contenedores en los que puede poner cosas o como apodos para abrir informes en JMP .
Veamos un ejemplo usando un ANOVA. Para crear el código para un ANOVA, primero ejecute el análisis en Ajustar Y por X (en Analizar), luego active la prueba ANOVA y luego guarde el código en una ventana de secuencia de comandos. Aquí está el informe para eso usando Big Class Families.jmp y el código JSL resultante guardado desde el menú del triángulo rojo (altura como Y, sexo como X y seleccionando Medias/Anova/t agrupada debajo del triángulo rojo):


Este pequeño fragmento de JSL producirá un ANOVA para cualquier tabla de datos que tenga los mismos nombres de columna que la tabla de datos original. (Sin embargo, no nos vamos a preocupar por la parametrización en esta serie. Está un poco fuera de lugar.)
Ahora, ¿qué sucede si tiene un montón de tablas de datos abiertas y desea controlar en qué tabla de datos desea ejecutar ese ANOVA? Bueno, puede editar el script dando un nombre a la tabla de datos en la que desea ejecutar el ANOVA y luego enviando el código generado por JMP como un mensaje. Si buscara en el índice de secuencias de comandos (consulte el artículo sobre cómo obtener ayuda), encontraría un par de formas de hacerlo. Puede llamar a una tabla de datos directamente o tomar una referencia a la tabla de datos en la que JMP se enfoca actualmente usando la Tabla de datos actual (). Hay una tercera opción que es un poco más avanzada, donde le das un nombre a una tabla de datos cuando la abres. He puesto ejemplos de los tres a continuación (¡y nuevamente tenga en cuenta el uso de comentarios para transmitir información!):

Llamar a la tabla de datos por su nombre funcionará siempre que haya una tabla de datos abierta que tenga el nombre que está tratando de usar. Esto puede ser útil si tiene una lista de nombres de tablas de datos para trabajar. También puede ser útil si ha ocultado o minimizado su tabla de datos. En cualquier caso, aún puede enviar mensajes a la tabla de datos incluso si no necesariamente puede verlos. Este método utiliza la forma:
= Tabla de datos(“”);
Probablemente la forma más útil de asignar una variable a una tabla de datos para nuestros propósitos es usar la función Tabla de datos actuales (). Esta función toma lo que sea la tabla de datos activa o actual y la asigna a la variable que haya indicado. Una vez que la tabla se asigna a la variable, no importa si otra tabla de datos se vuelve "actual" (por ejemplo, al crear una tabla de resumen, siempre tendrá una referencia a la primera tabla de datos hasta que redefina la variable). Tiene una forma más simple:
= Tabla de datos actual();
El último método es útil si desea asumir que la tabla de datos puede no estar abierta cuando alguien ejecuta el script. Al utilizar este método, JMP generará un cuadro de diálogo de archivo que permite al usuario seleccionar el archivo que desea abrir. Cuando el usuario confirme su elección, el archivo se abrirá y se le asignará el nombre de variable que le hayas dado. Nuevamente, es una forma simple:
= Open();
Utilizando el Abierto(…); El método también puede ser útil si se siente cómodo trabajando con rutas de archivos y directorios. Puede poner la ruta del archivo entre paréntesis para decirle a JMP dónde buscar el archivo, así:

Además, tenga en cuenta que estoy usando algo llamado Variable de ruta en el Abierto(…); comando para acortar la cadena. Hay una sección sobre ellos en el Guía de secuencias de comandos .
Enviando mensajes
Ahora, una vez que haya nombrado algo, es posible enviarle un mensaje. Funciona de manera similar a enviar un mensaje de texto a alguien en su teléfono. Cuando envía un mensaje de texto, lo primero que necesita saber es su nombre, dirección de correo electrónico o número de teléfono del destinatario, algo para identificarlo. Lo ingresas en la aplicación de mensajería y luego envías el mensaje. Aquí se explica cómo hacerlo usando el ANOVA de clase grande. Voy a divertirme y hacer que JMP me pida que abra un archivo en este caso:

Analicemos lo que estamos viendo aquí a partir de la línea 5. Lo primero que vemos es el nombre de la variable de la tabla de datos a la que queremos dar una instrucción. Al igual que cuando enviamos un mensaje de texto o damos una instrucción a una persona, tenemos que identificar con quién estamos hablando. A continuación hay dos símbolos "menor que" (<<). Ya hemos visto algo así con el Operador Glue (;). El símbolo “<<” se conoce como Operador de mensaje. Permite que el destinatario del mensaje sepa que lo que sigue es un mensaje. Después de eso, vemos una función llamada Oneway(…); con los argumentos que la función necesita para crear el informe ANOVA. Nota: puede obtener toda la información sobre las opciones para esa función en la documentación o en el índice de secuencias de comandos, pero en realidad no tiene que escribir nada a mano. Simplemente ejecute el análisis una vez y tome el script terminado (con todas las opciones) usando uno de los Guardar guión en... comandos que te mostré antes.
Algunas probabilidades y extremos
Bien, hay tres últimos detalles que deben abordarse. La primera es la cuestión de unir las cosas. Por ejemplo, si quisiera hacer un ANOVA y crear un Graph Builder en el mismo script, necesitaría advertir a JMP que se deben seguir más instrucciones. Para hacer esto, usa ese Operador Glue (;) que sigo mencionando.

Al igual que un punto y coma en inglés escrito, el punto y coma al final de un comando le permite a JMP saber que hay más instrucciones por venir. El pegamento se encuentra al final de una instrucción como Bivariate(...) ; , o Distribución(...) ; , o dando un nombre a algo: cosas = 5 + 6 ; . Como recordará de publicaciones anteriores, JMP incluye el punto y coma automáticamente cuando usamos Guardar secuencia de comandos... en la ventana de secuencias de comandos , pero al crear secuencias de comandos a mano alzada, este es el error más común que cometo durante la creación de secuencias de comandos: olvidar unir las cosas.
El segundo detalle es asegurarse de que sus guiones sean buenos ciudadanos en una sesión de JMP. Esto se hace asignando todas las variables que creas a un espacio de nombres . Un espacio de nombres es una pequeña caja de arena que evita que los nombres de las variables que cree interfieran con otras partes del software. El espacio de nombres predeterminado se denomina espacio de nombres "Aquí". En los scripts se ve así (ver línea 2):

Esta instrucción siempre debe ir al comienzo de una secuencia de comandos (¡hasta que aprenda cuándo no usarla!) para evitar que los nombres de las variables entren en conflicto con otras secuencias de comandos o partes de JMP. Antes de que empieces a tirarte de los pelos en este punto, aquí hay una versión TL; DR de lo que acabo de decir: solo recuerda poner siempre "Nombres predeterminados aquí (1);" al comienzo de su guión y estará bien por el momento. Si desea obtener más información sobre los espacios de nombres, hay un párrafo sobre el tema en este otro post lo escribi hace un tiempo .
El último detalle que necesito discutir es cómo cambiar el nombre de una columna en un script guardado. Es realmente simple. Mira en tu guión guardado. Debería ver los nombres de sus columnas con dos puntos (":") delante de ellos. Esos dos puntos indican que son nombres de columna (puede significar otras cosas, pero por ahora, significa nombres de columna). Para cambiar el nombre de una columna, simplemente cámbielo, pero recuerde poner los dos puntos al frente. Si los nombres de sus columnas contienen caracteres especiales, es posible que se encuentre con algo como :Nombre(“…”) cuando JMP genera el script por usted. Así es como JMP maneja el hecho de que el nombre de su columna tenga caracteres que causarían problemas si no estuviera claro que son parte de una cadena. Aunque es una mala forma de codificación usar :Name(“…”) en nuestros scripts, el software puede usarlo porque no tiene otra opción. Debe intentar elegir mejores nombres de columna.
Pero te olvidaste...
OK, me doy cuenta de que algunos de ustedes probablemente se están poniendo un poco nerviosos en este punto. Usted puede estar pensando, "¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ o “¡¡¡PERO QUÉ PASA CON LAS EXPRESIONES!!!” o incluso, “TWITT !!! ¡HAS PASADO COMPLETAMENTE SOBRE LA LÓGICA Y EL BUCLE!” En primer lugar, no es bueno poner nombres. En segundo lugar, no me olvidé de nada de eso. I conscientemente lo omitió.
La cuestión es que esta serie no está destinada a hacerte volar el pelo. Como dije al comienzo de la serie, está destinado a apuntar tu nariz hacia el camino correcto, darte un buen mapa, algunos bocadillos, una palmadita en la espalda y mostrarte dónde buscar ayuda en caso de que te quedes atascado. Es un punto de partida. (Tienes mi permiso para tomar un refrigerio en este punto, por cierto).
Para aquellos de nosotros que escribimos guiones regularmente, mucho de lo que estoy hablando aquí es tan fundamental, tan básico, que es memoria muscular. Lo que hemos olvidado es que, solo usando el conocimiento básico que estoy cubriendo aquí, un scripter neófito puede cubrir mucho terreno. De todos modos, si estás hiperventilando porque no cubrí nada súper elegante, relájate. Vamos a ir por la madriguera del conejo en la próxima serie. Por ahora, volvamos a la discusión y hablemos de la tarea de esta semana.
Tarea
Muy bien, aquí estamos. El gran ejercicio de la tarea. Esta semana, tomará los fragmentos de código que creó la semana pasada y los pegará. Haz esto un poco a la vez. Si su secuencia de comandos va a vivir fuera de una tabla de datos (como un archivo JSL), comience abriendo su tabla de datos y colocándola en una variable. Después de eso, independientemente de dónde vivirá su secuencia de comandos, agregue un poco y verifique que haga lo que espera. Luego agregue más y verifique nuevamente que obtiene el resultado esperado. Recuerda que la Comunidad, los archivos de ayuda, etc., son tus amigos. Si recibe mensajes de error, consulte el registro ( Ver > Registro para PC y Ventana > Registro para MacOS) y el episodio anterior .
¡Buena suerte y nos vemos la próxima semana!