iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 16
2
Data Technology

你都在公司都在幹啥R? R語言資料分析經驗分享系列 第 16

【16】當老闆突然再問:很好,現在地址很明瞭了,但是我想把在附近的地址當成一組做分群,這有辦法嗎?

  • 分享至 

  • xImage
  •  

分群這個概念除了出現在資料分析以外,在機器學習領域也有相當多應用,簡單地解釋就是把一個未知的資料根據它的特性分成一個個的群組,這邊我想介紹的是K-means ,它的概念很簡單,首先你先設定k 數,然後就會有隨機k 個點散佈在資料中,然後中間會不斷地打散重新分配中心點,直到收斂為止。

第一,我們先把前一天的資料用address_LatLng_data 存下來。

address_LatLng_data <- result #將前一天的資料存到address_LatLng_data

然後因為每次K-means 都是隨機分配,為了讓我們練習的結果一樣,我必須先設定種子碼,就設定今天日期好了,接著我指定k 的數量為10,就能程式下去算。

set.seed(20180102)
kmeans = kmeans(x = address_LatLng_data[, c('Lat','Lng')], centers = 10)
y_kmeans = kmeans$cluster

可以得到這70個地址的分類分別如下

https://ithelp.ithome.com.tw/upload/images/20180102/20107299Llb3FKDmDf.png

然後將y_kmeans 整合到dataframe。

result <- address_LatLng_data %>%
    ungroup() %>%
    mutate(category = y_kmeans)

https://ithelp.ithome.com.tw/upload/images/20180102/20107299IC7K2aeaX1.png

用表格表示很沒有感覺?那就畫在地圖上吧!

ggmap(get_googlemap(center=c(121.52311,25.04126), zoom=12, maptype='satellite'), extent='device') +
    geom_point(data=result,
               size=1.8,
               aes(x=Lng, y=Lat, colour=factor(category)))

最後結果:

https://ithelp.ithome.com.tw/upload/images/20180102/201072991D7lGJnhIO.png

從地圖上可以看出所有的地址被分成10類了!!

ref:
day16原始碼


上一篇
【15】當老闆突然又問:你畫的地點都是用經緯度座標畫的,可是我們會員資料庫存的是地址啊,你可以用地址在地圖上畫點嗎?
下一篇
【17】當老闆突然再再問:喔喔,地址切開是切開了,但是這個k 值我設多少會有差嗎?
系列文
你都在公司都在幹啥R? R語言資料分析經驗分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言