平均値, 中央値, 分散, 標準偏差
pythonを用いて, 上記4つの値を計算します. ライブラリを用いると一瞬で計算できるようですが,今回は一からコードを書きます.
環境
macOS version10.14.2
python3.6.3
平均
平均値は データの合計値 / データの数 を計算します.
def average_cal(data):
# 合計を求める
data_sum = sum(data)
# データ数を求める
num = len(data)
# 合計値 / データ数
average = float(data_sum / num)
return average
中央値
まずデータを昇順もしくは降順に並べます.
データ数が偶数の場合は, 真ん中にある2つの値の平均値が中央値になります.
データ数が奇数の場合は, 真ん中にある1つの値が中央値になります.
def median_cal(data):
num = len(data)
# データを昇順ソート
data.sort()
# データ数が偶数の場合
if num % 2 == 0:
median1 = int(num / 2)
median2 = int(num / 2 - 1)
median = (data[median1] + data[median2]) / 2.0
return median
# データ数が奇数の場合
else:
median = int((num + 1) / 2 - 1)
median = data[median]
return median
分散
分散は, 偏差(それぞれのデータと平均値との差)を2乗した値の平均値となります.
まずは偏差を求める必要があります.
def deviation_cal(data):
# 平均値を求める
average = average_cal(data)
deviation = []
# 各データと平均値との差を求める
for i in data:
deviation.append(i - average)
return deviation
偏差を求めたら, 分散を計算します.
def variance_cal(data):
# 偏差を求める
deviation = deviation_cal(data)
# 偏差の2乗を求める
standard = []
for i in deviation:
standard.append(i**2)
# 偏差の2乗和
sum_standard = sum(standard)
# 偏差の2乗和の平均
variance = sum_standard/len(data)
return variance
標準偏差
標準偏差は分散の正の平方根です. 求めた分散を利用して計算してください.
variance**0.5
まとめ
今回のコードをまとめると以下のようになります.
コードでは複数のデータを適当に用意して, 計算できるようにしています.
# -*- coding: utf-8 -*-
# 平均を求める
def average_cal(data):
data_sum = sum(data)
num = len(data)
average = float(data_sum / num)
return average
# 中央値を求める
def median_cal(data):
num = len(data)
# データを昇順ソート
data.sort()
# データ数が偶数の場合
if num % 2 == 0:
median1 = int(num / 2)
median2 = int(num / 2 - 1)
median = (data[median1] + data[median2]) / 2.0
return median
# データ数が奇数の場合
else:
median = int((num + 1) / 2 - 1)
median = data[median]
return median
# 偏差を求める
def deviation_cal(data):
average = average_cal(data)
deviation = []
for i in data:
deviation.append(i - average)
return deviation
# 分散を求める
def variance_cal(data):
deviation = deviation_cal(data)
#差の2乗を求める
standard = []
for i in deviation:
standard.append(i**2)
#分散を求める
sum_standard = sum(standard)
variance = sum_standard/len(data)
return variance
if __name__ == '__main__':
data = [[0.70621, 0.683121, 0.713674],
[0.684315, 0.712082, 0.706509],
[0.696557, 0.700537, 0.711485],
[0.698846, 0.681827, 0.700836],
[0.711286, 0.692377, 0.713376],
[0.726115, 0.722233, 0.704319]]
for i in range(len(data)):
print("データ{0}".format(i+1))
#平均値
average = average_cal(data[i])
print("平均:{0}'".format(average))
#中央値
median = median_cal(data[i])
print("中央値:{0}".format(median))
#分散
variance = variance_cal(data[i])
print("分散:{0}".format(variance))
#標準偏差
std = variance**0.5
print("標準偏差:{0}".format(std))
print()