¡JMP es pitónico! Integración mejorada de Python en JMP 18JMP 18 tiene una nueva forma de integrarse con Python. La instalación de JMP 18 viene con un entorno Python independiente diseñado para usarse con JMP. Además, JMP ahora tiene un editor Python nativo y paquetes Python específicos para JMP. Este entorno JMP Python ha mejorado la conectividad y la interacción con JMP, lo que significa que usar Python con JMP nunca ha sido tan fácil.
En esta serie de publicaciones de blog, les presento las nuevas capacidades de la integración de Python con JMP. Esta publicación explica el nuevo editor de scripts de Python en JMP. En próximas publicaciones, cubriré otras características nuevas de la integración, así como la administración de paquetes.
Editor de secuencias de comandos JMP Python
En versiones anteriores de JMP, la única forma de ejecutar código Python era establecer una conexión a un entorno Python instalado externamente y luego usar una función contenedora JMP Scripting Language (JSL) para enviar el código Python a ese entorno. ¡Ahora puedes editar y enviar un script de Python directamente en JMP! Simplemente abra un script de Python en JMP o cree uno nuevo desde el menú Archivo (Archivo > Nuevo > Script de Python).

El nuevo editor de scripts de Python tiene resaltado de sintaxis y le permite codificar en Python de una manera más natural. Al hacer clic en el botón Ejecutar script se ejecuta el código Python y los mensajes registrados en Python se enumeran en el registro JMP.
Paquetes Python jmp y jmputils
Junto con el nuevo entorno JMP Python, vienen dos nuevos paquetes Python “compatibles con JMP”: jmp y jmputils.
Con el paquete jmp puedes:
- Ejecute JSL desde Python usando jmp.run_jsl('''script jsl''').
- Abrir, cerrar y guardar tablas de datos.
- Obtenga información sobre una tabla abierta en JMP.
- Cree tablas de datos JMP, agregue/elimine/modifique columnas de la tabla de datos JMP y agregue/elimine filas de la tabla de datos JMP.
- Acceda a los datos de una tabla de datos JMP directamente en la memoria a nivel de columna o celda utilizando operadores de matriz indexados de base cero en tablas de datos. Esta indexación también admite operadores de corte de Python en índices de columnas y filas.
- Utilice una tabla de datos JMP y una columna de la tabla de datos JMP como secuencia para la iteración de Python.
Con el paquete jmputils puedes:
- Utilice jmputils.create_jmp(dir_path) para crear un script JMP pip (jpip) de línea de comando en el directorio especificado. Este script se puede utilizar para instalar paquetes en el entorno JMP Python. Tenga en cuenta que a veces es necesario instalar desde la línea de comandos para ciertos paquetes de Python.
- Utilice la función jmputils.jpip( ) para instalar paquetes de Python en el entorno JMP Python.
Todas estas funciones se describen con más detalle en la documentación de ayuda [ENLACE], y también hay una nueva categoría de Python en el JMP Scripting Index que enumera todos estos paquetes y funciones.

Funciones JSL de Python
Al igual que con las versiones anteriores de JMP, puede ejecutar Python desde JSL con las funciones Python Execute( ), Python Submit( ) y Python Submit File( ). También puede transferir datos hacia y desde JMP y Python con las funciones Python Send( ) y Python Get( ).
Los cambios en las funciones JSL de Python incluyen:
- Python Connect( ) sigue admitiendo la creación de un objeto programable en JMP para el Python local.
- Python Send(data_table) ahora crea un objeto jmp.Datatable en Python que es una referencia en vivo a la tabla de datos JMP accesible en memoria desde Python. Anteriormente, se creaba una copia de data_table como pandas.DataFrame exportando la tabla como un archivo CSV al disco y haciendo que pandas leyera el archivo CSV, lo que podría ser muy lento para tablas de datos grandes y podría causar degradación de datos debido a archivos binarios. ->texto->conversión binaria.
- Obtener Python (nombre_objeto):
- Si object_name es un nombre de variable que hace referencia a una tabla de datos JMP abierta en Python, devuelve una referencia de objeto programable JSL a la tabla de datos JMP a la que hace referencia el nombre de la variable de Python.
- Si object_name es un marco de datos de pandas de Python, escribirá el marco de datos de pandas en un archivo CSV y luego abrirá ese archivo como una nueva tabla de datos JMP. Sin embargo, no se recomienda este enfoque, dada la nueva capacidad de crear y conectar tablas de datos JMP en memoria desde Python.
Funciones JSL Python obsoletas que ya no son necesarias:
- Python obtener gráficos ()
- Control de Python ()
- Inicio de Python()
- Python está conectado ()
- Término de Python ()
Las nuevas funciones de JSL Python incluyen:
- Paquetes de instalación de Python( ) le permite instalar paquetes de Python en el entorno JMP Python.
- Python Create JPIP( ) crea un script de línea de comando que envuelve JMP jpip y que puede usarse para instalar paquetes de Python desde la línea de comando en el sistema operativo. El guión está escrito para un director elegido con un cuadro de diálogo de selección de directorio.
Automatización y secuencias de comandosRe: ¡JMP es pitónico! Integración mejorada de Python en JMP 18¿Existen planes para que Workflow Builder acepte Python como alternativa al código JSL?
Re: ¡JMP es pitónico! Integración mejorada de Python en JMP 18Sería útil proporcionar un enlace en esta publicación a la documentación de los dos "paquetes de Python compatibles con JMP".
¡Gracias!
eric
Re: ¡JMP es pitónico! Integración mejorada de Python en JMP 18Oh, veo que hay un marcador de posición en el artículo para un enlace a dicha documentación, solo es necesario reemplazarlo con el enlace real.
Re: ¡JMP es pitónico! Integración mejorada de Python en JMP 18Si no puedo usar mi propio intérprete de Python, ¿existe alguna solución para darle al código una tarea programada para ejecutar ese código de Python a intervalos regulares para procesar los datos y generar el gráfico automáticamente?
Re: ¡JMP es pitónico! Integración mejorada de Python en JMP 18No.
Eso estaba demasiado plagado de problemas. Para algunos usuarios simplemente funcionó, pero muchos clientes tuvieron problemas para hacerlo funcionar. Casi tan importante es que un script de Python ejecutado en JMP no tenía garantía de que se ejecutaría correctamente en la máquina de otro usuario. Probablemente no lo haría si hubiera alguna ubicación de instalación personalizada de Python. Como usuario, trate el Python proporcionado por JMP como su propio entorno virtual de Python específico de JMP.
Hemos hecho un gran esfuerzo para garantizar que JMP Python esté aislado de otras instalaciones de Python presentes en su sistema. Nada le impide utilizar su canalización existente y puede instalar paquetes en el entorno JMP. Es posible que pueda incorporar ese flujo de trabajo a JMP. En todo caso, las capacidades adicionales de JMP 18 deberían facilitarle la importación/exportación de datos entre JMP y una canalización externa de Python, si lo desea.
Creemos que el beneficio de una instalación de Python probada y verificada que funcione en el primer lanzamiento de JMP, sin configuración, es una mejor experiencia para el cliente. Tener una versión y ubicación de Python conocidas nos permite centrarnos en ofrecer características y capacidades en lugar de luchar para resolver problemas debido a instalaciones impredecibles de Python por parte de los clientes. La estabilidad y el Python integrado nos permiten proporcionar una integración mucho más profunda. La nueva capacidad de crear, modificar y acceder a tablas de datos JMP en la memoria desde Python es una de esas características.
Reconozco que esto causa una transición del JMP 14 al 17. JMP 18 es un cambio fundamental en las capacidades. Algunas de las decisiones de diseño iniciales no resistieron la prueba del tiempo. Intenté minimizar cualquier incompatibilidad, pero fueron necesarios algunos cambios. Cuando fueron necesarios cambios, se hicieron en 18 para garantizar que el JMP 18 proporcione una base estable para seguir adelante.
Re: ¡JMP es pitónico! Integración mejorada de Python en JMP 18No, no en el futuro inmediato. Pero sería una buena solicitud de función nueva.
Hay muchas cosas que se pueden hacer. El desafío es centrarse primero en aquellos que aportan el mayor beneficio a todos. El enfoque principal en este momento está en cuestiones fundamentales, especialmente el acceso a datos y la interoperabilidad entre Python y JSL.
Todavía queda mucho por hacer para que el acceso a las tablas de datos tenga todas las funciones desde Python, como configurar columnas de expresión, columnas de estado de filas, formato de columnas,... Asegurarse de que la clasificación de datos entre JSL y Python abarque tantos tipos de datos JMP como sea posible. como sea posible.
Y como es de esperar en cualquier revisión importante, hay algunos errores y pequeños descuidos. Estos también deben abordarse. Si bien un complemento JMP que utiliza código Python funciona bien, el creador del complemento aún no conoce los archivos Python, por lo que debe empaquetar el archivo del complemento JMP (archivo zip) a mano. Además, si bien un archivo Python dentro de un proyecto funcionará bien, todavía no sabe cómo encontrar otros archivos que también estén contenidos en el archivo del proyecto, como tablas de datos, otros archivos de datos o scripts Python adicionales. Si encuentra otras limitaciones que deberían funcionar, infórmelo al soporte técnico. Nuevas capacidades interesantes que mejorarían el poder de JMP para su trabajo; envíelas como solicitudes de funciones.
Re: ¡JMP es pitónico! Integración mejorada de Python en JMP 18Hola @Paul_Nelson ,
Envié un deseo de brindar soporte para Python en el generador de flujo de trabajo.
Un gran beneficio mutuo:
- Poing pong perfecto de código JSL y Python
- una buena mejora para los usuarios que ya utilizan Workflow Builder.
Generador de flujo de trabajo + Python
Re: ¡JMP es Pythonic! Integración mejorada de Python en JMP 18Soy nuevo en JMP, esta podría ser una pregunta para principiantes. Todavía estoy explorando el blog. ¿Cómo puedo aprender más sobre el uso de scripts de Python en JMP? ¿Puedo escribir código Python? ¿Hay blogs a los que pueda hacer referencia? Gracias
Re: ¡JMP es Pythonic! Integración mejorada de Python en JMP 18Hola @zetaVagabond1 ,
Aquí hay algunos de mis recursos favoritos para aprender a usar scripts de Python en JMP:
Introducción a la integración de Python en JMP 18
Mejora tu juego de Python con JMP
Seminario web académico: Integración de JMP y Python
@Paul_Nelson también tiene varias publicaciones de blog en el Blog de JMPer Cable .
Re: ¡JMP es Pythonic! Integración mejorada de Python en JMP 18Consulte el Índice de Scripting; encontrará documentación y ejemplos de la funcionalidad. Al trabajar con JSL, existen diversas funciones como `value = Python Get(py_var); Python Send(jsl_var); Python Submit("código Python");`
Desde el punto de vista de Python, existe una categoría de nivel superior "Python" en el índice de scripts, que detalla el uso de los paquetes salto import y jmputils . Dentro del paquete salto , encontrará interfaces de Python con las funciones de JMP, incluyendo la creación, lectura y escritura de tablas de datos desde Python, así como la capacidad de ejecutar JSL desde scripts de Python. jmp.run_jsl('Código JSL'). jmputils contiene la función jmputils.jpip(), que encapsula la función pip() de Python y garantiza que los paquetes instalados se instalen en el entorno privado aislado para la integración de JMP con Python.
Re: ¡JMP es Pythonic! Integración mejorada de Python en JMP 18Nota rápida: la integración de Python en JMP es una de mis funciones favoritas de JMP v18. Contamos con nuestros propios paquetes de Python para realizar transformaciones de datos y otras funciones, y JMP puede importar fácilmente estas funciones, lo que me permite crear nuevas columnas a partir de datos existentes y reintroducirlas directamente en JMP. Justo el otro día, necesitaba realizar una transformación de coordenadas específica de algunos datos en una tabla de datos de JMP, y solo me llevó unos minutos crear las nuevas columnas usando la función de Python de JMP.
¡Felicitaciones a Paul y otros por un primer paso tan limpio e impresionante hacia la compatibilidad con Python!