数据集介绍可看:数据集笔记:GeoLife GPS 数据 (user guide)_UQI-LIUWJ的博客-CSDN博客
1 读取数据
import os
os.chdir('D:/Geolife Trajectories 1.3/Geolife Trajectories 1.3/Data/000/Trajectory')import pandas as pd
data = pd.read_csv('20081023025304.plt', skiprows=6, header=None)
data
1.1 修改列名+去除不重要的列
data.columns=['Latitude', 'Longitude', 'Not_Important1', 'Altitude', 'Not_Important2', 'Date', 'Time']
data=data[['Latitude', 'Longitude', 'Altitude', 'Date', 'Time']]
data
1.2 Date和Time合并
data['Datetime'] = pd.to_datetime(data['Date'] + ' ' + data['Time'])
# to_datetime将这一列转换成时间
data=data[['Latitude', 'Longitude', 'Altitude', 'Datetime']]
data
2 相邻每条记录之间的距离
2.1 时间距离
data['Time_Difference'] = data['Datetime'].diff()
data
2.1.1 Time_Difference 转换成单位秒
data['Time_Difference'] = data['Datetime'].diff().dt.total_seconds()
data
2.1.2 查看Time_Difference的情况
data['Time_Difference'].describe()
2.2 空间距离
from geopy import distance
distances=[None]
for i in range(1, len(data)):point1=[data.at[i-1,'Latitude'],data.at[i-1,'Longitude']]point2=[data.at[i,'Latitude'],data.at[i,'Longitude']]dis=distance.distance(point1,point2).meters#相邻两个点的距离(以米结算)distances.append(dis)
data['distance']=distances
data
2.2.1 查看空间距离的情况
data['distance'].describe()
3 可视化
3.1 整体轨迹
import folium
import numpy as nppos_lst_=pos_lst[:]
lat,lon=np.mean(pos_lst_,axis=0)
m=folium.Map(location=(lat,lon),zoom_start=14)folium.PolyLine(locations=pos_lst_,color='red').add_to(m)m
3.1.1 整体轨迹+每一个记录点
可以看到,其实它相当于三段子轨迹拼成的。就像前面对空间和时间距离的describe一样,大部分都是比较小的时空距离,但max值会大很多
3.2 找到”跳跃“的区段
data[data['Time_Difference']>=300]
这里我们有特别好的方法,就是每一个这种区间我都可视化以下,找到这两个“断点”应该在哪里
3.2.1 148点附近
import folium
import numpy as nppos_lst_=pos_lst[147:151]
lat,lon=np.mean(pos_lst_,axis=0)
m=folium.Map(location=(lat,lon),zoom_start=14)folium.PolyLine(locations=pos_lst_,color='red').add_to(m)
for i in pos_lst_:folium.Marker(location=i,icon=folium.Icon(icon='cloud',icon_color='blue')).add_to(m)
m
此时0~147 是比较连贯的轨迹(后面就不贴代码了,把上述代码pos[147:151]的这两个数字替换掉就可以)
3.2.2 470附近
3.2.3 608附近
此时已经找到了两个“断点”了,我们看一下其他时间间隔大的是什么情况
3.2.4 790 附近
3.2.5 873 附近
3.2.6 895 附近
3.3 “分割”之后的三条轨迹
0~147
152~468
472:end