首頁 > 軟體

基於Python實現個人手機定位分析

2023-12-07 14:00:18

前段時間我們分享過《用Python實現交通資料視覺化!》,其中主要是使用TransBigData庫快速高效地處理、分析、挖掘出租車GPS資料。

但其實交通時空巨量資料並不僅僅侷限於交通工具產生的資料,我們的日常生活中也會產生大量的資料。比如我們的手機記錄了我們到訪過的地點;使用城市公交IC卡、共用單車等服務時,服務供應商可以知道這些出行需求的時間和地點等等

本文作者依託《交通時空巨量資料分析、挖掘與視覺化》一書中所介紹的相關技術開發了Python開源庫TransBigData,進行一次對手機信令資料的處理、分析和挖掘。

TransBigData簡介

TransBigData是一個為交通時空巨量資料處理、分析和視覺化而開發的Python包。TransBigData為處理常見的交通時空巨量資料(如計程車GPS資料、共用單車資料和公交車GPS資料等)提供了快速而簡潔的方法。

目前,TransBigData主要提供以下方法:

(1)資料預處理:對資料集提供快速計算資料量、時間段、取樣間隔等基本資訊的方法,也針對多種資料噪聲提供了相應的清洗方法。

(2)資料柵格化:提供在研究區域內生成、匹配多種型別的地理柵格快學Python(矩形、三角形、六邊形及geohash柵格)的方法體系,能夠以向量化的方式快速演演算法將空間點資料對映到地理柵格上。

(3)資料視覺化:基於視覺化包keplergl,用簡單的程式碼即可在Jupyter Notebook上互動式地視覺化展示資料。

(4)軌跡處理:從軌跡資料GPS點生成軌跡線型,軌跡點增密、稀疏化等。

(5)地圖底圖、座標轉換與計算:載入顯示地圖底圖與各類特殊座標系之間的座標轉換。

(6)特定處理方法:針對各類特定資料提供相應處理方法,如從計程車GPS資料中提取訂單起訖點,從手機信令資料中識別居住地與工作地,從地鐵網路GIS資料構建網路拓撲結構並計算最短路徑等。

TransBigData可以通過pip或者conda安裝,在命令提示字元中執行下面程式碼即可安裝:

pip install -U transbigdata

安裝完成後,在Python中執行如下程式碼即可匯入TransBigData包。

import transbigdata as tbd  

手機信令資料讀取

手機信令資料是指手機與通訊基站之間交換的資訊,包括位置、通訊時長、通訊頻次等資料。這些資料可以用於分析使用者的出行行為、生活習慣等,也可以用於城市交通管理、商業行銷等領域。

使用Python開源庫TransBigData可以快速高效地處理、分析、挖掘手機信令資料,識別出行和停留、居住地與工作地等資訊,並繪製活動圖以便於分析。

▲ 手機信令資料的採集原理

首先,我們將使用Python的pandas庫來讀取資料。Pandas是一款功能強大的資料處理庫,它提供了靈活的資料結構和資料分析工具,可以輕鬆地對各種資料進行操作和分析。我們將使用Pandas讀取包含手機信令資料的CSV檔案,並將其儲存在一個Pandas的資料框中。

我們需要將時間欄位轉換為正確的格式,以便進行後續的資料處理。我們使用Pandas的to_datetime函數將時間欄位轉換為datetime格式。然後後,我們按照時間順序對資料進行排序,以便進行後續的資料處理:

import pandas as pd
import transbigdata as tbd
data = pd.read_csv(r'data/mobiledata_sample.csv')
#確保時間列準確識別(很重要)
data['stime'] = pd.to_datetime(data['stime'], format='%Y%m%d%H%M')
data = data.sort_values(by = ['user_id','stime'])
data.head()

結果如下圖所示。

▲ 手機信令資料概況

識別出行和停留

在處理手機資料時,識別出行和停留是很重要的一步。基於手機識別出行和活動可以進一步進行路徑分析、出行模式分析、人群分析等工作。

活動:手機資料通過連續地追蹤個體的出行軌跡,可以構建出個體的出行鏈資訊,一般來說,如果一個手機使用者在某個位置停留了超過30分鐘,我們可以認為使用者在這裡發生了活動。

出行:使用者產生的連續兩個活動如果產生的地理位置不同,則可以認為使用者發生了出行行為。出行的起點為連續兩個活動中前一個活動的地理位置,出行的開始時間為前一個活動結束的時間,出行的終點則為後一個活動的地理位置,出行的結束時間則為後一個活動開始的時間。簡而言之,使用者在活動點與活動點之間的移動,視為使用者的出行。

▲ 活動與出行識別思路

使用TransBigData提供的手機信令資料處理方法,可以先將資料對應至柵格,將同一個柵格內的資料視為在同一個位置,以避免資料定位誤差導致同一位置被識別為多個。然後,可以使用tbd.mobile_stay_move函數從手機資料中識別出行和停留:

#獲取柵格引數
params = tbd.area_to_params([121.860, 29.295, 121.862, 29.301], accuracy=500)
#從手機資料中識別出行和停留
stay,move = tbd.mobile_stay_move(data,params,col = ['user_id','stime','longitude', 'latitude'])結果如下所示。

▲ 停留識別結果

▲ 出行識別結果

識別居住地與工作地

通過行動通訊資料識別出使用者的職住資訊是研究的基礎工作之一。TransBigData中,以停留活動點為依據,用tbd.mobile_identify_home方法可以識別居住地,用tbd.mobile_identify_work則可以識別工作地。具體規則為:

  • 居住地識別規則為夜晚時段停留最長地點
  • 工作地識別規則為工作日白天時段停留最長地點(每日平均時長大於minhour)。

具體使用方法如下:

#識別居住地
home = tbd.mobile_identify_home(stay, col=['user_id','stime', 'etime','LONCOL', 'LATCOL','lon','lat'], start_hour=8, end_hour=20 )
home.head()

結果輸出:

▲ 居住地識別

#識別工作地
work = tbd.mobile_identify_work(stay, col=['user_id', 'stime', 'etime', 'LONCOL', 'LATCOL','lon','lat'], minhour=3, start_hour=8, end_hour=20,workdaystart=0, workdayend=4)
work.head()

▲ 工作地識別結果

繪製活動圖

為了加深對手機使用者的具體活動情況的理解,我們可以用TransBigData提供的tbd.mobile_plot_activity方法將使用者的每日活動情況繪製出來觀察,具體程式碼如下:

#繪製某一使用者的活動圖,不同顏色代表不同活動
uid = 'fcc3a9e9df361667e00ee5c16cb08922'
tbd.mobile_plot_activity(stay[stay['user_id']==uid],figsize = (20, 5))

輸出結果:

▲ 單個使用者的活動圖

上圖中繪製的是一個手機使用者在觀測時間段內每一天的活動情況,橫座標為日期,縱座標為時間,同一個位置的活動則以同樣的顏色顯示。從活動圖中我們可以很清晰地看到這個使用者每一個活動的開始與結束時間。

到此這篇關於基於Python實現個人手機定位分析的文章就介紹到這了,更多相關Python手機定位內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com