【Python初心者でも分かる】データサイエンティスト協会の100本ノック|変数を整える

スポンサーリンク
Python
【初心者必見】プログラミング言語Pythonでできること5選
プログラミング言語の一つであるPythonはコードが理解しやすく、いろんな用途に使える汎用性があります。ですので、全くの初心者にもおすすめしているサイトが多いです。 ここで改めて、Pythonを勉強したい人やデータ分析、AI開発をして...
初心者に人気のプログラミング言語Pythonは独学可能か?
Pythonは非常に人気のあるプログラミング言語で、まったくの初心者でも独学が可能と言われています。 Pythonはさまざまな目的に使える、汎用性のあるプログラミング言語です。 プログラミングは「独学が難しい」と言われていま...

データサイエンティスト協会の100本ノックがGitHubに公開しているデータとPythonコードを初心者にでも分かるように解説していきます。

今回は58~64本です。内容は主に、データから新たなデータを作成する「変数を変える方法」について解説していきます。

Pythonの環境設定は以下の記事を参考にして下さい。

【2021年最新】M1 mac でanacondaをインストールする方法

【2021年最新】WindowsでAnacondaをインストールする方法

  1. 変数を変える
    1. P-058: 顧客データフレーム(df_customer)の性別コード(gender_cd)をダミー変数化し、顧客ID(customer_id)とともに抽出せよ。結果は10件表示させれば良い。
    2. P-059: レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、合計した売上金額を平均0、標準偏差1に標準化して顧客ID、売上金額合計とともに表示せよ。標準化に使用する標準偏差は、不偏標準偏差と標本標準偏差のどちらでも良いものとする。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。
    3. P-060: レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、合計した売上金額を最小値0、最大値1に正規化して顧客ID、売上金額合計とともに表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。
    4. P-061: レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、合計した売上金額を常用対数化(底=10)して顧客ID、売上金額合計とともに表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。
    5. P-062: レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、合計した売上金額を自然対数化(底=e)して顧客ID、売上金額合計とともに表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。
    6. P-063: 商品データフレーム(df_product)の単価(unit_price)と原価(unit_cost)から、各商品の利益額を算出せよ。結果は10件表示させれば良い。
    7. P-064: 商品データフレーム(df_product)の単価(unit_price)と原価(unit_cost)から、各商品の利益率の全体平均を算出せよ。 ただし、単価と原価にはNULLが存在することに注意せよ。

変数を変える

まずは、以下からダウンロードして下さい。

GitHubからデータをダウンロードする方法

P-058: 顧客データフレーム(df_customer)の性別コード(gender_cd)をダミー変数化し、顧客ID(customer_id)とともに抽出せよ。結果は10件表示させれば良い。

import pandas as pd
df_customer = pd.read_csv("customer.csv")

pd.get_dummies(df_customer[["customer_id","gender_cd"]],columns=["gender_cd"]).head(10)

出力:

カテゴリ変数は機械学習する前にダミー変数化します。

【Python初心者】カテゴリ変数をダミー変数に置き変える方法|機械学習に必要な前処理

P-059: レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、合計した売上金額を平均0、標準偏差1に標準化して顧客ID、売上金額合計とともに表示せよ。標準化に使用する標準偏差は、不偏標準偏差と標本標準偏差のどちらでも良いものとする。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。

from sklearn import preprocessing
df_receipt = pd.read_csv("receipt.csv")

df_59 = df_receipt.query("not customer_id.str.startswith('Z')",
                         engine="python")
df_59 = df_59.groupby("customer_id").amount.sum().reset_index()
df_59["amount_ss"] = preprocessing.scale(df_59["amount"])
df_59.head(10)

出力:

新しいデータセットの中身を確認してみましょう。

平均値が0,標準偏差が1となっており、標準化できていることが分かります。

P-060: レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、合計した売上金額を最小値0、最大値1に正規化して顧客ID、売上金額合計とともに表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。

from sklearn.preprocessing import minmax_scale

df_60 = df_receipt.query("not customer_id.str.startswith('Z')",
                         engine="python")
df_60 = df_60.groupby("customer_id").amount.sum().reset_index()
df_60["amount_ss"] = minmax_scale(df_60["amount"])
df_60.head(10)

出力:

データの中身を確認してみましょう。

最小値が0,最大値が1になっており、正規化できていることが分かります。

【Python初心者】正規化・標準化する方法|機械学習に必要な前処理

P-061: レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、合計した売上金額を常用対数化(底=10)して顧客ID、売上金額合計とともに表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。

import numpy as np

df_61 = df_receipt.query("not customer_id.str.startswith('Z')",
                         engine="python")
df_61 = df_61.groupby("customer_id").amount.sum().reset_index()
df_61["amount_log10"] = np.log10(df_61["amount"])
df_61.head(10)

出力:

np.log10 とするだけで、常用対数化ができます。

常用対数化した数値をもとに戻すには、10に常用対数化した数値をべき乗すればよいです。

きちんと、1298 と元に戻りましたね。

P-062: レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、合計した売上金額を自然対数化(底=e)して顧客ID、売上金額合計とともに表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。結果は10件表示させれば良い。

df_62 = df_receipt.query("not customer_id.str.startswith('Z')",
                         engine="python")
df_62 = df_62.groupby("customer_id").amount.sum().reset_index()
df_62["amount_loge"] = np.log(df_62["amount"])
df_62.head(10)

出力:

自然対数化するには、np.log することでできます。

もとに戻すには、ネイピア数をべき乗します。

ネイピア数の詳細は省きますが、以下のコードで表します。

np.e

出力:
2.718281828459045

P-063: 商品データフレーム(df_product)の単価(unit_price)と原価(unit_cost)から、各商品の利益額を算出せよ。結果は10件表示させれば良い。

df_63 = df_product.copy()   # データをそのままコピーする
df_63["unit_profit"] = df_63["unit_price"]-df_63["unit_cost"]
df_63.head(10)

出力:

データセットのデータを足したり、引いたり、演算を使うことができます。

そして、そのデータをデータセットに付け加えることができます。

P-064: 商品データフレーム(df_product)の単価(unit_price)と原価(unit_cost)から、各商品の利益率の全体平均を算出せよ。 ただし、単価と原価にはNULLが存在することに注意せよ。

df_product = pd.read_csv("product.csv")

df_64 = df_product.copy()
df_64["unit_profit_rate"] = (df_64["unit_price"]-df_64["unit_cost"])/df_64["unit_price"]
df_64["unit_profit_rate"].mean(skipna=True)

出力:

単価ーコストを単価で割ることで、利益率が分かります。

この式を新しい変数をとして、データセットに追加できます。

データサイエンティスト協会の100本ノックを解説|ダウンロードから読み込みまで

データサイエンティスト協会の100本ノックを解説|データの抽出

データサイエンティスト協会の100本ノックを解説|変数の一部を使ってデータを抽出する

データサイエンティスト協会の100本ノックを解説|ソート(順序で整列)

データサイエンティスト協会の100本ノックを解説|グループ分け

データサイエンティスト協会の100本ノック|新たなデータフレームの作成

データサイエンティスト協会の100本ノック|日付データ

データサイエンティスト協会の100本ノック|特徴量エンジニアリング

データサイエンティスト協会の100本ノック|小数点の処理



コメント

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