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.pswp.cn/news/209008.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209008.shtml
英文地址,請注明出處:http://en.pswp.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線程 多線程同步和通信多線程通信…