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)
get_mapの引数maptypeはいろいろ選択できます。
詳しくは、ここを参照。
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')
ここから一工夫。東京駅から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')
ここまでできれば、診療圏調査も簡単です。
クリニックからの距離毎に来院患者数を出したり、患者年齢層で色分けしたり、新患がどこから来ているか調べたり…
看板も効果的に設置できますね。
RでSQLデータベースへの接続1~MySQL編
電子カルテのデータベースは各施設で環境が違うため、今回は接続イメージを理解するためMySQLで練習してみます。
インストールはおまかせで。
デフォルトでconnectorも入るらしいのでそのまま
Port:3306で
rootパスワード設定して
接続テストして、Connection successful
次はRの準備
今回はMySQLなので、RMySQLパッケージを使って
library(RMySQL)
library(dplyr)
con <- dbConnect(MySQL(), host="localhost", port=3306, dbname="world", user="root", password="****")
dbGetQuery(con,"SELECT * FROM country") %>% tail()
dbDisconnect(con) # 終わったらconnectionは切りましょう
簡単ですね~