本文使用Python代码实现对NGSIM数据集中跟驰车辆前后车数据的获取。主要使用numpy和pandas两个库。在筛选时,去掉了无前车和后车的数据,即前车或后车ID为0。本文提供代码大体框架介绍。
- 构建初始数据列
构建空白列,用于保存数据。
data['v_Preceding'] = np.nan
data['a_Preceding']=np.nan
data['x_Preceding']=np.nan
data['y_Preceding']=np.nan
data['v_Following']=np.nan
data['a_Following']=np.nan
data['x_Following']=np.nan
data['y_Following']=np.nan
- 获取主车、前车、后车完整数据
该部分主要实现从原始数据中获取主车ID、速度、加速度、坐标信息,以及前后车ID数据。使用Global_Time和循环获取时间相同的片段索引,并获取该时刻对应的主车、前车和后车ID。
for item in set_Global_Time:
id = [i for i, x in enumerate(Global_Time) if x == item] #获取每一时刻在原始数据中对应的索引
'''获取该时刻对应的主车、前车、后车ID'''
new_ID = Vehicle_ID[id[0]:id[-1] + 1]
new_P_ID = Preceding[id[0]:id[-1] + 1]
new_F_ID=Following[id[0]:id[-1] + 1]
- 目标数据获取
通过遍历主车、前车、后车列表,判别在该时刻是否相等,若相等则进行数据提取,代码逻辑较复杂,以获取前车速度、后车速度为例,主要代码如下:
v_Preceding[id[new_P_ID.index(P_ID)]] = v_Vel[id[new_ID.index(P_ID)]]
v_Following[id[new_F_ID.index(F_ID)]] = v_Vel[id[new_ID.index(F_ID)]]
最后将生成个目标列表赋值给第一步构建的空白列中。以前后车速度赋值为例,代码如下:
data['v_Preceding'] = v_Preceding
data['v_Following'] = v_Following
以前100万条原始数据为例,最终生成的文件如下:
后八列分别表示:前车速度、加速度、x坐标、y坐标;后车速度、加速度、x坐标、y坐标