【問56~問58】データサイエンス100本ノック 解説

※アフィリエイト広告を利用しています。

ファイル

はじめに

問56~問58のコードの説明を初心者や初学者でもわかるような方法でまとめました。

データサイエンス100本ノックのはじめ方は、以下のブログ記事を参考にしてください。

>>【Google Colabはじめ方】データサイエンス100本ノックーデータサイエンティスト協会

問56 顧客データフレーム(df_customer)の年齢(age)をもとに10歳刻みで年代を算出し、顧客ID(customer_id)、生年月日(birth_day)とともに抽出せよ。ただし、60歳以上は全て60歳代とすること。年代を表すカテゴリ名は任意とする。先頭10件を表示させればよい。

基本的な処理は、(df_customer)の年齢(age)をもとに10歳刻み年代をあらわすカテゴリーと、顧客ID(customer_id)、生年月日(birth_day)の結合になるので、pd.concat()を使用します。

df_customer)の年齢(age)をもとに10歳刻みで年代を算出する方法ですが、問43の処理を使います。

計算式は、age10分の1かけてfloor関数小数点を切り捨てたあとに、それを10倍します。

例えば、22歳の場合、22×10分の1(小数点以下切り捨て)×10=20となるので、20代と算出できます。

これをlambda式で書くと、以下のようになります。

lambda x: math.floor(x/10)*10

ただし、本問では、60歳以上全て60歳代としなければなりません。

これには、複数の数字の中から最も小さい値を抽出するmin()を使用し以下のように表示します。

min(math.floor(x/10)*10,60)

これで、「math.floor(x/10)*10」と「60」を比べて低い数字の方が抽出されるます。

例えば、上記例が20だった場合は、60よりも低い数字の20が抽出されますし、仮に70だった場合は、低い数字の60が抽出されます。

df_customer_era = pd.concat([df_customer[['customer_id','birth_day']],
                             df_customer['age'].apply(lambda x : min(math.floor(x/10)*10,60))],axis=1)

別回答として、関数やif文を使うと以下のようになります。

age = df_customer['age'].apply(lambda x: math.floor(x/10)*10)
df_tmp = pd.concat([df_customer[['customer_id','birth_day']],age],axis=1)

def age60(x):
    if x < 60:
        return x
    elif x >= 60:
        return 60

df_tmp['age'] = df_tmp['age'].apply(lambda x: age60(x))
df_tmp.head(10)

問57 前問題の抽出結果と性別(gender)を組み合わせ、新たに性別×年代の組み合わせを表すカテゴリデータを作成せよ。組み合わせを表すカテゴリの値は任意とする。先頭10件を表示させればよい。

問56の抽出結果と性別(gender)を組み合わせ、新たに性別×年代の組み合わせを表すカテゴリデータを作成するには、df_customer_eraにあらたなカテゴリー(任意でいいので、‘era_gender’)を追加してあげればいいだけです。

特に本問では、組み合わせ方法に指定がないので、単純にdf_customerにある性別を数字に置き換えたgender_cd問56のdf_customer_eraの年代ageを組み合わせたものを作成したいと思います。

もっとも、gender_cdage数値型です。

これを単純に足し合わせると足し算になってしまいます。

すなわち、gender_cdが1 + ageが40の場合は足し算で41になってしまいます。

今回は、1 + 40140にしたいので、両者を文字列型変換します。

変換には、astype()を使用して、文字列(str型)とします。

df_customer_era['era_gender'] = df_customer['gender_cd'].astype('str') + df_customer_era['age'].astype('str')
df_customer_era.head(10)

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

ダミー変数とは、ある値又は文字を0か1の数字にすることを言います。

ダミー変数化は、pd.get_dummies()でできます。

( )内の引数columnsダミー化したい列名リストで指定すると、その列名ダミー変数になります。

今回は、顧客ID(customer_id)とともに10件抽出なので、以下のようになります。

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

Pythonのコードやライブラリーについて知りたい場合

Pythonデータ分析よく使われている言語です。

この機会にPythonコードの打ち方・ライブラリーについてもっと知りたいと思った方は、以下のブログ記事をご覧ください。

独学でデータ分析をしている方へ

機械学習データサイエンスデータ分析独学で学ぶには、どうしたらよいかをまとめてみましたので、興味がある方はこちらのブログ記事をご覧ください。