【Python】リストの重複する値の削除・各値から指定文字数で抽出するプログラム

Hello World!!!

この記事では、Pythonを使って、リスト内の重複する値を削除し、リスト内の値の文字数を揃えるプログラムについて書いていきます。

このプログラムは、SwitchBot温湿度計で記録した室温データを整理分析するプログラミングの第2段階となります。
この記事のプログラムにより、データを整理しやすいように加工します。
最終的には、計測した温度データをから日別の最高・最低気温を抽出をする予定です。
抽出したデータと気象庁データの外気温との比較をしていきたいと考えています。

第1段階では、SwitchBot温湿度計からcsvファイルとしてデータを出力し、Pythonの値として取り出す方法について書きました。

この記事の内容
  • Pythonのリストから重複した値を削除するプログラムの作成&解説
  • Pythonのリストの各値から指定文字数で抽出するプログラムの作成&解説
目次

作成するプログラム

SwichBot温湿度計で記録データをPythonリスト化したデータ

上の記事でSwithBot温湿度計からエキスポートしたデータ(csvファイル)をPythonリストとして抽出しました。
その結果を次に示します。

date_list = [‘2020-02-24 12:50:22’, ‘2020-02-24 12:54:30’, ‘2020-02-24 12:56:32’, ‘2020-02-24 13:00:35’…]

作成するプログラム

作成したリストから、重複する日付データの削除、各値の時間データを削除し、次のようなリストを作成するプログラムを作ります。

date_list = [‘2020-02-24’, ‘2020-02-25’, ‘2020-02-26’, …]

プログラム名:extraction_day とします。

extraction_day 動作

STEP
時間データの削除

SwitchBot温湿度計で記録されるデータは次のようになっています。

前半の日付データ10桁のみを抽出して、後半の計測時刻データを削除したリストを作成します。

STEP1の処理の結果、元々の日付リストを次のように変化させます。

date_list = [‘2020-02-24’, ‘2020-02-24’, ‘2020-02-24’, ‘2020-02-25’, ‘2020-02-25’, …]

STEP
重複する値の削除

重複する日付データを削除して次のようなリストを作ります。
このリストがこの記事のプログラミングでの最終生成物となります。

date_list = [‘2020-02-24’, ‘2020-02-25’, ‘2020-02-26’, ‘2020-02-27’, …]

STEP1の処理を細かく解説すると、次のようになります。
STEP2はメソッドを使って簡単に処理できます。

STEP
元のリストを用意する。
STEP
空のリストを用意する。

この空のリストに日付データを格納していきます。

STEP
元のリストから各値の日付データを取り出して、空のリストに格納する。

forループを使用して、元のリストの各値から日付データのみを取り出して、空のリストに加えていきます。

extraction_day フロー図

フロー図は次のようになります。
申し訳ないですが、フロー図はあまり自信ないです。。。
間違っている箇所アリかもしれませんが、このようなイメージでコードを作成しました。

extraction_day コード

def extraction_day(dayandtime_list):                 #dateandtime_listから日付データのみを抽出する関数を作成する。
    day_list = []                                    #日付データを格納する空のリスト day_listを用意する。

    for d in range(0, len(dayandtime_list)):        #dayandtime_listの要素数分ループ
        day = dayandtime_list[d]                    #dayandtime_listからd番目の要素を取り出し、変数dayに格納
        day_list.append(day[0:10])                  #変数dayの値の1文字目〜10文字目を取り出してリスト【day_list】に追加

    day_list = list(dict.fromkeys(day_list))        #リストの要素の順序は保持して、重複した要素を削除

    return day_list


if __name__ == '__main__':                          #作成した関数【extraction_day】を実行
    #サンプルリスト【dayandtime_list】
    dayandtime_list = ['2020-02-24 12:50:22', '2020-02-24 12:54:30', '2020-02-25 12:56:32', '2020-02-25 13:00:35']
    day_list = extraction_day(dayandtime_list)      #extraction_dayによる処理
    print(day_list)                                 #結果を出力

    ### 実行結果 ###
    # ['2020-02-24', '2020-02-25']

文字列の抽出

対象文字列[始点:終点]
※始点、終点は数字で指定。

上のコードで抽出ができます。また、文字列指定には次の注意点があります。

  • 対象文字列の1文字目は【0】で指定する
  • 始点指定の文字は含む
  • 終点指定の文字は含まない(終点指定マイナス1文字目までが抽出される)

上記コードでは、day[0:10]で1文字目から10文字目までの日付データを抽出してます。

重複データの削除

list(dict.fromkeys(重複データを削除するリスト))

Pythonの辞書のメソッドの一つのfromkeys(リスト, 値)を使用して重複を削除しました。
このメソッドでは、重複を削除し、第2引数に値を指定した場合は、すべての値を第2引数とした辞書型を返します。
結果は、(key1 : 値, key2 : 値, …)のようになります。
第2引数をしていない場合、値は”None”となります。

list(リスト化する辞書)では、辞書のキーのみを取り出してリストを作成します。

作成した関数extraction_day(dayandtime_list)では、次のような処理をしています。

STEP
dict.fromkeys(day_list)

[‘2020-02-24 12:50:22’, ‘2020-02-24 12:54:30’, ‘2020-02-25 12:56:32’, ‘2020-02-25 13:00:35’]

{‘2020-02-24’ : None, , ‘2020-02-25’ : None}

STEP
list(dict.fromkeys(day_list)

{‘2020-02-24’ : None, , ‘2020-02-25’ : None}

[‘2020-02-24’, ‘2020-02-25’]

ふくゆー

日付データの抽出ができました。
このデータをもとにさらにSwitchBot温湿度計で取得したデータを整理していきます。

まとめ

Pythonを使って、リストの値の抽出、重複を削除するプログラムについて書きました。
プログラムを使うと手動では膨大な時間がかかることも数秒で処理できますね。

SwitchBot温湿度計のようなセンサーでは決められた法則でデータがエクスポートされるため、プログラムで扱いやすいと思います。
計測した温度データをから日別の最高・最低気温の抽出にはまだ至っておりませんので、引き続き記事にしていきます。

  1. csvファイルからデータをリスト(計測日時と計測気温)として抽出
  2. 計測日時データを計測日データのリストへ変換(この記事)
  3. 一日の最高気温・最低気温を抽出してリスト化
  4. ②で作ったリストをcsvファイルに出力
  5. ②をグラフ化
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次
閉じる