Cette présentation décrit les nouvelles et importantes mises à jour de la prise en charge de Python par JMP 18, qui offre une intégration beaucoup plus étroite avec Python et une expérience utilisateur nettement meilleure centrée sur Python. Dans JMP 18, vous pourrez :
Ces fonctionnalités JMP exposées à Python se développeront au fil du temps, mais l'accent est actuellement mis sur les fonctionnalités critiques et la prise en charge des données en mémoire. Dans cette présentation, découvrez les changements et les raisons qui les sous-tendent, ainsi que les nouvelles fonctionnalités fournies aux utilisateurs de JMP. L'extensibilité et la capacité d'importation de données grâce à l'utilisation de packages Python externes sont discutées et l'accès aux GPU via l'interface Python à l'aide de packages externes est démontré.
Bonjour, je m'appelle Paul Nelson. Je suis ici pour parler de JMP, Python et de notre prochaine étape. Après l'une des présentations précédentes l'année dernière, nous avons décidé que nous pouvions améliorer notre jeu. JMP et Python pouvaient encore être améliorés, et c'est de cela dont je vais parler ici.
Les plus grands défis rencontrés par les clients concernaient les JMP 14 à 17, il suffisait de faire fonctionner le support Python. Si ça a marché. Cela a bien fonctionné. Trop souvent, ce n’était pas le cas. Avec de nombreuses distributions Python et des environnements différents qui nous ont rendu les tests difficiles.
Anaconda pourrait parfois fonctionner sous Windows, et les environnements virtuels Python pourraient parfois fonctionner. L'environnement, parce que tout le monde avait des pythons différents, un script ne pouvait même pas dépendre d'une version Python commune dans l'environnement de l'utilisateur.
L'édition du code Python dans l'éditeur JSON était difficile et désagréable. Un langage dans lequel les blocs de code sont délimités par un espacement. Lorsque vous devez coller cela sous forme de chaîne dans JSL, cela rend la tâche difficile. Le rapport d'erreurs insuffisant dans les anciennes versions de JMP à partir de Python rendait difficile le débogage de vos scripts Python.
Enfin, les transferts de tables de données et de matrices ont été effectués via le système de fichiers, et avec une table de données, cela a été effectué sous forme de fichier CSV, ce qui est lent si vous avez réellement du Big Data. Les grandes classes fonctionnent bien, mais les données plus volumineuses sont lentes.
La vision que nous avons eue est de garantir que l'intégration de Python fonctionne correctement. Aucune configuration nécessaire. À cette fin, nous avons enterré une version Python 3.115 et JMP 18.0, et elle est installée dans le cadre de JMP. Il s'agit d'un environnement commun et tous les utilisateurs disposeront de la même version de Python avec la même version de JMP.
Nous sommes allés plus loin et nous sommes assurés que les données circulant entre JSL et Python correspondent à des transferts en mémoire et à un accès sans copie à la mémoire. Nous en avons fait un environnement invitant et productif pour les programmeurs Python. Nous disposons désormais également d'un éditeur de script Python permettant la coloration du code et la coloration syntaxique.
Vous pouvez exécuter des scripts Python purs directement depuis l'éditeur de script et depuis l'environnement Python, vous pouvez accéder directement aux données JMP, au journal, vous pouvez appeler JSL et accéder aux données depuis Python. Nous avons considérablement amélioré le rapport d'erreurs dans le journal JMP et le journal intégré.
Parce qu'il s'agit d'un environnement commun, nous pouvons désormais le tester et le vérifier. Notre environnement est le même que vous devriez voir. Nous avons ajouté une catégorie Python entière dans l'index de script pour correspondre… pour expliquer et montrer des exemples de ce qui est désormais disponible avec le package d'importation JMP et quelques autres packages utilitaires.
L'autre partie est que cela nous donne la possibilité d'étendre les capacités de JMP grâce à la vaste bibliothèque de packages de Python. Nous n'essayons pas de créer un JSL alternatif un à un. Au lieu de cela, nous essayons de fournir un environnement familier et productif pour la programmation Python au sein de JMP.
Il s’agit d’une modernisation, d’une refonte et d’une refonte. Certaines des décisions de conception originales pour l'intégration Python de JMP présentaient des limites. Nous avons fait tout notre possible pour minimiser les bris dus au changement, tout en fournissant une base solide et stable pour l'avenir.
On s'attend à ce que la casse se limite à cette transition vers JMP. L'aspect clé est que nous ne prenons désormais en charge que la version Python que nous livrons avec JMP. Considérez-le comme un environnement virtuel JMP privé.
L'autre chose qui se produira dans les scripts est que nous avons modifié la façon dont fonctionne l'envoi Python d'une table de données. Il crée maintenant un objet JMP avec cette table de données. Il s'agit d'un accès en direct à la table de données JMP. La copie en mémoire, vous pouvez éditer et modifier la table existante. Ce n'est plus une copie.
JMP 14 à 17 a créé un objet Pandas DataFrame en copiant les données via un fichier CSV temporaire dans le système de fichiers. Pour les données volumineuses. L’export au format CSV explose, il devient très volumineux et lent. Vous rencontrez également le problème d'une perte potentielle de précision car vous passez d'un format binaire à un format texte et revenez du texte à un format binaire.
Si vous avez vraiment besoin de la même fonctionnalité, nous avons fourni un DT à pandas Python dans les exemples de fichiers qui fournit une fonction à deux pandas. Cela fonctionne comme avant en interne. Il crée un fichier CSV temporaire et demande aux pandas d'importer le fichier CSV.
Il existe également un exemple JMP vers pandas montrant comment créer un DataFrame pandas en mémoire à partir d'un objet JMP Data Table qui construit une colonne dans pandas avec une colonne de la colonne JMP à la fois.
La Python Send Matrix en était une autre qui écrivait via le système de fichiers. Il écrirait un fichier de doubles pour que NumPy lise le fichier. Cela se produit désormais via la mémoire interne, et il s'agit d'une référence en direct à la matrice au lieu d'une copie.
La majorité de l'API JSL Python reste intacte. Les changements impliqués consistaient principalement à supprimer les arguments et fonctions obsolètes utilisés pour configurer le support Python d'origine afin de choisir une version de Python.
La seule suppression de l'API était la fonction Python get graphiques, qui récupérait une image de Matplotlib, et dans notre index de script, nous avons un exemple qui montre exactement comment faire la même chose que JMP a fait en interne avec uniquement du code JSL et Python. Montrez-le déjà. Voyons. Sortons de la démo.
Ici, nous avons JMP. L'une des choses que je veux montrer est que vous verrez des icônes Python dans les barres d'outils et dans le nouveau menu Fichier, nous avons un script JSON, mais nous avons maintenant un nouveau script Python. Nous allons afficher l'éditeur de script Python.
Nous pouvons utiliser afficher le journal intégré. Nous avons un package d'importation JMP. Importez JMP. Nous avons fait nos efforts pour nous assurer que nous avons mis les chaînes de documents Python afin que vous puissiez exécuter, aidez JMP Python. Nous pouvons exécuter ce script. Vous verrez que nous avons documenté les objets et les fonctions dans ce package d'importation JMP de niveau supérieur.
Il y a un tas de constantes. La plupart des répertoires spéciaux sont représentés. Nous pouvons donc le faire. Et maintenant je le fais depuis Python. JMP ouvert. JMP, eh bien, je ne peux pas taper aujourd'hui, JMP. EXEMPLES DE DONNÉES. Plus. Grand Patron. Et tout comme en JSL, nous pouvons sélectionner la ligne de code et l'exécuter dans le script et celle-ci. Et nous avons une grande classe.
Or, ce n'est pas une copie. Nous pouvons récupérer cet objet. Nous aurions pu mettre TT = JMP ouvert et nous aurions une référence. Mais nous pouvons aussi utiliser TT égal à JMP.current. Cela nous donnera une référence au tableau de données actuel.
Eh bien, nous pouvons faire des choses comme imprimer TT. Cela nous dit que c'est une grande classe. Il s'agit de cinq colonnes sur 40. Mais même. Plus de plaisir que vous pouvez faire. TT. Nom. Et nous pouvons utiliser des opérateurs de tranche Python. Je lui dis de nous donner tous les autres noms dans la colonne des noms commençant par zéro.
Nous indexons en Python tout comme Python devrions-nous indexer en commençant par zéro. Notre index de tableau de données est colonne par ligne. Puisque nous sommes un type de format majeur de colonne et si nous imprimons. Tous les autres. Nom, nous recevons Katie. Jeanne. Lily. James, Barbara, Susan, Joe et David.
Il s'agit d'un accès en direct, nous pouvons donc faire des choses comme… et nous pouvons faire des choses comme TT, et nous pouvons utiliser soit le nom, soit l'index de la colonne. Colonne, nous imprimons cela. Cela nous donne, choisissez. Voici votre… J'en ai choisi un, n'est-ce pas, Lewis. Désolé. Zéro zéro. C'est Katie. Puisque le tableau de données est en direct. Tu peux faire Katie
Attendre. Minuscule. Cas mixte. Nous voyons maintenant le résultat dans notre journal intégré. Vous le remarquerez. Nous l'avons modifié dans le tableau de données. Cela vous donne la possibilité de modifier les tables de données, d'accéder aux tables de données à la manière de Python et de créer des tables de données à partir de Python. Nous avons fait des efforts.
Nous avons maintenant l'index des scripts. Je vais montrer le… ici, comme je l'ai dit, obtenir des graphiques est obsolète. En fait, ce n'est plus une fonction valide dans JMP, mais l'exemple dans l'index de script vous montre comment passer de ce que vous aviez à la façon dont nous l'avons réellement fait en interne dans JMP pour enregistrer la figure, ouvrir l'image et créer une nouvelle. fenêtre avec l'image.
L'une des nouvelles fonctionnalités intéressantes de l'environnement centré sur Python, elles se trouvent dans la catégorie Python est une catégorie à part entière. Le package d'importation JMP contient des objets de table de données. Il y a des exemples pour chacun d'entre eux, nous pouvons créer de nouvelles colonnes, ajouter des lignes et enregistrer le tableau. Les propriétés qu'il contient, telles que l'obtention des noms de table. Tout ça.
Celui-ci créerait une nouvelle table de données alimentée par Python. Nous disposons également d'un utilitaire JMP. Où vous pouvez entrer, ou nous pouvons l'utiliser pour exécuter le pip JMP car il a créé son propre environnement isolé. Lorsque nous installons des packages, ils doivent être dans l'environnement isolé de JMP.
J'espère que vous ne rencontrerez aucun problème avec les packages que vous avez dans JMP en conflit avec d'autres éléments ou d'autres installations de Python. Nous l'avons gardé isolé. Et donc dans ce cas, donc si vous devez le faire… nous avons create jpip qui créera un script qui encapsulera le script Python pip pour vous permettre de l'installer, ou vous pouvez réellement l'exécuter à partir de la classe utils JMP depuis gem.
Ici, nous allons afficher la liste des commandes list pip et cela disparaîtra. Appelez pip et renvoie la liste des packages que j'ai installés dans mon environnement Python. Un autre exemple ici, vous pouvez réellement installer des packages. Et cela se déroulera directement depuis JMP.
Il y a quelques mises en garde, c'est pourquoi le create jpip existe. Si un package est chargé en mémoire comme NumPy, puisqu'il possède une bibliothèque partagée. Windows et peut vous empêcher de mettre à jour ce package. Certains packages nécessitent une compilation. Cela devra peut-être être fait à partir de la ligne de commande.
Certains d’entre eux peuvent fonctionner, mais ceux-ci devront peut-être être exécutés à partir de la ligne de commande. C'est pourquoi vous souhaiterez créer un script wrapper jpip. Une fois exécuté, il apparaîtra et vous donnera un répertoire dans lequel écrire le fichier, puis sélectionnera le dossier, et il écrira un script wrapper jpip exécutable à partir de la ligne de commande.
Là, lorsque vous l'exécutez, vous souhaitez utiliser l'indicateur utilisateur moins moins après l'installation. Nous le faisons automatiquement pour vous lorsqu'il est appelé d'ici. Il existe également une fonction JSL qui exécutera également l'installation. Les packages d'installation Python sont encore plus simples. Vous pouvez simplement exécuter le script JSL, et il appellera pip en arrière-plan, configurant correctement toutes les variables d'environnement nécessaires pour placer le package dans l'environnement isolé de JMP.
Allons-y. Ensuite, nous pourrons vous montrer d’autres démos. Ce sont les trucs de base faciles. Mais ce que nous avons également… une partie de tout ce processus était de rendre JMP plus convivial pour Python et beaucoup plus facile d'étendre les capacités de JMP via des packages Python supplémentaires.
L'une de nos solutions d'assistance fréquentes que les gens souhaitent est de pouvoir importer des fichiers de parquet. Cette démo prend et extrait une table de mon lecteur. Celui que j'ai téléchargé sur Internet. Correct. Imprime ensuite la forme du fichier parquet et crée un tableau de données JMP colonne par colonne à partir des données du fichier parquet. Nous effacerons les journaux. En fait, vois-moi le faire.
Je n'ai pas exécuté le script. J'ai dû mettre certaines choses en évidence. Et voilà. C'était un dossier de parquet. Que nous avons fait le parquet pyrrow tel que PQ l'a importé. Les propriétés des fichiers Parquet. C'est mille lignes. La forme est de 13 colonnes sur mille lignes. Schema montre au prince le schéma des noms de colonnes.
Ici, tout en bas, nous pouvons montrer l'une des autres choses : nous n'avons pas encore fini de loin avec les choses que nous voulons améliorer du côté de Python, mais jusqu'à ce que nous y arrivions, vous pouvez exécuter JSL à partir de Python.
Même si le code Python ne prend pas encore en charge des éléments tels que les paramètres, les largeurs d'affichage ou même la modification des types de colonnes. Vous pouvez créer une nouvelle colonne, mais vous ne pouvez pas modifier son type depuis Python. Ce sont des choses que nous voulons aborder, mais pour le moment, vous disposez d'une solution de contournement pour pouvoir exécuter des scripts JSL à partir de Python, tout comme vous pouviez exécuter Python à partir de JSL.
Désormais, grâce à cet environnement amélioré, vous pouvez passer des appels entre les deux. Le Python peut exécuter des scripts JSL. Quel appel dans Python peut ensuite être réexécuté dans l'environnement JSL, afin que vous puissiez imbriquer les appels pour réaliser des choses qui ne seraient pas possibles autrement. Cela revient à transférer un fichier Parquet d'un type de données que JMP ne gère pas nativement. Mais nous l'avons fait en important un package Python pour prendre en charge cela.
Une des autres choses qui me sont chères. Je ne suis pas vraiment un statisticien, mais je suis graphiste et autres mathématiques. Ici, nous utilisons Open Compute Language ou OpenCL. Nous avons importé le package OpenCL. Créer une fractale de Mandelbrot. Montrons d'abord le processeur. Le faire avec le CPU. En réalité, cela prendra environ 16 secondes.
C'est pénible et vous remarquerez que JMP lui-même est lent. Pas réactif car Python a le contrôle à ce stade. Si vous placez une cellule en marche au plus profond de boucles serrées, vous pourrez reprendre le contrôle. Cela utilise le CPU pour générer cette fractale.
Modifions-le maintenant pour qu'il exécute le GPU à la place et exécutons le script. Boom. Cela prend une fraction de seconde pour générer l'image, la sauvegarder, l'ouvrir dans un script et voir ce que nous disons. Cela a pris 16 secondes en utilisant les GPU contre… mais à chaque fois on remonte assez loin. En fait, cela a pris 32 secondes pendant ma présentation pour le faire sur le processeur.
Cela s'ouvre si vous souhaitez utiliser le GPU avec JMP, vous pouvez désormais le faire via Python. Nous avons essayé à la fois PyOpenCL et PyCuda, donc si vous avez une carte Nvidia et que vous travaillez avec Cuda. Vous pouvez importer PyCuda ou OpenCL plus générique. Améliorer davantage les capacités de calcul de JMP sans laisser la puissance de votre bureau inutilisée.
Nous pouvons également nous connecter au SaaS via Python. SaaS a un SaaS y. Package, et nous l'avons installé dans le… et voici une partie de ce travail qui a été réalisée par un de mes collègues. Effacons les journaux. Nous voyons réellement ce que j'ai et nous pouvons exécuter le script.
Il collecte cela comme il se doit. On y va. Celui-ci utilise en fait le JSL pour essayer de s'assurer que tous les packages Python qui pourraient être nécessaires à l'exécution du script sont déjà installés, et vous pouvez les configurer. Cela fait partie de ce que vous voyez ici dans le journal, c'est-à-dire que ceux-ci sont déjà satisfaits. Voici tous les résultats obtenus lors de l'exécution du script de connexion au SaaS. En utilisant le package SaaS Py, et nous reviendrons sur le journal.
Le script est répercuté dans le journal. Comme je l'ai dit ici. Nous avons des informations de connexion où il se connecte au SaaS, exécutant les produits. Notre logistique. Puis retour des valeurs de sortie et fin de la session SaaS.
Nous avons entendu dire que TensorFlow pourrait être une chose qui intéresserait les gens. En voici une très simple. Faux, encore une fois, j'ai installé TensorFlow et cela fonctionne à partir de JSL, mais nous aurions facilement pu simplement exécuter ce code ici à partir de Python.
Il exécute le flux tensoriel et crée la somme. Je suis sûr que vous proposerez des utilisations beaucoup plus compliquées que celles que je propose. Py digest en est un autre. C'est un écran. Voici un exemple que j'ai créé pour montrer, l'un consistait à montrer plusieurs choses, y compris le JSL d'exécution où il me permet d'utiliser pour choisir un répertoire à l'aide du répertoire de sélection JMP, le répertoire de sélection JSL et de l'utiliser dans un script python. Tout cela est un pur script Python. Cela me permet de choisir un répertoire.
Crée une somme de contrôle de chaque fichier du répertoire. Place cela dans une base de données SQLite, puis crée une table de données JMP à partir de la base de données. Cela vous donne un peu de programmation de base de données, donne un peu de JMP pour créer une table de données JMP à partir de Python et exécuter JSL à partir de Python.
Annuaire à choisir. J'ai beaucoup de données ici, alors choisissons simplement la présentation du dossier parquet ou sélectionnons le dossier. Nous avons maintenant un tableau de sommes de contrôle. Ils ont créé le… il vérifie chaque fichier du répertoire, m'a donné leurs noms de chemin et une somme de contrôle MD5 du contenu du fichier. Construit la base de données. Créez la table de données JMP à partir de Python et utilisez également le JSL pour définir les largeurs de colonnes.
Encore une fois, c'est quelque chose que nous n'avons pas encore mis en œuvre, mais c'est quelque chose sur la liste à examiner. Mais vous pouvez faire des choses à partir de… vous pouvez faire des choses JSL à partir de votre Python si vous le souhaitez.
Certaines personnes pourraient vouloir nous R. Eh bien, dans ce cas, j'ai créé une connexion en utilisant notre service sur ma machine et dans notre environnement. Il était tout simplement plus facile d'exécuter notre service à partir d'un système Windows pour un environnement Linux WSL.
J'ai un démon du service R qui court ici. Et en utilisant le client réservé. Je fais juste un petit peu, je crée un vecteur R sur le serveur, je résume le résultat et j'exécute ce script. Nous sommes connectés à notre serveur. Nous obtenons le vecteur et nous additionnons tous les éléments pour en obtenir six. Notre py2. Nous en avons également quelques exemples. Si vous voulez quelque chose de vraiment simple qui fonctionnera à partir de la ligne de commande, il existe un exemple sur la façon d'utiliser un processus pour exécuter et exécuter R à partir de la ligne de commande.
Enfin, celui des statistiques où Jon Saul l'a aidé. Créez un exemple utilisant le package Python d'analyse HDB. Une chose à noter avec Matplotlib. Matplotlib sous Windows n'a pas de backend graphique, donc si vous souhaitez voir une sortie, nous avons constaté que PyQt5 fonctionne mieux.
Comme le back-end et. Sur Mac si vous utilisez Matplotlib, nous le forcerons soit à être l'AGG, soit le backend non graphique si vous ne l'avez pas installé. L'un des PyQt5 ou PySide. Parce que Matplotlib sur Mac accède automatiquement au backend cacao, et il y a un bug qui fait que lorsque vous fermez la dernière fenêtre de Matplotlib sur Mac, JMP se ferme.
Pour nous protéger contre ce que nous forçons, si nous trouvons Matplotlib sur votre système, s'il y a un back-end, nous chargerons Matplotlib et le forcerons à utiliser le back-end Qt. Sinon, nous nous assurons qu'il s'agit d'un backend non graphique. Nous en avons fait le back-end. J'ai PyQt5 sur ma machine. Avec cet exemple, nous exécutons du clustering sur l'analyse HDB.
Montrons maintenant le journal intégré. Nous allons exécuter le script. Ce que nous obtenons, il y a un chiffre généré dans la table Matplotlib des données. Ici vous pouvez voir que nous avons ouvert JMP et pris la référence DT. Ce sont les échantillons que j'ai. Croire.
Je vais rapporter la présentation. Nos priorités pour le futur proche. Perfectionnement et amélioration continue. Augmentez l'interopérabilité des données entre JMP et Python. À l'heure actuelle, la limitation de l'édition de modification de colonne est que vous pouvez créer des colonnes de n'importe quel type, mais vous ne pouvez modifier et obtenir des valeurs que pour les colonnes numériques et de caractères, les colonnes d'expression ou les colonnes d'état. La création de tables liées sera réalisée à l'avenir.
Bien que l'éditeur de script Python prenne en charge la coloration du code et la coloration syntaxique, il ne prend pas encore en charge l'indentation automatique. Nous examinerons cela également.
Les objectifs de la modernisation étaient de faire en sorte que l'intégration de JMP Python fonctionne immédiatement. Vous devriez pouvoir être productif avec JMP et Python sans aucune configuration. Autrement dit, si cela ne fonctionnait pas, c'était très difficile. Pourquoi ne réduisez-vous pas le temps nécessaire aux programmeurs Python pour être productifs dans JMP et créer JMP ? Améliorer la capacité des JMP. Soyez un hub analytique grâce à l’expansion facile de JMP à l’aide de packages Python externes.
Améliorer notre capacité à charger différents formats de données que d'autres personnes ont écrit ont passé du temps à écrire, comme le format parquet où nous, hdf5, nous l'avons également testé. Il existe de nombreux formats, plus de formats qu'une équipe de développement ne peut avoir le temps d'écrire en interne, mais de cette façon, vous pouvez extraire le package Python et en faire une table de données JMP à partir de ces données et disposer de ce pouvoir. au sein de JMP.
Appréciez votre temps. J'espère que vous avez apprécié ce que nous avons fait et que vous êtes très intéressé par vos commentaires. Merci.