【Python】条件を満たした場合の値をリストに追加するプログラム

Hello World!!!

この記事では、Pythonを使って条件を満たした場合の値をリストへ追加するプログラムについて書いていきます。

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

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

STEP
SwitchBot温湿度計エクスポートデータの読み込み→リスト化
STEP
STEP1で作成したリストの計測日時データから日付のみを抽出
この記事の内容
  • 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’, …]

この記事のプログラムにより次のような多次元リストを作成します。
プログラム名をmake_datetemp_listとします。

date_temp_list = [[2020-02-24の気温のリスト], [2020-02-25の気温のリスト], [2020-02-26の気温のリスト]…]

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

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

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

プログラム動作概要

STEP
日付ごとの温度データを格納する空のリストを作成

各日付における気温データをまとめて多次元リストとする空リスト:date_temp_listset
日付ごとの気温のリスト:date_temp

の2つの空リストを作ります。

STEP
n番目の計測日データのリストの値と、n番目の計測日時データの日付部分の値を比較

比較する値は具体的には次の値となります。
・計測日データはn番目そのままの値
・計測日時データはn番目の値のはじめから10文字目まで値(日付)

STEP
STEP2の値が等しい場合に作成したリスト「date_temp」に値を追加する。
STEP
「date_temp_listset」にSTEP3で作成した「date_temp」を追加する。
STEP
「date_temp」を空のリストへ戻す。

STEP1 ~ 5を計測日データのリストの各日付分繰り返し、日付ごとのリストを作成します。

フロー図(make_datetemp_list)

フロー図 make_datetemp_list

コード

#プログラム概要
#switchbotよりエクスポートしたデータの整理
#各日付ごとの気温のリスト作成する。
#出力結果は、[[日付1, 計測気温1, 計測気温2, ...],[日付2, 計測気温1, 計測気温2, ...] ]ように出力する。

def make_datetemplist(detect_timeanddate_list, temperature_list, date_list):
    date_temp_listset = []
    date_temp = []

    for date in date_list:
        date_temp.append(date)
        for n in range(len(detect_timeanddate_list)):
            date_check = detect_timeanddate_list[n]
            if date_check[0:10] == date:
                date_temp.append(temperature_list[n])
        date_temp_listset.append(date_temp)
        date_temp = []

    return date_temp_listset

if __name__ == '__main__':
    detect_timeanddate_list = ['2020-02-24 12:50', '2020-02-24 12:54', '2020-02-24 12:56', '2020-02-25 0:06', '2020-02-25 0:36', '2020-02-25 1:05', '2020-02-26 0:10', '2020-02-26 0:26', '2020-02-26 0:36']
    temperature_list = ['16.5', '20.7', '21.3', '19.9', '19.4', '19', '21.5', '21.1', '20.6']
    date_list = ['2020-02-24', '2020-02-25', '2020-02-26']

    result_list = make_datetemplist(detect_timeanddate_list, temperature_list, date_list)
    print(result_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']]

この記事のコードのポイントは、リストを作成して次のループに入る前にリストを一度空にすることにあると思います。これに気づかず、なぜか2つめの日付移行データが増えいってしまってました。

まとめ

今回は、pythonで条件を満たした場合の値をリストに追加するプログラムについて書きました。

この記事のプログラムでSwitchBot温湿度計で計測したデータを扱いやすいようにかなり整理されてきました。次は、今回作成したリストから各日付ごとの最高気温、最低気温を抽出して[[日付1, 最高気温1, 最低気温1], [日付2, 最高気温2, 最低気温2]…]のような多次元リストを作っていこうと考えてます。

ブログ記事にまとめることで、コードを何度も読み返すため、僕自身の理解も深まったような気がします。

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

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

コメント

コメントする

目次
閉じる