基于Python實(shí)現(xiàn)個(gè)人手機(jī)定位分析
前段時(shí)間我們分享過(guò)《用Python實(shí)現(xiàn)交通數(shù)據(jù)可視化!》,其中主要是使用TransBigData庫(kù)快速高效地處理、分析、挖掘出租車(chē)GPS數(shù)據(jù)。
但其實(shí)交通時(shí)空大數(shù)據(jù)并不僅僅局限于交通工具產(chǎn)生的數(shù)據(jù),我們的日常生活中也會(huì)產(chǎn)生大量的數(shù)據(jù)。比如我們的手機(jī)記錄了我們到訪過(guò)的地點(diǎn);使用城市公交IC卡、共享單車(chē)等服務(wù)時(shí),服務(wù)供應(yīng)商可以知道這些出行需求的時(shí)間和地點(diǎn)等等
本文作者依托《交通時(shí)空大數(shù)據(jù)分析、挖掘與可視化》一書(shū)中所介紹的相關(guān)技術(shù)開(kāi)發(fā)了Python開(kāi)源庫(kù)TransBigData,進(jìn)行一次對(duì)手機(jī)信令數(shù)據(jù)的處理、分析和挖掘。
TransBigData簡(jiǎn)介
TransBigData是一個(gè)為交通時(shí)空大數(shù)據(jù)處理、分析和可視化而開(kāi)發(fā)的Python包。TransBigData為處理常見(jiàn)的交通時(shí)空大數(shù)據(jù)(如出租車(chē)GPS數(shù)據(jù)、共享單車(chē)數(shù)據(jù)和公交車(chē)GPS數(shù)據(jù)等)提供了快速而簡(jiǎn)潔的方法。
目前,TransBigData主要提供以下方法:
(1)數(shù)據(jù)預(yù)處理:對(duì)數(shù)據(jù)集提供快速計(jì)算數(shù)據(jù)量、時(shí)間段、采樣間隔等基本信息的方法,也針對(duì)多種數(shù)據(jù)噪聲提供了相應(yīng)的清洗方法。
(2)數(shù)據(jù)柵格化:提供在研究區(qū)域內(nèi)生成、匹配多種類(lèi)型的地理柵格快學(xué)Python(矩形、三角形、六邊形及geohash柵格)的方法體系,能夠以向量化的方式快速算法將空間點(diǎn)數(shù)據(jù)映射到地理柵格上。
(3)數(shù)據(jù)可視化:基于可視化包keplergl,用簡(jiǎn)單的代碼即可在Jupyter Notebook上交互式地可視化展示數(shù)據(jù)。
(4)軌跡處理:從軌跡數(shù)據(jù)GPS點(diǎn)生成軌跡線型,軌跡點(diǎn)增密、稀疏化等。
(5)地圖底圖、坐標(biāo)轉(zhuǎn)換與計(jì)算:加載顯示地圖底圖與各類(lèi)特殊坐標(biāo)系之間的坐標(biāo)轉(zhuǎn)換。
(6)特定處理方法:針對(duì)各類(lèi)特定數(shù)據(jù)提供相應(yīng)處理方法,如從出租車(chē)GPS數(shù)據(jù)中提取訂單起訖點(diǎn),從手機(jī)信令數(shù)據(jù)中識(shí)別居住地與工作地,從地鐵網(wǎng)絡(luò)GIS數(shù)據(jù)構(gòu)建網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)并計(jì)算最短路徑等。
TransBigData可以通過(guò)pip或者conda安裝,在命令提示符中運(yùn)行下面代碼即可安裝:
pip?install?-U?transbigdata
安裝完成后,在Python中運(yùn)行如下代碼即可導(dǎo)入TransBigData包。
import?transbigdata?as?tbd??
手機(jī)信令數(shù)據(jù)讀取
手機(jī)信令數(shù)據(jù)是指手機(jī)與通信基站之間交換的信息,包括位置、通信時(shí)長(zhǎng)、通信頻次等數(shù)據(jù)。這些數(shù)據(jù)可以用于分析用戶(hù)的出行行為、生活習(xí)慣等,也可以用于城市交通管理、商業(yè)營(yíng)銷(xiāo)等領(lǐng)域。
使用Python開(kāi)源庫(kù)TransBigData
可以快速高效地處理、分析、挖掘手機(jī)信令數(shù)據(jù),識(shí)別出行和停留、居住地與工作地等信息,并繪制活動(dòng)圖以便于分析。
▲ 手機(jī)信令數(shù)據(jù)的采集原理
首先,我們將使用Python的pandas庫(kù)來(lái)讀取數(shù)據(jù)。Pandas是一款功能強(qiáng)大的數(shù)據(jù)處理庫(kù),它提供了靈活的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,可以輕松地對(duì)各種數(shù)據(jù)進(jìn)行操作和分析。我們將使用Pandas讀取包含手機(jī)信令數(shù)據(jù)的CSV文件,并將其存儲(chǔ)在一個(gè)Pandas的數(shù)據(jù)框中。
我們需要將時(shí)間字段轉(zhuǎn)換為正確的格式,以便進(jìn)行后續(xù)的數(shù)據(jù)處理。我們使用Pandas的to_datetime函數(shù)將時(shí)間字段轉(zhuǎn)換為datetime格式。然后后,我們按照時(shí)間順序?qū)?shù)據(jù)進(jìn)行排序,以便進(jìn)行后續(xù)的數(shù)據(jù)處理:
import?pandas?as?pd import?transbigdata?as?tbd data?=?pd.read_csv(r'data/mobiledata_sample.csv') #確保時(shí)間列準(zhǔn)確識(shí)別(很重要) data['stime']?=?pd.to_datetime(data['stime'],?format='%Y%m%d%H%M') data?=?data.sort_values(by?=?['user_id','stime']) data.head()
結(jié)果如下圖所示。
▲ 手機(jī)信令數(shù)據(jù)概況
識(shí)別出行和停留
在處理手機(jī)數(shù)據(jù)時(shí),識(shí)別出行和停留是很重要的一步。基于手機(jī)識(shí)別出行和活動(dòng)可以進(jìn)一步進(jìn)行路徑分析、出行模式分析、人群分析等工作。
活動(dòng):手機(jī)數(shù)據(jù)通過(guò)連續(xù)地追蹤個(gè)體的出行軌跡,可以構(gòu)建出個(gè)體的出行鏈信息,一般來(lái)說(shuō),如果一個(gè)手機(jī)用戶(hù)在某個(gè)位置停留了超過(guò)30分鐘,我們可以認(rèn)為用戶(hù)在這里發(fā)生了活動(dòng)。
出行:用戶(hù)產(chǎn)生的連續(xù)兩個(gè)活動(dòng)如果產(chǎn)生的地理位置不同,則可以認(rèn)為用戶(hù)發(fā)生了出行行為。出行的起點(diǎn)為連續(xù)兩個(gè)活動(dòng)中前一個(gè)活動(dòng)的地理位置,出行的開(kāi)始時(shí)間為前一個(gè)活動(dòng)結(jié)束的時(shí)間,出行的終點(diǎn)則為后一個(gè)活動(dòng)的地理位置,出行的結(jié)束時(shí)間則為后一個(gè)活動(dòng)開(kāi)始的時(shí)間。簡(jiǎn)而言之,用戶(hù)在活動(dòng)點(diǎn)與活動(dòng)點(diǎn)之間的移動(dòng),視為用戶(hù)的出行。
▲ 活動(dòng)與出行識(shí)別思路
使用TransBigData提供的手機(jī)信令數(shù)據(jù)處理方法,可以先將數(shù)據(jù)對(duì)應(yīng)至柵格,將同一個(gè)柵格內(nèi)的數(shù)據(jù)視為在同一個(gè)位置,以避免數(shù)據(jù)定位誤差導(dǎo)致同一位置被識(shí)別為多個(gè)。然后,可以使用tbd.mobile_stay_move
函數(shù)從手機(jī)數(shù)據(jù)中識(shí)別出行和停留:
#獲取柵格參數(shù) params?=?tbd.area_to_params([121.860,?29.295,?121.862,?29.301],?accuracy=500) #從手機(jī)數(shù)據(jù)中識(shí)別出行和停留 stay,move?=?tbd.mobile_stay_move(data,params,col?=?['user_id','stime','longitude',?'latitude'])結(jié)果如下所示。
▲ 停留識(shí)別結(jié)果
▲ 出行識(shí)別結(jié)果
識(shí)別居住地與工作地
通過(guò)移動(dòng)通信數(shù)據(jù)識(shí)別出用戶(hù)的職住信息是研究的基礎(chǔ)工作之一。TransBigData中,以停留活動(dòng)點(diǎn)為依據(jù),用tbd.mobile_identify_home
方法可以識(shí)別居住地,用tbd.mobile_identify_work
則可以識(shí)別工作地。具體規(guī)則為:
- 居住地識(shí)別規(guī)則為夜晚時(shí)段停留最長(zhǎng)地點(diǎn)
- 工作地識(shí)別規(guī)則為工作日白天時(shí)段停留最長(zhǎng)地點(diǎn)(每日平均時(shí)長(zhǎng)大于minhour)。
具體使用方法如下:
#識(shí)別居住地 home?=?tbd.mobile_identify_home(stay,?col=['user_id','stime',?'etime','LONCOL',?'LATCOL','lon','lat'],?start_hour=8,?end_hour=20?) home.head()
結(jié)果輸出:
▲ 居住地識(shí)別
#識(shí)別工作地 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()
▲ 工作地識(shí)別結(jié)果
繪制活動(dòng)圖
為了加深對(duì)手機(jī)用戶(hù)的具體活動(dòng)情況的理解,我們可以用TransBigData提供的tbd.mobile_plot_activity方法將用戶(hù)的每日活動(dòng)情況繪制出來(lái)觀察,具體代碼如下:
#繪制某一用戶(hù)的活動(dòng)圖,不同顏色代表不同活動(dòng) uid?=?'fcc3a9e9df361667e00ee5c16cb08922' tbd.mobile_plot_activity(stay[stay['user_id']==uid],figsize?=?(20,?5))
輸出結(jié)果:
▲ 單個(gè)用戶(hù)的活動(dòng)圖
上圖中繪制的是一個(gè)手機(jī)用戶(hù)在觀測(cè)時(shí)間段內(nèi)每一天的活動(dòng)情況,橫坐標(biāo)為日期,縱坐標(biāo)為時(shí)間,同一個(gè)位置的活動(dòng)則以同樣的顏色顯示。從活動(dòng)圖中我們可以很清晰地看到這個(gè)用戶(hù)每一個(gè)活動(dòng)的開(kāi)始與結(jié)束時(shí)間。
到此這篇關(guān)于基于Python實(shí)現(xiàn)個(gè)人手機(jī)定位分析的文章就介紹到這了,更多相關(guān)Python手機(jī)定位內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python如何將自己的包上傳到PyPi并可通過(guò)pip安裝的方法步驟
本文主要介紹了python如何將自己的包上傳到PyPi并可通過(guò)pip安裝的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05Python爬蟲(chóng)之網(wǎng)絡(luò)請(qǐng)求
這篇文章主要介紹了Python爬蟲(chóng)之網(wǎng)絡(luò)請(qǐng)求,文章基于Python展開(kāi)對(duì)網(wǎng)絡(luò)請(qǐng)求的相關(guān)介紹,需要的小伙伴可以參考一下2022-04-04python實(shí)現(xiàn)對(duì)求解最長(zhǎng)回文子串的動(dòng)態(tài)規(guī)劃算法
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)對(duì)求解最長(zhǎng)回文子串的動(dòng)態(tài)規(guī)劃算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06Python根據(jù)區(qū)號(hào)生成手機(jī)號(hào)碼的方法
這篇文章主要介紹了Python根據(jù)區(qū)號(hào)生成手機(jī)號(hào)碼的方法,涉及Python隨機(jī)數(shù)與字符串的相關(guān)操作技巧,需要的朋友可以參考下2015-07-07用python3讀取python2的pickle數(shù)據(jù)方式
今天小編就為大家分享一篇用python3讀取python2的pickle數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12