
- はじめに
- 問59 レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、売上金額合計を平均0、標準偏差1に標準化して顧客ID、売上金額合計とともに表示せよ。標準化に使用する標準偏差は、不偏標準偏差と標本標準偏差のどちらでも良いものとする。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。
- 問60 レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、売上金額合計を最小値0、最大値1に正規化して顧客ID、売上金額合計とともに表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。
- 問61 レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、売上金額合計を常用対数化(底=10)して顧客ID、売上金額合計とともに表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。
- 問62 レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、売上金額合計を自然対数化(底=e)して顧客ID、売上金額合計とともに表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。
- Pythonのコードやライブラリーについて知りたい場合
- 独学でデータ分析をしている方へ
はじめに
問59~問62のコードの説明を初心者や初学者でもわかるような方法でまとめました。
データサイエンス100本ノックのはじめ方は、以下のブログ記事を参考にしてください。
>>【Google Colabはじめ方】データサイエンス100本ノックーデータサイエンティスト協会
問59 レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、売上金額合計を平均0、標準偏差1に標準化して顧客ID、売上金額合計とともに表示せよ。標準化に使用する標準偏差は、不偏標準偏差と標本標準偏差のどちらでも良いものとする。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。
まず、レシート明細データフレーム(df_receipt)の顧客IDが”Z”から始まるのものは非会員を表すため、除外した上で、売上金額(amount)を顧客ID(customer_id)ごとに合計したデータフレームを作成します。
これは、問52と同じ処理です。
df_sales_amount = df_receipt.query('not customer_id.str.startswith("Z")',engine='python').groupby('customer_id').amount.sum().reset_index()
次に、売上金額合計を平均0、標準偏差1に標準化します。
なお、その標準偏差は、不偏標準偏差と標本標準偏差のどちらでも良いものとされています。
まずは、標準偏差について勉強していきましょう。
平均からの隔たりの大きさを表す「偏差」があります。
「偏差」は個々のデータの散らばりを示す事ができますが、データ全体の散らばりを見る時、単純に「偏差」の平均を求めるだけではうまくいきません。
なぜなら、「偏差」の平均は必ず0になるので、データ全体の散らばりを比較することができなくなるからです。
そこで、それぞれの「偏差」を2乗し、マイナスの値をなくした上で全てを足し合わせた値(偏差二乗和)の平均を求めることで、データ全体の散らばりの程度を図ることができます。
これを「分散」と言います。
ただし、「分散」は「偏差」の2乗なので、平均を比較したりすることはできません。
例えば、100人の年齢の平均が50歳だとして、分散の単位はその2乗になるので、250です。
これでは、次元が異なるため、平均と分散の値をそのまま比較したり計算したりすることはできません。
そこで、同じ次元にそろえるため、「分散」の正の平方根をとります。この値が「標準偏差」です。
それでは、平均を0に、標準偏差を1とするpreprocessing.scale()を使用して、売上金額合計を平均0、標準偏差1に標準化します。
df_sales_amount['amount_sss'] = preprocessing.scale(df_sales_amount['amount'])
問60 レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、売上金額合計を最小値0、最大値1に正規化して顧客ID、売上金額合計とともに表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。
はじめにやる処理は問59と同じです。
df_sales_amount = df_receipt.query('not customer_id.str.startswith("Z")',engine='python').groupby('customer_id').amount.sum().reset_index()
本問は、売上金額合計を最小値0、最大値1に正規化する必要があります。
それには、最小値0、最大値1に正規化するpreprocessing.minmax_scale()を使用します。
df_sales_amount['amount_mm'] = preprocessing.minmax_scale(df_sales_amount['amount'])
問61 レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、売上金額合計を常用対数化(底=10)して顧客ID、売上金額合計とともに表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。
はじめの処理は、問59、問60と同じです。
df_sales_amount = df_receipt.query('not customer_id.str.startswith("Z")',engine='python').groupby('customer_id').amount.sum().reset_index()
本問は、売上金額合計を常用対数化(底=10)する必要があります。
np.log10()を使用すれば、常用対数(底=10)に変換できます。
なお、’amount‘には、0もあります。
対数化するデータの中に0が含まれている場合は計算できないので、1を加えてください。
df_sales_amount['amount_log10'] = np.log10(df_sales_amount['amount']+1)
問62 レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、売上金額合計を自然対数化(底=e)して顧客ID、売上金額合計とともに表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。
はじめの処理は、同じです。
df_sales_amount = df_receipt.query('not customer_id.str.startswith("Z")',engine='python').groupby('customer_id').amount.sum().reset_index()
本問は、売上金額合計を自然対数化(底=e)する必要があります。
np.log()を使用すれば、常用対数(底=e)に変換できます。
こちらも、データに0が含まれる場合は、変換できるように+1してください。
df_sales_amount['amount_loge'] = np.log(df_sales_amount['amount']+1)
Pythonのコードやライブラリーについて知りたい場合
Pythonはデータ分析でよく使われている言語です。
この機会にPythonのコードの打ち方・ライブラリーについてもっと知りたいと思った方は、以下のブログ記事をご覧ください。
データ分析入門・データサイエンス初心者・初学者向けにデータ分析でよく使うPythonをまとめました。
>>【データ分析初心者】Python構文~if文、format記法とf文字列~
>>【データ分析初心者】Python構文~for文、range関数、zip関数、enumerate関数~
>>【データ分析初心者】Python構文~無名関数lambda式、内包表記、map関数~
>>【データ分析初心者】Pandas~loc[]、iloc[]、スライス、drop()、isin()~
>>【データ分析初心者】Matplotlib、Seabornーscatter、hist、countplot 、barplot
独学でデータ分析をしている方へ
機械学習やデータサイエンス・データ分析を独学で学ぶには、どうしたらよいかをまとめてみましたので、興味がある方はこちらのブログ記事をご覧ください。
