用于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的均值和方差