温度/湿度センサーからのログデータを含むcsvファイルがあります。 行がある:日付/時間 - 温度 - 湿度(\t
デリミタ)ログファイルからのスパイクとローを除去する
2016-07-21 17:39 36.8 30.4
2016-07-21 17:40 4.7 30.5
2016-07-21 17:41 36.7 30.9
2016-07-21 17:42 36.7 1.9
この例では、17:40(温度)と午前17時42分(湿度)
における測定誤差を示します私はファイルをループして、それらのエラーを見つけて、すべての有効なデータと1つのエラーで1つのファイルを作成したいと思います。
私のアプローチ: 行ごとに反復し、現在の温度または湿度の値が前の行の値から5℃/%を超えるかどうかを確認します。 (測定誤差は通常の温度/湿度から極端に偏差があります) データは対応する辞書に書き込まれ、csvファイルに書き込まれます。
import csv
good_data ={} # Dictionary for valid Data
bad_data ={} # Dictionary for invalid Data
with open("path/Logger.csv","r") as f:
f_reader = csv.reader(f,delimiter="\t",dialect='excel-tab')
prev_temp = None
prev_hum = None
for row in f_reader:
temp = float(row[1])
hum = float(row[2])
if prev_temp is not None and prev_hum is not None:
if temp < prev_temp - 5.0 or temp > prev_temp + 5.0 or hum < prev_hum - 5.0 or hum > prev_hum + 5.0 :
bad_data[row[0]] = row[1:]
prev_temp = prev_temp
prev_hum = prev_hum
else:
good_data[row[0]] = row[1:]
prev_temp = temp
prev_hum = hum
else:
prev_temp = temp
prev_hum = hum
質問1: noobのスクリプトをそれ `sが、それは動作します。ここ
は、コード(のpython 3)があります。 私の問題は、時々、ロギングプロセスが、このようなログファイルをもたらした停止したことを、次のとおりです。
2016-07-21 12:00 36.8 30.4
2016-07-21 21:30 16.7 30.5
2016-07-21 21:31 16.7 30.9
ので、その場合には、行の比較によって行は、温度や湿度まで21時30分からすべてを排除するであろうもう一度12:00に近づいてください。
だから私はこれに対するより精巧なアプローチに関するいくつかのアドバイスを感謝します。
エッジケースについて:ラズベリーパイ24/7でTemp/Humを記録しています。最初の値はokです:-)エッジとローは、センサーエラーのため、1日を通して約2回発生します。私が知る限り、これはDHT22 Temp/Hum Sensorのバグです。