このページは解答編です。
↓ネ
↓タ
↓バ
↓レ
↓防
↓止
答えと解説
設問はこちらでした。
顧客データ(customer.csv)から性別コード(gender_cd)の割合に基づきランダムに10%のデータを層化抽出し、性別コードごとに件数を集計せよ。この時、ランダム%サンプリングツールをバッチマクロ化して回答すること。
※76問目がベースとなります
解答ワークフローは以下のようになります。
76問目のようなワークフローを作らず、75問目で使ったランダム%サンプリングツールをバッチマクロ化して解く問題です。76問目でも解説しましたが、ランダム%サンプリングツールはグループに対して実行することができないため、そのまま使えません。そのため、今回の問題で行うようにバッチマクロ化で簡単にグループ処理が可能になります。
マクロ作成
単純にバッチマクロ化するだけであれば、いきなりマクロ作成に取り掛かることができます。
まず、ファイルメニューなどから新規ワークフローを作成します。その後、マクロ入力ツールを配置しますが、入力データなど持ってくるのが面倒であれば、startファイルのデータ入力ツールをコピー&ペーストした後に、右クリックから「マクロ入力へ変換」などでマクロ入力ツールにするのが楽かと思います。
次に、ランダム%サンプリングツールをマクロ入力ツールの後段に配置します。設定は以下のとおり、「N%のレコードを無作為抽出」を選択します。「レコードのパーセンテージ」オプションはインターフェースツールで書き換えるため適当でいいですが、ここでは「10」としておきます。
その後、マクロ出力ツールを接続します。ここでは特にオプションは不要です。
ここまでで以下のようになっていると思います。
次に、インターフェースカテゴリから数値増減ツールを追加します。このツールにより、ランダム%サンプリングツールの「レコードのパーセンテージ」オプションをマクロの設定で変更できるようにします。ここでは特に細かい設定は不要ですが、「表示するテキストまたは質問を入力」のところはわかりやすい言葉、例えば「N%のレコードを無作為抽出」などと変えておきましょう。
次に、数値増減ツールのQ出力からランダム%サンプリングツールのアクション入力までドラッグ&ドロップします。これにより、アクションツールが自動的に追加されます。
アクションツールは以下のように設定しますが、これは、アクションツールから接続しているツール、つまりランダム%サンプリングツールの設定のうち、書き換えたい項目を選択します。今回は「Value[@name=’NPercent’] – value=’10’」となります。
次に、インターフェースカテゴリからコントロールパラメータツールを追加します。この時、どこにも接続しないでください。
これでマクロは完成です、適当な名前で保存しましょう。
さて、ここで、このマクロの使い方ですが、「¿」(逆疑問符)にはグループごとに実行したい値をもつフィールドを入力していきます(これをグループ化入力とここでは記載しています)。その際、入力する値をユニーク値にする必要があります。ユニークツールや集計ツールでグループ化しましょう。
ワークフローに組み込む
まず、マクロを配置します。マクロの下側の入力にcustomer.csvを接続します。
次に、グループ化入力(コントロールパラメータ入力)に入力するためのデータを作っていきましょう。集計ツールを今回は使います。gender_cdごとにランダム%サンプリングツールを適用していきたいので、gender_cdでグループ化します。
その後、集計ツールからマクロのコントロールパラメータ入力に接続します。
ここでマクロの設定を行いましょう。まず、質問タブでコントロールパラメータ入力には先程接続した「gender_cd」を指定します。その下にある「N%のレコードを無作為抽出」という部分には「10」を入力します(問題分に記載されている通り10%のデータを抽出したいので)。
次に、グループ化タブです。Control GroupByフィールドは、コントロールパラメータ入力に入力されているフィールドの中から、グループごとに実行したい値を持つフィールドを指定します。今回であれば、「gender_cd」です。下側にあるInput1 GroupByフィールドは、実際にグループ化を適用するフィールド、つまり今回であればgender_cdとなります(Control GroupByフィールドで指定した値を持つフィールドを指定します)。なお、各マクロ入力ごとにここに表示されるため、複数の入力を持つ場合はそれぞれに設定することが可能です。
ここからはオリジナルの問題と同じになります。件数を集計するために、集計ツールを以下のように設定します。
最終的には以下のようなワークフローとなります。
まとめ
今回は、グループごとに実行するためのバッチマクロを作成する問題でした。グループごとに実行したい部分があとから出てきた場合に、それぞれのツールの設定を見直せばグループごとに処理はできるのですが、細かく見直すのに時間をかけるより、バッチマクロ化しグループ化対応するのが楽なこともあります。
コメント