이 글을 읽고 있다는 것은 아마도 과학자와 엔지니어가 다양한 문제를 해결하기 위해 사용하는 오픈소스 도구인 Python이 널리 활용된다는 것을 알고 계실 겁니다 . 어떤 과학자와 엔지니어는 다른 과학자보다 더 적극적 으로 이를 활용합니다.
지금까지 JMP® 사용자들과 나눈 대화에 따르면, 대부분은 Python을 일반적으로 연관되는 머신 러닝 작업에 사용하기보다는 데이터 소스에 액세스하는 업스트림 작업을 처리하기 위해 Python 워크플로를 개발합니다. 주어진 산업에서 다양한 도구의 눈사태에서 나오는 어지러울 정도로 다양한 고유한 파일 유형을 고려할 때, Python은 데이터에 액세스하는 방법으로 군림합니다. 다행히도! 누군가 어딘가에서 파일에 비밀을 털어놓도록 강요하는 프레임워크를 구축했을 가능성이 높기 때문입니다.
JMP의 Python 통합에 대한 저의 초기 관심 역시 데이터 액세스에 맞춰져 있었습니다. JMP에 합류하기 전에 저는 지역 병원의 심장학과에서 일했습니다. JMP가 처음 Functional Data Explorer(FDE) 플랫폼을 출시했을 때, 심장 박동에서 얻은 ECG(일명 EKG) 데이터는 새로운 도구에서 분석하기에 완벽하게 맞는 것처럼 보였습니다. 형태에 대한 전통적인 상향식 모델이 없었기 때문에 환자 전체에서 공통적인 형태 변화(예: ECG 리드 내, 보이는 '박동')를 포착하는 하향식 접근 방식이 FDE에 완벽한 과제처럼 보였습니다.


작은 걸림돌: 내가 찾을 수 있는 모든 ECG 데이터 예는 JMP가 기본적으로 열지 않는 바이너리 형식을 포함하는 WFDB(Waveform Database의 약자) 파일 표준을 활용합니다. 다행히도, 새롭게 단장한 JMP와 Python 통합은 이제 JMP의 메뉴를 보완하여 모든 종류의 파일 유형에 액세스할 수 있게 되었고, 이는 다시 한번 작업에 맞는 Python 패키지를 만드는 문제 해결사의 관대함에 감사드립니다.
PhysioNet.org에서 ECG 데이터 와 wfdb Python 패키지를 식별한 후, JMP와 Python 통합에 내장된 새로운 도구를 사용하여 다음을 수행할 수 있습니다.
- Python을 통해 WFDB 파일 구조에서 ECG 데이터를 가져옵니다.
- JMP 데이터 테이블을 만들고 Python을 통해 채웁니다.
- JMP Workflow Builder를 사용하여 만든 단계의 JMP 스크립팅 언어(JSL) 파일을 실행하여 나머지 작업을 JMP에 넘깁니다 . 이 파일은 데이터 준비, 시각화 및 FDE 분석을 위해 JMP 포인트 앤 클릭 작업의 코드를 캡처 합니다 .
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
파이썬처럼 보인다면, 그게 파이썬이기 때문입니다! 모두 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 데이터 파일을 가져오려는 사람들은 이 도구가 매우 유용하다는 것을 알게 될 것입니다.