ggmapパッケージを用いて住所から緯度経度のデータを得る

文字のインプットに対して、緯度経度のデータを取得する方法の一つで、自分が普段使う方法を記録しておきます。

自分が用いいるのは、CRANにも上がっていて、使い方が非常に簡単な、ggmapパッケージです。

github.com

セッティング

# install.packages("ggmap") # まだインストールしていない人用に
# devtools::install_github("dkahle/ggmap") #開発版をインストールしたい場合

library(ggmap)
register_google("XXXXXXXXXXXXXXXXXXXXXXXXXXX") # 個人で取得したgoogle apiの登録が必要

これで設定が完了。

住所より緯度経度を取る方法

ggmapパッケージではgeocode()という関数が提供されており、第一引数のlocationに文字列で、住所をインプットすることにより、緯度経度データを取得できます。

Place Location
東京駅 東京都千代田区丸の内1丁目
東京スカイツリー 東京都墨田区押上1丁目1−2
豊洲マーケット 東京都江東区豊洲6丁目3

上記のようなデータがあり、右に緯度と経度のコラムを挿入したい場合には下のような処理を行います。

dat %>% 
  mutate(緯度 = geocode(Location)$lat,
         経度 = geocode(Location)$lon)
             Place                   Location     緯度     経度
1           東京駅 東京都千代田区丸の内1丁目 35.68124 139.7671
2 東京スカイツリー 東京都墨田区押上1丁目1−2 35.71006 139.8107
3   豊洲マーケット   東京都江東区豊洲6丁目3 35.64574 139.7879

可視化

このように文字列で記録された住所を座標データとして取り扱えることで以下のような可視化も可能です。

library(leaflet)
leaflet(data = dat) %>% 
  addProviderTiles("Stamen.TonerLite") %>% 
  setView(lng = mean(dat$経度), lat = mean(dat$緯度), zoom = 12.5) %>% 
  addCircleMarkers(~経度, ~緯度, popup = ~paste(Place, ":", Location),
                   clusterOptions = markerClusterOptions())

Screen Recording 2019-10-21 at 10.51 AM.gif

このように簡単に操作ができるため自分としては活用しています。某nateで開催中の学生限定コンペ等で活用もできるでしょう。