犬猫動物病院数の推移
犬猫の動物病院の数は、どこの都道府県でも増加傾向にあるようです。
動物病院の登録数は、以下の農林水産省ホームページで公開されています。
https://www.maff.go.jp/j/tokei/kouhyou/animal/
動物病院数を都道府県別に表示し、さらに年ごとに表示して推移を把握したいと思いました。どこかでグラフのアニメーションで、年が変わるとバーチャートの順位が変わるのを見かけたました。どうやったらいいか、調べたところ以下のサイトで実装方法が書かれていました。
R-bloggers – How to create Bar Race Animation Charts in R
これに沿って、Rで実行したところ、以下のようなグラフを作成することができました。tidyverseとgganimateというパッケージを使います。gganimateをインストールした際に追加でgifskiというパッケージをインストールして使えるようになりました。
産業動物診療所は、北海道以外少なくなっていることがわかります。
私の用意したデータは以下のような形をしています。
コードは以下に乗せておきます。
library(tidyverse)
library(reshape2)
library(stringr)
library(gganimate)
library(doParallel)
cl <- makePSOCKcluster(4)
registerDoParallel(cl)
df <- read.csv("C:\\Users\\small.csv")
df2 <- melt(df, id.vars = c("prefecture"))
df2$variable <- str_remove(df2$variable,"X")
colnames(df2) <- c("pref","year","N_of_clinic")
df2$N_of_clinic <- as.numeric(df2$N_of_clinic)
df2$year <- as.numeric(df2$year)
df2_r <- df2 %>%
group_by(year) %>%
mutate(rank = rank(N_of_clinic))
small <- df2_r %>%
ggplot(aes(x=rank,group=pref))+
geom_tile(aes(y=N_of_clinic/2,
height = N_of_clinic,
fill=pref,
width=0.9))+
geom_text(aes(y=0,
label=pref,
hjust = 1,
color=pref))+
geom_text(aes(x=2,
y=1700,
label=as.character(year)),
color="#808080",
size=20)+
coord_flip()+
theme(legend.position = "")+
ylim(-200,2000)+
theme(axis.line=element_blank(),
axis.text.y=element_blank(),
axis.ticks=element_blank(),
axis.title.y=element_blank(),
axis.title.x = element_blank(),
legend.position="none",
panel.background=element_blank(),
panel.border=element_blank(),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
panel.grid.major.x = element_line( size=.1, color="grey" ),
panel.grid.minor.x = element_line( size=.1, color="grey" ),
plot.title=element_text(size=25, hjust=0.5, face="bold", colour="grey", vjust=0.5),
plot.subtitle=element_text(size=18, hjust=0.5, face="italic", color="grey"),
plot.caption =element_text(size=8, hjust=0.5, face="italic", color="grey"),
plot.background=element_blank())+
transition_states(year)+
labs(title = '犬猫等動物病院数')
animate(small, duration=15, renderer = gifski_renderer("small.gif"))
逐次説明
df <- read.csv(“C:\Users\small.csv”)
df2 <- melt(df, id.vars = c(“prefecture”))
1列目:prefecture列、2列目:年、3列目:その年の数値。
df2$variable <- str_remove(df2$variable,”X”)
エクセルファイルで数字から始まる列名の先頭にXがついているので、のぞく。
colnames(df2) <- c(“pref”,”year”,”N_of_clinic”)
列名が分かりやすいので、直す。
df2$N_of_clinic <- as.numeric(df2$N_of_clinic)
df2$year <- as.numeric(df2$year)
reshape後は、charactorになってしまうのでnumberに戻す。
df2_r <- df2 %>%
group_by(year) %>%
mutate(rank = rank(N_of_clinic))
都道府県における動物病院数について、全国におけるその年の順位が入っている列を追加する。
geom_text(aes(y=0, label = pref, hjust = 1, color=pref))+
都道府県の名前のラベルを付ける
geom_text(aes(x=2, y=1700, label=as.character(year)), color=”#808080″, size=20)
グラフの右下に多く年号を表示する。
transition_states(year)
どの変数を使って、アニメーションのフレームを移動させるかを指定する。
animate(small, duration=15, renderer = gifski_renderer(“small.gif”))
アニメーションを保存する。duration、fps、nframeを設定できる。