Puisque vous lisez ceci, vous savez probablement que Python est un outil open source très utilisé et déployé par les scientifiques et les ingénieurs – certains plus volontiers que d’autres, devrais-je ajouter – pour résoudre divers problèmes .
Jusqu’à présent, mes conversations avec les utilisateurs de JMP® suggèrent que la plupart d’entre eux développent des workflows Python pour traiter les tâches en amont d’accès aux sources de données, plutôt que d’utiliser Python pour, par exemple, les tâches d’apprentissage automatique auxquelles il est généralement associé. Compte tenu de la gamme vertigineuse de types de fichiers uniques provenant d’une avalanche d’instruments différents dans un secteur donné, Python règne en maître comme méthode de référence pour accéder aux données car – heureusement ! – quelqu’un, quelque part, a probablement créé un framework pour contraindre les fichiers à révéler leurs secrets.
Mon intérêt initial pour l'intégration Python de JMP était également orienté vers l'accès aux données. Avant de rejoindre JMP, j'ai travaillé dans le service de cardiologie d'un hôpital local. Lorsque JMP a lancé pour la première fois la plateforme Functional Data Explorer (FDE), les données ECG (aussi appelées EKG) des battements cardiaques semblaient parfaitement adaptées à l'analyse dans le nouvel outil : sans modèle descendant traditionnel de leur forme, une approche ascendante de capture de leur variabilité de forme commune (c'est-à-dire au sein d'une dérivation ECG, le « battement » que vous voyez) entre les patients semblait une tâche parfaite pour FDE.


Un petit hic : tous les exemples de données ECG que j'ai pu trouver utilisent des normes de fichiers WFDB (pour « Waveform Database ») impliquant des formats binaires que JMP n'ouvre pas nativement. Heureusement, l'intégration JMP et Python remise à neuf complète désormais le menu de JMP avec un accès à toutes sortes de types de fichiers, pour lesquels je remercie encore une fois la générosité des résolveurs de problèmes qui créent des packages Python adaptés à la tâche.
Après avoir identifié les données ECG et le package Python wfdb de PhysioNet.org, les nouveaux outils intégrés à l'intégration JMP et Python me permettent de :
- Extrayez les données ECG des structures de fichiers WFDB via Python.
- Créez des tables de données JMP et remplissez-les via Python.
- Transférez les efforts restants à JMP en exécutant un fichier JMP Scripting Language (JSL) d'étapes créées à l'aide de JMP Workflow Builder - qui capture le code de mes actions pointer-cliquer JMP - pour la préparation des données, la visualisation et l'analyse FDE.
L'approche « Python-in-a-box » de JMP comprend un éditeur Python intégré ainsi que des packages préinstallés ( jmp et jmputils) avec lesquels je peux :
- Installez les autres packages Python requis pour la tâche à l'aide de la commande jmputils jpip (en parallèle avec pip de Python),
- Utilisez ensuite l’approche de script Python normale pour importer ces packages.
L’installation et l’importation du package wfdb ont permis de franchir le premier obstacle à l’accès aux données dans JMP.
################################################################
# let's get this party started - load up some Python packages
################################################################
import jmp
import jmputils
jmputils.jpip('install', 'numpy pandas')
jmputils.jpip('install', 'wfdb')
import numpy as np
import pandas as pd
import wfdb
import os
Si cela ressemble à Python, c'est parce que c'est le cas ! Tout cela dans JMP.
À partir de là, en plus de quelques étapes de préparation des données Python, les obstacles restants ont été franchis avec quelques nouveaux éléments d'intégration JMP et Python :
- Création de la table de données JMP à l'aide de la fonction Python jmp.DataTable() .
- Ajout de colonnes à la table de données JMP via new_column() avant de transmettre la liste de données.
# migrate the signal data to a **JMP table**
# 'ecgall' is the pandas DataFrame containing 12 columns of ECG lead data
ecgdtname = "ECG Data"
ecgdt = jmp.DataTable(ecgdtname, rg*signal.shape[1]) #2nd argument assigns # of rows
for col in ecgall.columns:
#creating new column
ecgdt.new_column( col, jmp.DataType.Numeric )
#adding data
ecgdt[col] = ecgall[col].tolist()
Je n'ai montré qu'une seule façon de créer et de remplir la nouvelle table JMP à l'aide de Python, mais il existe diverses approches, notamment la validation des types de données avant le remplissage ou simplement l'utilisation de la force brute.
Enfin, jmp.run_jsl() fournit un moyen pratique pour que Python exécute du JSL à votre place. Pour garder la tête froide, j'ai gardé « le côté chaud chaud et le côté froid froid » en plaçant le flux de travail JSL, dérivé du générateur de flux de travail enregistrant mes actions, dans un autre fichier et j'ai utilisé la fonction JSL include() pour référencer et exécuter son contenu.
jmp.run_jsl('''
include("PTB-XL Post Python Workflow.jsl");
''')
J'aurais pu prendre l'autre chemin et utiliser Python Submit() ou Python Submit File() pour tout exécuter à partir de JSL, mais cela aurait rendu l'explication des choses ici du côté Python un peu plus floue. Consultez l'index des scripts dans JMP sous Aide pour plus d'informations.
Avec les nouveaux outils d'intégration JMP et Python, le seul obstacle à la réalisation de mon objectif initial de simplement voir les données était mon manque d'expérience Python (je n'y avais fait que quelques essais avant de rejoindre JMP il y a plusieurs années) ; utiliser les outils Python pour JMP était la partie facile. En un seul après-midi, j'ai pu corriger toutes mes erreurs de codage Python pour accéder aux données et partager la visualisation JMP (voir également la vidéo et les pièces jointes ci-dessous). J'aurais même pu contacter directement le développeur (ne le dites pas à mon patron) pour lui exprimer ma gratitude.

J'ai commencé à travailler sur d'autres outils d'accès aux données comme @Bill_Worley l'a suggéré ici , et je m'attends à ce que vous puissiez bientôt voir certains de ces efforts sur la place de marché JMP . Vous essayez de naviguer dans votre propre flux de données et d'analyse couvrant Python et JMP ? Si vous ne l'avez pas vu, @yasmine_hajar a rassemblé d'excellentes ressources pour vous aider à vous familiariser avec certains des nouveaux outils décrits ci-dessus. Si vous avez des questions, vous pouvez explorer la communauté d'utilisateurs JMP , y poster votre question, contacter votre équipe JMP dédiée ou laisser un message ci-dessous.
Merci à @ChristianStopp pour tout le travail acharné que vous avez fourni pour que cela se produise. Ceux qui essaient d'importer des fichiers de données .spc et .spa trouveront ces outils très utiles.