既然您正在閱讀本文,您可能知道 Python 是一種高度利用的開源工具,由科學家和工程師(我可能會補充說,有些人比其他人更熱切)部署來解決各種問題。
到目前為止,我與 JMP® 使用者的對話表明,他們中的大多數人開發 Python 工作流程來解決存取資料來源的上游任務,而不是使用 Python 來執行通常與之相關的機器學習任務。考慮到任何特定行業中大量不同工具所帶來的令人眼花繚亂的獨特文件類型,Python 成為訪問數據的首選方法,因為——謝天謝地! – 某個地方的某人可能已經建立了一個框架來強製文件放棄其秘密。
我最初對 JMP 的 Python 整合的興趣也同樣針對資料存取。在加入 JMP 之前,我在當地醫院的心臟科工作。當JMP 首次發布功能資料瀏覽器(FDE) 平台時,來自心跳的ECG(又稱EKG)資料似乎非常適合在新工具中進行分析:沒有傳統的自上而下的模型形式,而是採用自下而上的捕捉方法患者之間常見的形狀變異性(即心電圖導極內,您看到的「心跳」)似乎是 FDE 的完美任務。


一個小問題:我能找到的所有 ECG 資料範例都使用 WFDB(「波形資料庫」)檔案標準,涉及 JMP 本身無法開啟的二進位格式。值得慶幸的是,翻新的 JMP 和 Python 整合現在補充了 JMP 的選單,可以存取各種文件類型,為此我再次感謝問題解決者創建適合任務的 Python 套件的慷慨。
在識別ECG 資料和來自 PhysioNet.org 的wfdb Python 套件後,JMP 和 Python 整合中內建的新工具讓我能夠:
- 透過 Python 從 WFDB 檔案結構中提取 ECG 資料。
- 建立 JMP 資料表並透過 Python 填充它們。
- 透過執行使用 JMP Workflow Builder 建立的 JMP 腳本語言 (JSL) 檔案(擷取我的 JMP 點擊操作的程式碼) ,將剩餘的工作交給 JMP,以進行資料準備、視覺化和 FDE 分析。
JMP 的「Python-in-a-box」方法包括內建的 Python 編輯器以及預先安裝的軟體包( jmp和jmputils) ,我可以使用它們:
- 使用jmputils jpip指令安裝該任務所需的其他 Python 套件(與 Python 的pip類似),
- 然後使用普通的 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,那是因為它就是!一切盡在 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 表的方法,但存在多種方法,包括在填充之前驗證資料類型或簡單地使用強力。
最後, jmp.run_jsl()提供了一種讓 Python 為您執行一些 JSL 的便利方法。為了保持理智,我透過將從記錄我的操作的 Workflow Builder 派生的 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 資料檔的人會發現這些工具非常有用。