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

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

電子カルテデータの可視化~患者住所

患者マスターテーブルの中には、住所情報も入っているかもしれません。

id zip-code prefectures city address_line
10001 001-0902 北海道   札幌市 北区新琴似2条9丁目

 この情報の持ち方は、メーカーによってかなり違うみたいです。都道府県、市町村、番地名等に分けて持っている場合や、つながった文字列として持つ場合、全角もあれば半角もまじり、同じ世帯のはずが違う文字列の住所情報になる場合もあります。
 せっかくの位置情報なので、なんとかGeocoding(緯度経度に変換)して、有効利用してみたいものです。自力でこれ解決するのは大変なので
、今回はgoogleAPIに解決してもらいましょう。

方針
  1. 住所データフレームの作成
  2. GoogleGocodingAPIになげて
  3. 緯度経度情報作成
  4. Leafletパッケージでプロット


1.練習用にコンビニ住所データフレームを作成します。

name <- c("セイコーマート合同庁舎店",
          "セイコーマートつぼた店",
          "セイコーマート麻生店")
address <- c("北海道札幌市北区北8条西2丁目",
             "北海道札幌市北区北8条西5丁目",
             "北海道札幌市北区新琴似7条1丁目2-34")
temp <- data.frame(name=name,address=address);temp

2.参考サイトのgeocoding関数を利用して、

library(RCurl)
library(rjson)
# 住所を文字列で入力すると位置情報をjson形式で返却する関数
GetLocationInformation <-function(address)
{
  #URL用にエンコーディング
  address <- RCurl::curlEscape(iconv(address,"CP932","UTF-8"))
  #URL(API)生成
  url <- paste("http://maps.googleapis.com/maps/api/geocode/json?address=",
               address,"&sensor=false&region=JP&language=ja",sep="")
  RCurl::getURL(url)
}
#住所(文字列ベクトル)を緯度・経度へ
GetLatitudeAndLongitude <- function(addresses)
{
  #各住所をgoogle APIで位置情報(json)へ
  jsons <- sapply(addresses,GetLocationInformation)
  #googleAPIで取得した位置情報(json)から経度・緯度情報を抽出
  ExtractLatitudeAndLongitude <- function(json)
  {
    latitude  <- rjson::fromJSON(json)$results[[1]]$geometry$location$lat
    longitude <- rjson::fromJSON(json)$results[[1]]$geometry$location$lng
    c(lat=latitude,lon=longitude)
  }
  t(sapply(jsons,ExtractLatitudeAndLongitude))
}

3.緯度経度情報を作成

#緯度経度情報へ変換
location  <- GetLatitudeAndLongitude(address)
location <- as.data.frame(location) 
location <-cbind(name,location)
colnames(location)[2:3] <-c("latitude","longitude")
rownames(location) <- 1:nrow(location)

こんなデータフレームが作成されます。

name latitude longitude
セイコーマート合同庁舎店 43.07095 141.3520
セイコーマートつぼた店 43.07053 141.3471
セイコーマート麻生店    43.11081 141.3348

4.Leafletパッケージでプロット

library(leaflet)
m = leaflet(location) %>% addProviderTiles("CartoDB.Positron")
m %>% 
  addMarkers(data = location, lat = ~ latitude, lng = ~ longitude, popup = location$h_name) %>%
  setView(median(location[,"longitude"]),median(location[,"latitude"]),zoom=13)

f:id:r_beginner:20160209230449j:plain
実際はGoogleMapのようなインタラクティブな地図になります。