JMP Live es una potente plataforma para analizar y visualizar conjuntos de datos en constante crecimiento, especialmente gracias a su capacidad para actualizar tablas desde almacenes de datos conectados. Sin embargo, durante el desarrollo de nuevos productos, estos procesos suelen estar incompletos, y la recopilación de datos de múltiples usuarios o sitios se convierte en un desafío logístico.
Hola a todos. Bienvenidos a mi presentación. Me llamo Timothy Whetstone y estoy aquí con mi copresentadora, Sage Darling. Ambos trabajamos en IDEXX Laboratories y esta presentación trata sobre el uso de JMP Live como almacén de datos.
Hemos estado usando JMP Live bastante durante el último año. Nos parece fantástico poder configurar tablas que se actualizan automáticamente en nuestros diversos almacenes de datos existentes cuando contamos con canales robustos desde la fuente de recopilación hasta el almacén y, de ahí, a JMP Live. Es realmente ideal para ese caso de uso.
Dado que lo hemos estado usando más, hemos encontrado algunos casos de uso potenciales que nos gustaría que JMP Live pudiera implementar, pero no tiene la funcionalidad necesaria para hacerlo fácilmente. Esto se debe principalmente a que se trata de una fuente de datos o de generación de datos que no se almacena en ningún servicio en la nube ni en un gran almacén de datos, donde básicamente se obtienen archivos y datos, y estos solo están disponibles localmente. Especialmente cuando se cuenta con esto y se obtienen continuamente datos que pertenecen al mismo conjunto de datos para lo que se intenta mostrar, pero que ocurren temporalmente. Muchos estudios longitudinales son algo que estábamos considerando durante este proceso.
Tenemos estos archivos manuales. Queremos que se registren todos juntos en el mismo lugar. JMP Live suele ser un buen lugar para eso, pero necesitamos una forma más automatizada de obtenerlos en lugar de tener que descargar, concatenar y volver a cargar tablas manualmente.
Al hablar con el personal de JMP, me dieron parte de este fragmento de código. Fue clave en nuestro trabajo. Explica cómo usar un script para descargar y abrir una tabla desde JMP Live. Fue después de recibir este fragmento de código que surgieron muchas ideas sobre cómo utilizarlo. Es básicamente una solicitud HTTP. Es algo que ya existía y se utiliza para obtener datos de otros sitios web, pero la clave para que funcione reside en cómo ensamblar y construir la URL de las tablas de JMP Live, y hablaremos de eso en breve. Sage, te cedo la palabra un momento.
Obtuve el ejemplo que Timothy acaba de describir de JMP sobre la descarga de archivos, y estaba listo para implementarlo. Decidí empezar creando una forma de tomar tablas de JMP Live en su propia carpeta, concatenarlas localmente y luego subirlas a una ubicación específica. Para ello, es necesario resolver algunos aspectos relacionados con la conexión a JMP Live y la obtención de la información. Aquí es donde, con mi código, creé una matriz asociativa que utilizo al iniciar.
Este es un ejemplo del código que encontramos en el complemento que extrae esta información. Mi script hace algo similar. Examina los recursos a los que el usuario tiene acceso en JMP Live y extrae las ubicaciones de las carpetas a las que tiene acceso. Luego, buscamos carpetas dentro de otras carpetas para agregar lo que JMP llama "hijos" a esa ubicación.
En este caso, con este código, construimos dinámicamente esa matriz asociativa. De esta manera, al revisar las carpetas a las que tienes acceso para poder subir los datos, este código buscará esa información al inicio del script. De esta manera, puedes ver todo a lo que tienes acceso, para que puedas extraer archivos de cualquier carpeta, concatenarlos y colocarlos en la ubicación que prefieras.
Esto es solo una pequeña parte. Esta matriz asociativa se construye de esta manera. Lo que logramos con este complemento es que, básicamente, tienes tres opciones de lo que construí.
La primera opción es poder seleccionar una carpeta de JMP Live desde la que concatenar. Aquí, al iniciar con la matriz asociativa, extraigo todas las carpetas a las que tienes acceso, lo que te da una lista completa. De esta manera, puedes seleccionar la carpeta desde la que concatenar y luego una carpeta donde guardar, que proviene de la misma lista de la matriz asociativa. A continuación, puedes seleccionar una tabla para actualizar.
Según la información ingresada aquí, todos los archivos ubicados en la carpeta Live desde la que se realizará la concatenación se concatenan y luego se guardan en esta carpeta (Guardar en carpeta). Posteriormente, se guardan como la tabla seleccionada dentro de esa carpeta. Todos estos archivos se asignan a las matrices asociativas que mostré en la pantalla anterior para el código que extrae esa información de JMP Live según la conexión de JMP Live única para usted.
Para lograr todo esto, esto es solo una parte del trabajo. La matriz asociativa extrae la información a la que tienes acceso, pero debes poder descargarla y luego volver a subirla. Una de las ventajas de JMP Live es que permite construir una URL para extraerla a partir de esa solicitud HTTP. Este es un ejemplo de cómo creamos esa URL, que básicamente descarga esos archivos localmente.
Por ejemplo, hay una URL base que usamos para JMP Live. Aquí hay un ejemplo del nombre de la empresa HTTPS de JMP Live. En nuestro caso, es IDEXX. Podemos usarla para enlazar con nuestro JMP Live. A partir de ahí, hay ubicaciones que no se actualizan. Al igual que los paquetes de API, esa es una parte no actualizada de la URL relacionada con JMP Live.
Entonces sabemos que tenemos un Live ID. Uno de los elementos que se extrae de la matriz asociativa que mencioné anteriormente es el Live ID que enlaza a las carpetas y luego a las tablas de datos. De esta manera, esta URL se puede construir dinámicamente a partir de la matriz asociativa a medida que se construye. Luego, se obtiene otra parte estática, "data", seguida del nombre de la tabla de datos de JMP Live, que se extrae de esta URL y se descarga el contenido, que es ".JMPLive/contents".
De nuevo, solo una parte de la magia. Lo siguiente que debes hacer es reemplazar la tabla de JMP Live. Una vez que tengas todos los archivos en tu carpeta y los hayas concatenado dentro de tu instancia local de JMP, debes colocarlos en algún lugar. Este es el ejemplo del código que usamos para reemplazar esa tabla de JMP Live.
Lo que sucede es que creamos una nueva conexión y, a partir de esa matriz asociativa, donde se encuentra la información de la tabla seleccionada que desea cargar, esta se entrega como nuevo contenido de JMP Live y se envía de vuelta a JMP Live para actualizar los datos. De esta manera, puede actualizar dinámicamente las tablas concatenadas en su carpeta.
¿Cuál fue mi caso práctico? Porque esto era algo que, mientras probábamos, pensamos que sería genial usarlo en nuestro entorno local. Una de las cosas para las que pudimos usarlo fue para la tendencia de estabilidad. En este caso, aquí hay un ejemplo del código que escribí y su función. Pueden ver desde el principio la ventana de inicio de este código, que muestra tres entradas que les mostré hace un par de diapositivas. Es decir, deben seleccionar la carpeta. El siguiente paso es seleccionar la carpeta de la que extraerán los datos. En este caso, tengo datos brutos de estabilidad. Cada vez que los técnicos procesan más datos, estos se guardan en esta ubicación específica de la carpeta de datos brutos. Esa es la carpeta de inicio desde la que se concatenarán.
A partir de ahí, sé que quiero añadirlo a mis datos de tendencias porque quiero seguir concatenando en ese archivo. Esa es mi siguiente selección: selecciono una carpeta de JMP Live para guardar. En este caso, se convierte en mi tendencia de estabilidad.
Entonces, como mi tabla de datos de tendencias de estabilidad solo tiene una, mi siguiente selección es la tabla de datos de tendencias de estabilidad. Sin embargo, esta es la que inicié. Puede llamarse como se desee. Sin embargo, la matriz asociativa la extraerá en esa ubicación. En este caso, creé la tabla primero. En este caso, lo que he estado usando hasta ahora es que la tabla ya debe existir en JMP Live, pero sería una gran característica en el futuro poder... es difícil decirlo, una característica en el futuro. Sería genial seguir agregando esto como una pieza dinámica, donde se puedan crear nuevas tablas de datos concatenadas para guardarlas en ubicaciones, ya que los datos pueden cambiar.
¿Cómo se ve esto desde JMP Live? En JMP Live, se ve la carpeta de inicio. Se pueden ver los puntos de tiempo independientes que los usuarios han subido. En este caso, soy yo. Los técnicos también podrán subir datos desde esta ubicación si tienen acceso para ingresar información aquí. Estas son las tablas que se concatenarán. A continuación, se muestra un ejemplo en mi carpeta de tendencias de estabilidad, que es una carpeta separada de mis datos sin procesar, y se puede ver la tabla de datos desde la que estoy modificando los datos.
¿Cómo se ve esto en el backend una vez que ocurre? Al observar la concatenación, se produce un efecto mágico. Al ejecutar este código, se puede ver físicamente que JMP Live indica que la tabla de datos ha completado sus actualizaciones, ya que la actualiza en tiempo real. En el ejemplo de la izquierda, se puede ver que mi tabla de datos inicial solo tiene los puntos de tiempo 0 y 1. Como se vio en la tabla anterior, había puntos de tiempo que también llegaban hasta el número 3. Ahora, después de ejecutar el código, se puede ver que hay un tercer punto de tiempo que se concatena a estas tablas.
Concluido esto y siguiendo usando estos datos, colaboré con Timothy y le dije: "Oye, tengo este código. Quizás te sea útil, dado lo que estás haciendo en esta charla". Fue entonces cuando Timothy lo tomó y lo amplió al máximo.
Gracias, Sage. Después de retomar gran parte del trabajo realizado por Sage, pensé: "Es fantástico poder tomar varios archivos de JMP Live, concatenarlos en una nueva tabla y volver a incluirlos en JMP Live". En mi caso, con datos que solo existen localmente, necesitaba una buena manera de tomarlos y luego transferirlos a JMP Live, pero también concatenarlos con los datos que ya existen. Quería compartir esto y colaborar con otras personas, no necesariamente en la misma ubicación, para que pudiéramos agregar datos de forma independiente al mismo conjunto. No quería que la gente hiciera mucha manipulación manual.
Pensé: "¿Y si tuviera una herramienta que me permitiera conectarme a tablas específicas?". Además, quiero poder ejecutar cualquier proceso ETL de datos. Si quiero añadir nuevas columnas, crear tablas de resumen y cargarlas, necesito una forma de crear un script de flujo de trabajo JMP y luego vincularlo a ciertas tablas y proyectos, y compartirlo con otras personas para que todos podamos ejecutar lo mismo, actualizar las mismas tablas y ver los resultados en tiempo real.
Esto muestra solo el inicio de una ventana de herramientas. En unos segundos, haremos un recorrido en vivo. Primero, quiero repasar un poco más el código. Además, en cuanto a scripts, al igual que Sage, se trata de tomar todo eso y empaquetarlo. Al usar esto, también uso muchos arrays asociativos. Así es como almaceno y guardo gran parte de la información específica del proyecto y los scripts especiales.
Quizás hayas visto en la ventana anterior que tenemos una ventana de edición de scripts. La clave para que funcione es simplemente usar la función Eval Parse, que se encapsula dentro de una función que, de otro modo, estaría vacía. Así es como permitimos a los usuarios pegar scripts en esa ventana. Al ejecutarla, todo funciona perfectamente para analizar tablas, unirlas y concatenarlas con lo que tenemos en JMP Live. Saldremos de esta presentación por un momento para mostrar algunos ejemplos rápidos.
Primero, aquí tengo un espacio de JMP Live y luego mi herramienta ejecutándose. Así se ve la herramienta al abrirla por primera vez. En el panel superior, tenemos la sección de configuración. Estas configuraciones se pueden guardar y, al ejecutar el complemento, se completarán. Se trata del nombre de la conexión de JMP Live, la URL base de JMP Live y, finalmente, si se desea o no una lista de tablas para que se completen automáticamente en la herramienta. Esa lista de tablas se encuentra en esta sección.
Así es como decidimos qué tablas quiero rastrear y asociar con scripts. En este caso, implementé algunas de las funciones de Sage para agregar nuevas tablas, algo que veremos en breve. Un aspecto importante para la colaboración es la posibilidad de cargar listas de proyectos. Si compartes listas de proyectos con otras personas, estas podrán cargarlas.
Si cargo una lista de proyectos precreada, veremos que contiene dos tablas: la tabla "No es mi gato" y la tabla "Datos meteorológicos semanales". Observarán que, en la sección del script, el tamaño de estas tablas es ligeramente diferente. Para la tabla "No es mi gato", se utiliza un script básico que, al ejecutarse, solicita al usuario que seleccione un archivo para abrir y lo devuelve. Esto significa que, una vez devuelto el archivo, este se concatenará con la tabla listada.
En este otro ejemplo, no solo el archivo está abierto, sino que también estoy añadiendo una columna que calcula la media de otras dos columnas. Un ejemplo de esto en ejecución: puedo encontrar la tabla de datos meteorológicos semanales. Es bastante grande. Tengo 124 filas y recorro varias semanas. Creo que son las semanas 1 a 10. Puedo desplazarme por la tabla.
Al ejecutar esta herramienta, me pedirá que seleccione una tabla. Tengo una carpeta con varias tablas aquí. Puedo abrir la nueva tabla, hacer clic en el botón "Abrir" y esperar un segundo. Verán que aparecen algunas tablas y luego desaparecen. En JMP Live, verán que los datos se han actualizado. Puedo recargar la tabla y ahora tengo 393 filas.
Retrocediendo un poco, si quisiera agregar otra tabla, como verán en JMP Live, tengo una segunda tabla llamada "Medidas de Clase" y un informe adjunto. Haré clic en el informe. En este informe, veo que estoy rastreando una medición que abarca tres puntos de tiempo para varias personas. Todavía no la tengo en mi lista, pero puedo agregarla. Usando el mismo script que Sage desarrolló para buscar en JMP Live o en cualquier otro lugar, aparece una ventana emergente muy similar. Puedo ir allí, buscar mi carpeta de ejemplo, seleccionar mi tabla "Medidas de Clase" y agregarla a esta lista de proyectos.
Al agregar esto a la lista de proyectos, verán que aún puedo alternar entre estos otros elementos. Además, se rellena automáticamente el script básico en la ventana, lo que me permite ejecutarlo y seleccionar un archivo para concatenar. Lo haré ahora mismo. Veo que voy al punto temporal 3 de esta tabla y tengo el archivo del punto temporal 4. Al hacer clic en el botón Abrir, el archivo aparece y luego desaparece. En JMP Live podemos ver que este informe se está regenerando y que se ha agregado el punto temporal 4. Cualquiera que tenga acceso a esta tabla puede usar esta herramienta para actualizar las tablas de JMP Live con los datos de este proyecto, siempre que les dé acceso en JMP Live.
Podemos retroceder. Vemos que, sí, la tabla "Medidas de Clase" también se ha actualizado, ya que está vinculada a ese informe, y veremos que los datos del punto temporal 4 están ahí. Tengo datos del quinto punto temporal. Puedo ejecutar esto de nuevo para añadirlos también. De nuevo, aparece una cola, desaparece y entonces está lista una versión actualizada de esta tabla. Puedo pulsar "RECARGAR" y veo que los datos adicionales se han añadido a la tabla. Puedo retroceder de nuevo y veo que mi gráfico también se ha actualizado.
Esto nos ha entusiasmado mucho en cuanto a la colaboración en ciertos proyectos y a que la gente tenga un flujo de trabajo más estándar, pudiendo compartir scripts, especialmente para quienes aún están aprendiendo a usar Workflow Builder y a automatizar algunos de estos flujos. Es muy útil brindarles herramientas como esta para evitar ciertos problemas que a veces surgen en algunos de estos proyectos multisitio.