NGSIM数据集解析及python处理 | 您所在的位置:网站首页 › python数据集处理 › NGSIM数据集解析及python处理 |
简介
NGSIM(Next Generation Simulation)数据集是美国FHWA搜集的美国高速公路行车数据,它包括了US101、I-80等道路上的所有车辆在一个时间段的车辆行驶状况。数据是采用摄像头获取,然后加工成一条一条的轨迹点记录。我在项目中用到的是US101数据集,其他数据结构大同小异。一下着重介绍该路段数据集。 US101数据集介绍NGSIM官方提供了使用API的方法获取数据集,但是文档并不够良心,因此我还是直接选择了下载整个数据集,下载链接可以在官方网站找出,这里再给出链接,下载下俩的数据集是一个1.6G+的CSV文件。这个文件包含所有道路的所有数据。打开看一看,数据结构如表: 这几个很难倒腾,而且筛选数据主要看这几个,其他数据可以直接看官网介绍。 python处理数据我想得到的是某一区域内的车辆及它们未来10秒的轨迹。读取CSV,用python的话当然用pandas咯。 最好添加usecols过滤你不需要的列,因为数据集很大,载入真的很慢。 import pandas as pd init_df = pd.read_csv('./data.csv', usecols=['你所需要的列名'])首先,数据集很大,要把数据多余的内容除掉。我要的是US101数据,因此定义一个函数筛选并按照全局时间排序,按照frame排序是行不通的,如果要按照路段排序同理选取Global的数据。 def cutbyRoad(df=None, road=None): ''' :param df: 打开后文件 :param road: 路段名称 :return: 切路df,按照全局时间排序 ''' road_df = df[df['Location'] == road] return road_df.sort_values(by='Global_Time', ascending=True)原数据集的单位,时间是ms,长度单位全是ft。给它转换一下: def unitConversion(df): ''' 转换后长度单位为m,时间单位为0.1秒 :param df: 被转换df :return: 转换后df ''' ft_to_m = 0.3048 df['Global_Time'] = df['Global_Time'] / 100 for strs in ["Global_X", "Global_Y", "Local_X", "Local_Y", "v_length", "v_Width"]: df[strs] = df[strs] * ft_to_m df["v_Vel"] = df["v_Vel"] * ft_to_m*3.6 return df我需要的数据是某一区域内,某一时刻的车辆及它们未来10s的行车数据,因此首先要获得某一区域某一时刻某一区域的车辆ID列表: def cutbyPosition(road_df, start_y=0, start_time=0, area_length=50): ''' 给定起始时间,起始y,区间长度,输出区间内车辆list :param road_df:限定路段后的df :param start_y: 区域开始段,单位为m :param start_time: 起始时间,0.1s :param area_length: 区域长度单位为m :return: vehicle_list为起始框内部车辆编号 ''' area_df = road_df[road_df['Global_Time'] == start_time] area_df = area_df[(area_df['Global_Y'] - start_y = 0)] vehicle_list = area_df['Vehicle_ID'].unique() if len(list(vehicle_list)) |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |