一般社団法人データサイエンティスト協会から公開されているデータサイエンス100本ノック 構造化データ加工編のウィークリーチャレンジ方式による出題第11回目は58問目~62問目を一つにまとめてみました。今回はデータ変換処理中心の問題です。
P-058: 顧客データ(customer.csv)の性別コード(gender_cd)をダミー変数化し、顧客ID(customer_id)とともに10件表示せよ。
※レコードの順序は、元の順序を保持すること
※新しく作成されるフィールド名は、「gender_cd_」に値を組み合わせたものとすること
P-059: レシート明細データ(receipt.csv)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、売上金額合計を平均0、標準偏差1に標準化して顧客ID、売上金額合計とともに10件表示せよ。標準化に使用する標準偏差は、分散の平方根、もしくは不偏分散の平方根のどちらでも良いものとする。ただし、顧客IDが"Z"から始まるのものは非会員を表すため、除外して計算すること。
※分散の平方根の標準偏差=母集団の標準偏差(nで割る)
※不偏分散の平方根=不偏標準偏差(n-1で割る)
※出力は、フィールド名をstd_amountとし、customer_idの昇順とすること
P-060: レシート明細データ(receipt.csv)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、売上金額合計を最小値0、最大値1に正規化して顧客ID、売上金額合計とともに10件表示せよ。ただし、顧客IDが"Z"から始まるのものは非会員を表すため、除外して計算すること。
※出力は、フィールド名をscale_amountとし、customer_idの昇順とすること
P-061: レシート明細データ(receipt.csv)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、売上金額合計を常用対数化(底10)して顧客ID、売上金額合計とともに10件表示せよ。ただし、顧客IDが"Z"から始まるのものは非会員を表すため、除外して計算すること。
※出力は、フィールド名をlog_amountとし、customer_idの昇順とすること
P-062: レシート明細データ(receipt.csv)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、売上金額合計を自然対数化(底e)して顧客ID、売上金額合計とともに10件表示せよ。ただし、顧客IDが"Z"から始まるのものは非会員を表すため、除外して計算すること。
※出力は、フィールド名をlog_amountとし、customer_idの昇順とすること
解いたらこちらに投稿していただければと思います。ちなみに、次回投稿は一週間後を予定しています。
solutionファイルは次回添付します。
添付ファイルは今回の出題のstartファイルと、前回のsolutionファイルです。
回答します。
(.yxzpにパッケージするとなぜか添付できないので、.yxmdで添付します)
59問目
母集団の標準偏差の計算結果がExpect Equalツールで一致しませんが
解答データとの差が 1e-15未満のため、丸め誤差と判断してOKとしました。
61問目
対数を計算する際に0.5を足す処理で「0の対数は定義により計算できないから」という理由は理解できるのですが
「なぜ (0.01でも1でもなく) 0.5を使うのか」については、私が検索した範囲では「1よりは誤差がすくないから」という程度で
積極的な理由は見つかりませんでした。
この辺、詳しい方がいらっしゃれば教えてください。
59問目
60問目
SummaryツールとAppend Fieldツールの合わせ技は便利ですね。
61問目
62問目
はい、対数変換の際の足し込む値については特にこの値が良い、という絶対的なものはないようです。サンプル解答としては、オリジナルのデータサイエンス100本ノックの解答にあわせて0.5という値としています(最近のトレンド的に0.5とあったような気はしますが・・・)。