この記事では、Pythonで平均値を求める方法を解説します。
sum
関数とlen
関数を使って計算によって求めたり、statistics
モジュールやnumpy
を使うことで平均値を求めることができます。
それでは、平均値を求める方法を見ていきましょう!
計算で平均値を求める
平均は 合計値 / 要素数
で求めることができます。Pythonでは、sum
関数で求めたイテラブルの合計値をlen
関数で取得した要素数で割ることで簡単に求めることができます。
data = [10, 20, 30, 40, 50]
average = sum(data) / len(data)
print(average)
実行結果
30.0
除算を行ったので戻り値がfloat
型になっていることに注意してください。
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 --- 十進固定及び浮動小数点数の算術演算
重みを付けた平均値
numpy
のaverage
関数を使うことで重みを付けて平均値を求めることができる。
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