Python PR

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

記事内に商品プロモーションを含む場合があります

この記事では、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 --- 十進固定及び浮動小数点数の算術演算

重みを付けた平均値

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