読者です 読者をやめる 読者になる 読者になる

choroplethrで大阪市のコロプレス図を描くパッケージをつくりました

R choroplethr

そういえばブログに書くの忘れてた、と思っていちおう書いときます。

以前、choroplethrで大阪市のコロプレス図を描くという記事を書きましたが、これのパッケージ版をつくりました。そこまで気合入れてつくったものでもないんですが、とりあえずREADMEのコードをコピペすれば動くはずです。

github.com

インストール

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()

demo.png

おまけ:アルファベットからアクセント記号を取りたいとき

区の名前は、Jōtō-kuのようになってるんですが、これをキーボードから打つのは困難です。(Macだと比較的簡単ですが、それでもアクセント記号のキー配列なんて普通の人は覚えてません…よね?)なので、Joto-kuみたいにアクセント記号抜きのアルファベットに変換したいです。

これには、iconv()"ASCII//TRANSLIT"を指定するか、stringi::stri_trans_general()"Latin-ASCII"を指定するといいみたいです。指定する文字コード名が違うのは、stringiICU文字コード名だからです。

参考:[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"