概要
Rでデータの可視化を試してみたんだけど、ggplot2のTreemapがうまくいかない人のための記事。使用するデータは2015年度の政府統計です。(ゼミでコードをシェアしたものの、コードだけでは伝わらないのでは、という懸念を解消するための記事でもある。)
#解説
#ライブラリとデータのセット
#set libraries
print(search())
library(gdata) #to read xls data
library(treemap) #to use treemap plot
library(dplyr) #to use great data modify function, like group_by
#load data
population <- read.xls("2015_population.xls")
#delete useless columns
population <- population[c("X.5","X.6","X.7")] #dataframe of 3 factors
c_name <- c("state","city","population") #to set columns name
names(population) <- c_name
print(names(population))
ライブラリはinstall.packages() を使ってインストールします。
読み込んだデータには X.数字 というカラムがあるので、必要なもののみ取り出して、populationに入れておきます。
今回は、都道府県、市町村、人口の順でデータを抜き取ったので、カラムの名前をstate, city, populationの順に変えておきます。
##文字から数値へ変換する
#modify population column
population <- population[11:length(population[[2]]),] #delete useless values
population$population <- sapply(gsub(',','',population$population),function(x) x[1]) # to eliminate comma on population column
population$population <- as.numeric(population$population)#to change character d-type into numeric d-type
populationカラムには人口が入っていますが、データの型がcharacterであったので、このままでは平均の計算や、プロットしにくいので、numに変換します。
populationカラムのカンマによる数値の区切り (ex. 123,456)を削除し、as.numeric()を使うことで、数値に変換させます。
#Treemap
#make treemap
states <- population$state #to reshape population dataframe
population_without_allState <- subset(population, !(city %in% states)) # delete rows where state and city have a same name
rainbow_color <- rainbow(47,s=0.4) #set colors
treemap(population_without_allState,
index=c("state","city"),vSize = "population", title = "Distribution of the population in Japan",type = "index",fontsize.labels = c(12,8),
fontcolor.labels = c("white","orange"),fontface.labels = c(2,1),bg.labels =c("transparent"),align.labels = list(c("center","center"),c("right","bottom")),
overlap.labels = 0.5,inflate.labels = F, fontfamily.title ="HiraKakuPro-W3", fontfamily.labels = "HiraKakuPro-W3",
fontfamily.legend = "HiraKakuPro-W3",palette = rainbow_color, border.lwds=c(1,1))
populationの中には、県毎の合計が含まれているので、これを削除して、population_without_allStateに入れておきます。
treemapの引数はそれぞれ;
index: treemapで使用するグループの区分
vSize: treemapの面積を何の指標で表すかの設定
bg.labels: 大きい方のグループの文字のバックグラウンドの色の設定。※これを設定しないとかっこ悪いグラフになる
fontface.labels: 文字の形式。1がノーマル, 2が太字,3がイタリック,4が太字イタリック
inflate.labels: Tに設定すると、面積に応じてラベルサイズが大きくなる
fontfamily: これを設定しないと、日本語が〼(マス、豆腐)表示になる
palette: treemapの色設定
border.lwds: グループの堺の太さの設定
#まとめ
関東人おおい。県庁所在地つよい。
参考資料: https://www.r-graph-gallery.com/236-custom-your-treemap/
コードはgithubにあります。https://github.com/genkioffice/subsemi_analysis/blob/master/first/chap1_hw.R