データサイエンス100本ノックをAlteryxで。75日目(解答)

100本ノック

このページは解答編です。

↓ネ

↓タ

↓バ

↓レ

↓防

↓止

答えと解説

設問はこちらでした。

P-075: 顧客データ(customer.csv)からランダムに1%のデータを抽出し、先頭から10件表示せよ。

解答ワークフローは以下のようになります。

ランダム抽出の問題です。

基本的には、ランダム%サンプリングツールというマクロベースのツールで実現可能です。ただ、やり方は非常に簡単なので、ランダム%サンプリングツールのマクロの中身を組むこともそれほど難しくはないため、別解として示してみます。車輪の再発明みたいな感じになってしまいますが、基本的な考え方を知っていれば、応用が効くので今回紹介します。

ランダム%サンプリングツール

ランダム%サンプリングツールは、名前の通りランダムにレコードを抽出するツールです。

オプションとして、レコード数を指定して抽出する方法(Nレコードを無作為抽出)と、レコード全体に対しての%を指定して抽出(N%のレコードを無作為抽出)することもできます。また、出力結果を固定したい場合は、決定性(疑似乱数)出力オプションを使ってシード値を指定することも可能です。

実際のワークフロー

それでは実際のワークフローを作っていきますが、1ツールなので解説すべきところは少ないです。

customer.csvの出力をそのままランダム%サンプリングツールに接続します。

そして、「N%のレコードを無作為抽出」にチェックを入れ、レコードのパーセンテージを1に設定します。

あとは、サンプリングツールなどを使って先頭から10件抽出すれば完了です。

別解

次に別解ですが、ランダム%サンプリングツールの中身そのものを作ることになります。


まず、フォーミュラツールでRAND()関数を使い、ランダムな値を取得します。フィールド名は「Random」、データ型はDouble型にします。

RAND()

次に、取得したランダムな値(フィールド名「Random」)に対して、ソートツールを使って昇順(降順でも構いませんが)に並び替えます。

最後に、サンプリングツールを使って、「最初のN%の行」のオプションに1を指定し、1%のレコードを取得します。

実際のワークフローは以下の通りとなります。

まとめ

今回は、ランダムにデータを抽出する問題でした。単純なランダム抽出であれば、ツール一つで対応可能ですが、応用が必要な場合はワークフローを組むことが必要になるので、今回の別解を覚えておくと便利です。

解答ワークフローダウンロード

コメント

タイトルとURLをコピーしました