当前位置: 首页 > news >正文

用于DiffTraj的行人轨迹数据预处理

目录

前言       

输入输出介绍

(1)原始数据格式

(2)目标数据格式

处理步骤

一、筛选有用轨迹

(1)提取需要的列

(2)轨迹分割

(3)删除轨迹点较少的轨迹

二、计算traj部分

(1)提取traj需要的列,并将每行轨迹段转换为每行轨迹点

(2)找出所有轨迹点中的最大经纬度和最小经纬度

(3)对轨迹点进行插值

三、计算head部分

(1)提取起点和终点的经纬度

(2)计算head中的六个特征

(3)对sid和eid重新编号

(4)将六个特征与sid、eid合并为完整的head信息

四、对traj和head进行归一化

(1)将traj.csv转换为三维的traj.npy,将head.csv转换为对应的head.npy

(2)对所有轨迹经纬度进行归一化,并计算经纬度的均值和方差

(3)对head的前六个特征归一化,并计算对应的均值和方差

结果


前言       

         本文是用于DiffTraj项目的数据预处理部分。原论文使用车辆轨迹,在轨迹插值中使用线性插值;而我使用行人轨迹,因此使用三次样条插值

输入输出介绍

(1)原始数据格式

(2)目标数据格式

(1)traj:(num_traj, num_points, 2)

        num_traj为轨迹段数,num_points为一段轨迹中的点数,2为经纬度

(2)head:(num_traj, 8)

        num_traj为轨迹段数,8为需要的8中head特征

处理步骤

一、筛选有用轨迹

(1)提取需要的列

['id', 'Slon','Slat','Elon','Elat','Stime','Etime','interval','distance','velocity']

(2)轨迹分割

        由于某些轨迹点之间的间隔,后续进行插值的时候,会使该轨迹插值不准确。因此,如果某些轨迹点之间的距离大于给定值limit_dis,将该段轨迹进行分割

        1、计算所有轨迹段平均distance,便于阈值确定

        2、限制轨迹点之间的距离

                ①从1开始记录new_id

                ②按id进行分组遍历,若distance超过阈值,记录该行索引,new_id加一;若没超过阈值,按new_id对该行的new_id字段赋值。

                ③最后将所有记录的索引行删除

(3)删除轨迹点较少的轨迹

        分割轨迹段后,某些id对应的轨迹点数太少,不便于后续插值,将轨迹段数少于limit_num的轨迹id删除

        ①统计每种id出现的行数,若行数大于等于limit_num则保留该id

        ②对处理完后的id从1开始重新编号

二、计算traj部分

(1)提取traj需要的列,并将每行轨迹段转换为每行轨迹点

        ['id', 'Slon', 'Slat', 'Elon', 'Elat']

        遍历每一行数据,若该行的起点经纬度与上一行的终点经纬度不一样,就记录其起点经纬度

(2)找出所有轨迹点中的最大经纬度和最小经纬度

        用于之后进行渔网划分时,确定渔网的范围

        用min()和max()函数求出lon和lat两列的最大值和最小值

(3)对轨迹点进行插值

        插值到traj_resample的数量,原论文中使用的线性插值,我使用三次样条插值代替,使插值轨迹更平滑

        按id分组,使用对应的插值函数进行插值,并对id列进行填充

三、计算head部分

(1)提取起点和终点的经纬度

        按id分组提取,用于后续网格化编号

        网格化操作见另一篇文章ArcGis使用-对轨迹起点终点的网格化编号-CSDN博客

(2)计算head中的六个特征

        [id, departure, total_dis, total_time, avg_len, avg_speed, avg_dis]

        按id分组计算

                ①departure:第一行的Stime字段

                ②total_dis:起点和终点直线距离

                ③total_time:每行interval字段的总和

                ④total_len:traj中各两点之间的直线距离总和

                ⑤avg_speed:用total_len除以total_time

                ⑥avg_dis:用total_dis除以指定插值数traj_resample

        然后将这六个特征按需要排序

(3)对sid和eid重新编号

        ①找到sid和eid的所有唯一值

        ②从1开始创建唯一编号映射

        ③重新对sid和eid进行映射

(4)将六个特征与sid、eid合并为完整的head信息

四、对traj和head进行归一化

(1)将traj.csv转换为三维的traj.npy,将head.csv转换为对应的head.npy

        ①traj按id分组,对每个id保存一个二维的轨迹列表,不记录id

        ②将所有的二维列表整合为一个三维列表,并存储为npy格式

        ③head去掉id列,与traj的数据顺序对应,存储为npy格式

(2)对所有轨迹经纬度进行归一化,并计算经纬度的均值和方差

        ①将三维traj重塑为二维形式,即包含所有轨迹点的二维列表

        ②对lon和lat进行归一化,计算均值和方差

(3)对head的前六个特征归一化,并计算对应的均值和方差

结果

        最后得到归一化后的traj.npy和head.npy,以及traj和head的均值和方差

相关文章:

  • 程序员学商务英语之Making Business Calls
  • 每日一题--内存池
  • 嵌入式软件开发--面试总结
  • VLLM专题(三十九)—自动前缀缓存(二)
  • 【资源损坏类故障】:详细了解坏块
  • Redis解决缓存击穿问题——两种方法
  • 【踩坑实录】-The function STRING takes only primitive types
  • Netty源码—1.服务端启动流程二
  • extern和static的作用(有例子)
  • 【AI绘图模型介绍】Checkpoint / LoRA / VAE / Embeddings 模型是什么?
  • Java:Apache HttpClient中HttpRoute用法的介绍
  • 如何让节卡机器人精准对点?
  • 基于基于eFish-SBC-RK3576工控板的智慧城市边缘网关
  • 3.3 二分查找专题: LeetCode 35. 搜索插入位置
  • 事务隔离级别是?
  • 04 泛型编程
  • AMBA-CHI协议详解(二十四)
  • window.btoa 和 atob 记不住,怎么根据字母意思去理解
  • 错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
  • 当底层硬盘老旧时,如何限制Linux服务器和Windows服务的IOPS?
  • 两部门发布“五一”假期全国森林草原火险形势预测
  • 空调+零食助顶级赛马备战,上海环球马术冠军赛即将焕新登场
  • 王毅:时代不容倒退,公道自在人心
  • 解密62个“千亿县”:强者恒强,新兴产业助新晋县崛起
  • 探索演艺产业新路径,2万观众走进音乐科技融创节
  • 看展览|建造上海:1949年以来的建筑、城市与文化