OECDの主要統計から住宅価格に関連するデータを抽出し,実質住宅価格指数(real house price indices)をNatural Earthの世界地図に可視化.
バブルマップをアニメーション化.
install.packages("OECD")ではななく,下記の方がよいかも(作成日現在).ライブラリ:sf,tidyverse,OECD,rnaturalearth,gganimate
get_datasets():OECDに掲載されているすべてのデータにアクセス.search_dataset()を用いて必要なデータを検索.ここでは,キーワードとして「住宅価格(house price)」に関わるデータを検索.↑ 3つの指標があり,それぞれの説明が記されている.HOUSE_PRICESを利用.hpと名付ける.get_data_structure():指定されたデータ(hp)のリストを返す.各リストの観測数,変数の数を確認できる.hpstrと名付ける.str():hpstrのデータ構造を表示.そのうち,最初の階層のみ(max.level=1)表示.## List of 9
## $ VAR_DESC :'data.frame': 9 obs. of 2 variables:
## $ COU :'data.frame': 52 obs. of 2 variables:
## $ IND :'data.frame': 7 obs. of 2 variables:
## $ TIME :'data.frame': 476 obs. of 2 variables:
## $ OBS_STATUS :'data.frame': 16 obs. of 2 variables:
## $ UNIT :'data.frame': 323 obs. of 2 variables:
## $ POWERCODE :'data.frame': 32 obs. of 2 variables:
## $ REFERENCEPERIOD:'data.frame': 112 obs. of 2 variables:
## $ TIME_FORMAT :'data.frame': 5 obs. of 2 variables:
VAR_DESCの中身を表示.
INDが住宅価格指標.INDの中身を表示.
RHP(実質住宅価格指数)を利用.COUの中身を表示.
JPN),ドイツ(DEU),アメリカ(USA),イギリス(GBR),ニュージーランド(NZL)を利用.list()を用いて,可視化する変数や要素をフィルターの条件としてリスト化.filter_listと名付ける.c()でベクトルとして扱う.↑表のidから3文字の国名コードを加える.get_dataset():データを指定し,フィルターをかけて,データを抽出.dfと名付ける.↑ Time列に四半期データが含まれている.このままだと年次データと識別できない.
TIME_FORMATの表示(↓).
P1Yが年次データ,P3Mが四半期データとされているが,↑のTIME_FORMATはすべてP1Yと表示...(なぜ?)dfから利用する列を選抜(select())し,Time列で「-」表記のある要素(例えば,1970-Q1)を取り除く(fliter()の!で取り除くことが可能).
8. 実質住宅価格の値(ObsValue)が文字なので数値に変更.
geom_line())で可視化.
group=COU),色(color)と折れ線の形状(linetype)で識別.#図を見やすくするための工夫
my_breaks <-
c(1960, 1965, 1970, 1975, 1980, 1985,
1990,1995, 2000, 2005, 2010, 2015, 2020)
my_color <-
c("#0B0405FF", "#38AAACFF", "#3B2F5EFF",
"#366A9FFF", "#A0DFB9FF")
my_line <-
c("dotted", "dashed", "solid",
"dotdash", "longdash")
#可視化
ggplot()+
geom_line(data=df,
aes(x=Time, y=ObsValue,
group=COU, color=COU,
linetype=COU),
linewidth=0.7)+
scale_color_manual(values=my_color)+
scale_linetype_manual(values=my_line)+
geom_vline(xintercept="2015",
linewidth=0.5)+
scale_x_discrete(breaks=my_breaks)+
labs(color="国", linetype="国",
x="年", y="実質住宅価格指数, 2015=100",
caption="出典: OECD")+
ggtitle("実質住宅価格指数(1960年~2022年)")+
theme_bw()ne_countries()で読込.scale)はmediumを指示.World_mapと名付ける.World_mapのiso_a3が3文字の国名コード.
left_join():データ結合(横方向).コロプレスマップで時系列の実質住宅価格指数の変化を捉えるアニメーション作成.
choropleth_map <-
ggplot()+
geom_sf(data=World_map, fill="gray",
alpha=0.4, color="white",
linewidth=0.001)+
geom_sf(data=hp_map, aes(fill=ObsValue),
color="white", linewidth=0.001)+
scale_fill_viridis_c(option="G")+
labs(fill="2015=100",
subtitle="年:{current_frame}",
caption="出典:Natural Earth, OECD")+
ggtitle("実質住宅価格指数")+
coord_sf(crs=st_crs("ESRI:54030"))+
theme_bw()+
theme(legend.position="bottom")transition_manual():作成された地図(フレーム)をTimeで連続して変化させるように指示.anime_と名付ける.
animate():作成したanimeをアニメーション化.nameをデータ結合上capital_nameに変更.hp_mapに首都の位置情報を追加するために,データ結合.#首都の位置情報
capital <-
read.csv("capital_cities_2022_0.csv",
sep=",", header=TRUE)
#データ結合
hp_map <-
left_join(hp_map, capital,
by=c("iso_a3"="adm0_a3"))
#データの一部中身,位置情報
hp_map %>%
select(iso_a3, Time, capital_name,
x, y) %>%
filter(Time=="2022") ->
hp_map_XY
hp_map_XY %>%
head() #6年分抽出
hp_map %>%
filter(Time=="1975" | Time=="1985" |
Time=="1995" | Time=="2005" |
Time=="2015" | Time=="2022") ->
hp_map2
#可視化
ggplot()+
geom_sf(data=World_map, fill="gray")+
geom_point(data=hp_map2, aes(x=x, y=y,
color=ObsValue,
size=ObsValue), alpha=0.8)+
scale_color_viridis_c(option="G",
guide="legend")+
scale_size_area(max_size=10)+
geom_sf(data=World_map, fill="NA")+
labs(color="実質住宅価格指数",
size="実質住宅価格指数",
x="", y="")+
facet_wrap(~Time, ncol=2)+
ggtitle("実質住宅価格指数(1975年~2022年)")+
theme_void()+
theme(legend.position="bottom")#bubble_mapと名付けて地図を格納
bubble_map <-
ggplot()+
geom_sf(data=World_map, fill="gray")+
geom_point(data=hp_map,
aes(x=x, y=y,
color=ObsValue,
size=ObsValue),
alpha=0.8)+
scale_color_viridis_c(option="G",
guide="legend")+
scale_size_area(max_size=16)+
geom_sf(data=World_map, fill="NA")+
labs(color="実質住宅価格指数",
size="実質住宅価格指数",
subtitle="年:{current_frame}",
caption="出典:Natural Earth, OECD",
x="", y="")+
ggtitle("実質住宅価格指数(2015=100)")+
theme_void()+
theme(legend.position="bottom")#アニメーション化準備
anime_bubble <-
bubble_map+
transition_manual(Time)
#アニメーション化
anime_bubble %>%
animate() Rによる地理空間データの可視化