來源:快學Python
本文作者依托《交通時空大數據分析、挖掘與可視化》一書中所介紹的相關技術開發了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))
輸出結果:
▲ 單個用戶的活動圖
上圖中繪制的是一個手機用戶在觀測時間段內每一天的活動情況,橫坐標為日期,縱坐標為時間,同一個位置的活動則以同樣的顏色顯示。
從活動圖中我們可以很清晰地看到這個用戶每一個活動的開始與結束時間。