度数分布・ヒストグラム

概要

手順

例えば集団に含まれる値が以下の場合を考える。

  [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
array[10] 1.5 1.2 2.3 2.4 2.9 3.2 4.8 1.7 4.7 2.6

階級を定める

 度数分布を取るためには、まず最小の階級の下限点 l_min と級間の幅 cls_width を定める必要がある。このとき、arrayの値の取り扱いに伴って、 l_min および cls_width の取り方は次のように異なる。

間隔尺度・比例尺度に対するヒストグラムを求める場合
l_min は array の最小値 min(array) 以下を取る必要がある。配列array に対して min(array) = 1.2 であり、ここでは、l_min = 1.0, cls_width = 1.0 とする。
配列のそれぞれの値に対する度数分布を求める場合
l_min は arrayの最小値 min(array) であり、 cls_width は、arrayの値の最小桁の単位となる。この場合、最小桁は小数点以下第1位であるため、 cls_width = 0.1 となる。

階級に従って値を変換する

 l_min と cls_width を決めたなら、array のそれぞれの値を、階級の下限点 cls_l に変換する。 この場合、cls_l に当たる値は、cls_l = 1.0, 2.0, 3.0, 4.0, ... でありそれぞれの値は次の式に従って変換される。

tmp = (array[m] - l_min) /  cls_width   [ただし tmp は整数]
cls_l[m] = l_min + cls_width * tmp    (1)

  [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
l[10] 1.0 1.0 2.0 2.0 2.0 3.0 4.0 1.0 4.0 2.0

それぞれの階級に対する度数を求める

度数のための配列の確保

このとき各階級値の度数を格納するための配列 cnt が必要になる。この配列のサイズを効率的に決めるためには、最大の階級の下限点 l_max を知っておく必要がある。この場合、 arrayの最大値 max(array)に対して式(1)を適用することによって l_max = 4.0 であることがわかり cnt の要素数 n は次の数だけ必要になる。

n = (l_max - l_min)/cls_with + 1    (2)

n を求めて、cnt[n]を動的に確保する。

  [0] [1] [2] [3]
cnt[4]        
対象 [1.0, 2.0) [2.0, 3.0) [3.0, 4.0) [4.0, 5.0)

階級と度数の配列の要素番号との対応付け

ここで、cnt[0]には、配列 l における 1.0 の度数を格納する。処理の簡単のため、l[m] と n の対応を取るため、両者の関係を以下のように明らかにしておく。

n = (l[m] - l_min) / cls_with    (3)

式(3)に従って配列 l を以下のように n の値として更新する。

  [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
l[10] 0 0 1 1 1 2 3 0 3 1

度数を求める

l[10] に対する度数分布は、cnt[l[n]]++ で求めることができ、その結果は以下のようになる。

  [0] [1] [2] [3]
cnt[4] 3 4 1 2
対象 [1.0, 2.0) [2.0, 3.0) [3.0, 4.0) [4.0, 5.0)

n と cls_l の関係は

cls_l[n] = n * cls_width + l_min    (4)

で求めることができるため、cnt のそれぞれの要素が、どの cls_l を表しているかが確認できる。

関連項目

更新履歴

2008/07/21: 作成


Back / Studying / Top