geolife笔记:整理处理单条轨迹

以 数据集笔记 geolife (操作篇)_geolife数据集-CSDN博客 轨迹为例

1 读取数据

import pandas as pd
data = pd.read_csv('Geolife Trajectories 1.3/Data//000/Trajectory/20081023025304.plt',header=None, skiprows=6,names=['Latitude', 'Longitude', 'Not_Important1', 'Altitude', 'Not_Important2', 'Date', 'Time'])
data=data[['Latitude', 'Longitude', 'Altitude', 'Date', 'Time']]
data

2 Date和Time 合并

data['Datetime'] = pd.to_datetime(data['Date'] + ' ' + data['Time'])
# to_datetime将这一列转换成时间
data=data[['Latitude', 'Longitude', 'Altitude', 'Datetime']]
data

3 只保留在北京城区的数据点

3.1 定义经纬度最值

import folium
BEIJING = [39.9, 116.41]                                                    
# central beijing coords, for map centres
B1 = 39.8,116.2                                          
# bbox limits for beijing extent
B2 =  40.0 ,116.5
m=folium.Map(location=BEIJING,start_zoom=14)
folium.Marker(B1).add_to(m)
folium.Marker(B2).add_to(m)
m

 3.2 进行地理位置筛选

data=data[(data['Latitude']>B1[0]) & (data['Latitude']<B2[0]) & (data['Longitude']>B1[1]) & (data['Longitude']<B2[1])] 
data

3.3 将time gap修改至5秒,保留每个5秒记录的第一条

data['Datetime_5s']=data['Datetime'].dt.floor('5s')
data

data=data.drop_duplicates(subset=['Datetime_5s'],keep='first')
data

4 去除停止点

data['is_moving'] = (data['Latitude'] != data['Latitude'].shift()) | (data['Longitude'] != data['Longitude'].shift())
#判断用户有没有移动:当前位置和上一位置是否相同data

data=data[data['is_moving']==True]
data=data[['Latitude','Longitude','Datetime_5s']]
data

 

5 将10分钟内没有记录的轨迹切分成两条轨迹

5.1 计算 time gap

data['time_diff']=data['Datetime_5s'].diff()
data

5.2 切分轨迹

data['split_id']=0
#split_id 将表示这是当前id 切分的第几段
data

mask=data['time_diff']>pd.Timedelta(minutes=10)
# 时间间隔大于10分钟的位置,记录一下
data.loc[mask,'split_id']=1
#这些位置的split_id记为1
data

data['split_id']=data['split_id'].cumsum()
#出现过1的位置,到下一次出现1之前,split_id是一样的——比前一段多1
data

5.3 得到id

num=0
data['id']=str(num)
data

data['id']=data['id']+'_'+data['split_id'].astype(str)
data

6 计算每一条轨迹的长度,筛选短的,截断长的

6.1 计算相邻位置的经纬度差距 

lat_lon_diff = data.groupby('id',group_keys=False).apply(lambda group: group[['Latitude', 'Longitude']].diff())lat_lon_diff

6.2 计算haversine距离的函数

def haversine_distance(lat1, lon1, lat2, lon2):R = 6371  # Earth radius in kilometersdlat = np.radians(lat2 - lat1)dlon = np.radians(lon2 - lon1)a = np.sin(dlat/2) * np.sin(dlat/2) + np.cos(np.radians(lat1)) * np.cos(np.radians(lat2)) * np.sin(dlon/2) * np.sin(dlon/2)c = 2 * np.arctan2(np.sqrt(a), np.sqrt(1-a))return R * c

6.3 计算同一轨迹相邻位置的距离

import numpy as npdistance = lat_lon_diff.apply(lambda row: haversine_distance(row['Latitude'], row['Longitude'], 0, 0), axis=1)
data['distance']=distance
data

 6.4 计算同一id的累积距离

data['accum_dis']=data.groupby('id')['distance'].cumsum()data

6.5 得到每一个id的轨迹距离

iid=data.groupby('id')['accum_dis'].max()iid=iid.reset_index(name='dis')
iid

6.6 筛选长度大于1km的

iid=iid[iid['dis']>=1]
data=data[data['id'].isin(iid['id'])]
data

6.7 将长度长于10km的轨迹拆分成两条,并去掉拆分后长度小于1km的

data['split_traj_id']=data['accum_dis']//10
data['split_traj_id']=data['split_traj_id'].fillna(0)
data['split_traj_id']=data['split_traj_id'].astype(int).astype(str)
data

data['id']=data['id']+'_'+data['split_traj_id']
data

去除切分后长度小于1km的:

iid=data.groupby('id')['accum_dis'].max()
iid=iid.reset_index(name='distance')
iid

 

iid=iid[iid['distance']>1]
data=data[data['id'].isin(iid['id'])]
data

7 剔除记录数量小于10条的轨迹

iid=data.groupby('id').size()
iid=iid.reset_index(name='count')
iid=iid[iid['count']>=10]
iid

data=data[data['id'].isin(iid['id'])]

8 去除“staypoint”

这里的staypoint 意为 最值经纬度对应的距离小于1km

latlon=pd.DataFrame()
latlon['max_lat']=data.groupby('id')['Latitude'].max()
latlon['min_lat']=data.groupby('id')['Latitude'].min()
latlon['max_lon']=data.groupby('id')['Longitude'].max()
latlon['min_lon']=data.groupby('id')['Longitude'].min()
latlon['max_dis']=latlon.apply(lambda row: haversine_distance(row['max_lat'],row['max_lon'],row['min_lat'],row['min_lon']),axis=1)latlon=latlon[latlon['max_dis']>=1]
latlon

data=data[data['id'].isin(latlon.index)]
data

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GEE笔记】在线分类流程,标注样本点、分类和精度评价

GEE在线分类流程 介绍 GEE&#xff08;Google Earth Engine&#xff09;是一个强大的地理信息处理平台&#xff0c;可以实现在线的遥感影像分析和处理。本文将介绍如何使用GEE进行在线的分类流程&#xff0c;包括标注样本点、分类和精度评价。本文以2020年5月至8月的哨兵2影像…

什么是散列函数

散列函数是一种公开的数学函数。散列函数运算的输入信息也可叫作报文。散列函数运算后所得到的结果叫作散列码或者叫作消息摘要。散列函数具有如下一些特点&#xff1a; &#xff08;1&#xff09;不同内容的报文具有不同的散列码&#xff0c;而一旦原始报文有任何改变&#xf…

__attribute__ 详解

GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。 特征: __attribute__书写特征是: __attribute__前后都有两个下划线,并切后面会紧…

文件管理和操作工具Path Finder mac功能介绍

Path Finder mac是一款Mac平台上的文件管理和操作工具&#xff0c;提供了比Finder更丰富的功能和更直观的用户界面。它可以帮助用户更高效地浏览、复制、移动、删除和管理文件&#xff0c;以及进行各种高级操作。 Path Finder mac软件功能 - 文件浏览&#xff1a;可以快速浏览文…

【数据结构 — 排序 — 插入排序】

数据结构 — 排序 — 插入排序 一.排序1.1.排序的概念及其运用1.1.1排序的概念1.1.2排序运用1.1.3 常见的排序算法 二.插入排序2.1.直接插入排序2.1.1.算法讲解2.1.2.代码实现2.1.2.1.函数定义2.1.2.2.算法接口实现2.1.2.3.测试代码实现2.1.2.4.测试展示 2.2.希尔排序2.2.1.算法…

ASO优化:帮助实现企业和用户的共赢

大数据时代APP拉获新客&#xff0c;ASO优化应该这么玩&#xff01; 市场那么大&#xff0c;用户那么广。企业设计的APP如何在茫茫人群中精准地把自己送到用户面前&#xff0c;并与ta产生沟通呢。随着时代的发展&#xff0c;数据成为企业竞争的核心。APP的营销发展离不开数据推…

gcc tips - GCC使用技巧与高级特性

目录 1. 获取 GCC 编译器预定义的宏 2. 列出依赖的头文件 3. 保存预处理结果到文件&#xff08;展开define, 展开include header&#xff09; 4. 写回调跟踪记录函数运行 -finstrument-functions 5. -fdump-rtl-expand 画函数调用关系图 GCC&#xff0c;全称GNU Compiler …

第一课【习题】三方库

三方组件是开发者在系统能力的基础上进行了一层具体功能的封装&#xff0c;对其能力进行拓展的工具 。 可以通过ohpm uninstall 指令下载指定的三方库 lottie使用loadAnimation方法加载动画。 通过ohpm安装lottie后&#xff0c;在哪个文件中会生成相关的配置信息&#xf…

C++ - 哈希

在顺序结构以及平衡树中&#xff0c;由于元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经过关键码的多次比较&#xff1b;比如顺序表中需要从表头开始依次往后比对寻找&#xff0c;查找时间复杂度为 O(N)&#xff0c;平衡树中需…

快速登录界面关于如何登录以及多账号列表解析以及config配置文件如何读取以及JsLogin模块与SdoLogin模块如何通信(4)

1、### Jslogin模块与前端以及JsLogin模块与Sdologin的交互 配置文件的读取: <CompanyIdForQq value"301"/> <CompanyIdForWx value"300"/><CompanyIdForWb value"302"/><qq value"https://graph.qq.com/oauth2.0/au…

freertos统计任务运行时间和堆栈使用情况(快速应用篇)

这里写自定义目录标题 背景配置FreeRTOSCconfig.h统计时钟源任务中打印 背景 本文直接讲解如果快速实现freertos打印任务运行时间&#xff0c;堆栈使用情况等调试信息&#xff0c;不讲解原理。 配置 FreeRTOSCconfig.h 增加以下代码&#xff1a; #define configUSE_TRACE_…

git clone 命令

git clone 是一个用于克隆&#xff08;clone&#xff09;远程 Git 仓库到本地的命令。 git clone 可以将一个远程 Git 仓库拷贝到本地&#xff0c;让自己能够查看该项目&#xff0c;或者进行修改。 git clone 命令&#xff0c;你可以复制远程仓库的所有代码和历史记录&#xf…

template

类型&#xff1a; string 详细&#xff1a; 一个字符串模板作为 Vue 实例的标识使用。模板将会替换挂载的元素。挂载元素的内容都将被忽略&#xff0c;除非模板的内容有分发插槽。 如果值以 # 开始&#xff0c;则它将被用作选择符&#xff0c;并使用匹配元素的 innerHTML 作为…

深入了解 Axios 拦截器

深入了解 Axios 拦截器 本文将向您介绍什么是 Axios 拦截器以及如何使用它们。通过分步指南和示例代码&#xff0c;您将学习如何使用 Axios 拦截器来处理请求和响应&#xff0c;并添加授权和错误处理。 什么是 Axios 拦截器&#xff1f; Axios 拦截器允许您在请求发送和响应…

阿里云SLB的使用总结

一、什么是SLB 实现k8s的服务service的一种推荐方式&#xff0c;也是服务上云后&#xff0c;替代LVS的一个必选产品。 那么它有什么作用呢&#xff1f; 1、负载均衡&#xff0c;是它与生俱来的。可以配置多个服务器组&#xff1a;包括虚拟服务器组、默认服务器组、主备服务器…

markdown快捷键

markdown快捷键 快捷键 Markdown 图标 快捷键 撤销 Ctrl Z 重做 Ctrl Y 加粗 Ctrl B 斜体 Ctrl I 标题 Ctrl Shift H 有序列表 Ctrl Shift O 无序列表 Ctrl Shift U 待办列表 Ctrl Shift C 插入代码 Ctrl Shift K 插入链接 Ctrl Shift L 插入图片 Ctrl Shif…

JUnit 之初体验

文章目录 1.定义2.引入1&#xff09;使用 Maven 工具2&#xff09;使用 Gradle 工具3&#xff09;使用 Jar 包 2.样例0&#xff09;前提1&#xff09;测试类2&#xff09;测试方法3&#xff09;测试断言4&#xff09;实施 总结 1.定义 JUnit 是一个流行的 Java 单元测试框架&a…

H5ke14--1--拖放

介绍drag,drop 一.被拖动元素,目标(释放区) 元素要设置dragable属性:true,false,auto 被拖动元素上面有三个事件,drag,dragend,按下左键,移动种,鼠标松,这三个事件一般只用获取我们的被拖动元素 冒泡:event是可以继承的,mouseevent鼠标事件,dragevent拖放事件,前面都是一个…

ubuntu 修改系统时间,解决更新软件报错问题

ubuntu在更新软件时出现E: Release file for http://security.ubuntu.com/ubuntu/dists/bionic-security/InRelease 错误 网上解决方法一&#xff1a;修改系统时间 修改时区 timedatectl set-timezone Asia/Shanghai 查看当前时间 date -R date -s “2023-12-5 15:57:15” 查看…

C++11多线程基本知识点

文章目录 进程和线程的概念进程和线程的区别 C多线程的基本内容创建线程std::thread线程IDstd::thread对象生命周期和线程等待和分离线程参数传递引用类型成员函数作为线程入口和线程基类的封装lambda临时函数作为线程入口函数lambda函数lambda线程 多线程同步和通信多线程通信…