こんばんは。本日は、データ分析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()に他に隠れた(というか単に自分が知らない)オプションがないか調べてみました。
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オプションを使うことで簡単にカテゴリの存在比率が求められるというお話でした!
コメントを残す