【解説】カテゴリデータの作成方法を学ぶ | データサイエンス100本ノック【問56〜57 回答】
当ページのリンクには広告が含まれています。
この記事の対象者
・ Pythonでカテゴリデータの作成方法を知りたい人
以降はデータサイエンス100本ノックの問題を題材にしながら学んでいきます。
データサイエンス100本ノックの始め方は、以下の記事を参考にしていただければと思います。
第56問目: applyとminを用いた年代カテゴリの作成
P-056: 顧客データフレーム(df_customer)の年齢(age)をもとに10歳刻みで年代を算出し、顧客ID(customer_id)、生年月日(birth_day)とともに抽出せよ。ただし、60歳以上は全て60歳代とすること。年代を表すカテゴリ名は任意とする。先頭10件を表示させればよい。
まずは顧客データフレーム(df_customer)の構造を確認します。
1 | df_customer.head(5) |
1 | customer_id customer_name gender_cd gender birth_day age postal_cd address application_store_cd application_date status_cd |
年齢を元に10刻みで年代を算出する方法を考えます。
まずage
カラムをデータとして取り出した上で、何らかの関数処理を施したい場合はapply
メソッドの引数にlambda式を用いればよかったですね。
applyとlambda式の使い方を振り返ります。
データフレームと併用する場合は、df.apply(lambda 引数: 返り値)
でした。
年代の算出方法はどのように行うでしょうか?
実は、過去の問題で既に取り組んでいます。
上記の記事で述べていることの繰り返しになりますが、年代は、age列の値を1/10倍し、floor関数で小数点を切り捨てたあとに10倍すれば、年代を算出することが出来ます。
例えば22という値を、2.2にし、小数点を切り捨てて2.0にした後10倍すれば20になりますよね?つまり、22歳は20代であることを算出することができます。
また問題文より、60以上はすべて60歳代にする必要があります。
比較演算子を用いて処理しても良いですね。一方で、関数で処理した値の最小値が60であることを指定すれば良いという考え方もできます。そのため、min
を用いることで60以上はすべて60代として算出することが出来ます。早速コードを書いていきます。
1 | df_age = df_customer['age'].apply(lambda x: min(math.floor(x / 10) * 10, 60)) |
1 | 0 30 |
これを、customer_id
とbirth_day
とともに抽出させます。
df_age
とdf_customer
の間に共通的なカラムは存在しないので、mergeではなくconcatを用いて結合させます。
1 | df_customer_era = pd.concat([df_customer[['customer_id', 'birth_day']], df_age], axis=1) |
1 | customer_id birth_day age |
本問はこれで完成です。
第57問目: データの型変換を伴うカテゴリ化
P-057: 前問題の抽出結果と性別(gender)を組み合わせ、新たに性別×年代の組み合わせを表すカテゴリデータを作成せよ。組み合わせを表すカテゴリの値は任意とする。先頭10件を表示させればよい。
「性別×年代の組み合わせを表すカテゴリデータ」とはなにかを補足しておきます。
今回作成する性別×年代の組み合わせを表すカテゴリーデータは、例えばgender_cd
が1でage
が40だったとしたら、140という風に表す形にしたいと思います。
これを実施するためには、gender_cdとageがともに文字列データにしなければいけません。なぜなら数値型ですと1 + 40は41になってしまうからです。1 + 40 を140にするためには両者を文字列型にしておけば良いことになります。
gender_cdとageはともに数値(int型)なので、これらをastypeメソッドを用いて文字列(str型)に変換させて足し合わせます。その上で新たなカラムであるera_gender
に格納させていきます。
1 | df_customer_era['era_gender'] = df_customer['gender_cd'].astype('str') + df_customer_era['age'].astype('str') |
1 | customer_id birth_day age era_gender |
これで完成です。
まとめ: 様々なカテゴリ化の方法を学びました
本記事は、「【Python】カテゴリデータの作成方法を学ぶ | データサイエンス100本ノック【問56〜57 回答】」というテーマでまとめました。
本記事で学んだこととしては、apply
メソッドとlambda式の復習、そしてastype
メソッドによるデータの型変換可と思います。
本記事で紹介した方法を元にデータサイエンティストとしての知見を深めていただければと思います。
なお、データサイエンティストに必要な知識は、TechAcademyのデータサイエンスコースでの学習がおすすめです。