Pandas 交通时序数据画图与求差集

Pandas 交通时序数据画图与求差集

这几天在处理从PEMS上下载下来的交通流数据,今天下午主要做了pandas时序数据画图与求差集方面的工作,在这里整理下。

画图

首先将整理好的数据导入,后将时间属性设置为index,代码如下

import pandas as pd

traffic_data = pd.read_csv('Mainline_VDS_500010021.csv')
traffic_data['5 Minutes'] = pd.to_datetime(traffic_data['5 Minutes'])
traffic_data.set_index(['5 Minutes'], inplace=True)

画图只需调用plot()方法即可,需要注意的是可以通过ix()函数确定需要显示的时间范围,plot()还有figsize属性可以确定图像大小。因为PEMS输出的数据中Lane x Flow (Veh/5 Minutes)属性代表交通流量,所以就只把这个属性画出来

data = traffic_data[['Lane 1 Flow (Veh/5 Minutes)']]
data.ix['2019-01-01':'2019-01-01'].plot(figsize=(20,10))

最终画出来的图像如下所示

Pandas 交通时序数据画图与求差集_第1张图片

求差集

今天下午百度了半天但并没有发现pandas有相关的函数,所以在查阅了下资料后决定用比较笨的方法求差集。主要思路是采用drop_duplicates()函数中的keep属性,首先先看下pandas的官方文档

keep : {‘first’, ‘last’, False}, default ‘first’

  • first : Drop duplicates except for the first occurrence.
  • last : Drop duplicates except for the last occurrence.
  • False : Drop all duplicates.

如果我令keep=False,则所有重复项都会被删除。

这就好办了,首先我们先把两个Datetimeindex导入或者直接生成出来。

import pandas as pd 

# 源数据中提取时间信息
raw_traffic_data = pd.read_csv('Mainline_VDS_500010021.csv')
real_date = raw_traffic_data[['5 Minutes']]
real_date = pd.DatetimeIndex(pd.to_datetime(real_date['5 Minutes']))

# 已知起始时间、开始时间与间隔,可以自动生成所有时间戳
date_range = pd.date_range(start='2019-01-01 00:00:00',
                           end  ='2019-06-30 23:55:00',
                           freq ='5min')

可以从上述代码中看出,real_datedata_range的一个子集,将两个变量合成一个变量,再借用drop_duplicates()中的keep属性可以删除所有相同的属性,留下来的便是real_date中缺失的时间戳

missing_date = date_range.append(real_date).drop_duplicates(keep=False)

可以看出少了3月1日凌晨2点左右的12个数据

In [65]: missing_date
Out[65]: 
DatetimeIndex(['2019-03-10 02:00:00', '2019-03-10 02:05:00',
               '2019-03-10 02:10:00', '2019-03-10 02:15:00',
               '2019-03-10 02:20:00', '2019-03-10 02:25:00',
               '2019-03-10 02:30:00', '2019-03-10 02:35:00',
               '2019-03-10 02:40:00', '2019-03-10 02:45:00',
               '2019-03-10 02:50:00', '2019-03-10 02:55:00'],
              dtype='datetime64[ns]', freq=None)D:\Anaconda\Anaconda3\envs\tensorflow\lib\site-packages\spyder\widgets\variableexplorer\utils.py:414: FutureWarning: 'summary' is deprecated and will be removed in a future version.
  display = value.summary()

为什么会产生这个需求呢?因为我中午在研究数据集,我一共下载了181天的数据,每天288个数据点,那么理论上数据集一共会有181*288=52128个数据,可是实际少了12个数据,于是就想到了用求差集的方法找出缺失的数据。缺失数据的处理我就直接在csv文件中手动修改了。

你可能感兴趣的:(Pandas 交通时序数据画图与求差集)