我有一个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°C /%以上。 (测量误差与常规温度/湿度极差) 数据被写入相应的字典,这些字典被写入csv文件。
这是代码(python 3):
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脚本,但它的工作原理。 我的问题是,有时候日志记录过程停止了,这导致了这样的日志文件:
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 附近的值。
所以我希望就更精细的方法提出一些建议。
关于边缘情况: 我正在使用Raspberry Pi 24/7记录Temp / Hum并且第一个值是正确的:-)由于某些传感器错误,一天中大约两次出现边缘和低点。据我所知,它是DHT22温度/嗡嗡声传感器的一个错误。
答案 0 :(得分:0)
好像你还没有考虑到第一个值是尖峰或低点的边缘情况。
从您的问题来看,好的值似乎在一定的范围内[16-38],虽然在按分钟记录值时,温度/湿度的突然变化不太可能发生+ -5度。
精心制作的方法: 从前一天的数据中找出特定范围,计算平均值,平均值,偏差以估计良好的范围函数。