このページは解答編です。
↓ネ
↓タ
↓バ
↓レ
↓防
↓止
答えと解説
設問はこちらでした。
P-075: 顧客データ(customer.csv)からランダムに1%のデータを抽出し、先頭から10件表示せよ。
解答ワークフローは以下のようになります。
ランダム抽出の問題です。
基本的には、ランダム%サンプリングツールというマクロベースのツールで実現可能です。ただ、やり方は非常に簡単なので、ランダム%サンプリングツールのマクロの中身を組むこともそれほど難しくはないため、別解として示してみます。車輪の再発明みたいな感じになってしまいますが、基本的な考え方を知っていれば、応用が効くので今回紹介します。
ランダム%サンプリングツール
ランダム%サンプリングツールは、名前の通りランダムにレコードを抽出するツールです。
オプションとして、レコード数を指定して抽出する方法(Nレコードを無作為抽出)と、レコード全体に対しての%を指定して抽出(N%のレコードを無作為抽出)することもできます。また、出力結果を固定したい場合は、決定性(疑似乱数)出力オプションを使ってシード値を指定することも可能です。
実際のワークフロー
それでは実際のワークフローを作っていきますが、1ツールなので解説すべきところは少ないです。
customer.csvの出力をそのままランダム%サンプリングツールに接続します。
そして、「N%のレコードを無作為抽出」にチェックを入れ、レコードのパーセンテージを1に設定します。
あとは、サンプリングツールなどを使って先頭から10件抽出すれば完了です。
別解
次に別解ですが、ランダム%サンプリングツールの中身そのものを作ることになります。
まず、フォーミュラツールでRAND()関数を使い、ランダムな値を取得します。フィールド名は「Random」、データ型はDouble型にします。
RAND()
次に、取得したランダムな値(フィールド名「Random」)に対して、ソートツールを使って昇順(降順でも構いませんが)に並び替えます。
最後に、サンプリングツールを使って、「最初のN%の行」のオプションに1を指定し、1%のレコードを取得します。
実際のワークフローは以下の通りとなります。
まとめ
今回は、ランダムにデータを抽出する問題でした。単純なランダム抽出であれば、ツール一つで対応可能ですが、応用が必要な場合はワークフローを組むことが必要になるので、今回の別解を覚えておくと便利です。
コメント