
- はじめに
- 問56 顧客データフレーム(df_customer)の年齢(age)をもとに10歳刻みで年代を算出し、顧客ID(customer_id)、生年月日(birth_day)とともに抽出せよ。ただし、60歳以上は全て60歳代とすること。年代を表すカテゴリ名は任意とする。先頭10件を表示させればよい。
- 問57 前問題の抽出結果と性別(gender)を組み合わせ、新たに性別×年代の組み合わせを表すカテゴリデータを作成せよ。組み合わせを表すカテゴリの値は任意とする。先頭10件を表示させればよい。
- 問58 顧客データフレーム(df_customer)の性別コード(gender_cd)をダミー変数化し、顧客ID(customer_id)とともに抽出せよ。結果は10件表示させれば良い。
- Pythonのコードやライブラリーについて知りたい場合
- 独学でデータ分析をしている方へ
はじめに
問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の処理を使います。
計算式は、ageに10分の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_cdとageは数値型です。
これを単純に足し合わせると足し算になってしまいます。
すなわち、gender_cdが1 + ageが40の場合は足し算で41になってしまいます。
今回は、1 + 40 を140にしたいので、両者を文字列型に変換します。
変換には、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のコードの打ち方・ライブラリーについてもっと知りたいと思った方は、以下のブログ記事をご覧ください。
データ分析入門・データサイエンス初心者・初学者向けにデータ分析でよく使うPythonをまとめました。
>>【データ分析初心者】Python構文~if文、format記法とf文字列~
>>【データ分析初心者】Python構文~for文、range関数、zip関数、enumerate関数~
>>【データ分析初心者】Python構文~無名関数lambda式、内包表記、map関数~
>>【データ分析初心者】Pandas~loc[]、iloc[]、スライス、drop()、isin()~
>>【データ分析初心者】Matplotlib、Seabornーscatter、hist、countplot 、barplot
独学でデータ分析をしている方へ
機械学習やデータサイエンス・データ分析を独学で学ぶには、どうしたらよいかをまとめてみましたので、興味がある方はこちらのブログ記事をご覧ください。
