kaggleで機械学習をしている中で、「ビン分割」という単語を見かけたので、知識のインプットと実装をしてみた。
ビン分割って、たぶんこういうもの
インプットをする前に、「ビン分割」という字面からだけで、こんなものだろうと予想。
- ビン分割とは、なにかを分けること
- 根拠は、ヒストグラムの描画をするときにの引数bins(階級みたいなのを言うのかな)
- 要は、分割するってことだから、分割することに意味がある
- 1~100を5分割した(1~20,21~40,41~60,61~80,81~100)これもビン分割?
ビン分割ってなに?
数値データを適当な境界で区切りカテゴリデータ化すること
ビン分割の具体例
- 「年齢」を「年代」に分ける
27歳→20代
60歳→60代
90歳→90代
みたいな感じに。
グラフからわかること
- 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/