GoTrackIt应用指南:共享单车时空轨迹优化

本篇文章我们来基于GoTrackIt 包来研究一下里面的轨迹数据清洗功能,该包这部分功能是一个用于处理和分析GPS轨迹数据的工具,能够帮助用户进行诸如卡尔曼滤波平滑、轨迹简化;停留点删除、增密、降频、滑动窗口平滑的链式操作,并提供多种方法来分割和分析轨迹数据,确保能够从原始数据中提取出高质量、有价值的轨迹信息,通过这些先进的算法和技术减少噪声干扰和冗余数据。

这里是该作者对包的内容介绍和用法:轨迹处理 - GoTrackIt

第一步:先把原始数据按一定处理逻辑进行清洗,我使用的逻辑可以参考我这篇:

共享单车轨迹数据分析:以厦门市共享单车数据为例(十二)-CSDN博客

处理结果如下;

第二步:我们需要把数据预处理成特定格式,'agent_id','time','lng','lat';因为这里的'agent_id'需要保证是唯一id,所以把BICYCLE_ID和ORDER_NUM做了关联,目的是为了生成唯一id;

df['agent_id'] = df['BICYCLE_ID'] + '&' + df['ORDER_NUM']

完整代码#运行环境 Python 3.11

import pandas as pd

# 读取CSV文件
df = pd.read_csv(r'D:\data\gxdc.csv', encoding='gbk')  # 注意可能需要调整编码


# 创建新的agent_id,格式为 BICYCLE_ID&ORDER_NUM
df['agent_id'] = df['BICYCLE_ID'] + '&' + df['ORDER_NUM'].astype(str)

# 选择并重命名指定列
selected_df = df[['agent_id', 'LOCATING_TIME', 'LATITUDE', 'LONGITUDE']].copy()

# 重命名列
selected_df.columns = ['agent_id', 'time', 'lat', 'lng']

# 转换时间格式
selected_df['time'] = pd.to_datetime(selected_df['time']).dt.strftime('%Y-%m-%d %H:%M:%S')

# 保存为新的CSV
selected_df.to_csv(r'D:\data\processed_gps_data.csv', index=False, encoding='utf-8-sig')

print("处理完成,已保存到 D:\data\processed_gps_data.csv")

这里有一个小tips: 就是csv另存为时间字段精度丢失的问题,如果你现有的csv有时间标签且时间精度到秒的话,直接另存为文件会丢失精度,因为csv默认格式仅保存到分钟,所以你可以通过python脚本声明你要保存时间标签的颗粒度,再通过脚本另存为即可,如('%Y-%m-%d %H:%M:%S'),这样就可以保证csv时间字段精度不会丢失。

第三步:配置轨迹数据清洗的功能和参数,这些选用了3个功能和参数:去重停留点,增密,卡尔曼滤波,具体的参数配置和功能介绍原作者已经讲的很详细了,可以移步了解;

tp.del_dwell_points(dwell_l_length=5,dwell_n=2).dense(dense_interval=30).kf_smooth(p_deviation=0.01,o_deviation=0.1)    # 去重停留点,增密,卡尔曼滤波

完整代码#运行环境 Python 3.11

import os
import pandas as pd
from gotrackit.gps.Trajectory import TrajectoryPoints

if __name__ == '__main__':
    # 读取处理后的CSV文件
    gps_df = pd.read_csv(r'D:\data\processed_gps_data.csv')

    # 去除同一出行中的相同定位时间点数据
    gps_df.drop_duplicates(subset=['agent_id', 'time'], keep='first', inplace=True)
    gps_df.reset_index(inplace=True, drop=True)

    # 构建TrajectoryPoints类, 并且指定一个plain_crs
    tp = TrajectoryPoints(gps_points_df=gps_df, time_unit='ms', plain_crs='EPSG:32649')


    # 使用链式操作自定义预处理的先后顺序, 只要保证kf_smooth()操作后没有执行 - 滑动窗口平滑、增密,处理后的轨迹数据即可得到分项速度数据

    tp.del_dwell_points(dwell_l_length=5,dwell_n=2).dense(dense_interval=30).kf_smooth(p_deviation=0.01,o_deviation=0.1)    # 去重停留点,增密,卡尔曼滤波

    # 获取清洗后的结果
    # _type参数可以取值为 df 或者 gdf
    process_df = tp.trajectory_data(_type='df')

    # 输出文件夹
    out_fldr = r'D:\data'

    # 存储结果
    if not os.path.exists(out_fldr):
        os.makedirs(out_fldr)

    process_df.to_csv(os.path.join(out_fldr, r'after_reprocess_gps.csv'), encoding='utf_8_sig', index=False)

    # 输出为html进行动态可视化
    tp.export_html(out_fldr=out_fldr, file_name='sample', radius=9.0)

    print("处理完成,结果已保存到 D:\data")

脚本会输出一个after_reprocess_gps.csv,也就是坐标经过调整的轨迹坐标,和每个唯一订单id的HTML,如果订单数据量太多的话,可以注释掉HTML输出部分;

本篇文章我们将继续以厦门市的共享单车数据作为研究对象,这里我们选取部分轨迹数据来探究共享单车gps打点数据的路径优化,其中蓝点是预处理前点位,黄点预处理后点位,具体的参数部分可以参考文档,来调整优化的效果;

文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/936294.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【kubernetes】k8s集群的简述与搭建

简述 Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序 关键特性 自动化部署和回滚:Kubernetes 可以自动化地部署和回滚应用程序,确保应用程序始终处于预期的状态。服务发现…

华为USG系列防火墙 RESTCONF NAT配置 Python实现

目录 前言 文档下载 开启RESTCONF接口 Python 实现SNAT增删改查 查看nat映射列表 查看私网地址池 查看源地址池(公网) 查看nat映射规则 创建nat映射规则 创建私网地址池 创建源地址池 创建nat映射规则 修改NAT映射规则 删除NAT映射规则 …

token失效重新存储发起请求

import axios from axios import { MessageBox, Message } from element-ui import store from /store import Router from /router import { getCookie, setToken, setCookie } from ./auth// 因为后端环境区分v1 v2 剔除测试盛传的环境配置,并添加统一前缀 const …

HTML综合

一.HTML的初始结构 <!DOCTYPE html> <html lang"en"><head><!-- 设置文本字符 --><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 设置网页…

【合作原创】使用Termux搭建可以使用的生产力环境(六)

前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境&#xff08;五&#xff09;-CSDN博客我们讲到了如何美化xfce4桌面&#xff0c;达到类似于Windows的效果&#xff0c;这一篇将继续在上一篇桌面的基础上给我们的系统装上必要的软件&#xff0c;让它做到真正可以使…

python3中幂怎么表示

首先导入math模块&#xff0c;然后调用pow()函数&#xff0c;即可实现幂运算&#xff0c;示例如下&#xff1a; import math math.pow(2&#xff0c;3) 结果如下&#xff1a; 8

AES笔记整理

文章目录 1. 简介2. 密钥加法层2. 字节代换层3. 行位移 - ShiftRows4. 列混淆 - MixColumn5. 其他5.1列混淆矩阵乘法运算5.2 AES密钥生成 6. 参考资料 以下内容为信息安全开发过程中&#xff0c;AES对称加密算法的笔记&#xff0c;大部分内容转载其他文章&#xff0c;若描述不清…

elementUI修改table样式

在Vue项目中&#xff0c;如果使用的是单文件组件&#xff08;.vue&#xff09;&#xff0c;并且样式是通过<style>标签定义的&#xff0c;vue2可以使用/deep/&#xff0c;vue3可以使用::v-deep选择器来修改ElementUI组件的样式。 1.修改表头背景色 /deep/.el-table__head…

【WiFi】WiFi中RSSI、SNR、NF之间关系及说明

RSSI&#xff08;接收信号强度指示&#xff09; 定义&#xff1a; RSSI 是一个相对值&#xff0c;用于表示接收到的无线信号的强度。它通常由无线设备的硬件&#xff08;如无线网卡或无线芯片&#xff09;直接提供。 计算&#xff1a; RSSI 的计算通常是由设备的无线芯片完成的…

爬虫基础知识点

最近看了看爬虫相关知识点&#xff0c;做了记录&#xff0c;具体代码放到了仓库&#xff0c;本文仅学习使用&#xff0c;如有违规请联系博主删除。 这个流程图是我使用在线AI工具infography生成的&#xff0c;这个网站可以根据url或者文本等数据自动生成流程图&#xff0c;挺…

路由引入问题(双点双向路由回馈问题)

简介 总所周知&#xff0c;路由引入import又称路由重分发redistribute&#xff0c;为了解决不同路由协议进程间路由信息不互通而使用的技术&#xff0c;由于不同路由协议的算法、机制、开销等因素的差异&#xff0c;它们之间无法直接交换路由信息。因此&#xff0c;路由引入技…

LAVE——基于大语言模型的新型代理辅助视频编辑工具允许用户根据自己的编辑风格进行调整

概述 论文地址&#xff1a;https://arxiv.org/abs/2402.10294 视频是一种非常强大的交流和讲述故事的媒介。随着社交媒体和视频共享平台的出现&#xff0c;视频的受欢迎程度直线上升&#xff0c;许多人都在制作和分享自己的内容。然而&#xff0c;对于初学者来说&#xff0c;视…

Java安全—SpringBootActuator监控泄露Swagger自动化

前言 今天依旧是SpringBoot框架&#xff0c;估计还要一篇文章才能把它写完&#xff0c;没办法&#xff0c;Java安全的内容太多了。 Actuator SpringBoot Actuator模块提供了生产级别的功能&#xff0c;比如健康检查&#xff0c;审计&#xff0c;指标收集&#xff0c;HTTP跟踪…

docker快速实现ELK的安装和使用

目录 一、ELK功能原理 二、项目功能展示​ 三、日志查询展示​ 四、ELK安装步骤 1、创建elasticsearch、kibana、filebeat相关data、log、conf目录 2、进入/usr/local/elk目录&#xff0c;并创建一个docker网络 3、启动 elasticsearch容器 4、运行kibana容器 5、启动f…

【Spark】Spark Join类型及Join实现方式

如果觉得这篇文章对您有帮助&#xff0c;别忘了点赞、分享或关注哦&#xff01;您的一点小小支持&#xff0c;不仅能帮助更多人找到有价值的内容&#xff0c;还能鼓励我持续分享更多精彩的技术文章。感谢您的支持&#xff0c;让我们一起在技术的世界中不断进步&#xff01; Sp…

从YOLOv5到训练实战:易用性和扩展性的加强

文章目录 前言一、模型介绍二、YOLOv5网络结构1.Input&#xff08;输入端&#xff09;&#xff1a;智能预处理与优化策略2.Backbone&#xff08;骨干网络&#xff09;&#xff1a;高效特征提取3.NECK&#xff08;颈部&#xff09;&#xff1a;特征增强与多尺度融合4.Prediction…

Java爬虫设计:淘宝商品详情接口数据获取

1. 概述 淘宝商品详情接口&#xff08;如Taobao.item_get&#xff09;允许开发者通过编程方式&#xff0c;以JSON格式实时获取淘宝商品的详细信息&#xff0c;包括商品标题、价格、销量等。本文档将介绍如何设计一个Java爬虫来获取这些数据。 2. 准备工作 在开始之前&#x…

AIGC 013-CoT用思维链挖掘自回归语言模型的潜在能力

AIGC 013-CoT用思维链挖掘自回归语言模型的潜在能力 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 纯自回归式语言模型&#xff0c;本来并不具备优秀推理能力&#xff0c;特别是在数学问题的推理。但是现在的生成模型是能实现一些数学的推理的。研究者认为当模型足够大…

上传文件时获取音视频文件时长和文本文件字数

获取音视频文件时长和文本文件字数 一、获取音视频文件时长二、计算文本文件字数 最近有个需求&#xff0c;要求上传文件时获取音视频文件时长和文本文件字数&#x1f436;。 发现这样的冷门资料不多&#xff0c;特做个记录。本文忽略文件上传功能&#xff0c;只封装核心的工具…

ue5.2 数字孪生(11)——Web_UI插件网页通信

Web_UI插件下载安装&#xff1a; https://github.com/tracerinteractive/UnrealEngine/releases 下载对应Ue版本的Web_UI插件以及相关的Json、Http库&#xff1b; 将插件安装到引擎根目录 Ue链接Web&#xff1a; 在项目中启用插件并重启项目&#xff1b; 创建基于Web的用户…