データクラスの一覧から平均値を計算する
データクラスの一覧から値の平均値を計算する方法を調べました。
出来る限り短い書き方は2つの方法があると思います。
- 内包表記 + sum & len
- 内包表記 + numpy.mean
内包表記を利用すると1行で書けるので短くなります。
動作確認サンプル
以下のサンプルで動作確認しました。
import numpy as np
from dataclasses import dataclass
@dataclass
class MyData:
id: str = ''
value: int = None
def get_dummy_list() -> list[MyData]:
"""
データデータの一覧を取得する。
:return: ダミーデータ一覧
"""
rows: list[MyData] = list()
rows.append(MyData('id1', 1))
rows.append(MyData('id2', -5))
rows.append(MyData('id3', 3))
rows.append(MyData('id4', 0))
rows.append(MyData('id5', -2))
return rows
def main():
# ダミーデータを取得する
dummy_list = get_dummy_list()
# (方法1)
# 内包表記とsumを利用して合計値を計算する
sum_value = sum([data.value for data in dummy_list])
# 個数を計算する
sum_count = len(dummy_list)
# 平均値を計算する
mean_value = sum_value / sum_count
print('平均', mean_value)
# (方法2)
# 同じことを numpy.mean で実現できる
mean = np.mean([data.value for data in dummy_list])
print('平均', mean)
# 番外編
# 0を抜いて計算する
mean = np.mean([data.value for data in dummy_list if data.value != 0])
print('0を抜いた平均', mean)
if __name__ == '__main__':
main()
実行結果
平均 -0.6
平均 -0.6
0を抜いた平均 -0.75