首页 > 其他分享 >数据实战2-出租车GPS数据

数据实战2-出租车GPS数据

时间:2022-09-19 20:24:03浏览次数:60  
标签:实战 plt oddata 数据 VehicleNum shift data GPS

继续上周的数据实战-本周主要围绕出租车GPS展开

一、从出租车GPS数据中提取乘客出行OD

1. 数据清洗:是对数据进行检查和校验的过程,包括检查数据一致性,处理无效值和缺失值等。

出租车数据包括:车辆编号,时间数据,位置数据,载客信息。

出租车GPS数据可能存在一些异常数据,这些异常数据会影响我们对OD信息提取的效果。所以在提取OD信息之前,要先剔除异常数据。

 1 # 对data进行排序,排序的依据是先对VehicleNum由小到大排序,在每个相同的VehicleNum中对Stime由小到大排序
 2 data = data.sort_values(by = ['VehicleNum','Stime'])
 3 data
 4 #对data生成Speed2列,这一列是Speed列整体往上移一行
 5 data['Speed2'] = data['Speed'].shift(-1)
 6 #剔除数据中的异常,对OpenStatus列用到的条件是:
 7 #用到的条件是:
 8 #1.后一位和前一位相等
 9 #2.但是后一位与中间一位不等
10 #3.前一条数据,后一条数据的车牌相等
11 #4.中间一条数据,后一条数据的车牌相等
12 data = data[-((data['OpenStatus'].shift() == data['OpenStatus'].shift(-1))&\
13 (data['OpenStatus'].shift(-1) != data['OpenStatus'])&\
14 (data['VehicleNum'].shift(-1) == data['VehicleNum'])&\
15 (data['VehicleNum'].shift() == data['VehicleNum']))]

 

2. 提取OD数据

提取格式:每一次出行是一行记录,包括车辆ID、起点经纬度、起点时间、终点经纬度、重点时间。

 1 #先把data的Speed1和Speed2两列去掉
 2 data = data.drop(['Speed1','Speed2'],axis = 1)
 3 #创建一列OpenStatus1,它的值是OpenStatus整体往上移一行
 4 data['OpenStatus1'] = data['OpenStatus'].shift(-1)
 5 #创建一列StatusChange,它的值是OpenStatus1减去OpenStatus,表示载客状态的变化
 6 data['StatusChange'] = data['OpenStatus1']-data['OpenStatus']
 7 #提取其中的OD信息
 8 oddata = data[(data['StatusChange']==1)|(data['StatusChange']==-1)&\
 9 (data['VehicleNum'] == data['VehicleNum'].shift(-1))]
10 oddata = oddata[['VehicleNum', 'Stime', 'Lng', 'Lat', 'StatusChange']]
11 oddata.columns = ['VehicleNum', 'Stime', 'SLng', 'SLat', 'StatusChange']
12 oddata['Etime'] = oddata['Stime'].shift(-1)
13 oddata['ELng'] = oddata['SLng'].shift(-1)
14 oddata['ELat'] = oddata['SLat'].shift(-1)
15 oddata
16 oddata = oddata[(oddata['VehicleNum'] == oddata['VehicleNum'].shift(-1))&\ 17 (oddata['StatusChange'] == 1)] 18 oddata = oddata.drop('StatusChange',axis = 1) 19 oddata

 


 

 

 

3. 数据存储

利用data.to_csv()

二、GPS数据的集计与可视化

1. 数据质量评估

从三个方面衡量数据质量:个体维度、时间维度、空间维度

 

2. 按小时集计出租车GPS数据

集计(聚合):把大规模的数据按照某一些条件统计数据的数据量。

首先在pandas中为每一条数据生成一个单独的列‘hour’,这列表达这个数据是属于哪个小时。

生成‘hour’列后,利用data.groupby('Hour')['VehicleNum'].count()进行数据集计。

1 #最快的方法获得数据小时
2 data['Hour'] = data['Stime'].apply(lambda r:r.split(':')[0])
3 #数据按照小时集计
4 hourcount = data.groupby('Hour')['VehicleNum'].count().rename('count').reset_index()

 

 

 

 

3. 利用matplotlib绘制折线图

理解数据原则:图>表>文字

 

 

 1 import matplotlib.pyplot as plt
 2 fig = plt.figure(1,(8,4),dpi = 300)
 3 ax = plt.subplot(111)
 4 plt.sca(ax)
 5 
 6 
 7 plt.plot(hourcount['Hour'],hourcount['count'],'k-')
 8 plt.plot(hourcount['Hour'],hourcount['count'],'k.')
 9 
10 plt.bar(hourcount['Hour'],hourcount['count'],width = 0.5)
11 
12 
13 plt.ylim(0,80000)
14 plt.title('Hourly data volumn')
15 plt.xlabel('Hour')
16 plt.ylabel('Data volumn')
17 plt.savefig('test.png',format = 'png',bbox_inches = 'tight')
18 plt.show()

 

 

 

 

 

 

 

 

 

 

 

 ps:

 

 

 

 

标签:实战,plt,oddata,数据,VehicleNum,shift,data,GPS
From: https://www.cnblogs.com/zc-dn/p/16708933.html

相关文章