本文通过Python代码的编写,对NGSIM数据集中车辆变道时周边车辆的加速度、速度等信息进行提取,主要介绍代码逻辑及思路。
关于NGSIM数据集不再赘述,本人上传有NGSIM各路段各车型的车辆数据以及各路段平面示意图,可点击链接NGSIM数据.zip_ngsim提取换道数据Python源代码-交通文档类资源-CSDN文库进行下载。本文代码实现基于NGSIM数据集中US-101路段的小型车数据,前期数据筛选和提取看参见本人前期发表文章NGSIM数据集Python处理(按照路段和车型筛选数据)_Mr.J的博客-CSDN博客。
处理代码可分为以下四部分。
1.变道主车数据获取
在进行这部分处理时,需要特别注意的是如何判定车辆的换道时刻,在这里可以通过Lane_ID进行判别。而后从Lane_ID间断处将同一ID的车辆数据进行切割,提取切割后的非最后一个子文件中最后一行中对应的ID和坐标以及全局时间即可完成第一步工作。对于最后一个子文件,即每一ID的最后一行数据,因为其后缺失数据,若直接采用Lane_ID相减不等于0进行判别,将会得到任何一个ID的车辆最后都产生了变道,显然,这是错误的。因此对于这个地方的数据需要进行特别处理。lst_c为切割索引列表。解决该方法可对lst_c进行如下操作:
lst_c.insert(0, 0)
lst_c.sort()
2.同一时间其他车辆数据的获取
根据步骤1获取到的车辆变道时间,遍历原始文件,获取该时间点,所有候选车辆的数据,这里需要注意的是,需要将主车的数据排除在外,否则最后得到的数据中主车数据将会冗余。处理代码如下:
S_S_data=new_data.iloc[lst_c[j]:lst_c[j+1]].copy()
S_S_Global_Time=list(S_S_data['Global_Time'])[-1]
3.筛选距离满足要求的车辆数据
首先设定筛选范围,该范围可任意设定,示例中设定该范围为周边60m,将距离满足筛选范围的数据提取到最终周边车辆的数据中,这里需要使用使用索引进行提取对应的数据。
if (abs((Origin_X-Judgment_X[index])**2+(Origin_Y-Judgment_Y[index])**2))**0.5<=60*3.2808:
lst_Near_ID.append(Judgment_ID[index])
4.将满足要求的车辆数据及变道主车的相关数据写入目标文件
将数据写入时,将列表整体写入dataframe的列中,在这里采用重置索引,可解决长度和索引不匹配的ValueError问题。
finally_data['Near_ID'] = pd.Series(lst_Near_ID, index=range(len(lst_Near_ID)))
至此,邻近车辆数据已写入目标文件,每次处理完一个小文件时,需要对除lst_c以外的其他列表进行清空。将主车车辆写入文件使用插入即可:
finally_data.loc[0,'Origin_ID'] = Origin_ID
代码最终得到的数据如下:
如需代码,可点击本人上传的资源NSSIM数据车辆变道时邻近车辆数据提取-交通文档类资源-CSDN文库进行下载。
如需文件,可点击本人上传的资源
NGSIM数据车辆变道时周边车辆数据提取-数据集文档类资源-CSDN文库进行下载
本文转载自: https://blog.csdn.net/Mrcomj/article/details/123208020
版权归原作者 惜君如常 所有, 如有侵权,请联系我们删除。
版权归原作者 惜君如常 所有, 如有侵权,请联系我们删除。