数据分析与挖掘实战-基于基站定位数据的商圈分析
生活随笔
收集整理的這篇文章主要介紹了
数据分析与挖掘实战-基于基站定位数据的商圈分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于基站定位數據的商圈分析
- 背景
- 隨著個人手機終端的普及,出行群體中手機擁有率和使用率已經達到相當高的比例,手機移動網絡也基本上實現了城鄉空間區域的全覆蓋。根據手機信號在真實地理空間上的覆蓋情況,將手機用戶時間序列的手機定位數據,映射至現實的地理空間位置,即可完整、客觀地還原出手機用戶的現實活動軌跡,從而挖掘得到人口空間分布與活動聯系的特征信息。
- 移動通信網絡的信號覆蓋邏輯上被設計成由若干個六邊形的基站小區相互鄰接而構成的蜂窩網絡面狀服務區,手機終端總是與其中某一個基站小區保持聯系,移動通信網絡的控制中心會定期或者不定期地主動或被動地記錄每個手機終端時間序列的基站小區編號信息。
- 商圈是現代市場中企業市場活動的空間,同時也是商品和服務享用者的區域。商圈劃分的目的之一是為了研究潛在的顧客的分布以制定適宜的商業對策。
- 目標
- 從某通信運營商提供的特定接口解析得到用戶的定位數據。定位數據以基站小區進行標識,利用基站小區的覆蓋范圍作為商圈區域的劃分,那如何對用戶的歷史定位數據進行科學的分析,歸納出商圈的人流特征和規律,識別出不同類別的商圈,選擇合適的區域進行運營商的促銷活動?
- 故目標如下
- 對用戶的歷史定位數據,采用數據挖掘技術,對基站進行分群。
- 對不同的商圈分群進行特征分析,比較不同商圈類別的價值,選擇合適的區域進行運營商的促銷活動。
- 分析
- 手機用戶在使用短信業務、通話業務、開關機、正常位置更新、周期位置更新和切入呼叫的時候均產生定位數據,定位數據記錄手機用戶所處基站的編號、時間和唯一標識用戶的EMASI號等。歷史定位數據描繪了用戶的活動模式,一個基站覆蓋的區域可等價于商圈,通過歸納經過基站覆蓋范圍的人口特征,識別出不同類別的基站范圍,即可等同地識別出不同類別的商圈。衡量區域的人口特征可從人流量和人均停留時間的角度進行分析,所以在歸納基站特征時可針對這兩個特點進行提取。
- 基于移動基站定位數據的商圈分析主要步驟
- 1)從移動通信運營商提供的特定接口上解析、處理、并濾除用戶屬性后得到用戶定位數據。
- 2)以單個用戶為例,進行數據探索分析,研究在不同基站的停留時間,并進一步進行預處理,包括數據規約和數據變換。
- 3)利用步驟2)形成的已完成數據預處理的建模數據,基于基站覆蓋范圍區域的人流特征進行商圈聚類,對各個商圈分群進行特征分析,選擇合適的區域進行運營商的促銷活動。
- 處理過程
- 數據獲取
- 從運營商提供的接口解析、處理、并濾除用戶屬性之后得到位置數據,以2014-1-1為開始時間,2014-6-30為結束時間作為分析的觀測窗口,抽取觀測窗口內某市某區域的定位數據形成建模數據。
- 數據探索
- 對單個用戶軌跡進行研究分析。
- 數據預處理
- 數據規約
- 數據變換
- 離差標準化
- 數據挖掘建模
- 構建商圈聚類模型
- 采用層次聚類算法對建模數據進行基于基站數據的商圈分析,畫出譜系聚類圖。
- 譜系聚類圖
- 從圖中看出,可以將聚類類別數取k=3,輸出結果typeindex為每個樣本對應的類別號。
- # -*- coding:utf-8 -*-import pandas as pddef pic():standardizedfile = 'data/standardized.xls' # 標準化后的數據文件data = pd.read_excel(standardizedfile, index_col=u'基站編號') # 讀取數據import matplotlib.pyplot as pltfrom scipy.cluster.hierarchy import linkage, dendrogram# 這里使用scipy的層次聚類函數Z = linkage(data, method='ward', metric='euclidean') # 譜系聚類圖P = dendrogram(Z, 0) # 畫譜系聚類圖plt.show()def clu():# 參數初始化standardizedfile = 'data/standardized.xls' # 標準化后的數據文件k = 3 # 聚類數data = pd.read_excel(standardizedfile, index_col=u'基站編號') # 讀取數據from sklearn.cluster import AgglomerativeClustering # 導入sklearn的層次聚類函數model = AgglomerativeClustering(n_clusters=k, linkage='ward')model.fit(data) # 訓練模型# 詳細輸出原始數據及其類別r = pd.concat([data, pd.Series(model.labels_, index=data.index)], axis=1) # 詳細輸出每個樣本對應的類別r.columns = list(data.columns) + [u'聚類類別'] # 重命名表頭import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號style = ['ro-', 'go-', 'bo-']xlabels = [u'工作日人均停留時間', u'凌晨人均停留時間', u'周末人均停留時間', u'日均人流量']pic_output = 'data/type_' # 聚類圖文件名前綴for i in range(k): # 逐一作圖,作出不同樣式plt.figure()tmp = r[r[u'聚類類別'] == i].iloc[:, :4] # 提取每一類for j in range(len(tmp)):plt.plot(range(1, 5), tmp.iloc[j], style[i])plt.xticks(range(1, 5), xlabels, rotation=20) # 坐標標簽plt.title(u'商圈類別%s' % (i + 1)) # 我們計數習慣從1開始plt.subplots_adjust(bottom=0.15) # 調整底部plt.savefig(u'%s%s.png' % (pic_output, i + 1)) # 保存圖片if __name__ == '__main__':# pic()clu()
- 構建商圈聚類模型
- 后續處理
- 由不同類別的特征折線圖,商圈1日均人流量大,工作日上班時間人均停留時間、凌晨人均停留時間、周末人均停留時間短,類似商業區,適合展開促銷活動。
- 數據獲取
- 補充說明
- 案例參考書《Python數據分析與挖掘實戰》
- 與原書有借鑒,但是較大改動代碼
- 修復了原書一些舊版本代碼錯誤
- 具體數據集和代碼可以查看我的Github,歡迎star或者fork
總結
以上是生活随笔為你收集整理的数据分析与挖掘实战-基于基站定位数据的商圈分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新的一年2019
- 下一篇: Web开发-Django初识及实战