このページは解答編です。
↓ネ
↓タ
↓バ
↓レ
↓防
↓止
答えと解説
設問はこちらでした。
P-082: 商品データ(product.csv)の単価(unit_price)と原価(unit_cost)の欠損値について、それぞれの中央値で補完した新たな商品データを作成せよ。なお、中央値については1円未満を丸めること(四捨五入または偶数への丸めで良い)。補完実施後、各項目について欠損が生じていないことも確認すること。
解答ワークフローは以下のようになります。
今回は、80問目で確認した欠損値のデータを中央値で補完する問題です。81問目は平均値で補完していました。なお、補完する値は1円未満を丸めること、ということで四捨五入していきましょう。
ところで、Alteryxにはインピュテーションという便利なツールがありますが、これは81問目でご紹介していますので、今回は省きます。
インピュテーションツールを使った方法
それでは中央値で補完していきましょう。インピュテーションツールは基本的に数値型のフィールドのみが対象となります。そのため、データ型を変更していきます。
インピュテーションツールで中央値を取ると小数点が出てくるため、あらかじめ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([Median_unit_price], 1) ELSE [unit_price] ENDIF
unit_cost:
IF IsNull([unit_cost]) THEN
Round([Median_unit_cost], 1) ELSE [unit_cost] ENDIF
いずれも同じような式で、各フィールドの値がNullであれば、Round関数で小数点をまるめた中央値の値を入力します。そうでなければ元の値を残しましょう。
あとは不要項目を削除して完成です。最終的なワークフローは以下の通りとなります。
まとめ
今回は80問目で発見した欠損値に対して、補完を行う内容でした。81問目は平均値で補完しましたが、今回は中央値となります。基本的な統計量であればインピュテーションツールで対応可能です。そうでない場合でも、ワークフローを組むことで対応可能です。
コメント