Closed InEase closed 1 year ago
在轨迹数据处理中,假设我们有前一条轨迹A,当前轨迹B,以及后一条轨迹C。我们采用以下思路来判断是否存在漂移现象需要进行删除操作:
如果A与B之间的速度差过大,并且B与C之间的速度差也过大,但是A与C之间的速度差并不大,那么我们认为轨迹B是处于漂移状态的。因为在轨迹数据中,有可能出现某一点的信号误差导致其与实际情况的距离相差较大,此时轨迹B是异常的,而A与C的轨迹是正常的,因此需要将轨迹B删除。
这种判断思路是"双向"的,正因为其条件几乎不可能实现,所以如果发现这种情况就需要进行删除操作。
相比之下,你提出的判断思路是"单向"的,只考虑了连续两条轨迹的情况。例如,如果发现A与B之间的速度差过大,那么删除轨迹B。然而,由于车辆在某一时刻可能会有瞬时速度较大的情况,因此这样的判断可能并不准确。
在TransBigData0.5.1版本中,我们的traj_clean_drift方法提供了一个名为method的参数,可选值为'twoside'和'oneside',分别考虑了上述的两种情况。默认情况下,我们使用'twoside'方法进行判断。
此外,无论条件判断是放在前面还是后面,都不会影响计算效率。在DataFrame进行条件筛选时,条件是通过列运算先计算出来,然后再进行索引操作。
受教了,感谢!我再琢磨琢磨!!
是的,如果出现了这种情况,确实是以目前的漂移筛选方法无法进行剔除。但可以用clean_outofbounds或clean_outofshape将研究范围以外的数据剔除
作者您好,非常感谢您的开源工作以及各个平台上的详实教程,实在是让我受益良多,最近在使用您的库做实验的时候,发现排除异常点的算法似乎不对,还望您不吝赐教。
Describe the bug
具体位置在:
https://github.com/ni1o1/transbigdata/blob/21a4da0db9e2c38d0376786d954febb570f57ddc/src/transbigdata/traj.py#L344-L349
这个部分是根据速度限制对数据进行清理,超过
speedlimit
的部分将会被去掉,但是源代码中的语义似乎是当前,后的速度都超过阈值,且忽略中间点的前后速度小于阈值才把这一行去掉,但是这个是几乎不可能实现的条件呀,正确的语义我猜应该是:任意一个速度值超过阈值就把这一行去掉。所以这里应该改成:此外,为了加快代码效率,我觉得后面的这个判断条件应该放在前面,大部分条件下不满足速度超过阈值的条件,就可以直接短路了。这是进一步格式化之后的代码:
同理,后面的距离限制和角度限制也需要作此修改。