choroplethrを使うために都道府県名を名寄せしたい。 具体的には、総務省が配ってる全国地方公共団体コードのファイル。

このページにある:http://www.soumu.go.jp/denshijiti/code.html

tmp <- tempfile(fileext = ".xls")

# なぜかmetho="curl"じゃないとファイルがおかしい。。
download.file("http://www.soumu.go.jp/main_content/000318342.xls", destfile = tmp, method = "curl")
d <- readxl::read_excel(tmp)

# 列名は文字化けしてるので文字コードを設定...してもいいけどめんどくさいので適当な名前に。
names(d) <- c("code", "pref_kanji", "city_kanji", "pref_kana", "city_kana")

unlink(tmp)

Nipponの都道府県名を調べる。

library(Nippon)
## Loading required package: maptools
## Loading required package: sp
## Checking rgeos availability: TRUE
# 県名の一覧
(pref_kanji <- unique(d$pref_kanji))
##  [1] "北海道"   "青森県"   "岩手県"   "宮城県"   "秋田県"   "山形県"  
##  [7] "福島県"   "茨城県"   "栃木県"   "群馬県"   "埼玉県"   "千葉県"  
## [13] "東京都"   "神奈川県" "新潟県"   "富山県"   "石川県"   "福井県"  
## [19] "山梨県"   "長野県"   "岐阜県"   "静岡県"   "愛知県"   "三重県"  
## [25] "滋賀県"   "京都府"   "大阪府"   "兵庫県"   "奈良県"   "和歌山県"
## [31] "鳥取県"   "島根県"   "岡山県"   "広島県"   "山口県"   "徳島県"  
## [37] "香川県"   "愛媛県"   "高知県"   "福岡県"   "佐賀県"   "長崎県"  
## [43] "熊本県"   "大分県"   "宮崎県"   "鹿児島県" "沖縄県"
# kakasiはnativeの文字コードしかつかえないので変換
pref_kanji <- stringi::stri_enc_tonative(pref_kanji)

# kakasiでアルファベットに変換
(pref_alpha <- kakasi(pref_kanji))
##         北海道         青森県         岩手県         宮城県         秋田県 
##    "hokkaidou"    "aomoriken"     "iwateken"    "miyagiken"     "akitaken" 
##         山形県         福島県         茨城県         栃木県         群馬県 
##  "yamagataken" "fukushimaken"   "ibarakiken"   "tochigiken"     "gunmaken" 
##         埼玉県         千葉県         東京都       神奈川県         新潟県 
##   "saitamaken"     "chibaken"    "toukyouto"  "kanagawaken"   "niigataken" 
##         富山県         石川県         福井県         山梨県         長野県 
##    "toyamaken"  "ishikawaken"     "fukuiken" "yamanashiken"    "naganoken" 
##         岐阜県         静岡県         愛知県         三重県         滋賀県 
##      "gifuken"  "shizuokaken"     "aichiken"       "mieken"     "shigaken" 
##         京都府         大阪府         兵庫県         奈良県       和歌山県 
##     "kyoutofu"     "oosakafu"    "hyougoken"      "naraken"  "wakayamaken" 
##         鳥取県         島根県         岡山県         広島県         山口県 
##   "tottoriken"   "shimaneken"   "okayamaken" "hiroshimaken" "yamaguchiken" 
##         徳島県         香川県         愛媛県         高知県         福岡県 
## "tokushimaken"    "kagawaken"     "ehimeken"    "kouchiken"   "fukuokaken" 
##         佐賀県         長崎県         熊本県         大分県         宮崎県 
##      "sagaken"  "nagasakiken"  "kumamotoken"     "ooitaken"  "miyazakiken" 
##       鹿児島県         沖縄県 
## "kagoshimaken"   "okinawaken"

方や、choroplethrはこういう表記になっている。うまく名寄せできなそう。

library(choroplethrAdmin1)

(pref_choro <- get_admin1_regions("japan")$region)
##  [1] "aichi"     "akita"     "aomori"    "chiba"     "ehime"    
##  [6] "fukui"     "fukuoka"   "fukushima" "gifu"      "gunma"    
## [11] "hiroshima" "hokkaido"  "hyogo"     "ibaraki"   "ishikawa" 
## [16] "iwate"     "kagawa"    "kagoshima" "kanagawa"  "kochi"    
## [21] "kumamoto"  "kyoto"     "mie"       "miyagi"    "miyazaki" 
## [26] "nagano"    "nagasaki"  "nara"      "niigata"   "oita"     
## [31] "okayama"   "okinawa"   "osaka"     "saga"      "saitama"  
## [36] "shiga"     "shimane"   "shizuoka"  "tochigi"   "tokushima"
## [41] "tokyo"     "tottori"   "toyama"    "wakayama"  "yamagata" 
## [46] "yamaguchi" "yamanashi"

そこで、文字の類似度を判定してくれるstringdistを使う。

library(stringdist)
library(dplyr)
## 
## Attaching package: 'dplyr'
## 
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## 
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# 文字が似ているほどスコアが低いのでwhich.minで、一番近いものをとってくる
get_nearest_prefname <- function(x, method = "osa") data_frame(orig = x,
                                                               conv = pref_choro[
                                                                 which.min(
                                                                   stringdist(pref_choro, x, method = method)
                                                                 )
                                                               ])

# 実験
get_nearest_prefname("Ohsaka")
## Source: local data frame [1 x 2]
## 
##     orig  conv
##    (chr) (chr)
## 1 Ohsaka osaka

methodも変更できるようにしたけど、デフォルトで問題なさそう。

これをすべてに対してやる。

library(purrr)
## 
## Attaching package: 'purrr'
## 
## The following object is masked from 'package:dplyr':
## 
##     order_by
pref_alpha %>%
  map(get_nearest_prefname) %>%
  bind_rows(.id = "kanji") %>%
  knitr::kable()
kanji orig conv
北海道 hokkaidou hokkaido
青森県 aomoriken aomori
岩手県 iwateken iwate
宮城県 miyagiken miyagi
秋田県 akitaken akita
山形県 yamagataken yamagata
福島県 fukushimaken fukushima
茨城県 ibarakiken ibaraki
栃木県 tochigiken tochigi
群馬県 gunmaken gunma
埼玉県 saitamaken saitama
千葉県 chibaken chiba
東京都 toukyouto kyoto
神奈川県 kanagawaken kanagawa
新潟県 niigataken niigata
富山県 toyamaken toyama
石川県 ishikawaken ishikawa
福井県 fukuiken fukui
山梨県 yamanashiken yamanashi
長野県 naganoken nagano
岐阜県 gifuken gifu
静岡県 shizuokaken shizuoka
愛知県 aichiken aichi
三重県 mieken mie
滋賀県 shigaken shiga
京都府 kyoutofu kyoto
大阪府 oosakafu osaka
兵庫県 hyougoken hyogo
奈良県 naraken nara
和歌山県 wakayamaken wakayama
鳥取県 tottoriken tottori
島根県 shimaneken shimane
岡山県 okayamaken okayama
広島県 hiroshimaken hiroshima
山口県 yamaguchiken yamaguchi
徳島県 tokushimaken tokushima
香川県 kagawaken kagawa
愛媛県 ehimeken ehime
高知県 kouchiken kochi
福岡県 fukuokaken fukuoka
佐賀県 sagaken saga
長崎県 nagasakiken nagasaki
熊本県 kumamotoken kumamoto
大分県 ooitaken oita
宮崎県 miyazakiken miyazaki
鹿児島県 kagoshimaken kagoshima
沖縄県 okinawaken okinawa

あってそう。

とおもったけど、toukyoutoがkyotoになってた。。

“Jaro, or Jaro-Winker distance.”というやつをつかったらうまくいった。これがなんなのかは不明。

library(purrr)

pref_alpha %>%
  map(get_nearest_prefname, method = "jw") %>%
  bind_rows(.id = "kanji") %>%
  knitr::kable()
kanji orig conv
北海道 hokkaidou hokkaido
青森県 aomoriken aomori
岩手県 iwateken iwate
宮城県 miyagiken miyagi
秋田県 akitaken akita
山形県 yamagataken yamagata
福島県 fukushimaken fukushima
茨城県 ibarakiken ibaraki
栃木県 tochigiken tochigi
群馬県 gunmaken gunma
埼玉県 saitamaken saitama
千葉県 chibaken chiba
東京都 toukyouto tokyo
神奈川県 kanagawaken kanagawa
新潟県 niigataken niigata
富山県 toyamaken toyama
石川県 ishikawaken ishikawa
福井県 fukuiken fukui
山梨県 yamanashiken yamanashi
長野県 naganoken nagano
岐阜県 gifuken gifu
静岡県 shizuokaken shizuoka
愛知県 aichiken aichi
三重県 mieken mie
滋賀県 shigaken shiga
京都府 kyoutofu kyoto
大阪府 oosakafu osaka
兵庫県 hyougoken hyogo
奈良県 naraken nara
和歌山県 wakayamaken wakayama
鳥取県 tottoriken tottori
島根県 shimaneken shimane
岡山県 okayamaken okayama
広島県 hiroshimaken hiroshima
山口県 yamaguchiken yamaguchi
徳島県 tokushimaken tokushima
香川県 kagawaken kagawa
愛媛県 ehimeken ehime
高知県 kouchiken kochi
福岡県 fukuokaken fukuoka
佐賀県 sagaken saga
長崎県 nagasakiken nagasaki
熊本県 kumamotoken kumamoto
大分県 ooitaken oita
宮崎県 miyazakiken miyazaki
鹿児島県 kagoshimaken kagoshima
沖縄県 okinawaken okinawa