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

100本ノック

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

↓ネ

↓タ

↓バ

↓レ

↓防

↓止

答えと解説

設問はこちらでした。

P-081: 商品データ(product.csv)の単価(unit_price)と原価(unit_cost)の欠損値について、それぞれの平均値で補完した新たな商品データを作成せよ。なお、平均値については1円未満を丸めること(四捨五入または偶数への丸めで良い)。補完実施後、各項目について欠損が生じていないことも確認すること。

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

今回は、80問目で確認した欠損値のデータを平均値で補完する問題です。なお、補完する値は1円未満を丸めること、ということで四捨五入していきましょう。

ところで、Alteryxにはインピュテーションという便利なツールがあります。

インピュテーションツール

インビテーションツールは、指定したフィールドの値を指定した値で補完するツールです。

指定元のデータとしてはNullもしくは指定値を補完することができます。

指定可能な値としては、以下のような値を利用可能です。

  • 平均値
  • 中央値
  • 最頻値
  • 指定値

ここにない場合は自力で補完する必要があります。

また、補完したかどうかフラグを立てるオプションもありますし(代入した値にインジケーターフィールドを含める)、どのようなデータを代入したかを知るためのオプション(代入した値を別のフィールドとして出力する)もあります。

インピュテーションツールを使った方法

それでは、実際に使っていきましょう。インピュテーションツールは基本的に数値型のフィールドのみが対象となります。そのため、データ型を変更していきます。

インピュテーションツールで平均値を取ると小数点が出てくるため、あらかじめDouble型にしておきます。

次にインピュテーションツールを使います。「unit_price」「unit_cost」フィールドにチェックを入れ、置換する値は「Null」、次の値で置換は「平均」を選択します。

あとは、補完した値を丸めていきます。複数のフィールドを一括で処理したいので複数フィールドフォーミュラツールを使います。「unit_price」「unit_cost」を選択し、「出力フィールドをコピーして追加」などのオプションはオフにし、式は以下の通りとします。

Round([_CurrentField_], 1)

この[_CurrentField_]オプションは、処理対象のフィールドにチェックの付いたフィールドを順次処理していくわけですが、そのフィールドのことを言っています。ですので、今回の場合は、処理対象としている各フィールドに対してRound関数を使っていく、ということになります。

最後にソートツールでproduct_cdの昇順に並び替えましょう。

これで以下のようなワークフローになります。

これで基本的は完了なのですが、欠損数を確認しましょう。といっても、79問目のワークフローをそのまま接続するだけですので、内容は省略しますが、以下のようなワークフローになります。

結論を見ると、以下の通りNullはなし、ということになりました。

実際にどのような値で補完されていったのか見てみましょう。以下のようなワークフローを組んでみます。

右下にある閲覧ツール(確認用)というところを見てみましょう。

一番右の方にある「Right_unit_price/cost」がインピュテーションツールで補完された値です。そして、「unit_price/cost」はRound関数で四捨五入した値です。これを見ると、フィールドごとに平均値を出して補完していることがわかるかと思います。

別解:インピュテーションツールを使わない方法

それでは別解です。補完する値も少ないのでこちらの方法でも十分対応可能ですが、計算式を書くのが面倒であればインピュテーションツールを使いましょう。

データ型の変更はいずれにしても必要です。

ここで、集計ツールを使ってunit_priceとunit_costの平均値を取りましょう。

この結果を、元のデータに結合していきます。フィールド付加ツールを使いましょう。以下のように接続します。

これで準備は整ったので、あとは補完していくだけです。地道にフォーミュラツールで行きましょう。

unit_price:

IF IsNull([unit_price]) THEN 
Round([Avg_unit_price], 1) ELSE [unit_price] ENDIF

unit_cost:

IF IsNull([unit_cost]) THEN 
Round([Avg_unit_cost], 1) ELSE [unit_cost] ENDIF

いずれも同じような式で、各フィールドの値がNullであれば、Round関数で小数点をまるめた平均値の値を入力します。そうでなければ元の値を残しましょう。

あとは不要項目を削除して完成です。最終的なワークフローは以下の通りとなります。

まとめ

今回は80問目で発見した欠損値に対して、補完を行う内容でした。基本的な統計量であればインピュテーションツールで対応可能です。そうでない場合でも、ワークフローを組むことで対応可能です。

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

コメント

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