1変量順序統計量(四分位数、中央値)
順序統計量に関わる計算(四分位数、中央値など)を行うプログラムOneVarOrd.pyを、まず、クラス型の宣言を用いない形で以下のように作成した。
なお、統計についての解説は、岡本安晴「データ分析のための統計学入門」を参照されたい。
============= OneVarOrd.py ===================
data = [8, 5, 7, 6]
def CalcQ( p, n, data
):
v = 0.0
pos = 0.5 + p * n
if pos <= 1:
v =
data[0]
elif pos >= n:
v =
data[n - 1]
else:
j =
int(pos)
w1 =
pos - j
w2 =
1.0 - w1
v =
w2 * data[j - 1] + w1 * data[j]
return v
n = len(data)
for i in range(0, n -
1):
k = i
for j in range(i + 1, n):
if
(data[j] < data[k]):
k = j
if k > i:
data[k], data[i] = data[i], data[k]
print(data)
min = data[0]
max = data[n - 1]
Q1 = CalcQ(0.25, n,
data)
Med = CalcQ(0.5, n,
data)
Q3 = CalcQ(0.75, n,
data)
print("\nMin =
%f"%min)
print("Q1 = %f"%Q1)
print("Med =
%f"%Med)
print("Q3 = %f"%Q3)
print("Max =
%f"%max)
=========================================
データは、リストdataに設定されている。四分位数などは、順序統計量をに内分する点の値を重み付き平均値で求めている(岡本安晴(2009)「データ分析のための統計学入門」おうふう、p.53)。プログラムの実行結果は図1のようになる。
図1
上のプログラムOneVarOrd.pyにおいて、順序統計量の計算部分をクラス型CalcOrdStatとしてまとめたものが次のプログラムOneVarOrdC.pyである。
================= OneVarOrdC.py =======================
class CalcOrdStat:
def __init__(self, data):
self.data = data
def CalcQ( self, p ):
v =
0.0
pos = 0.5 + p * self.n
if
pos <= 1:
v = self.data[0]
elif
pos >= self.n:
v = self.data[self.n - 1]
else:
j = int(pos)
w1 = pos - j
w2 = 1.0 - w1
v = w2 * self.data[j - 1] + w1 * self.data[j]
return v
def calc(self):
self.n = len(self.data)
for
i in range(0, self.n - 1):
k = i
for j in range(i + 1, self.n):
if (self.data[j] < self.data[k]):
k = j
if k > i:
self.data[k], self.data[i] = self.data[i], self.data[k]
print(self.data)
min
= self.data[0]
max
= self.data[self.n - 1]
Q1 =
self.CalcQ(0.25)
Med
= self.CalcQ(0.5)
Q3 =
self.CalcQ(0.75)
return min, Q1, Med, Q3, max
data = [8, 5, 7, 6]
os =
CalcOrdStat(data)
min, Q1, Med, Q3, max
= os.calc()
print("\nMin =
%f"%min)
print("Q1 = %f"%Q1)
print("Med =
%f"%Med)
print("Q3 = %f"%Q3)
print("Max =
%f"%max)
=========================================
実行結果は、図2に示されるように、OneVarOrg.pyの場合(図1)と同じである。
図2
上の2つのプログラムは圧縮ファイルOneVarOrdPrg.zipにまとめた。