Python

【Python】データの平均値を求める色々な方法を紹介

この記事では、Pythonで平均値を求める方法を解説します。

sum関数とlen関数を使って計算によって求めたり、statisticsモジュールやnumpyを使うことで平均値を求めることができます。

それでは、平均値を求める方法を見ていきましょう!

計算で平均値を求める

平均は 合計値 / 要素数 で求めることができます。Pythonでは、sum関数で求めたイテラブルの合計値をlen関数で取得した要素数で割ることで簡単に求めることができます。

data = [10, 20, 30, 40, 50]
average = sum(data) / len(data)

print(average)

実行結果

30.0

sum関数を使わないと以下のように実装できます。

data = [10, 20, 30, 40, 50]
total = 0

for val in data:
    total += val

average = total / len(data)
print(average)

実行結果

30.0

他の言語でも同じように実装することができます。

statisticsモジュールで平均値を取得する

標準ライブラリであるstatisticsモジュールのmeanメソッドを使うことで平均を取得できます。

statistics.mean関数は、引数に指定したシーケンス、またはイテラブルの算術平均を返します。また、結果が整数になった場合はint型で値を返します。

import statistics

data = [10, 20, 30, 40, 50]
average = statistics.mean(data)

print(average)

実行結果

30

結果がfloat型でいいならPython 3.8で追加されたstatistics.fmean関数を使うことでより高速に算術平均を求めることができます。

import statistics

data = [10, 20, 30, 40, 50]
average = statistics.fmean(data)

print(average)

実行結果

30.0

numpyを使って平均値を取得する

numpyが使える場合はmean関数を使ったり、numpy.ndarrayクラスのmeanメソッドを使うことで平均値を取得することができる。

import numpy as np

# np.mean関数を使った例

data = [10, 20, 30, 40, 50]

average = np.mean(data)
print(average)


# numpy.ndarray.meanメソッドを使った例

data = np.array([10, 20, 30, 40, 50])
print(data.mean())

実行結果

30.0
30.0

辞書の平均値

辞書にデータが格納されている場合は、valuesメソッドでvalueのみを取り出し平均を求めます。

data = {'a': 10, 'b': 20, 
        'c': 30, 'd': 40, 'e': 50}
average = sum(data.values()) / len(data)

print(average)

実行結果

30.0

浮動小数点数の平均値

float型を使って平均を求めると値がブレてしまうことがある。

data = [0.01, 0.02, 0.03, 0.04, 0.05]
average = sum(data) / len(data)

print(average)

実行結果

0.030000000000000006

浮動小数点数の値のブレが気になる場合は、Decimal型を使って平均値を求めます。

from decimal import Decimal as D

data = [D('0.01'), D('0.02'), D('0.03'), D('0.04'), D('0.05')]
average = sum(data) / len(data)

print(average)

実行結果

0.03

外部リンクdecimal --- 十進固定及び浮動小数点数の算術演算

重みを付けた平均値

numpyaverage関数を使うことで重みを付けて平均値を求めることができる。

import numpy as np

data = [10, 20, 30, 40, 50]

# 重み
weights = (0, 0.1, 0.9, 0, 0)
print(np.average(data, weights=weights))

実行結果

29.0

重みを付けた平均値は以下のように求められる。

avg = sum(a * weights) / sum(weights)

外部リンクnumpy.average — NumPy v1.22 Manual