はじめに
日本地図の県ごとにとある製品の売り上げを視覚化することが必要になり、応急処置的に自分のデータで作成以下の記事を参考にして作成しました。
今後も使うことがあるかと思うので、私の備忘録として投稿します。
準備
{choroplethr}パッケージのインストール
今回はシンプルな色分け地図を作成した例になります。
まずインストールしておかなければならないパケージはchoroplethrAdmin1とchoroplethrになります。それら2つをインストールし、ライブラリを読み込みます。
install.packages("choroplethrAdmin1")
install.packages("choroplethr")
library("choroplethr")
library("choroplethrAdmin1")
読み込んでみたら、以下のコマンドで日本地図が読み込めるか確認します。
admin1_map("japan")
以下のような画像がPlotエリアに表示されたらOKです。
データのインストール
以下のコマンドでデータをインストールして、表示を確認します。
# install the data
data(df_japan_census)
head(df_japan_census)
コンソールに以下のように表示されればOKです。
> head(df_japan_census)
region pop_2010 percent_pop_change_2005_2010
23 aichi 7411000 2.2
5 akita 1086000 -5.2
2 aomori 1373000 -4.4
12 chiba 6216000 2.6
38 ehime 1431000 -2.5
18 fukui 806000 -1.9
pop_density_km2_2010
23 1434.8
5 93.3
2 142.4
12 1205.5
38 252.1
18 192.4
データをcsv形式で出力
以下のコマンドでcsv形式で出力をします。
なお、書き忘れましたが、出力先は現在のRのワーキングディレクトリになりますので、このコマンドを行う前に、スクリプトを保存して、ワーキングディレクトリを現在のスクリプトの保存先にすると、後の操作が楽になります。
また、ファイル名は任意のもので構いませんが、後で読み込む際に忘れないようにしてください。
# Export the demo data to the local folder for customize
write.csv(df_japan_census, "Japan_map_data.csv")
csvファイルの編集と保存
ワーキングディレクトリに保存されているcsvファイルには1列目に県のID(数字)、2列目にローマ字の県名、3列目、4列目に人口などの情報が入っています。
1列目、2列目は変更せず、3列目以降に県別で可視化したいデータ(例:県ごとの売り上げなど)を入れます。
データを入れた後、ファイルを保存します。
県別のデータを入れたcsvファイルの読み込み
保存したcsvファイルを読み込みます。
読み込む際のファイル名は上記で保存したcsvファイル名を指定してください。
また、空欄があるとNAの情報が入ってしまうので、NAを0に置き換えて、data frame形式にします。
# After edit the csv, read the csv
ifname<-"Japan_map_data.csv"
df_japan_census <- read.delim(ifname, row.names=1, header=T,sep=",",as.is=TRUE,strip.white=FALSE)
# replace NA with 0 and format the table with data frame
df_japan_census[is.na(df_japan_census)] <- 0
df_japan_census <- data.frame(df_japan_census)
いよいよ描画!!
まずは以下のオブジェクトを作成し、県名をregionに、視覚化したいデータの列をvalueに指定します。
なお、この形式ではcsvをdata frameに変換しており、1列目がローマ字の県名、2列目がcsvファイルの3列目になります。
(csvファイルの1列目の県のID番号はrownameです)
# Create the object for admin1_choropleth function. Specify the column for value to be used for coloring by prefecture
PlotData <- data.frame(region = df_japan_census[, 1], value = df_japan_census[, 2])
PlotData$region <- as.character(PlotData$region)
以下のコマンドを実行すると、プロットエリアに塗り分け地図が表示されるはずです。
(以下の図は各県に適当に数字を入れて作った架空の売り上げデータです)
オプションのtitleはタイトルで表示させたい文字列を、legendは凡例の文字列を、num_colorsは色を何段階で表したいかを指定します。
# Plot the data. num_colors are the number of color level
admin1_choropleth(country.name = "japan",
df = PlotData,
title = "Annual sales by prefecture",
legend = "Unit",
num_colors = 4)
警告メッセージ:
Column `region` joining character vector and factor, coercing into character vector
おそらく市販のソフトウェアなどでもっと綺麗かつ楽チンに作れるものがあるかもしれませんが、慣れてきたRで自分のデータが使える喜びを感じています。
数行のコマンドでここまでやってくれるRと、可能にしたパッケージの開発者に頭がさがる思いです。