白剛
(桂林旅游學院旅游管理學院,桂林 541006)
游客簽到數據由于手機的GPS定位服務及LBS服務的支持,提交便捷,所以在微信、微博、攜程等各種具有社交屬性的網絡媒體中普遍存在,數據量龐大,為旅游興趣點的挖掘研究提供了良好的數據基礎。如何從海量的簽到數據中找出興趣度最大、熱度最高的簽到點,是本文研究的主要內容。
由于不同數據來源的簽到數據格式相對混亂,為避免過多的數據格式轉換,本文采用的數據集采集自新浪微博的地點簽到數據。
簽到數據采集方法為Python網絡爬蟲采集,采集時間段為2017.3-2017.9,除去無效數據后,簽到地理坐標在廣西的數據總量為125221條。
數據格式如表1所示。

表1
爬蟲抓取的原始數據存儲為csv格式,由“,”進行字段分割,然而由于地點名、地址等字段本身存在逗號,導致導入Excel后有很多數據缺失或存在列混亂的情況,尤其是最為重要的坐標信息,存在很多經度和維度列混亂的情況,需要做基礎清洗工作。在Excel中采用VBA進行數據清洗,部分清洗代碼如下。
Sub cleandata()
Dim i As Long
For i=1 To ActiveSheet.UsedRange.Rows.Count
If Not IsNumeric(Range("D"&i).Text)Then
Range("C"&i).Value=Range("C"&i).Value&","&Range("D"&i).Text
End If
If Not IsNumeric(Range("E"&i).Text)Then
Range("C"&i).Value=Range("C"&i).Value&","&Range("E"&i).Text
ElseIf Range("E"&i).Text> 100 Then
Range("D"&i).Value=Range("E"&i).Value
Range("E"&i).Value=Range("F"&i).Value
Range("F"&i).Value=Range("G"&i).Value
Range("G"&i).Value=Range("H"&i).Value
Range("H"&i).Value=Range("I"&i).Value
Range("I"&i).Value=Range("J"&i).Value
Range("J"&i).Value=""
End If
清洗完成后的數據格式如表2所示。

表2
簽到數據中的一些字段可以直觀反映出地點的熱門程度,或者理解為地區(聚類)的興趣度。但是,單獨的簽到次數并不能完全說明此地點就是熱門的旅游興趣點,例如火車站,作為游客到達城市后的第一站,同時也是城市的門戶,很可能是簽到次數最多的地點,但是,明顯大部分城市的火車站都無法作為熱門旅游景點來吸引游客參觀。所以,在旅游興趣點的挖掘中,除了基本的簽到次數數據以外,還需要綜合考慮其他字段的權重,結合字段數據和地理數據的加權計算結果。
在旅游興趣點挖掘時,要對不同的簽到數據建模,建模參考基于層次圖模型的多用戶軌跡聚合方法,如上圖所示。首先,對簽到數據中的旅游點進行提取,并放入相應的集合中,接下來采用某種合理的密度聚類算法,對對應的旅游點進行層次化聚類,結合地理坐標,在可區分的地理空間尺度上,把近似的旅游點分配到同一個聚類中,根據地理空間尺度的大小不同,聚類分配在不同的層級,層級越低,聚類越小,粒度越細,代表的地理空間也就越小。
聚類完成后,我們得到了一棵不同地理空間尺度的層次樹模型。接下來,將其他相關指標因素加權映射到這棵樹的不同聚類層次上,從而得到不同的模型。

圖1 基于層次圖模型的多用戶軌跡聚合
興趣點和簽到數據的關系可以分解為景區興趣度和游客互動程度兩個子關系。一般說來,簽到數量的多寡直接反映了該點的熱門程度,同時,如果該點的屬性是博物館、餐飲美食、公園、動物園、景點、星級賓館等與旅游直接相關的類型,即可認為簽到數量的多少直接反映出該旅游點的熱門程度。另外,為了驗證該旅游點的熱門程度與簽到數量的相關性,需要引入照片上傳數量(游客互動程度)作為驗證參考。再有,從地理特征上分析需要考慮熱門旅游點是否具有空間聚集性,交通可達性對其熱門程度的影響是否可量化。
計算指標可以分為兩個大類:用戶指標和地理指標。
用戶指標包括地點名稱、地點類型、簽到數量、上傳照片數量。地理指標包括經緯度信息。
算法邏輯如圖2所示,分為綜合排序算法與地理空間分析算法兩個部分。
其中綜合培訓算法流程為首先對地點按照簽到次數進行綜合排名,就可以把具有較高排名的地點(包含但不限于旅游點)作為粗評的興趣點篩選出來,接下來根據簽到點類型篩除所有旅游點,游客互動程度主要反映在游客的照片上傳數量等指標上,在排序完成后,對排序列表增加游客照片數量進行加權重新計算并再次排序。
綜合排序完成后,將旅游點的地理坐標XY數據形式導入ArcGIS中,疊加到校準后的帶有地理投影坐標的衛星地圖上,然后對點元素進行密度分析,按照分析結果進行賦值,再綜合上面得出的綜合排名進行旅游點排名的加權運算,最終得出該景點的興趣值最終排名。

圖2 算法邏輯
本算法總共使用了三種編程語言或工具。
VBA:Visual Basic for Applications是一種 Visual Basic的一種宏語言,主要能用來擴展Windows的應用程序功能,特別是Microsoft Office軟件。也可說是一種應用程序視覺化的Basic Script。VBA在本算法中,主要用于對爬蟲抓取的數據進行清洗。
Python:Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。Python在本算法中,用于對清洗后的數據進行讀取后初步排序,包括單列排序和多列加權排序。主要使用到的包為pandas。
ArcGIS:ArcGIS Desktop是一個集成了眾多高級GIS應用的軟件套件,它包含了一套帶有用戶界面組件的Windows桌面應用。ArcGIS具有強大的地理空間分析能力,包含了聚類分析、熱點分析、緩沖區分析等各種常用地理空間分析工具,非常適合本算法。
ArcGIS承擔的工作為地理坐標匹配到地圖,對點元素進行空間分析及最終的加權計算等。
Python排序與ArcGIS空間分析加權算法流程圖如圖3所示。

圖3 算法流程圖
圖3左側部分為Python實現部分。
在對爬蟲抓取的數據進行數據清洗后,導出Excel或csv文件,使用Python的第三方庫pandas讀取Excel或 csv文件內容,生成 pandas的 dataframe,再對dataframe的內容進行篩選(根據點類型進行模糊篩選)和排序(根據簽到次數,降序排序),完成后清理簽到次數呈現個位數的數據,以減少計算工作量。
對排序完成和清理后的數據進行加權運算再排序,本算法中,對照片數量賦予0.4的權重。計算完成后,對最終培訓的點的經緯度坐標、點類型、名稱等列輸出csv文件。
右側部分為地理空間分析部分,用ArcGIS實現。
將Python排序后導出的csv文件輸入ArcGIS中,底圖使用水經注地圖下載器選擇合適的坐標系和投影后進行下載。導入后ArcGIS會自動按照點的經緯度匹配到底圖上。
接下來對點進行包括符號化、密度分析、加權疊加等操作,最終得到分析結果。
import pandas as pd
data=pd.read_csv('Guilin.csv')
found=data.loc[data['type'].str.contains('景點|公園|戶外|住宿|餐|游樂場|景區|度假區')]
found.sort_values(by=['sin','ph'],ascending=False,inplace=True)
found.to_csv('Guilinsort.csv',index=False,sep=',')
輸出csv文件格式如下:
110.4933929,24.77607346,省級景點,9815,6997,陽朔
110.36981000000002,25.29235,省級景點,7541,3316,桂林堯山景區
110.50668999999999,24.76511,省級景點,6225,3207,印象劉三姐
110.5020936,24.77280803,國家級景點,5977,3871,漓江
110.2960834,25.27491496,公園戶外,3943,2472,桂林市中心廣場
110.29951570000001,25.28214797,國家級景點,3743,1711,靖江王城與獨秀峰景區(廣西師范大學王城校區)
導入ArcGIS時,選擇GCS_WGS_1984坐標系,導入后ArcGIS后,對點進行分級符號設置后如圖4所示。

圖4
點大小代表了簽到數量和照片上傳數量加權運算后結果的大小,從圖4可以看出,熱度最高的點對應了大桂林范圍的著名景點,且沿國道分散。
然后對點圖層做核密度分析,第一次對population字段采用簽到數量,第二次population字段采用上傳照片數量,加權疊加后得到如圖5所示的結果。

圖5
從圖5可以明顯看出加入簽到數量后的點密度分布具有強烈的地理聚集性,可以看出距離城市中心遠近對簽到點的影響很大。
疊加兩個圖層,得到如圖6-圖7的結果。

圖6

圖7
圖7去掉了底圖干擾,可以清晰的看出,大部分高興趣度熱點與點密度分布高度集中區匹配。從圖6看出有部分熱點與點密度集中區偏離較遠,與城市間主干道的分布或水道分布有直接相關性,如世外桃源景區在桂林至陽朔的321國道通過范圍內,九馬畫山景區、陽朔漓江景區等都位于漓江水道通路上。
簽到點的興趣度排名涉及到多個因素,包括直觀的簽到數量、照片數量以及地理坐標、地理位置等地理要素。本文從數據清洗開始,經過數據篩選、排序,輸入ArcGIS進行地理處理,最終發現旅游點的熱度與簽到數量、上傳照片數量、距離城市中心距離、距離主干道或水路距離都具有很大的相關性。