ぺーぱーの日々

上機嫌でいること、夢中でいることを目標に、今日も色んなことに手を出します。

MENU

ビン分割って言葉は難しそうだけど、やっていることは結構身近で簡単だった

kaggleで機械学習をしている中で、「ビン分割」という単語を見かけたので、知識のインプットと実装をしてみた。

ビン分割って、たぶんこういうもの

インプットをする前に、「ビン分割」という字面からだけで、こんなものだろうと予想。

  • ビン分割とは、なにかを分けること
  • 根拠は、ヒストグラムの描画をするときにの引数bins(階級みたいなのを言うのかな)
  • 要は、分割するってことだから、分割することに意味がある
  • 1~100を5分割した(1~20,21~40,41~60,61~80,81~100)これもビン分割?

ビン分割ってなに?

数値データを適当な境界で区切りカテゴリデータ化すること

ビン分割の具体例

  • 「年齢」を「年代」に分ける

27歳→20代

60歳→60代

90歳→90代

みたいな感じに。

 

平均48.4歳、標準偏差10、サンプルサイズ1000のヒストグラム
グラフからわかること
  • 40~60の間にデータが集中している
  • 20,80代はほとんどいない

実際の日本の人口ピラミッドはこんな感じ

なぜビン分割をするのか?

処理しやすいようにまとめるため。(コンピューター用)

処理した結果を分かりやすくするため。(人間用)

(データはあればあるだけ良いわけではない。)

ビン分割の実装

使用データ

平均48.4歳、標準偏差10、サンプルサイズ1000の正規分布に従う乱数を用意。

やりたいこと
  • 生成された年齢を年代に分ける。(ビン分割)
  • ちゃんと分割されたかを確認
データの用意

age = np.random.normal(48.4, 10, size=1000)

乱数を生成

ヒストグラム
生成された年齢を年代に分ける。(ビン分割)

age_category_list = [0,10,20,30,40,50,60,70,80,90,100]
age_category = pd.cut(age, bins=age_category_list)

年齢を年代別に分割
ちゃんと分割されたかを確認

ちゃんと分割されてる。

age_category列の見方としては、

(X, Y] = X歳以上、Y歳未満

まとめ

ビン分割は、当初の予想通り、ヒストグラムの階級みたいなものであることがわかった。

ビン分割をする目的は、処理しやすいため、わかりやすくするため、とコンピューター・人間両方にとってメリットの前処理であることがわかった。

参考サイト

https://starpentagon.net/analytics/pandas_binning/

【初心者】特徴量エンジニアリング(データのビニング)について調べてみた - Qiita

numpyのpercentile関数の仕様を確認する | 分析ノート