개인적으로, “ 기록보다 기억에 남는 스포츠 선수 ” 는 숫자로 표현할 수 없는 영웅성이 있어 좋아합니다만, 이번 화제는, ” 기억이 아니라 기록에 남아 ” 중요성을 말씀드리겠습니다. 내가 사회인이 된 무렵, 신인 연수로 상사에게 불렸을 때는, 반드시 메모를 가지고 가서, 말한 것을 기록하라고 교육을 받은 것입니다.
데이터 분석 작업에서는 데이터 처리 작업에 시간이 많이 걸립니다. JMP 는 가공하는 기능이 충실하고 고맙습니다만, 잠시 지나, 가공한 데이터를 열어 보면, 어떤 데이터 가공을 했는지 기억 에 남아 있지 않을 수 있습니다. 그럴 때, 가공의 일련의 흐름을 메모로도 기록 해두면 좋았고 후회합니다.
JMP 16 그럼, 액션 레코더 라는 새로운 기능이 있어 열명의 변경, 척도의 변경, 열이나 행의 삭제 등 데이터 테이블에 대한 일련의 조작을 기록으로서 남겨 둘 수 있습니다. *
이 기능을 사용한 분석 예를 나타냅니다.
올해 2월 중순부터 일본에서도 신형 코로나 백신의 접종이 개시되었습니다. 후생노동성 홈페이지에는 접종 실적에 관한 데이터가 있습니다. ( https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/vaccine_sesshujisseki.html )
JMP 에서 이 페이지에 있는 데이터를 로드하고 날짜별로 누적 접종 횟수, 시설 수를 나타내는 막대 그래프, 꺾은선형 차트를 작성하는 것이 목적입니다.
*주의: 기록으로 남을 수 없는 데이터 테이블의 조작도 몇가지 있습니다.
데이터 읽기 및 데이터 테이블 작업 기록
JMP 그럼, [ 인터넷에서 열 ] 메뉴에서, URL 를 지정하여 데이터를 읽을 수 있습니다. 아래 그림은 이 기능을 사용하여 읽을 때의 예입니다. (참고 : 실제로이 예제에서는 열 이름 행과 데이터 시작 행을 변경 한 스크립트를 실행합니다.)

데이터가 로드되었지만 이대로는 목표로 하는 그래프를 그릴 수 없습니다. 그래프 작성용의 데이터로 하기 위해서, 다음과 같은 데이터 테이블에 대한 조작을 실시합니다.
- 열 "시설 수 (*) 의 열명을 「시설수」로 변경해, 연속 척도로 변경한다.
- 마지막 총 행(이 예에서는 23 행)을 삭제합니다.
- 열 " 1 라운드", " 2 '회'는 그 날의 접종 횟수의 데이터로 인해 이러한 누적 접종 횟수를 나타내는 새로운 열을 만듭니다.
- 연속 척도의 열 값의 표시 형식을 쉼표로 구분합니다.
JMP 16 그런 다음 위의 데이터 테이블에 대한 작업을 수행하면 해당 작업에 대한 스크립트가 자동으로 로그에 출력됩니다. 아래 그림의 로그는 데이터를 열고 데이터 테이블에 대한 작업을 기록합니다.

위 그림에서 선택한 "열 정보 변경 : 시설 수"는 열 "시설 수 (*) 의 열명을 「시설수」로 변경해, 연속 척도로 변경하는 조작을 했을 때의 기록이 됩니다. 창 하단에는 이 작업에 대한 스크립트가 표시됩니다.
일련의 조작으로 다음과 같은 그래프 작성을 위한 데이터 테이블을 작성할 수 있었습니다.

분석 결과 기록 및 스크립트 실행
작성한 데이터 테이블에서 그래프 빌더를 사용하여 일별 누적 접종 횟수, 시설 수의 그래프를 작성할 수 있습니다. 접종 시설, 접종 횟수도 대폭 증가하고 있습니다만, 일본 전체의 인구를 생각하면, 아직도 앞으로와 같은 느낌이군요.

그래프 빌더의 보고서 창을 닫으면 이전 로그에 그래프 빌더에 대한 스크립트가 추가됩니다.
지금까지 작성된 모든 로그를 선택하고, 왼쪽 상단의 빨간색 삼각형 버튼에서 스크립트 실행을 선택하면 데이터 로드, 데이터 작성, 그래프 작성 등과 같은 일련의 분석 작업을 다시 실행할 수 있습니다.

또한, 로그 왼쪽 상단의 빨간색 삼각형 버튼에서 스크립트 저장 > 스크립트 창으로를 선택하여 다음과 같이 스크립트 창에 자동으로 작성된 스크립트를 작성할 수 있습니다.

이 파일을 JMP 스크립트 형식(확장자 *.jsl )로 저장해 두면 데이터가 새로워져도 이 스크립트를 실행함으로써 새로운 데이터로 분석 결과를 작성할 수 있게 됩니다. 놀랍습니다!
작성된 스크립트를 약간 변경하여 다용도로
그러나 작성된 스크립트를 새 데이터에 그대로 사용할 수 없는 경우도 있습니다. 이번 백신접종 데이터는 매일 데이터가 추가됩니다. 일련의 작업에는 마지막 '합계' 행이 삭제되는 것이 있지만 다음 스크립트를 참조하면 23 줄을 삭제하는 것으로 기록됩니다.

이미 1 일분 데이터가 증가하면 여기 24 행으로 해야 하고, 보다 일반적으로는, 데이터 테이블의 마지막 행을 삭제하는 스크립트로 하지 않으면 안됩니다. 그렇다면 분석자는 스크립트를 다용도로 수정해야 합니다.
일련의 조작으로 작성한 스크립트를 조금만 수정해, 범용성이 있는 스크립트로 한 것을, 이 블로그의 마지막에 나타내고 있습니다.
데이터 읽기에서 데이터 작성, 분석까지 기록에 남길 수있는 "액션 리코더"의 기능이 있음을 꼭 기억 제발, JMP 작업 기록 시도해보십시오.
// ワクチン接種データからグラフを作成するスクリプト
//: HTMLデータの読み込み */
dt = Open(
"https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/vaccine_sesshujisseki.html",
HTML Table( 1, Column Names( 1 ), Data Starts( 2 ) )
);
// 列情報の変更: 施設数
dt:"施設数(*)"n << Data Type( Numeric ) <<
Set Name( "施設数" ) << Set Modeling Type( "Continuous" ) << Set Field Width( 12 );
// 選択されている行を削除
// Data Table( "vaccine_sesshujisseki.html" ) << Clear Select << Select Rows( [23] )
// << Delete Rows;
dt << Delete Row(Nrow(dt));
// 計算式列の新規作成
dt <<
New Column( "累積[内1回目]",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Col Cumulative Sum( :内1回目 ) )
) << New Column( "累積[内2回目]",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Col Cumulative Sum( :内2回目 ) )
) << Move Selected Columns( {:"累積[内1回目]"n, :"累積[内2回目]"n}, after( :内2回目 ) );
// 列属性の一括設定
Local( {old dt = Current Data Table()},
Current Data Table( dt );
For Each( {col, index}, {:接種回数, :内1回目, :内2回目, :"累積[内1回目]"n, :"累積[内2回目]"n, :施設数},
col << Format( "Best", Use thousands separator( 1 ), 13 )
);
Current Data Table( old dt );
);
// レポートのスナップショット: vaccine_sesshujisseki.html - グラフビルダー
dt <<
Graph Builder(
Size( 846, 555 ),
Show Control Panel( 0 ),
Show Title( 0 ),
Variables(
X( :日付 ),
Y( :"累積[内1回目]"n ),
Y( :"累積[内2回目]"n, Position( 1 ) ),
Y( :施設数 )
),
Elements(
Position( 1, 1 ),
Bar( X, Y( 1 ), Y( 2 ), Legend( 4 ), Bar Style( "Stacked" ) )
),
Elements( Position( 1, 2 ), Line( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
OutlineBox,
{Set Title( "日本の新型コロナワクチン接種実績" ), Image Export Display( 通常 )}
),
Dispatch(
{},
"累積[内1回目]",
ScaleBox,
{Format( "Best", Use thousands separator( 1 ), 12 )}
),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
6,
Properties( 0, {Line Color( 70 )}, Item ID( "施設数", 1 ) )
)}
),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "累積接種回数" )} ),
Dispatch( {}, "Y 1 title", TextEditBox, {Rotate Text( "Left" )} )
)
);