消除Logfile

时间:2016-08-17 15:16:28

标签: python-3.x csv

我有一个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温度/嗡嗡声传感器的一个错误。

1 个答案:

答案 0 :(得分:0)

好像你还没有考虑到第一个值是尖峰或低点的边缘情况。

从您的问题来看,好的值似乎在一定的范围内[16-38],虽然在按分钟记录值时,温度/湿度的突然变化不太可能发生+ -5度。

精心制作的方法:     从前一天的数据中找出特定范围,计算平均值,平均值,偏差以估计良好的范围函数。