0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pythonで平均値, 中央値, 分散, 標準偏差を求める

Last updated at Posted at 2019-04-28

平均値, 中央値, 分散, 標準偏差

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()
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?