読者です 読者をやめる 読者になる 読者になる

R言語による電子カルテデータの二次利用

~R言語初心者がデータ処理を楽しめるように基本的内容中心のサイトです~

ggmapで位置情報を可視化

電子カルテ用のPCはインターネットに接続されていないものが多いです。セキュリティーの問題もありやむを得ないのですが…。ただ折角の患者位置情報を可視化できないのはもったいないことです。Rでは、leaflet packageでインタラクティブな地図にプロットもできますがインターネット接続が必要となりますので、今回は静的な地図へのプロットをggmap packageで練習します。

練習用のデータ(コンビニ位置情報)は、下記から入手しました。
http://www.sinfonica.or.jp/kanko/estrela/refer/s29/index.html
あらかじめtokyo3.csvというファイル名で保存しておきます。

df<- read.csv("tokyo3.csv",header = F)
colnames(df) <- c("name","address","lon","lat")

こんなデータフレームになります。

address name lon lat
ファミリーマート練馬駅西口店 東京都練馬区練馬1丁目15-1 139.6525 35.73847
セブンイレブン練馬3丁目店 東京都練馬区練馬3-1-10 139.6504 35.73736
ローソンストア100練馬3丁目店 東京都練馬区練馬3-1-7 139.6504 35.73736

まずは背景となる地図をget_map関数でゲットします。地図の中心は東京駅(lat=35.6813023,lon=139.7640529)とします。

library(ggmap)
lon_tokyo <- 139.7640529
lat_tokyo <- 35.6813023
map <- get_map(location=c(lon_tokyo,lat_tokyo), zoom=10,maptype = "terrain",source = c("google"))

地図の表示はggmap関数です。

ggmap(map) 

f:id:r_beginner:20160824191848j:plain

get_mapの引数maptypeはいろいろ選択できます。
f:id:r_beginner:20160824194217j:plain

詳しくは、ここを参照。
https://github.com/dkahle/ggmap/blob/master/R/get_map.R

先ほどのコンビニ位置データ(df)をプロットします。geom_pointで点を載せてみましょう。

ggmap(map) + 
  geom_point(aes(x=lon, y=lat), data=df, size=1, colour='red')

f:id:r_beginner:20160824204755j:plain

ここから一工夫。東京駅から10キロ圏内のコンビニをプロットしてみましょう。
二点間の距離が分かればいいのですが、どうすれば良いのでしょう。
ちゃんと緯度経度から距離を計算するヒュベニの公式がというものがあるのですね…

関数を作るのが面倒であれば下記サイトを参考にしてください。ちゃんとRの関数が載っています(MIT Licenseとのことです)
二地点の緯度・経度からその距離を計算する(日本は山だらけ〜)

東京駅からの距離カラム(dist)を追加します。

address name lon lat dist
ファミリーマート練馬駅西口店 東京都練馬区練馬1丁目15-1 139.6525 35.73847 11923.65
セブンイレブン練馬3丁目店 東京都練馬区練馬3-1-10 139.6504 35.73736 12020.09
ローソンストア100練馬3丁目店 東京都練馬区練馬3-1-7 139.6504 35.73736 12020.09

10キロ以内のデータを抽出すると

ggmap(map) + 
  geom_point(aes(x=lon, y=lat), data=df[df$dist <=10000,], size=1, colour='red')

f:id:r_beginner:20160824210559j:plain

ここまでできれば、診療圏調査も簡単です。
クリニックからの距離毎に来院患者数を出したり、患者年齢層で色分けしたり、新患がどこから来ているか調べたり…
看板も効果的に設置できますね。