Hello World!!!
この記事では、Pythonを使ってリストから最大値・最小値・値の平均値を取り出すプログラムについて書いていきます。
このプログラムは、SwitchBot温湿度計で記録した室温データを整理分析するプログラムの第4段階目です。この記事のプログラムにより、各日付ごとの最大値・最小値・平均値を取り出します。最終的には、計測した温度データをから日別の最高・最低気温を抽出をする予定です。抽出したデータと気象庁データの外気温との比較する予定です。
第1、第2段階、そして第3段階のプログラムは次の記事を参照ください。



- Pythonでリストから最大値・最小値・平均値を抽出するプログラムの作成&解説
作成するプログラム
(作成するプログラム)日付ごとの気温データのリスト作成
この記事のプログラムで、各日付ごとに気温データのリストを作成します。
これまでの段階では、SwithBot温湿度計で計測したデータから次のリストを作成しました。
- 計測した全ての計測日時のリスト
detect_timeandday_list = [‘2020-02-24 12:50:22’ , ‘2020-02-24 13:00:32’… , ‘2020-02-25 18:23:45’, …] - 計測した全ての気温データのリスト
temperature_list = [‘20.7’, ‘19.0’, …, ‘21.1’…]
これらのリストの順番はcsvファイルの順番を保持しています。そのため、上の①、②リストの1番めのデータから、2020-02-24 12:50:22のときの計測気温は20.7℃となります。
- 計測した日付データのリスト
dete_list = [‘2020-02-24’, ‘2020-02-25’, ‘2020-02-26’, …]
- 計測した日付データのリスト
[日付, その日の気温データ]の二次元配列を作成しました。
date_temp_list = [[日付1, 日付1の気温データ], [日付2, 日付2の気温データ]…]
日付別の最高気温、最低気温、平均気温を二次元配列として取り出します。
set_list =
[[日付1, 日付1の最高気温, 日付1の最低気温, 日付1の平均気温], [日付2, 日付2の最高気温, 日付2の最低気温, 日付2の平均気温]….]
SwitchBot温湿度エクスポートデータ
SwitchBot温湿度計からエクスポートされるデータは次のようなcsvデータとなります。下の画像はその一部を抜粋したものでです。設置期間が長くなるとデータ数も膨大となります。僕の計測データ桁数は数万行となっています。

プログラム動作概要
- 気温データのみを保存するためのリスト:temp_list = []
- 計算結果を保存するリスト:result_list = []
- 最終的な結果を保存するためのリスト:set_list = []
date_temp_list = [[日付1, 日付1の気温データ], [日付2, 日付2の気温データ]…]から、date_listとしてリストを取り出します。次のようなイメージになります。
date_lsit = [日付1, 日付1の気温データ], date_lsit = [日付2, 日付2の気温データ]…
日付は計算には使用しませんが、結果にはほしい値です。日付データのみを始めに取り出してresult_listに追加します。
Forループ①で取り出したdate_list別に気温データのみのリストtemp_listを作成する。
- 最大値を取り出す。
- 最小値を取り出す。
- 平均値を算出する。
temp_list, result_listを空にする。
使用した関数など
max() : 最大値を取り出す
max()はPythonの組み込み関数の一つです。
max(リスト)
引数に指定したリストから最大値を取り出します。
min() : リストから最小値を取り出す
min()もmax()同様にPythonの組み込み関数の一つです。
max(リスト)
引数に指定したリストから最小値を取り出します。
sum() : リストの合計値を最大値を取り出す
sum()はPythonの組み込み関数となります。この記事のプログラムでは、平均値を算出する際に使用しました。
sum(リスト)
引数に指定したリストの値の合計を算出します。
フロー図(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での同様のデータ整理についてもこれから考えていこうと思います。
最後まで読んでいただきありがとうございます。
コメント