轨迹数据可视化

轨迹数据可视化

收集数据

本想搜集一批行人轨迹数据,来做真实化的移动模型。即Trace-based models

移动模型

  • 综合模型(synthetic models ):RWP: Random Waypoint 等

  • 基于轨迹跟踪的模型(Trace-based models)

然而,将数据经过预处理,并可视化后,发现是一批轨道交通、车辆的轨迹数据,瞬间吐血,白费了功夫。

可视化过程

原始数据

import numpy as np
import pandas as pd
import datetime
user = pd.read_table('user.txt',header = None, sep='|',names=['id','date','longitude ','latitude'])
user = user.sort_values(by="date" , ascending=True)
user 
00001|20180111180209|118.8275|31.8975
00001|20180111064857|118.8325|31.9075
00001|20180111204610|118.7975|31.9025
00001|20180111005241|118.7975|31.9025
00001|20180111061033|118.7975|31.9025
00001|20180111125144|118.7975|31.9025
00001|20180111142448|118.7975|31.9025
00001|20180111232633|118.7975|31.9025
00001|20180111104726|118.7975|31.9025
00001|20180111064138|118.8375|31.9075
00001|20180111162847|118.8175|31.9025
00001|20180111135343|118.8175|31.9025
00001|20180111002147|118.8175|31.9025
00001|20180111225535|118.8175|31.9025
00001|20180111084314|118.8175|31.9025
00001|20180111012336|118.8175|31.9025
00001|20180111111821|118.8175|31.9025
00001|20180111192420|118.8175|31.9025
.....................................

日期处理

# 交换 latitude 和 longitude 两列
user['date'] = user['date'].apply(str)
data = user.values
data = data[:,[0, 1, 3, 2]]
data = pd.DataFrame(data)
# 处理日期
data[1] = data[1].apply(str)
data[1] = data[1].apply(lambda x: datetime.datetime.strptime(x, "%Y%m%d%H%M%S"))
data[1] = pd.to_datetime(data[1])
# 设置索引
data = data.set_index(0)
data.index.name = 'id'
data.columns = ['date','latitude ','longitude']
data
00001,2018-01-11 00:21:47,31.9025,118.8175
00001,2018-01-11 00:52:41,31.9025,118.7975
00001,2018-01-11 01:23:36,31.9025,118.8175
00001,2018-01-11 06:10:33,31.9025,118.7975
00001,2018-01-11 06:41:38,31.9075,118.8375
00001,2018-01-11 06:48:57,31.9075,118.8325
00001,2018-01-11 08:43:14,31.9025,118.8175
00001,2018-01-11 10:47:26,31.9025,118.7975
00001,2018-01-11 11:18:21,31.9025,118.8175
00001,2018-01-11 12:51:44,31.9025,118.7975
00001,2018-01-11 13:53:43,31.9025,118.8175
00001,2018-01-11 14:24:48,31.9025,118.7975
00001,2018-01-11 16:28:47,31.9025,118.8175
00001,2018-01-11 18:02:09,31.8975,118.8275
00001,2018-01-11 19:24:20,31.9025,118.8175
00001,2018-01-11 20:46:10,31.9025,118.7975
00001,2018-01-11 22:55:35,31.9025,118.8175
00001,2018-01-11 23:26:33,31.9025,118.7975

现在数据就很直观:可以发现搜集的部分数据采样间隔很大,从几十分钟到几个小时,难以体现连续性。

接下来在地图上可视化展示。

数据可视化

使用folium包轨迹可视化

import folium
import os
import pandas as pd
import numpy as np
def read_gps_data(path):
    P = pd.read_csv(path).values  # 读取csv文件,输出为narray
    locations = P[:, 1:3].tolist()  # narray转换成list
    return locations
def draw_gps(locations, output_path, file_name):
    """
    绘制gps轨迹图
    :param locations: list, 需要绘制轨迹的经纬度信息,格式为[[lat1, lon1], [lat2, lon2], ...]
    :param output_path: str, 轨迹图保存路径
    :param file_name: str, 轨迹图保存文件名
    :return: None
    """
    m = folium.Map(locations[0], zoom_start=30, attr='default')  # 中心区域的确定

    folium.PolyLine(  # polyline方法为将坐标用实线形式连接起来
        locations,  # 将坐标点连接起来
        weight=4,  # 线的大小为4
        color='red',  # 线的颜色为红色
        opacity=0.8,  # 线的透明度
    ).add_to(m)  # 将这条线添加到刚才的区域m内

    # 起始点,结束点
    folium.Marker(locations[0], popup='<b>Starting Point</b>').add_to(m)
    folium.Marker(locations[-1], popup='<b>End Point</b>').add_to(m)

    m.save(os.path.join(output_path, file_name))  # 将结果以HTML形式保存到指定路径
if __name__ == '__main__':
    path = '1.csv'
    locations = read_gps_data(path)
    draw_gps(locations, 'trace', '1.html')

结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最终

最终,在github上找了一批行人轨迹数据:https://github.com/purdue-dcsl/mcs-mobility-trace.git

  • 3
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值