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

#平均値, 中央値, 分散, 標準偏差
pythonを用いて, 上記4つの値を計算します. ライブラリを用いると一瞬で計算できるようですが,今回は一からコードを書きます. 

#環境
macOS version10.14.2
python3.6.3

#平均
平均値は データの合計値 / データの数 を計算します. 

```python
def average_cal(data):
    # 合計を求める
    data_sum = sum(data)
    # データ数を求める 
    num = len(data)
    # 合計値 / データ数
    average = float(data_sum / num)
    return average
```

#中央値
まずデータを昇順もしくは降順に並べます. 
データ数が偶数の場合は, 真ん中にある2つの値の平均値が中央値になります. 
データ数が奇数の場合は, 真ん中にある1つの値が中央値になります. 

```python
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乗した値の平均値となります. 
まずは偏差を求める必要があります. 

```python
def deviation_cal(data):
    # 平均値を求める
    average = average_cal(data)
    deviation = []
    # 各データと平均値との差を求める
    for i in data:
        deviation.append(i - average)
    return deviation
```

偏差を求めたら, 分散を計算します. 

```python
def variance_cal(data):
    # 偏差を求める
    deviation = deviation_cal(data)
    # 偏差の２乗を求める
    standard = []
    for i in deviation:
        standard.append(i**2)
    # 偏差の２乗和
    sum_standard = sum(standard)
    # 偏差の2乗和の平均
    variance = sum_standard/len(data)
    return variance
```

#標準偏差
標準偏差は分散の正の平方根です. 求めた分散を利用して計算してください. 

```python
variance**0.5
```

#まとめ
今回のコードをまとめると以下のようになります. 
コードでは複数のデータを適当に用意して, 計算できるようにしています. 

```python
# -*- 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)
    #差の２乗を求める
    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()
```