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 |