NGSIM数据集Python处理(变道数据筛选)

本文通过Python代码的编写,实现对NGSIM数据I-80路段小型车数据中产生变道行为的车辆进行筛选。关于前期数据的准备,可参看本人原来发表的资源和文章

NGSIM数据.zip-交通文档类资源-CSDN文库

去除重复项后NGSIM数据-数据集文档类资源-CSDN文库

NGSIM数据集Python处理(按照路段和车型筛选数据)_Mr.J的博客-CSDN博客

NGSIM数据集中会存在ID被复用的情况,以同一ID数据的全局时间间断点作为索引构建切割索引列表。该部分代码如下:

    lst_Global_Time = list(new_data.loc[:, 'Global_Time'])
    for i in range(len(new_data) - 1):
        if lst_Global_Time[i + 1] - lst_Global_Time[i] != 100:
            lst_c.append(i + 1)

    lst_c.insert(0, 0)
    lst_c.append(len(lst_Global_Time))
    lst_c.sort()

而后对同一ID车辆数据按切割索引列表进行切割,进而判断每一车辆是否产生变道行为,代码如下:

 for j in range(len(lst_c)-1):
        S_S_data=new_data.iloc[lst_c[j]:lst_c[j+1]].copy()            #获取每一车辆数据
        lst_Lane_ID=S_S_data['Lane_ID']
        new_lst_Lane_ID=list(np.diff(lst_Lane_ID))                    #获取连续时间车道差值列表
        if new_lst_Lane_ID.count(-1)>0 or new_lst_Lane_ID.count(1)>0:
            finally_data=finally_data.append(S_S_data)

完整代码如下:

import pandas as pd
import numpy as np
finally_data=pd.DataFrame()     #保存最终结果
lst_c=[]                   #储存切割索引
num=0                        #计数
data=pd.read_csv('D:\\BaiduNetdiskDownload\\NGSIM_Data\\I-80\\小型车数据.csv')
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 in range(len(new_data) - 1):
        if lst_Global_Time[i + 1] - lst_Global_Time[i] != 100:
            lst_c.append(i + 1)

    lst_c.insert(0, 0)
    lst_c.append(len(lst_Global_Time))
    lst_c.sort()
    '''切割并处理同一ID对应的不同车辆'''
    for j in range(len(lst_c)-1):
        S_S_data=new_data.iloc[lst_c[j]:lst_c[j+1]].copy()            #获取每一车辆数据
        lst_Lane_ID=S_S_data['Lane_ID']
        new_lst_Lane_ID=list(np.diff(lst_Lane_ID))                    #获取连续时间车道差值列表
        if new_lst_Lane_ID.count(-1)>0 or new_lst_Lane_ID.count(1)>0:
            finally_data=finally_data.append(S_S_data)
            num+=1
            print('ID为'+str(ID)+'的车辆满足筛选条件')
    lst_c.clear()
print('共有'+str(num)+'辆车辆进行了变道')
finally_data.to_csv('D:\\BaiduNetdiskDownload\\NGSIM_Data\\I-80\\小型车变道数据.csv')

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

  • 5
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惜君如常

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值