【Python】リストから最大値・最小値・値の平均値を取り出す

Hello World!!!

この記事では、Pythonを使ってリストから最大値・最小値・値の平均値を取り出すプログラムについて書いていきます。

このプログラムは、SwitchBot温湿度計で記録した室温データを整理分析するプログラムの第4段階目です。この記事のプログラムにより、各日付ごとの最大値・最小値・平均値を取り出します。最終的には、計測した温度データをから日別の最高・最低気温を抽出をする予定です。抽出したデータと気象庁データの外気温との比較する予定です。

第1、第2段階、そして第3段階のプログラムは次の記事を参照ください。

STEP
SwitchBot温湿度計エクスポートデータの読み込み→リスト化
STEP
STEP1で作成したリストの計測日時データから日付のみを抽出
STEP
STEP3で作成したデータから日付ごとの気温データリストの作成
この記事の内容
  • Pythonでリストから最大値・最小値・平均値を抽出するプログラムの作成&解説
目次

作成するプログラム

(作成するプログラム)日付ごとの気温データのリスト作成

この記事のプログラムで、各日付ごとに気温データのリストを作成します。

これまでの段階では、SwithBot温湿度計で計測したデータから次のリストを作成しました。

SwitchBot温湿度計計測データのリスト(第1段階で作成したリスト)
  1. 計測した全ての計測日時のリスト
    detect_timeandday_list = [‘2020-02-24 12:50:22’ , ‘2020-02-24 13:00:32’… , ‘2020-02-25 18:23:45’, …]
  2. 計測した全ての気温データのリスト
    temperature_list = [‘20.7’, ‘19.0’, …, ‘21.1’…]

これらのリストの順番はcsvファイルの順番を保持しています。そのため、上の①、②リストの1番めのデータから、2020-02-24 12:50:22のときの計測気温は20.7℃となります。

日付のリスト(第2段階で作成したリスト)
  1. 計測した日付データのリスト
    dete_list = [‘2020-02-24’, ‘2020-02-25’, ‘2020-02-26’, …]
日付ごとの気温データのリスト(第3段階で作成したリスト)
  1. 計測した日付データのリスト
    [日付, その日の気温データ]の二次元配列を作成しました。
    date_temp_list = [[日付1, 日付1の気温データ], [日付2, 日付2の気温データ]…]
この記事で作成するプログラムで得たい結果

日付別の最高気温、最低気温、平均気温を二次元配列として取り出します。

set_list =
[[日付1, 日付1の最高気温, 日付1の最低気温, 日付1の平均気温], [日付2, 日付2の最高気温, 日付2の最低気温, 日付2の平均気温]….]

SwitchBot温湿度エクスポートデータ

SwitchBot温湿度計からエクスポートされるデータは次のようなcsvデータとなります。下の画像はその一部を抜粋したものでです。設置期間が長くなるとデータ数も膨大となります。僕の計測データ桁数は数万行となっています。

SwitchBot温湿度計エクスポートデータ

プログラム動作概要

STEP
Pythonで取り出した値を保存するリスト、計算に使用するからのリストを作成
  1. 気温データのみを保存するためのリスト:temp_list = []
  2. 計算結果を保存するリスト:result_list = []
  3. 最終的な結果を保存するためのリスト:set_list = []
STEP
Forループ① 各日付ごとのリストを取り出す。

date_temp_list = [[日付1, 日付1の気温データ], [日付2, 日付2の気温データ]…]から、date_listとしてリストを取り出します。次のようなイメージになります。

date_lsit = [日付1, 日付1の気温データ], date_lsit = [日付2, 日付2の気温データ]…

STEP
Forループ②取り出したdate_listから日付をresult_listに追加

日付は計算には使用しませんが、結果にはほしい値です。日付データのみを始めに取り出してresult_listに追加します。

STEP
Forループ②気温データのみのリストtemp_listを作成する。

Forループ①で取り出したdate_list別に気温データのみのリストtemp_listを作成する。

STEP
temp_listから得たい値を抽出、算出する。
  1. 最大値を取り出す。
  2. 最小値を取り出す。
  3. 平均値を算出する。
STEP
算出した値をresult_listへ追加する。
STEP
一つの日付に対して得たい値をリスト化したresult_listをset_listへ追加する。
STEP
抽出・算出のために使用したリストを空にする。

temp_list, result_listを空にする。

STEP
For ループ①, ②を繰り返す。
STEP
set_listを書き出す。

使用した関数など

max() : 最大値を取り出す

max()はPythonの組み込み関数の一つです。

関数: max()

max(リスト)

引数に指定したリストから最大値を取り出します。

min() : リストから最小値を取り出す

min()もmax()同様にPythonの組み込み関数の一つです。

関数: min()

max(リスト)

引数に指定したリストから最小値を取り出します。

sum() : リストの合計値を最大値を取り出す

sum()はPythonの組み込み関数となります。この記事のプログラムでは、平均値を算出する際に使用しました。

関数: sum()

sum(リスト)

引数に指定したリストの値の合計を算出します。

フロー図(make_datetemp_list)

フロー図 make_datetemp_list

コード

#作成日: 2021/08/28
#プログラム概要
#switchbotよりエクスポートしたデータの整理
#各日付ごとの気温のリストから、最高気温・最低気温・平均気温を取り出す。
#出力結果は、[[日付1, 最高気温, 最低気温, 平均気温], [日付2, 最高気温, 最低気温, 平均気温], ...]ように出力する。


def temp_caluculation(target_list):
    # 結果を保存する空のリストを用意する。
    temp_list = []      #気温を保存するリスト
    result_list = []    #計算結果を保存するリスト
    set_list= []        #最終的な2次元配列[[日付, 最高気温, 最低気温, 平均気温], []...]を返すためのリスト

    for date_list in target_list:                   #1つ目のforループでは二次元配列内のリストをそれぞれ取り出す。
        #2つ目のforループで取り出したリストから、計算結果を保存するresult_listと計算するための値を作るtemp_listを作る。
        for i in range(0, len(date_list)):          #1つ目のループで取り出したリストの値の数だけループする。
            if i == 0:                              #iが0のとき、日付の値のとき
                result_list.append(date_list[0])    #result_listに値を追加する。
            else:                                   #iが0出ないとき。(計測気温が保存されている。)
                temp_list.append(float(date_list[i]))   #temp_listに値を保存する。

        result_list.append(max(temp_list))          #temp_listの最大値をresult_tempに格納

        result_list.append(min(temp_list))          #temp_listの最小値をresult_tempに格納

        average_temp = round(sum(temp_list) / len(temp_list), 1)     #temp_listの平均値を計算
        result_list.append(average_temp)                             #temp_listの平均値をresult_tempに格納

        set_list.append(result_list)    #計算結果を保存したresult_listをset_listへ保存する。
        temp_list = []                  #temp_listの値を空にする。
        result_list = []                #result_listの値を空にする。

    return set_list                     #set_listを結果として返す。

if __name__ == '__main__':
    sample_list = [['2020-02-24', '16.5', '20.7', '21.3'], ['2020-02-25', '19.9', '19.4', '19'],['2020-02-26', '21.5', '21.1', '20.6']]
    result = temp_caluculation(sample_list)
    print(result)

#出力結果
#[['2020-02-24', 21.3, 16.5, 19.5], ['2020-02-25', 19.9, 19.0, 19.4], ['2020-02-26', 21.5, 20.6, 21.1]]

この記事のコードのポイントは、リストを作成して次のループに入る前にリストを一度空にすることにあると思います。

まとめ

今回は、Pythonでリストから最大値・最小値・平均値を取り出すプログラムについて書きました。

かなりデータが整理されてきました。次回は、matplotlibを使って得たデータを可視化していく予定です。

これまでPythonでリストをいじってデータを整理してきましたが、SQLの初心者向けの本を読み、おそらくSQLを使えばもっとシンプルに同じことができるのでは?と感じています。この記事で元データしている何万行もあるものはSQLで処理したほうが適しているように思います。

SQLでの同様のデータ整理についてもこれから考えていこうと思います。

最後まで読んでいただきありがとうございます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次
閉じる