【Pythonデータ分析】カテゴリ毎の存在比率を計算する

こんばんは。本日は、データ分析Tipsということで、最近知った(遅ればせながら・・)便利コマンドをご紹介したいと思います。

value_counts()のnormalizeオプションを利用する

下のデータは公開されているタイタニックの乗船者データになりますが、例えば下のPclass(客室等級)毎の乗船者数の割合を算出したいとします。

タイタニックの乗船者データ

実はこれ、value_counts()のnormalizeオプションを指定することで一発で算出できるんですね・・・便利だのう・・

df["Pclass"].value_counts(normalize=True)

実行結果はこちら

1    0.242424
2    0.206510
3    0.551066
Name: Pclass, dtype: float64

ちなみにnormalizeオプションを指定しない通常の場合だと絶対数が返されますね。

df["Pclass"].value_counts(normalize=True)

#実行結果
1    216
2    184
3    491
Name: Pclass, dtype: int64

連続変数をbin化してbinごとの存在比率を計算する

ついでにvalue_counts()に他に隠れた(というか単に自分が知らない)オプションがないか調べてみました。

Pandas公式ドキュメントより

sortとascendingは知っていたけど・・・なるほど、dropnaはvalue_countsでも使えるのか。メモメモ。

・・・・!bins!?むむ!これは、つまり連続値についてもvalue_counts()ができて、しかもnormalizeオプションを指定することで存在比率も出せるということなのか!知らなかった・・!

早速試してみよう。

先ほどのタイタニックデータの年齢項目Ageでやってみた。

*pd.cutの仕様にしたがって、bin化の最小セグメントはデータの最小値の0.1%小さい値から始まっている。そして最小年齢が0.42と少数なのは何故だ?という疑問は置いておく・・・

おお!できた!

df["Age"].value_counts(normalize=True, bins=10, sort=False)

## 実行結果
(0.339, 8.378]      0.060606
(8.378, 16.336]     0.051627
(16.336, 24.294]    0.198653
(24.294, 32.252]    0.189675
(32.252, 40.21]     0.132435
(40.21, 48.168]     0.078563
(48.168, 56.126]    0.050505
(56.126, 64.084]    0.026936
(64.084, 72.042]    0.010101
(72.042, 80.0]      0.002245
Name: Age, dtype: float64

normalizeしないと件数が返される。

df["Age"].value_counts(bins=10, sort=False)

## 実行結果
(0.339, 8.378]       54
(8.378, 16.336]      46
(16.336, 24.294]    177
(24.294, 32.252]    169
(32.252, 40.21]     118
(40.21, 48.168]      70
(48.168, 56.126]     45
(56.126, 64.084]     24
(64.084, 72.042]      9
(72.042, 80.0]        2

以上、value_countsのnormalizeオプションを使うことで簡単にカテゴリの存在比率が求められるというお話でした!

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。