NGSIM数据集Python处理(跟驰车辆前后车数据提取)

本文介绍了如何使用Python的numpy和pandas库处理NGSIM数据集,提取车辆跟驰状态下的前后车速度、加速度和坐标信息。通过对原始数据筛选,去除无前车和后车的数据,然后通过遍历获取每个时刻对应车辆的详细信息,并填充到预定义的数据框中。最终,将提取到的数据存储为新的数据列,包括前车和后车的速度、加速度和坐标。

        本文使用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]
  • 目标数据获取
### 使用Python处理NGSIM数据集的方法和代码示例 以下是一个详细的说明,展示如何使用Python处理NGSIM数据集,并提供相应的代码示例。 #### 数据加载与预处理 在开始分析之前,需要确保数据已被正确加载并进行必要的预处理。这包括读取CSV文件、检查缺失值以及对数据进行清洗。 ```python import pandas as pd # 加载NGSIM数据 data = pd.read_csv('data/ngsim_data.csv') # 检查数据基本信息 print(data.info()) # 处理缺失值(如果存在) data = data.dropna() # 或者使用其他方法填充缺失值 ``` 此部分确保了数据的完整性,为后续分析奠定基础[^1]。 #### 特征提取 对于特定的研究目标,可能需要从原始数据提取相关特征。例如,计算车辆的速度变化或方向盘角度的移动平均值。 ```python # 计算速度变化 data['Speed_Diff'] = data.groupby('Vehicle_ID')['v_Vel'].diff() # 计算方向盘角度的移动平均值 window_size = 5 data['Steering_Angle_MA'] = data['v_Head'] \ .rolling(window=window_size, min_periods=1).mean() ``` 上述代码通过`groupby`函数计算每辆的速度变化,并利用`rolling()`方法计算方向盘角度的移动平均值[^3]。 #### 超变道行为筛选 为了研究超变道行为,可以编写特定的逻辑来筛选符合条件的数据。以下是一个示例代码,用于提取发生超变道的车辆数据。 ```python # 定义超变道条件 def is_overtaking(row): if row['Lane_Change'] == 1 and row['v_Vel'] > 10: # 示例条件 return True return False # 应用筛选条件 data['Is_Overtaking'] = data.apply(is_overtaking, axis=1) overtaking_data = data[data['Is_Overtaking']] ``` 此代码定义了一个函数`is_overtaking`,用于判断某一行是否满足超变道条件,并将结果存储在新列中[^2]。 #### 数据可视化 为了更好地理解数据,可以使用Matplotlib或Seaborn库进行可视化。 ```python import matplotlib.pyplot as plt # 绘制速度分布图 plt.figure(figsize=(10, 6)) plt.hist(data['v_Vel'], bins=50, color='blue', alpha=0.7) plt.title('Vehicle Speed Distribution') plt.xlabel('Speed (m/s)') plt.ylabel('Frequency') plt.show() ``` 以上代码展示了如何绘制车辆速度的分布图,帮助分析速度模式。 #### 结果保存 最后,将处理后的数据保存到新的CSV文件中,以便后续使用。 ```python # 保存处理后的数据 overtaking_data.to_csv('processed_overtaking_data.csv', index=False) ``` --- ###
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

惜君如常

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

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

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

打赏作者

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

抵扣说明:

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

余额充值