전회( 제1회 )에서는, JMP에 탑재되고 있는 Python 통합(인테그레이션) 기능을 사용하면, JMP로 Python의 코드를 기술할 수 있어, 「Python으로 분석 수법의 폭을 넓혀, JMP로 결과를 탐색·가시화한다」라고 하는 것처럼, 양쪽의 좋은 곳을 보완할 수 있는 메리트가 있는 것을 소개했습니다.
이번에는 JMP 독자적인 언어인 JSL(JMP Scripting Language)과 Python의 관계를 살펴보겠습니다.
JMP의 파이썬 통합 기능을 사용하면 파이썬 코드에서 JSL을 호출하거나 반대로 JSL 코드에서 파이썬을 호출 할 수 있습니다. 즉, 같은 처리를 「Python을 기점으로서 쓰는」것도, 「JSL을 기점으로서 쓰는」일 수도 있다고 하는 것입니다.
P0.png
이번에서는, 전회의 예 1(World Bank로부터의 데이터 취득)을 소재에, 이 2개의 기입 방법을 나란히 나타내고, 각각의 특징과 구분의 생각을 정리합니다.
Python 환경에서 JSL 스크립트 실행 (Python을 시작으로 작성하는 방법)
마지막으로, 예 1은 세계 은행 (World Bank)에서 경제 지표를 JMP 데이터 테이블로 추출하는 파이썬 코드를 보여줍니다. 분석자는 추출된 데이터에 대해 JMP 메뉴에서 버블 플롯 등을 선택하여 시각화 및 분석을 할 수 있습니다.
그렇다면 데이터 추출과 함께 JMP 분석 보고서를 만드는 곳까지 코드화할 수 없는지 생각할지도 모릅니다.
마지막 버블 플롯에 대한 보고서를 만드는 예제입니다.
아래 그림은 버블 플롯의 보고서(출력)에 대해 왼쪽 상단의 빨간색 삼각형 버튼에서 궤적선 > 모두, 라벨 > 모두 옵션을 선택한 상태입니다. 이 옵션을 사용하면 각 버블에 국가 이름을 표시하고 연간 추이를 애니메이션 할 때 어떤 궤적에서 버블이 움직였는지를 선으로 표시 할 수 있습니다.
이 보고서에 대해 스크립트 저장 > 스크립트 창으로를 선택하면 JSL 스크립트 창이 시작되어 이 보고서의 열 지정 및 옵션을 인코딩한 스크립트를 볼 수 있습니다.
P1.png
이 스크립트 (JSL)를 Python 코드와 함께 Python 스크립트 편집기에 작성하면 그대로 실행할 수 있습니다. 아래 그림은 이전에 보여준 파이썬 스크립트 (Example1-1_WorldBank.py) 뒤에 JSL을 실행하는 코드를 추가한 것입니다 (Example1-2_WorldBank.py).
jmpパッケージの run_jsl() の中にJSLを記述すると、Python環境の中でJSLスクリプトを実行することができます。
run_jsl(''' ... ''') 와 싱글 쿼트 3개를 붙이면(자), 이 사이에 쓴 것은, 개행을 포함해 모두 캐릭터 라인으로서 취급됩니다。
P2.png
위 그림의 빨간색 부분이 추가한 JSL을 실행하는 코드입니다. JSL 부분을 간단히 설명합니다.
最初の Current Data Table() は、現在アクティブになっているデータテーブルを返すコマンドです。この例では、直前に世界銀行の経済指標をJMPのデータテーブルとして取り込んでいるので、そのテーブルを dtという変数に格納しています。また、Set Name() で、データテーブル名を「World Bank Data」に変更しています。
dt = Current Data Table();
dt << Set Name( "World Bank Data" );
다음 명령은 데이터 테이블의 표시 형식(Format)을 변경합니다. 여기는 JSL의 기술 예로서 나타낸 것으로, 쓰지 않아도 이후의 처리는 문제 없게 동작합니다.
마지막은 버블 플롯의 부분입니다. 이전에 현재 지정한 dt에 대해 어떤 열을 X, Y, 버블의 크기 등에 할당할지, 어떤 옵션을 붙여 실행할지 설명합니다. 이전에 [스크립트 저장] > [스크립트 창으로]에 저장된 JSL 코드를 그대로 사용해도 작동하지만 아래는 필요한 명령으로 좁혀 간소화하고 있습니다.</CODE></FONT></P>
<PRE><CODE class=" language-jsl">dt << Bubble Plot(
X( :GDP_per_capita ),
Y( :Life_expectancy ),
Sizes( :Population ),
Time( :Year ),
Coloring( :Country ),
ID( :Country ),
Label( "All" ),
Trail Lines( "All" ),
);
이 코드를 실행하면 월드 뱅크에서 데이터를 읽고 버블 플롯을보고 할 때까지 한 번에 수행 할 수 있습니다.
JSL 환경에서 Python과 상호 작용하는 기능 (JSL을 시작으로 작성하는 방법)
지금까지는 Python 환경에서 JSL을 실행할 수 있음을 보여 주었지만 반대로 JSL 환경에서 Python 코드를 실행할 수도 있습니다.
앞의 코드(Example1-2_WorldBank.py)를 JSL 코드로 다시 작성한 것을 나타냅니다(Example1-2_WorldBank.jsl).
JSLの Python Submit() 関数を使うと、引数として渡した文字列の中に書かれたPythonコードを実行できます。今回は、先ほどのPythonスクリプトのうちPythonのコード部分を、Python Submit() の中に入れただけです。
Python Submit() 에 전달하는 것은 문자열이지만 "\[와]\"로 가면 이 안에 쓴 것은 문자로 취급할 수 있습니다.
P3.png
이 JSL 스크립트의 경우 편집 > 스크립트 실행을 선택하여 Python 스크립트와 동일한 출력을 얻을 수 있습니다.
Python을 기점으로 한 쓰기 (.py)와 JSL을 기점으로 한 쓰기 (.jsl) 어느 것을 사용합니까?
어느 것을 선택하는지는 처리의 메인이 어느 쪽에 있는지 에 의해 결정됩니다.
파이썬 라이브러리가 메인 분석이라면 .py. 열을 선택하는 다이얼로그를 준비하거나 JMP의 리포트를 만들거나 하는 경우는 .jsl 가 향하고 있습니다.
Python을 시작으로 작성하는 방법 (.py)이 좋은 경우
- scikit-learn 등 Python 라이브러리를 이용한 분석이 중심이 된다
- 파이썬 코드에 익숙한 사람들이 사용
JSL을 기점으로 한 쓰기 (.jsl)가 좋은 경우
- JMP의 조작이 전체 흐름의 중심이 된다
- 분석 후 JMP 보고서 표시 자동화, 사용자 정의
- 열의 선택이나 파라미터 입력의 다이얼로그를 붙여, 범용적인 툴로 한다
결론
이번에는 JMP의 Python 통합 기능에서 Python과 JSL의 관계를 살펴 보았습니다. 포인트는 다음 세 가지입니다.
- Python環境からは、jmpパッケージの
<EM>run_jsl()</EM> を使ってJSLを実行できる(Pythonを起点とした書き方)
- JSL環境からは、
Python Submit() を使ってPythonコードを実行できる(JSLを起点とした書き方)
- 어느 쪽을 기점으로 해도 실현할 수 있는 것은 거의 같고, 처리의 메인이 Python측인가 JMP측인가로 선택하면 좋다
다음번( 제3회 )에서는, 열의 선택이나 파라미터 입력의 다이얼로그를 JSL로 붙이는 것에 의해, 이러한 고정의 스크립트를, 누구라도 반복 사용할 수 있는 범용적인 툴로 바꾸는 예를 나타냅니다.
by 마스카와 나오히로(JMP Japan)
마스카와 나오히로 - JMP 사용자 커뮤니티