如何在熊猫中使用.rolling计算平均速度/瞬时速度?

时间:2019-02-27 20:02:55

标签: python python-3.x pandas scipy time-series

我每秒有10次来自GPS数据跟踪运动的x,y坐标。我计算了每行的速度(每行是该时间段的延迟位置,每秒有15行)。如果我要计算任一行的速度,则会出现一些噪音,因为位置数据是如此靠近。

现在,我有一列称为“距离”,并计算每一行的距离,我在该行的上方看了1行,在下方看了1行,并计算了(x,y点)之间的距离。点之间的距离通常很小,因为它们之间的距离非常近。

然后我计算每行的速度是d / t,因此它将是距离/.2秒(因为每行相隔.1秒)。

这样做时,我仍然会听到一些噪音,因为位置的计算频率很高,所以我正在使用.roll来查找异常值(即不可能在1秒钟内将时速从50 mph提升到150 mph)。

现在,我正在使用.rolling并使用4的窗口

df.Speed.rolling(window=4, min_periods=4, center=True).mean()

但是仍然离群值。另外,虽然我不希望它跳来跳去,但我仍然想获得瞬时速度,所以我不想看远处/后面的位置,因为那样的话我会损害瞬时速度。

我不确定是否有平滑函数(我见过高斯,布莱克曼,巴特利特win_type,但没有经验,也不知道在这种情况下是否合适)或更好的方法或者我只需手动添加很多测试用例即可确保速度合理且不会跳动。

谢谢!

1 个答案:

答案 0 :(得分:0)

Kalman filter通常用于过滤df = pd.DataFrame.from_dict(d, orient='index') print (df) something1 something2 something3 David X string1 string2 string3 David Y str1 str2 str3 信号。

没有用于删除异常值的正确方法。 GPS的有效性和可靠性取决于制造商。您可以应用各种范围的移动点平均值,但是对数据的过滤越多,衰减真实信号的机会就会增加。

您还应该记住,coordinates已被制造商使用预定的过滤器过滤。您很少输出 raw 数据。因此,任何其他过滤操作很可能会导致减少真实信号。