Los programas analíticos requieren datos con una estructura estricta de filas y columnas, y las filas suelen tratarse como observaciones independientes. El diagrama de causa y efecto organiza las filas en una jerarquía, descrita mediante pares de relaciones padre-hijo. Originalmente concebida para documentar los resultados de sesiones de lluvia de ideas en la gestión de la calidad, esta plataforma es una herramienta poderosa para visualizar también otras estructuras.
En la programación JSL, las estructuras de datos genéricas son los arrays y listas asociativas. Sus elementos pueden ser valores, listas y arrays asociativos, lo que proporciona un marco para gestionar estructuras de datos complejas de forma rápida y eficiente. Las interfaces JSON, ampliamente utilizadas en la comunicación de sistemas, son otro ejemplo de estructuras de datos jerárquicas. Si los elementos se procesan de diferentes maneras y se miden parámetros variables después del procesamiento, las combinaciones resultantes pueden documentarse de la misma forma.
En esta presentación, se muestra (y se proporciona) una función JSL que recorre una lista o un array y coloca todo su contenido en una tabla de datos. El diagrama de causa y efecto muestra el contenido de forma gráfica. Los ejemplos de aplicación ilustran la versatilidad y el potencial de este concepto.
Bienvenidos, y los invito a acompañarme al abismo de las profundas estructuras jerárquicas. Empecemos con una tabla de datos. Este es el diseño que queremos ver: una cuadrícula completa, sin espacios vacíos ni valores faltantes. Pero al observar esta tabla, vemos que para el diseño y el ID de la oblea, existen valores duplicados. Esto indica una jerarquía.
Comencemos con algo más sencillo y usemos JSL, el lenguaje de scripting de JMP, para entender qué son las jerarquías y las estructuras. Esto es una lista. Las listas se representan entre llaves y sus elementos se clasifican por posición. La segunda posición corresponde a mi apellido, Heinen.
Este es el mismo contenido, pero como un array asociativo. Los arrays asociativos se representan entre corchetes y sus elementos tienen nombres. Este elemento se llama fn (nombre) y los datos están vinculados. El contenido de nombre está vinculado.
Existen dos maneras distintas de construir estructuras de datos. Estas estructuras se pueden apilar y dar lugar a transformaciones combinadas como estas. Se observan muchos corchetes y llaves, y al final, dos corchetes y las llaves cerradas. Resulta bastante difícil determinar la ubicación de cada elemento en una estructura como esta.
Pero es importante saber esto porque, especialmente, por ejemplo, en las llamadas interfaces REST, donde las computadoras se comunican con servicios de internet, los datos se intercambian en estructuras JSON, y la estructura JSON es precisamente una combinación de listas y matrices asociativas. Es importante saber qué hay en cada lugar.
Hacer esto manualmente es un poco engorroso. Existe un programa que lo hace por ti. Yo lo escribí y lo pongo a tu disposición. No necesitas saber mucho de programación. Solo hay dos instrucciones importantes: `For` y `Recurse`.
El operador `for` indica que se trata de un bucle. Todo lo que está entre corchetes se repite varias veces. La recursión es un concepto interesante. Le indica a JMP que recuerde en qué punto del programa nos encontramos y que ejecute la aplicación completa de nuevo. Luego, una vez finalizado el proceso, que regrese a este punto y continúe. La recursión, por su naturaleza, también puede repetirse un número arbitrario de veces.
¿Qué hace este programa? Toma toda la estructura al principio. Pregunta: ¿Es una lista o un arreglo asociativo? Si es así, le asignamos el rol de padre. Cuando pensamos en jerarquías, podemos pensar en generaciones: abuelo, padre, hijos, nietos, etc. Esta es la primera generación parental.
Tomamos el primer elemento, el primer hijo de ellos, incrementamos el nivel de la pila, teniendo en cuenta que ahora estamos en la segunda generación, y luego comenzamos todo el proceso de nuevo hasta llegar al final. El final siempre es un elemento de datos.
Entonces, recordamos que guardamos toda la información de este elemento de datos, disminuimos el nivel de la pila y retrocedemos una generación. Estamos en la generación de los nietos, ahora retrocedemos una generación y preguntamos: ¿tienes hermanos en esa generación? Si es así, tomamos al siguiente hermano y todo el proceso comienza de nuevo hasta que no haya más hermanos, y eso sucede al final en la posición superior, es decir, en la generación de los abuelos. Luego creamos la salida.
En este caso, o por poner un ejemplo, en las comparaciones entre superposiciones, las piezas, las piezas estandarizadas, se envían a laboratorios donde se prueban con diferentes analizadores, y estos arrojan diferentes grupos de valores de medición.
Estos datos se analizan y se muestran en esta tabla. Vemos una columna de padre e hijo, y la he coloreado ligeramente para que sea más fácil ver lo que sucedió. Este es el primer camino hacia el primer elemento de datos, luego todos sus hermanos, un nivel más arriba, y ahí encontramos que ya está el final, sin más hijos, y luego otro nivel más arriba y el siguiente elemento de estructura.
Como también guardamos los datos, sabemos en cada paso de qué estamos hablando: de un laboratorio, de una pieza, de un grupo de valores de medición del análisis de laboratorio. Aquí abajo, tenemos un valor que en este caso específico se llama cv, que significa coeficiente de variación.
¿Qué hacemos con una tabla de datos como esta? Queremos crear este diagrama. Esto se encuentra en el menú Analizar, Analizar, Calidad y Proceso, Diagrama. Ya lo hice antes, así que puedo completarlo automáticamente. No tiene mucha complicación.
El diagrama predeterminado es el diagrama de espina de pescado. Justo al final, tenemos todo el conjunto aquí. Esto es difícil de leer. Con un clic derecho, un clic derecho aquí, podemos cambiar ese tipo a jerarquía. Ahora vemos que tenemos una jerarquía de hasta siete niveles, y aquí comienza todo el conjunto y así sucesivamente. Tenemos arreglos asociativos. También tenemos listas.
¿Cómo navegamos en estos grupos? Empezamos con el conjunto completo, por supuesto. Luego bajamos un nivel en una matriz asociativa de las partes, y luego un nivel más abajo en la primera vuelta. Como ven, la línea se extiende mucho hacia la derecha, así que hay muchas vueltas más. Tomamos uno de los analizadores, E2 en este caso. Tenemos este grupo de valores de medición en una lista, y el tercer elemento de la lista es el punto de datos con un valor de seis.
Así es exactamente como un programador accedería a ese dato. Es mucho más fácil de encontrar y seguir que navegar por una estructura como esta. Tenemos un programa que realiza el análisis. Contamos con aplicaciones, interfaz JSON, interfaces REST y estructuras JSON, donde esto resulta muy útil.
¿Todo perfecto? Bueno, el script asume que la estructura ya es una estructura JSL. Sería útil contar con una interfaz de usuario donde el usuario pudiera decir: "¡Esta es mi tabla de datos. Esta es la jerarquía de mis columnas. Por favor, genere un gráfico como este!". Entonces, el programa crearía dicho gráfico.
Al trabajar con este diagrama, es posible que notes que no está completamente integrado en JMP como en las plataformas modernas. Parece que su origen se remonta a las versiones 2 o 3 de JMP. Si algún desarrollador de JMP está leyendo esto, por favor, actualicen esa plataforma.
Puedes descargar el guion desde la página web de mi presentación en Discovery. Si tienes curiosidad, preguntas o quieres verme en la Cumbre Discovery el jueves 7 de marzo, me encontrarás en el Salón de Baile, en el stand número 2. Estaré allí.