これを読んでいるということは、Python が科学者やエンジニアによってさまざまな問題に対処するために導入され、広く利用されているオープンソース ツールであることをご存知でしょう。科学者やエンジニアの中には、その熱意の度合いが人によって異なる人もいます。
これまでのところ、JMP® ユーザーとの会話から、ほとんどのユーザーが Python ワークフローを開発して、データ ソースにアクセスする上流のタスクに対応していることがわかりました。Python は、たとえば、通常 Python に関連付けられている機械学習タスクには使用されていません。特定の業界のさまざまな機器からの目もくらむほどの種類のユニークなファイル タイプを考えると、Python はデータにアクセスするための頼りになる方法として君臨しています。ありがたいことに、どこかの誰かが、ファイルに秘密を明かさせるフレームワークを構築している可能性が高いからです。
JMP の Python 統合に対する私の最初の関心も、同様にデータ アクセスに向けられたものでした。JMP に入社する前は、地元の病院の心臓科で働いていました。JMP が最初に Functional Data Explorer (FDE) プラットフォームをリリースしたとき、心拍からの ECG (別名 EKG) データは、新しいツールでの分析に最適であるように思われました。従来のトップダウン モデルがないため、患者間での共通の形状変動 (つまり、ECG リード内、つまり目に見える「拍動」) を捉えるボトムアップ アプローチは、FDE に最適なタスクであるように思われました。


ちょっとした問題が 1 つあります。私が見つけた ECG データのサンプルはすべて、WFDB (「Waveform Database」の略) ファイル標準を使用しており、バイナリ形式が関係していますが、JMP ではネイティブに開くことができません。ありがたいことに、改良された JMP と Python の統合により、JMP のメニューにあらゆる種類のファイル タイプへのアクセスが追加されました。この点についても、問題解決者がタスクに適した Python パッケージを作成してくれた寛大さに感謝します。
PhysioNet.org からECG データとwfdb Python パッケージを特定した後、JMP と Python の統合に組み込まれた新しいツールによって次のことが可能になります。
- Python 経由で WFDB ファイル構造から ECG データを取得します。
- JMP データ テーブルを作成し、Python 経由でデータを入力します。
- JMP ワークフロー ビルダーを使用して作成されたステップの JMP スクリプト言語 (JSL) ファイル( JMP のポイント アンド クリック アクションのコードを取り込む)を実行して、データの準備、視覚化、および FDE 分析の残りの作業を JMP に引き渡します。
JMP の「Python-in-a-box」アプローチには、組み込みの Python エディターとプリインストールされたパッケージ ( jmpおよびjmputils)が含まれており、次のことが可能になります。
- jmputils jpipコマンド(Pythonのpipと並列)を使用して、タスクに必要な他のPythonパッケージをインストールします。
- 次に、通常の Python スクリプト アプローチを使用してこれらのパッケージをインポートします。
wfdbパッケージをインストールしてインポートすることで、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
Python のように見えるのは、それが Python だからです。すべて JMP 内で実行できます。
そこから、いくつかの Python データ準備手順に加えて、いくつかの新しい JMP と Python の統合項目によって残りのハードルがクリアされました。
- Python jmp.DataTable()関数を使用して JMP データ テーブルを作成します。
- データ リストを渡す前に、 new_column()を使用して JMP データ テーブルに列を追加します。
# 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()
ここでは、Python を使用して新しい JMP テーブルを作成し、データを入力する方法を 1 つだけ示しましたが、データを入力する前にデータ型を検証したり、単純に力ずくで入力したりするなど、さまざまなアプローチが存在します。
最後に、 jmp.run_jsl() は、 Python で JSL を実行する便利な方法を提供します。正気を保つために、アクションを記録するワークフロー ビルダーから派生した JSL ワークフローをまったく別のファイルに配置し、その内容を参照および実行するために JSL include()関数を使用することで、「ホット サイドはホット、コールド サイドはコールド」にしました。
jmp.run_jsl('''
include("PTB-XL Post Python Workflow.jsl");
''')
他の方法、つまりPython Submit()またはPython Submit File()を使用して JSL からすべてを実行することもできましたが、そうすると Python 側からの説明が少しわかりにくくなります。詳細については、JMP のヘルプのスクリプト インデックスを参照してください。
新しい JMP と Python の統合ツールでは、データを表示するという当初の目標を実現する上で唯一のボトルネックとなったのは、Python の経験不足でした (数年前に JMP に入社する直前に少しだけ触ったことがありました)。JMP の Python ツールを使用するのは簡単でした。午後の短い時間で、Python のコーディング エラーをすべて修正してデータにアクセスし、JMP の視覚化を共有することができました (以下のビデオと添付ファイルも参照してください)。開発者に直接連絡して感謝の気持ちを伝えたかもしれません (上司には内緒です)。

@Bill_Worley がここで提案したように、私は他のデータ アクセス ツールの開発に着手しており、その成果のいくつかはまもなくJMP Marketplaceで公開される予定です。Python と JMP をまたがる独自のデータおよび分析ワークフローを操作しようとしていますか? まだご覧になっていない方は、 @yasmine_hajarが、上記で概説した新しいツールのいくつかに慣れるための優れたリソースをまとめています。ご質問がある場合は、 JMP ユーザー コミュニティをご覧になるか、そこに質問を投稿するか、専任の JMP チームにお問い合わせいただくか、下記にメッセージをお寄せください。
これを実現するために尽力してくださった@ChristianStopp に感謝します。.spc および .spa データ ファイルをインポートしようとしている人にとって、これらのツールは非常に役立つでしょう。