지난번( 제2회 )에서는 JMP의 Python 통합 기능은 Python 코드에서 JSL을 호출하거나 반대로 JSL 코드에서 Python을 호출할 수 있음을 소개했습니다.
여기에서 지금까지의 예로 사용해 온 World Bank(세계 은행)의 데이터 캡처에 대해 Python 코드의 전반부를 다시 살펴보겠습니다. 대상으로 하는 G7의 나라나 연, 지표(3개)를 지정해, 그러한 데이터를 캡처하는 코드가 되어 있습니다.
Pythonコード파이썬 코드
다만, 대상국가를 좁히고 싶은, 다른 지표도 사용하고 싶은, 대상이 되는 해를 바꾸고 싶다고 하는 경우에는, 상기의 코드를 재기록할 필요가 있습니다.
그 자체는 큰 번거로움이 아닐지도 모르지만, 여러 번 조건을 변경하거나 자신 이외의 JMP 사용자에게 사용하는 것은 불편합니다.
이러한 경우에는 다음과 같은 조건을 선택할 수 있는 다이얼로그를 준비하여 이용자가 분석에 사용할 조건을 자유자재로 지정할 수 있도록 하면 편리합니다.
ダイアログ대화
그래서 이번에는 열의 선택이나 파라미터 입력의 다이얼로그를 JSL로 기술 하는 것으로, 조건이 고정된 스크립트에, 반복적으로 사용할 수 있는 범용성을 갖게 하는 방법을 소개합니다.
덧붙여 여기에서는, 다이얼로그의 작성 자체의 상세한 해설은 하지 않습니다. 다이얼로그를 만드는 것에 의해, 이렇게 범용성을 가질 수 있다고 체감해 주시는 것이 목적입니다.
대화창 만들기
다이얼로그의 작성에는 JSL을 사용합니다. 따라서 이번에는 " JSL을 기점으로 한 쓰기 (.jsl)가 좋은 경우 "입니다.
마지막으로 소개한 JSL 코드(Example1-2_WorldBank.jsl)는 런타임에 다음과 같은 대화 상자를 표시하도록 개선된 코드(Example1-3_WorldBank.jsl)를 보여줍니다.
- G7의 7개국 중에서 대상이 되는 국가를 선택한다(Ctrl 키에 의해 복수 선택 가능)
- 지금까지의 3개의 지표에, GDP_growth(GDP 성장률), Inflation(인플레이션율), Unemployment(실업률), Fertility_rate(출생율)를 더해, 그 중에서 대상이 되는 지표를 선택한다(Ctrl키에 의해 복수 선택 가능)
- 개시년・종료년 지정
전체 코드는이 블로그에 첨부되어 있습니다. 여기에서는 다이얼로그의 작성에 관한 요점을 설명합니다.
1. 대화상자에서 선택할 수 있는 국가 및 지표 정의
먼저 선택할 수 있는 국가/지표 목록을 목록으로 작성합니다. 이 예에서는 World Bank에서 사용하는 코드와 표시용 이름을 대응하도록 합니다.
// 選択できる国(G7)・指標
countryNames = {"Japan", "United States", "Canada", "United Kingdom", "Germany", "France", "Italy"};
countryCodes = {"JP", "US", "CA", "GB", "DE", "FR", "IT"};
/* 選択できる指標: 人口,一人当たりGDP,経済成長率,インフレ率, 失業率,出生率,平均寿命 */
indNames = {"Population", "GDP_per_capita", "GDP_growth", "Inflation",
"Unemployment", "Fertility_rate", "Life_expectancy"};
indCodes = {"SP.POP.TOTL", "NY.GDP.PCAP.CD", "NY.GDP.MKTP.KD.ZG", "FP.CPI.TOTL.ZG",
"SL.UEM.TOTL.ZS", "SP.DYN.TFRT.IN", "SP.DYN.LE00.IN"};
2. 다이얼로그 부분
New Window() 함수로 다이얼로그를 작성해 갑니다. 코드를 작성하는 방법의 예는 JMP 스크립팅 가이드에 설명되어 있습니다.
다이얼로그는 V List Box(세로)·H List Box(가로)·Panel Box(표제 테두리)로 배치를 짜, 그 안에 리스트로부터 선택할 수 있는 List Box나, 수치를 입력시키는 Number Edit Box를 놓습니다.
// ダイアログの起動
selCountry = {};
selInd = {};
startY = .;
endY = .;
nw = New Window( "Get World Bank Data",
<
<MODAL></MODAL>
<BR /> <P><FONT size="4" color="#0000FF">3. Python에 전달할 변수 만들기</FONT></P> <P><FONT size="4">선택한 국가명・지표명을 연상 배열로 World Bank에서 사용하는 코드로 변환하여 리스트화합니다. 그 후의 <STRONG>Python Send() 가 포인트로, JSL 의 변수를 같은 이름 그대로 Python 측의 변수로서 건네줍니다.</STRONG> 이렇게하면 후속 Python Submit ()의 Python 코드가 countries 등을 그대로 사용할 수 있습니다.</FONT></P> <CODE class=" language-jsl">// Python に渡す変数の作成
countries = {};
For( i = 1, i <= N Items( selCountry ), i++,
Insert Into( countries, countryMap[selCountry[i]] )
);
indicators = {};
For( i = 1, i <= N Items( selInd ), i++,
Insert Into( indicators, indCodeMap[selInd[i]] )
);
colnames = selInd;
// Show( countries, indicators, colnames, startY, endY );
Python Send( countries );
Python Send( indicators );
Python Send( colnames );
Python Send( startY );
Python Send( endY ); </CODE></FONT></P> <P><FONT size="4">Python에 전달한 변수의 값을 사용하여 pandas_datareader 패키지에 의해 지정된 국가, 지표, 연도에 대한 데이터 테이블을 출력합니다.</FONT></P> <P><FONT size="2">주의: 본 코드는 간결성을 우선하고 있기 때문에, 입력한 값의 체크나 에러 처리등의 기술은 거의 하고 있지 않습니다.</FONT></P> <BR /> <P><FONT size="5" color="#FF6600">Python 협력으로 얻은 데이터를 JMP로 시각화 · 분석</FONT></P> <P><FONT size="4">JSL 스크립트를 실행하면 작성한 대화 상자가 표시되므로 국가, 지표 및 연도를 지정하여 데이터를 작성할 수 있습니다.</FONT></P> <P><FONT size="4">여기에서는 일본·미국·독일·프랑스에서 코로나 전과 코로나 후의 GDP 성장률·인플레이션율·실업률의 추이를 비교하고 싶기 때문에 2017년부터 2024년을 대상으로 한 데이터를 작성하기로 합니다.</FONT></P> <P><FONT size="4">JMP 데이터 테이블로 가져올 수 있으면 데이터 테이블의 히스토그램 아이콘(헤더 그래프)을 클릭하여 열 이름 아래에 그래프를 표시할 수 있습니다. 그래프의 해당 부분을 선택하면 해당 데이터가 선택되므로 데이터 테이블 내에서도 어느 정도의 데이터를 검색할 수 있습니다.</FONT></P> <P><FONT size="4"><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ダイアログによる国と指標の選択" style="width: 999px;"><span class="lia-inline-image-display-wrapper" image-alt="ダイアログによる国と指標の選択" style="width: 999px;"><img src="https://us.v-cdn.net/6038925/uploads/images/112217i69CB0159845A07E6/P4.png" role="button" title="P4.png" alt="ダイアログによる国と指標の選択" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">ダイアログによる国と指標の選択</span></span><SPAN class="lia-inline-image-caption" onclick="event.preventDefault();">대화상자로 국가 및 지표 선택</SPAN></SPAN></FONT></P> <P><FONT size="4">이 데이터에 대해서는, 제1회에서 소개한 것 같은 버블 플롯으로, 연간의 추이를 애니메이션으로 고찰할 수도 있습니다. 또한 그래프 빌더를 사용하면 다음과 같은 연간 지표의 변화를 보여주는 꺾은선형 차트와 막대형 차트를 그릴 수 있습니다.</FONT></P> <P><FONT size="4"><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="可視化" style="width: 999px;"><span class="lia-inline-image-display-wrapper" image-alt="可視化" style="width: 999px;"><img src="https://us.v-cdn.net/6038925/uploads/images/112018iC6D52C5CF3BFD2FC/fig4.png" role="button" title="fig4.png" alt="可視化" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">可視化</span></span><SPAN class="lia-inline-image-caption" onclick="event.preventDefault();">심상</SPAN></SPAN></FONT></P> <P><FONT size="4">또한 [시계열 예측]을 사용하면 평활화 모델을 맞추어 향후 예측값과 예측 구간을 구할 수 있습니다.</FONT></P> <P><FONT size="4"><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="時系列モデル" style="width: 627px;"><span class="lia-inline-image-display-wrapper" image-alt="時系列モデル" style="width: 627px;"><img src="https://us.v-cdn.net/6038925/uploads/images/112218i3DBB79F853ECEB1B/P6.png" role="button" title="P6.png" alt="時系列モデル" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">時系列モデル</span></span><SPAN class="lia-inline-image-caption" onclick="event.preventDefault();">시계열 모델</SPAN></SPAN></FONT></P> <BR /> <P><FONT size="5" color="#FF6600">결론</FONT></P> <P>이번에는 파이썬으로 작성한 데이터 취득 코드에 JSL로 만든 대화 상자를 결합하여 "범용적으로 사용할 수있는 도구"로 만드는 방법을 소개했습니다.</P> <P><FONT size="4">요점은 다음 세 가지입니다.</FONT></P>
<UL>
<LI><FONT size="4"><STRONG>다이얼로그는 JSL로 만든다:</STRONG> 그 때문에, 처리의 중심이 Python이어도, 기점이 되는 스크립트는 .jsl 로 해 두면 취급하기 쉬워집니다. 제2회에서 소개한 「.py로 쓰는지, .jsl로 쓸까」의 판단의, 구체적인 갈림길의 하나입니다.</FONT></LI>
</UL>
<UL>
<LI><FONT size="4"><STRONG>받은 값은 Python Send() 로 Python에 전달한다</STRONG> .</FONT></LI>
<LI><FONT size="4"><STRONG>가져온 후에는 평소 JMP 데이터 테이블에서 탐색:</STRONG> 그래프 빌더나 시계열 예측 등 JMP 분석 기능을 그대로 사용할 수 있습니다.</FONT></LI>
</UL> <P><FONT size="4">파이썬으로 데이터를 취득·가공하고, JMP로 가시화·분석한다. 그 입구가 되는 조건의 지정을 다이얼로그에 맡기는 것으로, 스크립트 본체는 바꾸지 않고, 조건만을 밖으로부터 주어지게 됩니다. 이렇게 하면 대화 상자에서 스크립트의 다용도를 높일 수 있습니다.</FONT></P> <P><FONT size="4">다음번( <A href="https://community.jmp.com/t5/Naohiro-Masukawa/%E7%B5%90%E5%B1%80-JMP%E3%81%AE-Python%E9%80%A3%E6%90%BA-%E3%81%A7%E4%BD%95%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%AE%E3%81%8B-%E7%AC%AC4%E5%9B%9E-JMP%E3%81%AB%E3%81%AA%E3%81%84%E5%88%86%E6%9E%90%E6%89%8B%E6%B3%95%E3%82%92-JMP%E3%81%AE%E6%93%8D%E4%BD%9C%E6%84%9F%E3%81%A7%E4%BD%BF%E3%81%86-%E5%85%A84%E5%9B%9E%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81%E5%8B%95%E7%94%BB%E3%81%82%E3%82%8A/ba-p/963459" target="_blank">제4회</A> )은, 좀더 범용화로서, JMP에는 탑재되어 있지 않은 기능을 Python의 패키지로 실행해, 그 분석 대상이 되는 변수(열)를 이번 작성한 것 같은 다이얼로그로 지정하는 예를 소개합니다.</FONT></P> <BR /> <P><FONT size="4">by 마스카와 나오히로(JMP Japan)</FONT></P> <P><FONT size="4"><U><A href="https://community.jmp.com/t5/Naohiro-Masukawa/bg-p/nmasukawa-blog" target="_blank">마스카와 나오히로 - JMP 사용자 커뮤니티</A></U></FONT></P>
</LINGO-BODY>
<CODE class=" language-jsl">
<LINGO-TEASER id="lingo-teaser-962736" slang="ja-JP" mode="UPDATE">
<P>본 기사에서는, 다이얼로그(이용자가 대상국이나 지표, 기간 등의 조건을 화면상에서 선택·입력하기 위한 조작 화면)의 역할을 간단하게 소개한 후, JMP의 JSL로 다이얼로그를 작성해, Python과 제휴하는 것으로, 조건 변경에 유연하게 대응할 수 있는 범용적인 데이터 취득 툴을 만드는 방법을 소개하고 있습니다. 다이얼로그를 준비하는 것으로, 스크립트를 재기록하지 않고 이용 조건을 변경할 수 있어 반복 이용이나 다른 유저와의 공유가 용이해진다고 하는 메리트가 있습니다.</P>
<BR />
</LINGO-TEASER>