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

100本ノック

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

↓ネ

↓タ

↓バ

↓レ

↓防

↓止

答えと解説

設問はこちらでした。

P-036: レシート明細データ(receipt.csv)と店舗データ(store.csv)を内部結合し、レシート明細データの全項目と店舗データの店舗名(store_name)を10件表示せよ。

※出力結果は、元のreceipt.csvの並びのままとしてください(Alteryxオリジナル条件)

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

今回は複数のデータを結合する問題です。データ結合を行う場合は、結合ツールを使用します。結合ツールは19日目に一度使用していますが、再度ご紹介します。

結合ツールは入力を二つ持ち、出力を三つもちます。二つのデータストリームをキーフィールドの値で結合し、出力します(もしくは、レコードの場所で結合も可能)。このとき、キーフィールドの値が一致したものは「J」出力、そうでなければそれぞれ「L」「R」出力に出力されます。

それでは、実際にワークフローを作成していきたいと思いますが、Alteryx向けの条件として、receipt.csvのデータ順を変えないというルールが今回追加されています。まず、その対応として、receipt.csvを読み込んだデータ入力ツールの直後にレコードIDツールを追加します。

これにより、RecordIDというフィールドが追加されますが、これがこのreceipt.csvのデータの並びを示すフィールドになります。つまり、最終的にこのフィールドの値の昇順で並び替えれば並び順の復元が可能です。

次に結合ツールを追加します。「receipt.csv」→レコードIDツールの出力から、結合ツールのL入力へ、store.csvの出力から結合ツールのR入力へ接続します。

設定は以下の通り、store_cdがキーとなるフィールドですので、「特定のフィールドで結合」オプションを選択し、実際のフィールドは左も右も「store_cd」を指定します。これにより、両方のstore_cdが一致するレコードがJ出力から出力されます。

なお、store.csvからのデータは、「store_name」のみで良いので、不要なデータは結合ツールのセレクト機能で削除します。このようなときは、以下のようにオプションのセレクトから「すべての右を選択解除」とすれば、R入力から来たデータはすべてチェックが外れるため、今回欲しい項目である「store_name」だけチェックを入れればよい、ということになります。

基本的にこれでほぼ完成です。あとは、後処理だけです。

まず、receipt.csvのデータの並び順を復元するため、ソートツールで「RecordID」の昇順に並べ替えます。

その後、サンプリングツールなどで10レコード抽出し、不要な項目である「RecordID」をセレクトツールで削除すれば完成です。

まとめ

今回は、結合ツールでデータの結合を行いました。データの結合は非常に頻繁に行うと思いますので、ぜひマスターしてください。

また、入力ファイルのレコード順を復元する方法も紹介しました。基本的に、データを読み込んだ直後にレコードIDツールで連番を振り、あとでそのレコードIDの昇順で並び替えるというやり方で実現します。元のデータの順番が重要である場合はこの方法が役立ちます。

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

コメント

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