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

100本ノック

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

↓ネ

↓タ

↓バ

↓レ

↓防

↓止

答えと解説

設問はこちらでした。

P-044: 043で作成した売上サマリデータ(sales_summary)は性別の売上を横持ちさせたものであった。このデータから性別を縦持ちさせ、年代、性別コード、売上金額の3項目に変換せよ。ただし、性別コードは男性を”00″、女性を”01″、不明を”99″とする。

※売上がNullのデータは除く
※最終のデータは、年代の昇順、性別コードの昇順に並べること

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

今回はすでに43問目で解答を得ていた問題ではありますが、横持ちのデータを縦持ちにしたい、というシチュエーションですので、これに対応していきましょう。

まず、最初の段階で以下のようなデータになっています。

これのデータの持ち方を変えて、年代-性別-売上、というデータに変換します。

基本的に横持ちのデータを縦持ちに変換したい場合は、転置ツールを使います。設定は以下の通りで、キー列はそのまま残しておきたいフィールドである「年代」、データ列は縦持ちにしたい「不明」「女性」「男性」を選択します。

つまり、これにより以下のようになります。

ここから、Name列に格納された「不明」「女性」「男性」をそれぞれコードに変換する必要があります。つまり、以下のような対応になります。

コード
男性00
女性01
不明99

これを行うには様々な方法がありますが、手っ取り早いのはフォーミュラツールを使って関数で書き換えることでしょうか。例えば、Switch関数を使うと以下のようになります。

Switch([Name],Null(),"不明","99","男性","00","女性","01")

書式:Switch(フィールド名,ヒットしなかった際のデフォルト値,マッチする値1,返す値1,,,,,マッチする値N,返す値N)

他にも、IF文を使うと以下のようになります。

IF [Name]="男性" THEN "00"
ELSEIF [Name]="女性" THEN "01"
ELSE "99"
ENDIF

いずれの方法を取ったとしても、これでメインの部分はできているので、残りの処理を進めましょう。

売上がNull値のレコードは不要なので、フィルターツールで「Value」は「Nullではない」とします。

次に項目名を変更します。

最後に並び替えて完了です。年代の昇順、性別コードの昇順にソートツールで並び替えます。

これで完了です。

別解のワークフローについて(マスタ使用)

本編ではフォーミュラツールでコード値に書き換えましたが、このように性別マスタみたいな対応表があるのであれば、検索置換ツールも使えます。

上のようなワークフローになりますが、検索置換ツールのR入力側にマスターデータをインプットすることで性別マスタを適用することが可能です。

検索置換ツールの設定としては以下のとおりです。

検索条件は「フィールド全体」とし、検索対象のフィールドはF入力にある「Name」、検索する値は、R入力にある「性別」、置換オプションとしては「見つかったテキストを次のフィールドの値に置換」とし、R入力の「性別コード」とします、これで、性別で一致させ、性別コードで書き換えを行います。

その他処理内容は一緒なので説明は割愛します。

まとめ

今回は、横持ちのデータを縦持ちにする問題でした。データの持ち方の変更はよく行う処理ですので、クロスタブ、転置の使い方はしっかりマスターしましょう。

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

コメント

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