K_DM Book
用語集
対象者 高校生
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

数値データのビニング(高校生向け)

入門高校生

01.3.1 高校生向け

数値データのビニング(高校生向け)

最終更新 2026-11-01 読了時間 2 分
まとめ
ビニングは、連続した数値をいくつかの区間(ビン)に区切って、「どの区間に入るか」というラベルに置き換える操作で、度数分布表の階級を作るのと同じ発想です。区切り方は 2 通りあり、等幅ビンは区間の長さをそろえ、等頻度ビンは各区間に入る件数をそろえます。ヒストグラムに境界線を引くと、等幅は境界が等間隔に並び、等頻度はデータが密なところで境界が詰まり、まばらなところで広がるので、同じデータでも見える絵がまったく変わります。片側に長い裾があるデータでは等幅ビンの端がほぼ空になるので、等頻度ビンのほうが安定します。

こんな場面を想像してみよう #

クラス 10 人の「1 日のスマホ使用時間」を調べたら、次のとおりでした(分、小さい順)。

30455060708095120180600

これを「レベル 1〜5」の 5 段階に分けてポスターにしたい。どこで区切りますか。

案 A:幅をそろえる。 最小 30 から最大 600 までを 5 等分すると、1 区間の幅は 114 分。区切りは 30, 144, 258, 372, 486, 600 です。すると……レベル 1 に 8 人、レベル 2 に 1 人、レベル 3 と 4 は 0 人、レベル 5 に 1 人。ほぼ全員が同じレベルで、ポスターとしては意味がありません。

案 B:人数をそろえる。 10 人を 2 人ずつ 5 組に分けると、区切りは 30, 50, 70, 95, 180, 600。区切りの幅は 20, 20, 25, 85, 420 とばらばらですが、どのレベルにも 2 人ずついます。

案 A が等幅ビン、案 B が等頻度ビンです。同じデータなのに、区切りの絵がまったくちがうことを図で確かめましょう。

右に長い裾を持つ所得のヒストグラムに、等頻度で 5 分割したときの境界線が 4 本引かれている。山の高い左側では境界線が詰まって並び、裾の右側では間隔が大きく広がっている

上の図は所得のヒストグラムです。山は左に寄り、右へ長い裾が伸びています。オレンジの点線が等頻度(5 分割)の境界で、山の高いところでは線が密に、裾では線がまばらになっています。各区間の「面積(人数)」がそろうように線を置いた結果です。

ビンごとの件数を比べた棒グラフ。等頻度ビンは 5 本の棒がほぼ同じ高さに並び、等幅ビンは最初の 1〜2 本に件数が集中して残りの棒はほとんど見えない

こちらは区間ごとの件数です。等頻度(緑)は 5 本の棒がほぼ同じ高さ。等幅(赤)は最初の 1〜2 区間に件数が集中し、裾側の区間はほとんど空です。

仕組み:境界線をどこに置くか #

まず、データを小さい順に並べ、最小値と最大値を確認します。ヒストグラムの横軸の両端です。次に区切り方を選びます。等幅ビンなら範囲を \(k\) 等分し、境界は \(x_{\min} + \dfrac{x_{\max} - x_{\min}}{k} \times j\)(\(j = 1, \dots, k-1\))で、ヒストグラム上に等間隔の縦線が入ります。等頻度ビンなら並べた順位で \(k\) 等分し、境界は「下から \(100j/k\) % の位置の値」、つまり四分位数・五分位数の仲間で、縦線はデータの密なところに寄ります。最後に、各値を「何番目の区間か」に置き換えます。600 分も 180 分も、等頻度なら同じ「レベル 5」になり、もとの差は消えますが極端な値の影響も消えます。

10 人の使用時間で、2 通りの境界を計算してみます。

1
2
3
4
5
6
mins = [30, 45, 50, 60, 70, 80, 95, 120, 180, 600]        # 使用時間(分)、昇順
width = (max(mins) - min(mins)) / 5                        # 等幅: 1 区間の幅 = 114
edges_w = [min(mins) + width * k for k in range(6)]
edges_f = [mins[2 * k] for k in range(5)] + [mins[-1]]     # 等頻度: 2 人ずつ
print("width:", edges_w)   # [30, 144, 258, 372, 486, 600]
print("freq :", edges_f)   # [30, 50, 70, 95, 180, 600]

動かして見てみよう #

下の図で「再生」を押すと、説明した手順が 1 つずつ進みます。手順ごとの説明は図の下に出ます。

気をつけたいこと #

最初の注意は、等幅ビンは外れ値に弱いことです。1 人の 600 分が最大値になるだけで、ほかの区間がほぼ空になるので、等幅を使うなら極端な値を先に上限で切る(クリップする)のが定石です。二つ目は、区切り(30, 50, 70, 95, 180 のような境界)を一度決めたら使い回すことです。去年のデータで決めた境界を今年のデータにも当てます。毎回決め直すと「レベル 3」の意味が変わってしまいます。三つ目は、区間の中の差が消えることです。95 分と 179 分が同じレベルになるので、細かい差が大事な分析ではビニングしないほうがよい場合もあります。

やってみよう #

最初の課題は、自分のクラスの通学時間(または睡眠時間)を集めて、等幅で 4 区間、等頻度で 4 区間に区切り、2 つの度数分布表を作って見比べることです。二つ目は、身の回りの「数値を段階に分けている例」を探すことです(例:体力テストの評価 A〜E、税率の区分、天気予報の降水確率の表現)。それぞれが等幅か、等頻度か、それ以外の 3 つのどれに当たるか考えてみましょう。三つ目は、全員がほぼ同じ値(たとえば身長 165〜170 cm)のデータを等頻度で 5 区間に分けると何が起きるか予想することです(ヒント:同じ値が境界にまたがると区間が作れなくなる)。

つぎに読む #

pandas.cut(等幅)と pandas.qcut(等頻度)の使い方、実務でのヒントは 標準版の数値データのビニング で扱っています。「区切る」のではなく「ものさしをそろえる」前処理は MinMaxScaler(高校生向け) と StandardScaler(高校生向け) へ進んでください。度数分布表の作り方から復習したいときは 数値データのビニング(中学生向け) が入口になります。