나는 개인적으로, " 기록보다 기억에 남는 스포츠 선수 " 숫자로 표현할 수없는 영웅 수있어 좋아하지만, 이번 화제는 " 기억이 아니라 기록에 남아 " 중요성을 이야기합니다. 내가 사회인이되었을 무렵, 신인 연수에서 상사에게 불린 때는 반드시 메모를 가지고 가고, 말한 것을 기록하라고 교육을받은 것입니다.
데이터 분석 작업에서는 데이터 가공 작업에 시간이 걸릴 수 잘 있습니다. 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" )} )
)
);