JMP의 최신 릴리스는 JMP 18에 도입된 Python 통합 지원을 기반으로 워크플로의 핵심 부분인 데이터 액세스에 중점을 두고 있습니다. 데이터 테이블 작업과 Python-JSL 상호 운용성이 확장되어 데이터 액세스가 간편하고 편리해졌습니다.
비디오를 선호하시나요? 여기에서 시청하세요.
데이터 테이블 작업
jmp.from_dataframe() 함수는 외부 데이터 프레임을 JMP 데이터 테이블로 효율적으로 변환하는 방법을 제공합니다. 데이터 프레임 프로토콜은 메모리에서 데이터 프레임 간 변환 메커니즘을 제공합니다. 데이터 프레임 교환 프로토콜을 지원하는 모든 데이터 프레임 객체는 메모리에서 데이터 프레임 간 변환을 수행할 수 있습니다. 대표적인 예로는 pandas, polars, ibis가 있습니다.
아래 예에서는 판다스 데이터 프레임을 JMP 데이터 테이블로 변환하는 방법을 보여줍니다.

마찬가지로, JMP 데이터 테이블을 다른 지원되는 데이터 프레임 라이브러리 유형으로 변환하는 것도 마찬가지로 쉽습니다. 예를 들어, JMP에서 Pandas로 변환하는 경우:

JMP 18에서 jmp.DataTable은 숫자 및 문자 열만 완벽하게 지원했습니다. 이제 모든 JMP 열 데이터 유형이 Python에서 지원됩니다. 추가 객체는 표현식 및 행 상태를 지원합니다.
jmp.DataTable 객체는 Python에서 테이블의 행 상태를 설정할 수 있도록 row_states 속성을 추가합니다. 이를 통해 행 상태 집합을 열에 복사하거나 열에서 테이블의 행 상태를 설정하는 기능이 간소화됩니다.

이제 col.format을 사용하여 테이블의 열 형식에 문자열 또는 튜플을 사용하여 상황에 맞게 접근할 수 있습니다. JMP 19는 JMP의 날짜-시간 표현과 Python의 날짜-시간 표현을 제대로 마샬링합니다. 즉, 데이터 테이블의 JMP 날짜와 Python 코드의 Python 날짜-시간 객체를 마샬링합니다.

마찬가지로 Python Get()/Python Send()는 이제 Python과 JSL 간에 날짜-시간 값을 원활하게 전송할 수 있도록 지원합니다.
열의 서식을 지정하는 기능 외에도, jmp.Expressions와 함께 col.formula를 사용하여 열에 수식을 추가할 수도 있습니다.

JMP 19에서는 jmp.Images를 표현식 열 값으로 설정하는 기능도 제공합니다.
강조 표시되지 않은 다른 데이터 테이블 작업은 Python 카테고리의 스크립팅 인덱스에서 찾을 수 있습니다.
Python-JSL 상호 운용성
JMP에서 특정 작업을 수행하려면 여전히 많은 워크플로우가 JSL 지원을 필요로 합니다. 언어 간 워크플로우를 개선하기 위해 Python에서 JSL 변수를 추가, 읽기 및 수정하는 기능이 추가되었습니다. 현재는 Global 및 Here 네임스페이스를 통해서만 지원됩니다. 아래 예제는 Python에서 JSL 변수 'e'를 설정한 다음, JSL을 사용하여 here::pi 변수를 설정하고 Python에서 globals ::e 변수 집합을 출력한 후, 마지막으로 JSL에서 here::pi 변수 집합을 Python에서 출력하는 과정을 보여줍니다.

R 통합
JMP 19는 rpy2를 사용하여 Python을 통해 R을 초기 지원합니다. JMP는 확장 기능을 지원하는 새로운 모듈인 jmpex를 제공합니다. R은 jmpex가 현재 지원하는 유일한 확장 기능입니다. 이 지원은 JSL R API와 유사한 Python API로 구성됩니다. jmpex 패키지는 JMP와 rpy2 사이의 인터페이스 계층으로, rpy2는 R에 종속됩니다. 사용자가 설치한 R 버전이 시스템에 이미 존재해야 하며, R_HOME 환경 변수는 R 위치로 설정되어 있어야 합니다. 이러한 설정은 jmpex를 설치하거나 jmpex 패키지 요구 사항으로 인해 R Init()을 처음 호출하기 전에 존재해야 합니다.
JMP 19에서는 jmpex 패키지를 내부적으로 활용하여 R에 대한 JSL 지원이 복원되었습니다.
아래 예는 jmpex가 제공하는 R에 대한 새로운 Python API를 보여줍니다.

일반적인 변경 사항
JMP 18의 Python 3.11에서 JMP 19의 Python 3.13으로 전환하면 JMP 19의 수명 주기 전반에 걸쳐 보안 업데이트가 제공됩니다. JMP 19는 jmp.reset()을 통해 공유 Python 환경을 재설정하는 편리한 방법도 제공합니다. jmputils에도 다음과 같은 개선 사항이 있습니다.
- jmputils.__버전__
- jmputils.is_installed('패키지')
- jmputils.packages()
- jmputils.package_version('패키지')
패키지의 스크립트 설치를 더욱 효과적으로 지원하기 위해 jmputils.jpip() 함수가 Python subprocess.CompletedProcess 객체를 반환합니다. CompletedProcess 객체에 대한 자세한 내용은 Python 문서를 참조하세요.
사용 중단
- 파이썬 초기화()
- 파이썬 Term()
- 파이썬 컨트롤()제거됨.
- 파이썬 Get Graphics() 제거됨.
- R 항()
- R 그래픽 가져오기()더 이상 사용되지 않으며 효과가 없습니다.
- R 컨트롤( 에코(부울) )매개변수비동기( ),그리고방해하다( )
다음은 무엇인가요?
JMP 18은 JMP 내에서 네이티브 Python 워크플로를 지원하는 새로운 기반을 구축하는 데 중점을 두었습니다. 이 기반은 JMP와 Python 통합에서 가장 까다로운 문제들을 해결하는 것으로 시작되었습니다.
JMP 19는 이러한 기반을 바탕으로 더욱 정교하게 개선하고 상당한 추가 데이터 테이블 지원을 제공하는 데 중점을 두고 있습니다. JSL에서 제공하는 것과 동일한 기능을 Python에서도 사용할 수 있도록 제공하고자 합니다. 이제 모든 열 유형이 Python에서 지원됩니다. Python 스크립트에서 열 서식 및 행 상태에 접근하고 수정할 수 있습니다.
열 유형 지원을 완료함으로써 이식 가능한 데이터 프레임 프로토콜을 지원할 수 있게 되었습니다. pandas와 jmp.DataTable 객체를 포함한 이식 가능한 데이터 프레임 간의 간편한 변환 기능이 복원되어 파일 시스템에 CSV 복사본을 저장하지 않고도 메모리 내에서 작업을 수행할 수 있습니다.
또한, 생산성 향상에 중점을 두고 객체의 동작을 정리하여 Python 프로그래머가 기대하는 대로 동작하도록 했습니다. 마지막으로, 새 릴리스에서는 JMP 18에서 누락되었거나 출시 전 개발 시간이 부족했던 몇 가지 문제가 해결되었습니다.
Python 통합의 미래는 밝습니다. JMP는 자체 Python 기능을 기반으로 SAS 연결 복원, JSL R 지원 복원, R용 새로운 Python API, 그리고 Python 통합을 기반으로 구축된 데이터 커넥터를 개발하고 있습니다.
기대하는 것은 항상 추측에 불과하지만, 우리는 향후 릴리스에 포함될 가능성을 조사하고 있는 몇 가지 사항이 있습니다.
- 스크립트 편집기 지원이 지속적으로 개선되었습니다.
- Python 가상 환경에 대한 JMP 지원.
- 패키지 처리 지원에 대한 추가 개선 사항은 다음과 같습니다.
- 기업 또는 내부 저장소에 연결하기 위한 구성 옵션입니다.
- 사이트 관리자가 검증되고 잠금된 사이트 패키지를 구축하는 간소화된 방법입니다.
- Python에서 그래픽과 보고서를 작성할 수 있는 대화 상자와 창을 Python에서 생성할 수 있도록 지원합니다.
귀하의 작업 흐름을 가장 개선할 수 있는 분야에 집중하고자 하므로, 귀하의 제안을 적극 환영합니다.
@폴_넬슨 이 공동 작성한 블로그입니다.
정말 환상적입니다. JMP와 Python은 완벽한 궁합을 자랑하며, JMP v18에서도 폭넓게 활용했습니다. 사용자 관점에서 구현 방식이 놀랍도록 깔끔해서 거의 바로 사용할 수 있었습니다. JMP v19 업데이트는 특히 행 상태, 수식, 날짜/시간 처리 기능이 훌륭해 보입니다.
몇 가지 의견/제안:
- 중지. JMP(v18+)에서 Python 스크립트를 실행할 때 스크립트에 "while True: pass"와 같은 무한 루프가 포함된 경우, JMP 세션 전체가 응답하지 않게 되어 강제 종료해야 합니다. JMP에서 전체 애플리케이션을 종료하지 않고도 실행 중인 Python 스크립트를 중단하거나 중지할 수 있는 방법(예: 중지 버튼이나 시간 초과 메커니즘)을 제공한다면 매우 유용할 것입니다.
- 임베딩. JMP에서 Python 스크립트를 데이터 테이블에 임베딩할 수 있도록 지원하면 좋을 것 같습니다(이미 가능한 경우라면 어떨까요?).
- 사용자 입력을 받습니다. Python이 JMP에 모달 대화상자를 생성하여 사용자 입력을 받도록 요청하는 기능도 있으면 좋을 것 같습니다.
물론 파이썬 기반 열 수식도 놀라울 것이지만, 그건 어려운 일일 것 같습니다.
당신과 당신의 팀에게 찬사를 보냅니다. 정말 좋은 일이었습니다!!
에 관하여
1. 중지. 프로세스를 중단하는 기능은 이미 존재합니다. 핫 루프 내에 jmp.run_jsl('Wait(0);')을 삽입해야 합니다. 주기적으로 JMP로 제어권을 넘기면 일반적인 ESC 메커니즘을 통해 스크립트를 취소할 수 있습니다.
2. JSL Python 호출을 래핑하는 JSL을 제외하고는 아직은 가능하지 않을 것으로 생각됩니다.
3. JMP 18 예제 중 하나는 디렉터리의 md5 해시를 수행하고 SQLite 데이터 테이블을 생성하는 것입니다. 이 예제는 Python 스크립트에서 디렉터리 선택 대화 상자의 jsl을 호출하여 Python 스크립트에 디렉터리 경로를 제공합니다.