本文通过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文库进行下载

 若有疑问,需完整代码或有交通数据处理需求欢迎VX探讨:A2528945820

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐