JMP est Pythonique ! Intégration Python améliorée dans JMP 18JMP 18 propose une nouvelle façon de s'intégrer à Python. L'installation de JMP 18 est livrée avec un environnement Python indépendant conçu pour être utilisé avec JMP. De plus, JMP dispose désormais d'un éditeur Python natif et de packages Python spécifiques à JMP. Cet environnement JMP Python offre une connectivité et une interaction améliorées avec JMP, ce qui signifie que l'utilisation de Python avec JMP n'a jamais été aussi simple.
Dans cette série d'articles de blog, je vous présente les nouvelles fonctionnalités de l'intégration Python avec JMP. Cet article présente le nouvel éditeur de script Python dans JMP. Dans les prochains articles, je couvrirai d'autres nouvelles fonctionnalités de l'intégration, ainsi que la gestion des packages.
Éditeur de scripts JMP Python
Dans les versions précédentes de JMP, la seule façon d'exécuter du code Python consistait à établir une connexion à un environnement Python installé en externe, puis à utiliser une fonction wrapper JMP Scripting Language (JSL) pour soumettre le code Python à cet environnement. Vous pouvez désormais éditer et soumettre un script Python directement dans JMP ! Ouvrez simplement un script Python dans JMP ou créez-en un nouveau à partir du menu Fichier (Fichier > Nouveau > Script Python).

Le nouvel éditeur de script Python dispose d'une coloration syntaxique et vous permet de coder en Python de manière plus naturelle. Cliquer sur le bouton Exécuter le script exécute le code Python et les messages enregistrés dans Python sont répertoriés dans le journal JMP.
Paquets Python jmp et jmputils
Parallèlement au nouvel environnement JMP Python, deux nouveaux packages Python « compatibles JMP » sont disponibles : jmp et jmputils.
Avec le package jmp, vous pouvez :
- Exécutez JSL à partir de Python en utilisant jmp.run_jsl('''jsl script''').
- Ouvrez, fermez et enregistrez les tables de données.
- Obtenez des informations sur une table ouverte dans JMP.
- Créez des tables de données JMP, ajoutez/supprimez/modifiez des colonnes de table de données JMP et ajoutez/supprimez des lignes de table de données JMP.
- Accédez aux données d'une table de données JMP directement en mémoire au niveau de la colonne ou de la cellule à l'aide d'opérateurs de tableau indexé de base zéro sur les tables de données. Cette indexation prend également en charge les opérateurs de tranche Python sur les index de colonnes et de lignes.
- Utilisez une table de données JMP et une colonne de table de données JMP comme séquence pour l'itération Python.
Avec le package jmputils vous pouvez :
- Utilisez jmputils.create_jmp(dir_path) pour créer un script JMP pip (jpip) de ligne de commande dans le répertoire spécifié. Ce script peut ensuite être utilisé pour installer des packages dans l'environnement JMP Python. Notez que l'installation depuis la ligne de commande est parfois nécessaire pour certains packages python.
- Utilisez la fonction jmputils.jpip( ) pour installer les packages Python dans l'environnement JMP Python.
Toutes ces fonctions sont décrites plus en détail dans la documentation d'aide[LINK], et il existe également une nouvelle catégorie Python dans l'index de script JMP qui répertorie tous ces packages et fonctions.

Fonctions PythonJSL
Comme avec les versions précédentes de JMP, vous pouvez exécuter Python à partir de JSL avec les fonctions Python Execute( ), Python Submit( ) et Python Submit File( ). Vous pouvez également transférer des données vers et depuis JMP et Python avec les fonctions Python Send( ) et Python Get( ).
Les modifications apportées aux fonctions Python JSL incluent :
- Python Connect() reste à prendre en charge la création d'un objet scriptable dans JMP vers le Python local.
- Python Send(data_table) crée désormais un objet jmp.Datatable en Python qui est une référence en direct à la table de données JMP accessible en mémoire depuis Python. Auparavant, une copie de data_table était créée en tant que pandas.DataFrame en exportant la table sous forme de fichier CSV sur le disque et en demandant aux pandas de lire le fichier CSV, ce qui pouvait être très lent pour les grandes tables de données et entraîner une dégradation des données en raison du binaire. ->texte->conversion binaire.
- Python Get (nom_objet) :
- Si le nom_objet est un nom de variable qui fait référence à une table de données JMP ouverte en Python, il renvoie une référence d'objet scriptable JSL à la table de données JMP référencée par le nom de la variable Python.
- Si le nom_objet est un bloc de données Pandas Python, il écrira le bloc de données Pandas dans un fichier CSV, puis ouvrira ce fichier en tant que nouvelle table de données JMP. Cette approche n'est toutefois pas recommandée, compte tenu de la nouvelle possibilité de créer et de connecter des tables de données JMP en mémoire à partir de Python.
Fonctions JSL Python obsolètes qui ne sont plus nécessaires :
- Python Obtenir des graphiques ( )
- Contrôle Python( )
- Init Python()
- Python est connecté ( )
- Terme Python ( )
Les nouvelles fonctions JSL Python incluent :
- Python Install Packages( ) vous permet d'installer des packages Python dans l'environnement JMP Python.
- Python Create JPIP( ) crée un script de ligne de commande qui encapsule le jpip JMP et qui peut être utilisé pour installer des packages Python à partir de la ligne de commande dans le système d'exploitation. Le script est écrit pour un réalisateur choisi via une boîte de dialogue de sélection de répertoire.
Automatisation et scriptsRe : JMP est Pythonique ! Intégration Python améliorée dans JMP 18Est-il prévu que Workflow Builder accepte Python comme alternative au code JSL ?
Re : JMP est Pythonique ! Intégration Python améliorée dans JMP 18Il serait utile de fournir un lien dans cet article vers la documentation des deux « packages Python compatibles JMP ».
Merci!
Éric
Re : JMP est Pythonique ! Intégration Python améliorée dans JMP 18Oh, je vois qu'il y a un espace réservé dans l'article pour un lien vers une telle documentation, il doit juste être remplacé par le lien réel.
Re : JMP est Pythonique ! Intégration Python améliorée dans JMP 18Si je ne peux pas utiliser mon propre interpréteur Python, existe-t-il une solution pour donner au code une tâche planifiée pour exécuter ce code Python à intervalles réguliers afin de traiter les données afin de générer automatiquement le graphique.
Re : JMP est Pythonique ! Intégration Python améliorée dans JMP 18Non.
Cela posait trop de problèmes. Pour certains utilisateurs, cela a fonctionné, mais beaucoup trop de clients ont eu du mal à le faire fonctionner. De manière presque aussi importante, un script Python exécuté dans JMP n'avait aucune garantie qu'il fonctionnerait correctement sur la machine d'un autre utilisateur. Ce ne serait probablement pas le cas s'il existait un emplacement d'installation Python personnalisé. En tant qu'utilisateur, traitez le Python fourni par JMP comme votre propre environnement virtuel Python spécifique à JMP.
Nous avons déployé des efforts considérables pour garantir que JMP Python soit isolé des autres installations Python présentes sur votre système. Rien ne vous empêche d'utiliser votre pipeline existant et vous pouvez installer des packages dans l'environnement JMP. Vous pourrez peut-être intégrer ce flux de travail dans JMP. Au contraire, les fonctionnalités supplémentaires de JMP 18 devraient faciliter l'importation/exportation de données entre JMP et un pipeline Python externe si vous le souhaitez.
Nous pensons que l'avantage d'une installation Python testée et vérifiée qui fonctionne dès le premier lancement de JMP, sans configuration, est une meilleure expérience client. Avoir une version et un emplacement Python connus nous permet de nous concentrer sur la fourniture de fonctionnalités et de capacités plutôt que de lutter pour résoudre les problèmes dus aux installations Python imprévisibles des clients. La stabilité et le Python intégré nous permettent de fournir une intégration beaucoup plus approfondie. La nouvelle possibilité de créer, modifier et accéder aux tables de données JMP en mémoire à partir de Python est l'une de ces fonctionnalités.
Je reconnais que cela provoque une transition par rapport au JMP 14-17. JMP 18 représente un changement fondamental dans les capacités. Certaines des décisions de conception initiales n’ont pas résisté à l’épreuve du temps. J'ai essayé de minimiser les éventuelles incompatibilités, mais certains changements étaient nécessaires. Lorsque des changements étaient nécessaires, ils ont été effectués en 18 pour garantir que le JMP 18 fournisse une base stable pour l'avenir.
Re : JMP est Pythonique ! Intégration Python améliorée dans JMP 18Non, pas dans l’immédiat. Mais ce serait une bonne demande de nouvelle fonctionnalité.
Il y a beaucoup de choses qui peuvent être faites. Le défi consiste à se concentrer d’abord sur celles qui apportent le plus d’avantages à tout le monde. L'accent principal est actuellement mis sur les questions fondamentales, notamment l'accès aux données et l'interopérabilité entre Python et JSL.
Il reste encore beaucoup à faire pour que l'accès aux tables de données soit pleinement fonctionnel depuis Python, comme la définition des colonnes d'expression, les colonnes d'état des lignes, le formatage des colonnes, ... S'assurer que le marshaling des données entre JSL et Python englobe autant de types de données JMP. que possible.
Et comme il fallait s’y attendre lors de toute refonte majeure, il y a quelques bugs et petits oublis. Il faut également s’attaquer à ces problèmes. Bien qu'un complément JMP utilisant le code Python fonctionne très bien, le générateur de complément ne connaît pas encore les fichiers Python, vous devez donc compresser le fichier du complément JMP (archive zip) à la main. De plus, même si un fichier Python au sein d'un projet fonctionnera parfaitement, il ne sait pas encore comment trouver d'autres fichiers également contenus dans le fichier de projet, tels que des tables de données, d'autres fichiers de données ou des scripts Python supplémentaires. Si vous rencontrez d'autres limitations qui devraient fonctionner, veuillez les signaler au support technique. De nouvelles fonctionnalités intéressantes qui amélioreraient la puissance de JMP pour votre travail, veuillez les soumettre en tant que demandes de fonctionnalités.
Re : JMP est Pythonique ! Intégration Python améliorée dans JMP 18Salut @Paul_Nelson ,
J'ai soumis un souhait de fournir un support Python dans le générateur de workflow.
Un grand gagnant-gagnant :
- poing pong transparent de code JSL et Python
- une amélioration intéressante pour les utilisateurs qui utilisent déjà Workflow Builder.
Générateur de flux de travail + Python
Re: JMP est Pythonique ! Intégration Python améliorée dans JMP 18Je suis nouveau sur JMP, c'est peut-être une question de noob. Je suis toujours en train d'explorer le blog. Comment puis-je en savoir plus sur l'utilisation des scripts Python dans JMP ? Puis-je écrire du code Python ? Y a-t-il des blogs auxquels je peux me référer ? Merci
Re : JMP est Pythonique ! Intégration Python améliorée dans JMP 18Salut @zetaVagabond1 ,
Voici quelques-unes de mes ressources préférées pour apprendre à utiliser les scripts Python dans JMP :
Premiers pas avec l'intégration Python dans JMP 18
Améliorez votre jeu Python avec JMP
Webinaire académique : Intégration de JMP et Python
@Paul_Nelson a également plusieurs articles de blog dans le blog JMPer Cable .
Re : JMP est Pythonique ! Intégration Python améliorée dans JMP 18Consultez l'index des scripts : vous y trouverez de la documentation et des exemples de fonctionnalités. En JSL, vous trouverez de nombreuses fonctions telles que : value = Python Get( py_var ); Python Send( jsl_var); Python Submit( "python code");
Du côté Python, l'index des scripts contient une catégorie « Python » de premier niveau qui détaille l'utilisation des packages d'importation saut et jmputils . Le package saut inclut les interfaces Python pour JMP, notamment la création, la lecture et l'écriture de tables de données depuis Python, ainsi que la possibilité d'exécuter du JSL à partir de scripts Python. jmp.run_jsl(' JSL code '). jmputils contient la fonction jmputils.jpip(), qui encapsule la fonction pip() de Python et garantit que les packages installés sont placés dans l'environnement privé isolé pour l'intégration Python de JMP.
Re : JMP est Pythonique ! Intégration Python améliorée dans JMP 18Petite précision : l'intégration de Python dans JMP est l'une de mes fonctionnalités préférées de JMP v18. Nous disposons de nos propres packages Python pour effectuer des transformations de données et d'autres fonctions, et JMP peut facilement importer ces fonctions et me permettre de créer de nouvelles colonnes à partir de données existantes et de les réintégrer directement dans JMP. L'autre jour, j'ai dû effectuer une transformation de coordonnées spécifique sur des données d'une table de données JMP, et la création des nouvelles colonnes grâce à la fonctionnalité Python de JMP n'a pris que quelques minutes.
Félicitations à Paul et al. pour une première étape aussi propre et impressionnante vers la compatibilité Python !