尝试解决基于时间的传感器数据中的数据质量问题,同时从中创建新的“日志”。这就是问题-
理想情况下,参数X以可接受的速率随时间增加或保持恒定(永远不会减小)。但是在实际数据中,由于校准问题,情况并非如此。在物理上都不可能的两种情况-
在第一次迭代中,只要dX> 0.01(实际列值与移位列值之间的差),就会创建一个日志。在两种情况下都将不良数据拖入新日志。为了清除这些不良数据,我根据第一次迭代的日志在下面编写了程序
下面的程序解决了情况2,但是解决方案导致情况1的情况更糟。如果突然增加到300,000,则“对数”将不会更新到首次达到300,000的水平。因此,有用的数据会从重置为50000的位置丢失。
import pandas as pd
data = {'time':[43254.09605,43254.09606,43254.09609,43254.09613,43254.09616,43254.09618,43254.09719,43254.09721,43254.09723,43254.09725]
,'X': [50000,50000.2,50000.4,300000.2,300000.4,300000.6,50000.1,50000.2,50000.4,50000.6]
,'dX':[0.19995117,0.19995117,0.19995117,32002.398,0.19921875,0.203125,0.100097656,0.099853516,0.19995117,0.20019531]
,'dX2':[None,0.2,0.2,249999.8,0.2,0.2,-250000.5,0.1,0.2,0.2]}
df = pd.DataFrame.from_dict(data)
def log_maker (df):
prev = 0
list_df = []
for i in range(1, len(df)):
curr = df.loc[i, 'X']
if (df.loc[i, 'dX'] > 0.01) and (df.loc[i, 'dX'] < 10) and (curr > prev):
list_df.append(df.loc[i,])
prev = curr #updates prev even if curr is a bad value, in our case 300000.4
return list_df
其中dX2是新日志中X的移位。 dX来自原始时间日志。
我在考虑是否有一种方法可以存储最后一个好行,并将curr
与仅最后一个好prev
进行比较。
我不是程序员,而是此特定传感器数据的专家。因此,如果有任何疑问,我可以回答。因此,(df.loc[i, 'dX'] < 10)
是X可以增加的合理“速率”。另外,我无法设置严格的标准,例如X cannot be greater than 299999
,因为可能会比50000 to 55000
突然增加,这也是不正确的,但55000
本身是一个正确的值,稍后会出现随着时间增加的日志。
答案 0 :(得分:0)
我最终使用dX_real = curr - prev
而不是dX
,这对于解决大多数情况下的问题很有帮助。这使得prev
仅被正确的值更新。还要设置一个初始条件,以便在时间日志以错误的值(非常高的X)(该代码不在此处)开始时获得第一个好点。
def log_maker (df):
prev = 0
list_df = []
for i in range(1, len(df)):
curr = df.loc[i, 'X']
dX_real = curr - prev
if (dX_real > 0.01) and (dX_real < 10):
list_df.append(df.loc[i,])
prev = curr #updates prev even if curr is a bad value, in our case 300000.4
return list_df