NGSIM数据集因其量大质优,在车辆跟驰、变道等领域的研究中被广泛使用,作为一种特殊的变道行为,超车变道存在其显著的特点,但对超车变道的研究较少,一方面,超车变道数据的获取存在一定难度,另一方面,超车变道的决策较为复杂,本文通过Python代码的编写,实现对NGSIM数据集中产生超车变道行为的车辆数据进行提取,以下概述代码主体部分及部分说明。如需完整代码,可点击本人上传的代码链接进行下载。NGSIM数据集超车变道数据筛选-数据挖掘文档类资源-CSDN文库
通过原始数据中Vehicle_ID项分ID提取车辆数据,考虑到NGSIM数据集中存在车辆ID复用的情况,针对该情况,使用数据中Global_Time(或Frame_ID)是否连续判别ID是都被复用,若被复用,将间断点索加入索引列表lst_c。以下为该部分代码示例,代码中以Global_Time作为ID是否复用的判别依据。需要特别说明的是,因为科学记数法的问题,网上部分原始数据中Global_Time的值每一行都相同,若出现这种情况,将代码中的Global_Time更改为Frame_ID,并将是否连续的判别条件进行更改即可。
for ID in set(data.Vehicle_ID):
new_data = data[data.Vehicle_ID == ID].sort_values(by='Global_Time')
'''处理同一ID对应不同车辆问题'''
lst_Global_Time = list(new_data.loc[:, 'Global_Time'])
for i_0 in range(len(new_data) - 1):
if lst_Global_Time[i_0 + 1] - lst_Global_Time[i_0] != 100:
lst_c.append(i_0 + 1)
结合上一步的索引列表lst_c,遍历该列表,实现每一车辆数据的获取。使用iloc命令获取目标数据,使用.copy()命令复制原始数据,而后进行操作,避免警告信息。
for j in range(len(lst_c)-1):
S_S_data=new_data.iloc[lst_c[j]:lst_c[j+1]].copy()
将车辆数据按Global_Time(或Frame_ID)增序排列,获取车辆车道差值列表,超车变道时,车辆变道会同时存在两个方向的变道数据,以此作为判别依据。提取最终数据。
if -1 in diff_lst_Lane_id and 1 in diff_lst_Lane_id:
for i in enumerate(diff_lst_Lane_id):
if i[1] == -1 or i[1] == 1:
lst_index.append(i)
若有疑问,需完整代码或有交通数据处理需求欢迎VX探讨:A2528945820