出租车GPS轨迹数据分析

本次实验中,我们需要使用python对杭州市出租车轨迹数据进行清洗。在aistudio平台创建项目,搜索杭州市出租车轨迹数据集。

•使用numpy、pandas等完成“00.csv”文件读取;

#读取数据
#引入folium地图包
!pip install folium    

import folium
import pandas as pd
import numpy as np
import time,datetime
#读取文档数据
df=pd.read_csv('/home/aistudio/data/data168432/00new.csv.csv')
print(df)

•剔除无效数据:GPS 采集出租车轨迹数据的过程中,可能因设备问题 导致数据没有采集到,故而在原始轨迹数据集中记录为空值。因此,需 要将每个采样点中有效字段为空值的数据进行剔除,即剔除 DeviceID、 Longitude、Latitude、Speed、Timestamp 或 Status 任意一个字段为 空的数据。


#统计缺失值数据

df.isnull().sum()

#剔除缺失值行无效数据

df = df.dropna() 

#输出剔除空值行后的数据
print(df)

 

•剔除速度异常数据:原始出租车轨迹数据集中 Speed 的单位为 𝑘𝑚/h, 值域为 [0, 512]。将采样点中速度不在值域为 [0, 150] 范围内的数据视为异常数据,并剔除此类异常数据。

#剔除速度值异常数据

df.drop(df[(df.Speed > 150) & (df.Speed < 0)].index, inplace=True)

#输出删除速度值异常后的数据
print(df)

•剔除重复数据:GPS 设备每隔一段时间( 1s 到 20s 之间)对出租车进 行一次采样,由于设备问题重复上传数据,导致原始轨迹数据集中存在 有效字段完全相同的数据。为了保证数据的准确性,需要对这类重复的数据予以剔除。

#剔除重复数据

df.drop_duplicates()

#输出删除重复数据后的数据
print(df)

 •经度和纬度标准化:Longitude 和 Latitude 字段对应的值是出租车经度值和纬度值乘以 转化为实际的经度值和纬度值。如 Longitude 值为 1191200308 和 Latitude 值为 293102620 分别经过标准化处理后为 119.1200308 和 29.3102620。

#经度和纬度标准化

df.Longitude = df.Longitude / 10000000
df.Latitude = df.Latitude / 10000000

#输出经纬度标准化后的数据
print(df)

•时间标准化:时间戳 TimeStamp 是 Unix 时间,定义为从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数。标准化时间戳 可以通过调用 python 内置处理时间 time 模块,首先使用 time 模块中 的 localtime 将时间戳转化为时间数组,然后应用 time 模块中的 strftime 将时间数据转化为指定的日期格式“%y-%m-%d %H:%M:%S”。 其中 y,m,d,H,M,S分别表示年,月,日,小时,分钟和秒钟。如 时间戳 TimeStamp 值为 1427828315 经过标准化处理后为“2015-4-1 2:58:35”。

#时间标准化

df.TimeStamp = pd.to_datetime(df.TimeStamp,unit='s')

#输出时间标准化后的数据
print(df)

 

•研究区域的选取:如图所示,选取一天中部分出租车轨迹数据的采 样点映射到地图上,我们可以清晰的发现采样点主要分布在杭州市的 主城区。根据数据分布属性,主要研究杭州市的 9 个城区,包括西湖区、上城区、下城区、拱墅区、滨江区、江干区、萧山区、富阳区、 余杭区,故此选取原始轨迹数据中 Longitude 和 Latitude 值域分别在 [119.869,120.461] 和 [30.012,30.4439] 的数据。

在地图中设置定点位置

#设置矩形框顶点位置

points = ([30.012, 119.869], [30.012, 120.461], [30.4439, 119.869], [30.4439, 120.461])

1.在出租车轨迹数据预处理完后,提取数据的时间属性,时间细粒度可以为一小时/半小时,统计每个时间细粒度内的采样点的数目,采用python matplotlib绘制采样点数目(即流量)随时间的动态变化的折现图,统计早高峰时间区间和晚高峰的时间区间;

#将采样点映射到地图上

#新建地图,中心点为(30.22795, 120.165),缩放值为10.5,添加比例尺
m = folium.Map([30.22795, 120.165], zoom_start=10.5, control_scale=True)

#设置矩形框顶点位置
points = ([30.012, 119.869], [30.012, 120.461], [30.4439, 119.869], [30.4439, 120.461])

#画出范围矩形框
folium.Rectangle(bounds=points, color = '#ff7800', fill = False, fill_opacity=0.2).add_to(m)

#在地图上逐个标记点位
for lat, lng, in zip(df.Latitude, df.Longitude):
    folium.CircleMarker(
        [lat, lng],
        radius=5,
        color='yellow',
        fill=True,
        fill_color='red',
        fill_opacity=0.6
    ).add_to(m)

#将地图输出为.html格式
m.save('采样点映射.html')

m

#数据的时间属性

import matplotlib.pyplot as plt
from datetime import datetime
from dateutil.parser import parse

#复制TimeStamp为time提取小时
df['time'] = df.TimeStamp
df['hour'] = [x.strftime('%H') for x in df.time] #提取时间的小时数

traffic = df['hour'].drop_duplicates() #对小时去重

x = df.groupby('hour')['UNIQUEID'].count() #求每小时的客流量
y = x.reset_index() #重置索引,为绘制折线图做准备

plt.subplot(1,1,1)
plt.plot(y['hour'],y['UNIQUEID']) #绘制折线图

plt.xlabel('Time/hour')
plt.ylabel("Flow/number") #设置x,y轴标签

for a,b in zip(y['hour'],y['UNIQUEID']): #设置图上显示数据标签
    plt.text(a,b,b,va='center')
plt.title('Traffic flow statistics chart') #设置图标题

 2.探索数据的空间分布规律,采用leaflet.js将采样点绘制到地图上

#探索数据的空间分布规律

from folium.plugins import HeatMap

#新建地图,中心点为(30.22795, 120.165),缩放值为10.5,添加比例尺
heat_map = folium.Map([30.22795, 120.165], zoom_start=10.5, control_scale=True)

# Convert data format
heatdata = df[['Latitude','Longitude']].values.tolist()
#画图
HeatMap(heatdata).add_to(heat_map)

#将地图输出为.html格式
heat_map.save('空间热力图.html')

heat_map

我将项目放在了aistudio平台,点击下方链接就可以直接运行。

我发现了一篇高质量的实训项目,使用免费算力即可一键运行,还能额外获取8小时免费GPU运行时长,快来Fork一下体验吧。
出租车GPS轨迹数据分析:https://aistudio.baidu.com/aistudio/projectdetail/4939932?sUid=959235&shared=1&ts=1667276282875

  • 7
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jus sing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值