私個人的に、“記録より、記憶に残るスポーツ選手” は数字で表せないヒーロー性があって好きですが、今回の話題は、”記憶でなく、記録に残る” 重要性をお話します。私が社会人になったころ、新人研修で上司に呼ばれたときは、必ずメモをもっていき、言われたことを記録しろと教育を受けたものです。
データ分析作業では、データ加工の作業に手間がかかることが良くあります。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" )} )
)
);
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.