geolife 筆記:將所有軌跡放入一個DataFrame

?單條軌跡的處理:geolife筆記:整理處理單條軌跡-CSDN博客

?1 加載數據

import pandas as pd
import numpy as np
import datetime as dt
import osdata_dir = 'Geolife Trajectories 1.3/Data/'

1.1 列出所有文件夾

dirlist = os.listdir(data_dir)
dirlist
'''
['133','079','173','020','003','004','014','074',
...
'''

1.2 拼接出所有絕對路徑

folder_dirs = []
for dir in dirlist:  folder_dirs.append(data_dir + '/' + dir+'/'+'Trajectory')
folder_dirs
'''
['data/Geolife Trajectories 1.3/Data//133/Trajectory','data/Geolife Trajectories 1.3/Data//079/Trajectory','data/Geolife Trajectories 1.3/Data//173/Trajectory','data/Geolife Trajectories 1.3/Data//020/Trajectory','data/Geolife Trajectories 1.3/Data//003/Trajectory',
...
'''

1.3 列出所有文件

file_dirs=[]
for dir in folder_dirs:for file in os.listdir(dir):file_dirs.append(dir+'/'+file)
len(file_dirs),file_dirs
'''
(18670,['data/Geolife Trajectories 1.3/Data//133/Trajectory/20110130143621.plt','data/Geolife Trajectories 1.3/Data//133/Trajectory/20110419143237.plt','data/Geolife Trajectories 1.3/Data//133/Trajectory/20110421082008.plt','data/Geolife Trajectories 1.3/Data//133/Trajectory/20110420024807.plt',
...
'''

2? 讀取所有文件,并拼接到一個DataFrame中

2.1 計算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

2.2 讀取文件

所有對應的操作都在單條軌跡處理中已經說明

import pandas as pd
import numpy as np
traj=pd.DataFrame()
traj
num=0
for file in file_dirs:#read data:data = pd.read_csv(file,header=None, skiprows=6,names=['Latitude', 'Longitude', 'Not_Important1', 'Altitude', 'Not_Important2', 'Date', 'Time'])'''merge date and time'''data['Datetime'] = pd.to_datetime(data['Date'] + ' ' + data['Time'])data=data[['Latitude', 'Longitude', 'Altitude', 'Datetime']]'''retain positions in Beijing city'''data=data[(data['Latitude']>B1[0]) & (data['Latitude']<B2[0]) & (data['Longitude']>B1[1]) & (data['Longitude']<B2[1])] '''time gap to 5s, and remain first record every 5s'''data['Datetime_5s']=data['Datetime'].dt.floor('5s')data=data.drop_duplicates(subset=['Datetime_5s'],keep='first')'''remove stopping point'''data['is_moving'] = (data['Latitude'] != data['Latitude'].shift()) | (data['Longitude'] != data['Longitude'].shift())data=data[data['is_moving']==True]data=data[['Latitude','Longitude','Datetime_5s']]'''split trajs without records in 10min into 2 trajs (and update id)'''data['time_diff']=data['Datetime_5s'].diff()data['split_id']=0mask=data['time_diff']>pd.Timedelta(minutes=10)data.loc[mask,'split_id']=1data['split_id']=data['split_id'].cumsum()data['id']=str(num)num+=1data['id']=data['id']+'_'+data['split_id'].astype(str)'''calc each traj's length, filter out short trajs and truncate long ones'''#calculate nearby location's lon and lat gaplat_lon_diff = data.groupby('id',group_keys=False).apply(lambda group: group[['Latitude', 'Longitude']].diff())#calc nearby locationn's distancedistance = lat_lon_diff.apply(lambda row: haversine_distance(row['Latitude'], row['Longitude'], 0, 0), axis=1)data['distance']=distance#calculate each id's accumulated distancedata['accum_dis']=data.groupby('id')['distance'].cumsum()#split those trajs longer than 10km into 2 trajsdata['split_traj_id']=data['accum_dis']//10data['split_traj_id']=data['split_traj_id'].fillna(0)data['split_traj_id']=data['split_traj_id'].astype(int).astype(str)#get new iddata['id']=data['id']+'_'+data['split_traj_id']#remove those shorter than 1kmiid=data.groupby('id')['accum_dis'].max()iid=iid.reset_index(name='distance')iid=iid[iid['distance']>1]data=data[data['id'].isin(iid['id'])]'''filter trajs shorter than 10  records'''iid=data.groupby('id').size()iid=iid.reset_index(name='count')iid=iid[iid['count']>=10]data=data[data['id'].isin(iid['id'])]'''remove 'staypoints''''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]data=data[data['id'].isin(latlon.index)]data=data[['Latitude','Longitude','Datetime_5s','id']]#print(data)traj=pd.concat([traj,data])
traj

2.3 保存文件

traj.to_csv('geolife_processed.csv')

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209817.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209817.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209817.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Esxi登錄超時:“由于不活動超時,您已被注銷“,修改UserVars.HostClientSessionTimeout為0永不超時

Esxi登錄超時:“由于不活動超時&#xff0c;您已被注銷”,修改UserVars.HostClientSessionTimeout為0永不超時 UserVars.HostClientSessionTimeout0永不超時 Esxi網頁登錄后,一段時間不操作就會被注銷 提示: 由于不活動超時&#xff0c;您已被注銷 主機→管理→系統→高級設…

【linux】查看CPU和內存信息

之前咱們一起學習了查看內存的和CPU的命令。 ?mpstat &#xff1a; 【linux】 mpstat 使用 uptime&#xff1a;【Linux】 uptime命令使用 CPU的使用率&#xff1a;【linux】查看CPU的使用率 nmon &#xff1a;【linux】nmon 工具使用 htop &#xff1a;【linux】htop 命令…

文件格式對齊、自定義快捷鍵、idea

文件格式對齊 Shift Alt F 自動格式化代碼的快捷鍵&#xff08;如何配置自動格式化&#xff09; 日常編碼必備idea快捷鍵 [VS Code] 入門-自定鍵盤快捷鍵 文件格式對齊 文件格式對齊通常是通過編輯器或IDE提供的快捷鍵或命令完成的。以下是一些常見編輯器和IDE中進行文件…

四、C#筆記

/// <summary> /// 第七章&#xff1a;創建并管理類和對象 /// </summary> namespace Chapter7 { class Program { public static int Num 0;//7.6.1創建共享字段 public const double PI 3.1415926;//7.6.2使用const關鍵字創建靜態字段…

快速認識什么是:Docker

Docker&#xff0c;一種可以將軟件打包到容器中并在任何環境中可靠運行的工具。但什么是容器以及為什么需要容器呢&#xff1f;今天就來一起學快速入門一下Docker吧&#xff01;希望本文對您有所幫助。 假設您使用 Cobol 構建了一個在某種奇怪風格的 Linux 上運行的應用程序。您…

Linux C語言 41-進程間通信IPC之共享內存

Linux C語言 41-進程間通信IPC之共享內存 本節關鍵字&#xff1a;C語言 進程間通信 共享內存 shared memory 相關庫函數&#xff1a;shmget、shmat、shmdt、shmctl 什么是共享內存&#xff1f; 共享內存&#xff08;Shared Memory&#xff09;指兩個或多個進程共享一個給定的…

InnoDB Architecture MySQL 5.7 vs 8.0

innodb-architecture-5-7 innodb-architecture-8-0 圖片均來源于MySQL官網

【Vue】props與$emit的簡單理解

Vue組件 組件是Vue中不可或缺的一個功能&#xff0c;它可以將一個頁面劃分為多個獨立的內部組件&#xff0c;方便代碼的管理。 定義組件 <body><div id"App"><bcomp></bcomp></div><script>const app Vue.createApp({})cons…

【2023傳智杯-新增場次】第六屆傳智杯程序設計挑戰賽AB組-ABC題復盤解題分析詳解【JavaPythonC++解題筆記】

本文僅為【2023傳智杯-第二場】第六屆傳智杯程序設計挑戰賽-題目解題分析詳解的解題個人筆記,個人解題分析記錄。 本文包含:第六屆傳智杯程序設計挑戰賽題目、解題思路分析、解題代碼、解題代碼詳解 文章目錄 一.前言二.賽題題目A題題目-B題題目-C題題目-二.賽題題解A題題解-…

Servlet should have a mapping

第一種可能&#xff1a; 你就是沒寫Servlet <servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置springMVC需要加載的配置文件--><init-par…

Android studio生成二維碼

1.遇到的問題 需要生成一個二維碼&#xff0c;可以使用zxing第三方組件&#xff0c;增加依賴。 //生成二維碼 implementation com.google.zxing:core:3.4.1 2.代碼 展示頁面 <ImageViewandroid:id"id/qrCodeImageView"android:layout_width"150dp"an…

ubuntu 如何修改主機名稱

UBUNTU 2018.04 LTS 64位 修改當前電腦的主機名稱。 操作步驟如下&#xff1a; 假設你的主機名為AAAAA &#xff0c; 打算修改為BBBBB。開機進入桌面。 打開一個終端。命令行下&#xff0c;使用vi /etc/hostname指令&#xff0c;編輯主機名稱。將hostname文件里的AAAAA改為BB…

【Linux】echo命令使用

?echo命令 功能是在顯示器上顯示一段文字&#xff0c;一般起到一個提示的作用。此外&#xff0c;也可以直接在文件中寫入要寫的內容。也可以用于腳本編程時顯示某一個變量的值&#xff0c;或者直接輸出指定的字符串。 ? 著者 由布萊恩福克斯和切特拉米撰寫。 語法 echo […

Flum--環境搭建實驗

1.解壓flum安裝包 解壓到/opt/module下&#xff1a; tar -zxvf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/ 2.修改flum名字&#xff1a; mv /opt/module/apache-flume-1.9.0-bin /opt/module/flume 3.將lib文件夾下的guava-11.0.2.jar刪除以兼容Hadoop…

圖像萬物分割——Segment Anything算法解析與模型推理

一、概述 在視覺任務中&#xff0c;圖像分割任務是一個很廣泛的領域&#xff0c;應用于交互式分割&#xff0c;邊緣檢測&#xff0c;超像素化&#xff0c;感興趣目標生成&#xff0c;前景分割&#xff0c;語義分割&#xff0c;實例分割&#xff0c;泛視分割等。 交互式分割&am…

設計模式之結構型模式(適配器、橋接、組合、享元、裝飾者、外觀、代理)

文章目錄 一、結構型設計模式二、適配器模式三、橋接模式四、組合模式五、享元模式六、裝飾者模式七、外觀模式八、代理設計模式 一、結構型設計模式 這篇文章我們來講解下結構型設計模式&#xff0c;結構型設計模式&#xff0c;主要處理類或對象的組合關系&#xff0c;為如何…

【已解決】ModuleNotFoundError: No module named ‘IPython‘

問題描述 Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named IPython 解決方法 pip install ipython 完結撒花 我并不想穿過荊棘去到黎明&#xff0c;我猜也沒有人會想

proftpd安全加固:禁用匿名登錄

其實&#xff0c;proftpd默認是禁止匿名登錄的。今天我們反其道&#xff0c;研究一下如何開啟匿名登錄。清楚了怎么破防&#xff0c;才能更好得防。 查看/etc/proftpd.conf 配置文件&#xff1a; # A basic anonymous configuration, with an upload directory # Enable this…

計算機設備管理器如何看內存,怎么查看電腦配置信息?3種方法,讓你掌握電腦全部信息!...

轉載&#xff1a;https://blog.csdn.net/weixin_35849957/article/details/118512756?spm1001.2014.3001.5502 原標題&#xff1a;怎么查看電腦配置信息&#xff1f;3種方法&#xff0c;讓你掌握電腦全部信息&#xff01; 電腦的配置決定了電腦性能高低以及運行速度。而電腦…

Emacs之Plantuml用于復雜UML類圖(Markdown用于簡單類圖)(一百三十二)

簡介&#xff1a; CSDN博客專家&#xff0c;專注Android/Linux系統&#xff0c;分享多mic語音方案、音視頻、編解碼等技術&#xff0c;與大家一起成長&#xff01; 優質專欄&#xff1a;Audio工程師進階系列【原創干貨持續更新中……】&#x1f680; 優質專欄&#xff1a;多媒…