0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

平均値を計算するときに内包表記を利用する

Posted at

データクラスの一覧から平均値を計算する

データクラスの一覧から値の平均値を計算する方法を調べました。
出来る限り短い書き方は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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?