2016年12月11日 星期日

【R】用ggmap 畫出熱點分布

ggmap是一個專門用來繪製地圖的R package,這個package 可以透過 Google Map、OpenStreetMap、Stamen Maps 或 CloudMade Maps 網站上抓取地圖的圖層資料,使用者也可以再進一步的用ggplot 套件的語法加上更多的圖層分析。

今天我從7-11的電子地圖系統(https://emap.pcsc.com.tw/)抓下了信義區所有7-11的地址,並透過這個經緯度批次轉換的實用工具(https://goo.gl/Ccq6aA) 將這些地址轉換成經緯度並存成csv檔案,接著將以這份經緯度資料,用R studio 練習ggmap 這個套件。


➤第一步:安裝ggmap,讀取資料
首先我們先來看看資料長甚麼樣子,一開始我已經將資料準備好存成只有經(longitude)、緯(latitude)度座標格式的資料如下面的表格,並且我們要先安裝、並執行相關需要的套件。

install.packages("ggmap")
install.packages("mapproj")
install.packages("ggplot2")
library("ggmap")
library("mapproj")
library("ggplot2")

setwd("D:/Data analysis/R/Blog/hotspot")
sespot = read.csv("711.csv",header = T)





➤第二步:測試ggmap套件
接著我們來試著用用看ggmap套件,這個套件的function其實相當簡單,只要輸入好想要串接的地圖網站,例如下面我們要串接的Google Map,輸入設定好中心點Center、放大縮小的程度Zoom或是地圖的樣式(Google的包含地形圖terrain、 衛星圖satellite、 街道圖roadmap、hybrid四種),設定好就可以利用ggmap跑出地圖,以下我們以這份7-11散步的資料為中心點,先來嘗試畫出幾種地圖。

map = get_googlemap(center= c(lon=median(sespot$lon),lat=median(sespot$lat))
,zoom = 14 , maptype = "satellite")
ggmap(map)




map = get_googlemap(center= c(lon=median(sespot$lon),lat=median(sespot$lat))
,zoom = 14 , maptype = "hybrid")
ggmap(map)




map=get_googlemap(center= c(lon=median(sespot$lon),lat=median(sespot$lat))
,zoom = 14 , maptype = "roadmap")
ggmap(map)





➤第三步:用geom_point () 畫出散布點
接著我們可以搭配ggplot 套件的函數geom_point(),抓取我們一開始讀取的7-11經緯度資料,以roadmap為地圖底層畫出7-11的店鋪散布圖。

ggmap(map)
+geom_point(aes(x = lon, y = lat), size = 2, col="red",data = sespot, alpha = 1)

信義區7-11店鋪散布圖


➤第四步:畫出熱點圖,等高線圖
最後我們在利用ggplot套件的其他函數,加上其他圖層,進一步畫上等高線圖層以及熱圖圖層,這樣我們就可以很明顯的看出究竟什麼地方是信義區7-11集中的熱點。

ggmap(map)
+geom_point(aes(x = lon, y = lat), size = 2, col="red",data = sespot, alpha = 0.6)
+geom_density2d(data = sespot, aes(x = lon, y=lat), size = 0.3)


等高線圖

ggmap(map)
+geom_point(aes(x = lon, y = lat), size = 2, col="red",data = sespot, alpha = 1)
+stat_density2d(data = sespot, aes(x = lon, y=lat,fill = ..level.., alpha = ..level..)
,size = 0.01, bins = 16, geom = "polygon")
+scale_fill_gradient(low = "green", high = "red",guide = FALSE)+scale_alpha(range = c(0, 0.3), guide = FALSE)

熱圖

➤第五步:心得
ggmap的確是一個很方便的套件,搭配上強大的ggplot就可以產出一些可以分析資訊的地圖圖片,不過在練習ggmap的過程中也發現一些小缺點,那就是跑出來的地圖是固定大小的,也就是不能像Google map網站上可以任意的Zoom in/out,不過已經是一個相當實用的工具了。