そういえばブログに書くの忘れてた、と思っていちおう書いときます。
以前、choroplethrで大阪市のコロプレス図を描くという記事を書きましたが、これのパッケージ版をつくりました。そこまで気合入れてつくったものでもないんですが、とりあえずREADMEのコードをコピペすれば動くはずです。
インストール
devtools::install_github("yutannihilation/choroplethrOsakaCity")
使い方
まずデータを用意します。
library(choroplethrOsakaCity) library(ggplot2) library(dplyr) csv_file <- tempfile(fileext = ".csv") download.file("https://raw.githubusercontent.com/yutannihilation/osaka_age_composition/master/osaka_age_composition.csv", destfile = csv_file, method = "curl") age_comp.df <- read.csv(csv_file, header = TRUE, stringsAsFactors = FALSE, fileEncoding = "UTF-8") %>% group_by(district) %>% summarise(value = sum(age * total)/sum(total)) head(age_comp.df) #> Source: local data frame [6 x 2] #> #> district value #> 1 阿倍野 45.44998 #> 2 旭 47.06810 #> 3 港 45.91784 #> 4 此花 45.33363 #> 5 住吉 45.90159 #> 6 住之江 46.55447
区の名前が入ってますが、使うのは市町村コードです。
区の名前を市町村コードに変換するための関数to_osaka_ward_code()
を用意したのでそれを使います。
to_osaka_ward_code(c("北区", "此花", "城東")) #> [1] "27127" "27104" "27118" to_osaka_ward_code(c("Kita", "konohana-ku", "JOTO"), from = "alphabet") #> [1] "27127" "27104" "27118"
市町村コードはregion
、可視化したい数値はvalue
というカラム名である必要があります。
age_comp.df <- age_comp.df %>% mutate(region = to_osaka_ward_code(district)) head(age_comp.df) #> Source: local data frame [6 x 3] #> #> district value region #> 1 阿倍野 45.44998 27119 #> 2 旭 47.06810 27117 #> 3 港 45.91784 27107 #> 4 此花 45.33363 27104 #> 5 住吉 45.90159 27120 #> 6 住之江 46.55447 27125
これを使うと、コロプレス図が描けます。
osaka_city_chropleth(age_comp.df, title = "Age Composition") + coord_equal()
おまけ:アルファベットからアクセント記号を取りたいとき
区の名前は、Jōtō-ku
のようになってるんですが、これをキーボードから打つのは困難です。(Macだと比較的簡単ですが、それでもアクセント記号のキー配列なんて普通の人は覚えてません…よね?)なので、Joto-ku
みたいにアクセント記号抜きのアルファベットに変換したいです。
これには、iconv()
で"ASCII//TRANSLIT"
を指定するか、stringi::stri_trans_general()
で"Latin-ASCII"
を指定するといいみたいです。指定する文字コード名が違うのは、stringi
はICUの文字コード名だからです。
参考:[R] Comparing Latin characters with and without accents?
data(osaka_city.code, package = "choroplethrOsakaCity") osaka_city.code$alphabet[2] #> [1] "Jōtō-ku" iconv(osaka_city.code$alphabet[2], from = "UTF-8", to = "ASCII//TRANSLIT") #> [1] "Joto-ku" stringi::stri_trans_general(osaka_city.code$alphabet[2], "Latin-ASCII") #> [1] "Joto-ku"