数据集笔记 geolife (操作篇)

数据集介绍可看:数据集笔记: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 np


pos_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 np


pos_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

猜你喜欢

转载自blog.csdn.net/qq_40206371/article/details/132733842