OECDパッケージを使ってデータ分析
記事について
この記事は R アドベントカレンダー 22 日目の記事です。
{OECD}
パッケージを使って各国の GDP データを取得し、可視化するところまでを扱います。
OECDパッケージとは
用途
OECD のデータを検索し、抽出することができます。CRANの文書はこちらにあります。
使用の流れ
この記事では以下 3 つのプロセスに分けて紹介します。
- パッケージのインストール
- データの取得
- 加工と可視化
パッケージのインストール
まずは {OECD}
パッケージをインストールします。その後、どのような関数がこのパッケージに含まれるかを見てみます。
バージョンを指定してインストール
{OECD}
パッケージの最新バージョンにはバグの出る関数があります(GitHub 上に Issues が立てられています)。そのためここでは {devtools}
パッケージを使って 1 つ古いバージョンをインストールします。
本記事の公開日(2022-12-22)時点での最新バージョンは '0.2.5'
ですが、'0.2.4'
を指定してインストールします。
devtools::install_version("OECD", version = "0.2.4")
バージョン 0.2.4
がインストールできたかを念のため確認します。
packageVersion("OECD")
大丈夫でした。次に進みます。
[1] ‘0.2.4’
パッケージを覗く
パッケージがインストールできたので、具体的にどのような関数が含まれるかを見てみます。
まずは library
関数で {OECD}
パッケージを取得します。後で使用する別のパッケージもここで取得しておきます。未インストールのパッケージについては install.packages
にてインストールをお願いします。
library(OECD)
library(tidyverse)
library(ggrepel)
library(scales)
{OECD}
パッケージに含まれる関数は以下のとおりです。いかにもデータをゲットできそうです。この後使う関数は search_dataset
、get_data_structure
、get_dataset
の 3 つです。
browse_metadata Browse the metadata related to a series.
get_data_structure Get the data structure of a dataset.
get_dataset Download OECD data sets.
get_datasets Get a data frame with information on all available datasets.
search_dataset Search codes and descriptions of available OECD series.
データを取得する
データの取得は大きく 3 つのプロセスで構成されます。
- データの検索
- メタデータの確認
- データの取得
データの検索
実際にどのようなデータがあるかを調べます。
データの検索を行うには search_dataset
関数を使用します。今回は各国の GDP を調べたいので、"GDP" という文字列を入力して検索しました。
どのようなワードで検索すれば良いか分からない場合は OECD Stat を直接見に行くのが良いです。
例えば以下画像の検索画面で National Accounts
search_dataset("GDP")
結果の一部を表示していますが、全部で 28 件ヒットしたようです。今回は上から 2 番目にある SNA_TABLE1
のデータセットを使用します。
# A tibble: 28 × 2
id title
1 FIGURE1_E_AEO2013 Figure 1: Real GDP growth 2013 (East)
2 SNA_TABLE1 1. Gross domestic product (GDP)
3 PPPGDP Purchasing Power Parities for GDP and related indicators
メタデータの確認
データセットのすべての行を取得するとサイズが大きいので、データセットの中で必要な箇所だけを取得します。
そのためにはまず、今回使用するデータのメタデータを取得します。関数に与えるのはデータセットの title
ではなく id
です。
metadata <- get_data_structure("SNA_TABLE1")
VAR_DESC
にアクセスすると、メタデータの中に何が入っているか確認できます。LOCATION
から REFERENCEPERIOD
までで 10 個の List
が入っています。一部覗いてみます。
metadata$VAR_DESC
id description
1 LOCATION Country
2 TRANSACT Transaction
3 MEASURE Measure
4 TIME Year
5 OBS_VALUE Observation Value
6 TIME_FORMAT Time Format
7 OBS_STATUS Observation Status
8 UNIT Unit
9 POWERCODE Unit multiplier
10 REFERENCEPERIOD Reference period
LOCATION
には国名が入っています。
head(metadata$LOCATION)
id label
1 AUS Australia
2 AUT Austria
3 BEL Belgium
4 CAN Canada
5 CHL Chile
6 COL Colombia
これも一部抜粋ですが、TRANSACT
にはデータの種類が入っています。今回は B1_GA
の Gross domestic product (output approach)
、つまり生産側の GDP を使用することにします。支出側は 28 番目にあります。
metadata$TRANSACT
id label
1 GDP 1--Gross domestic product
2 B1_GA Gross domestic product (output approach)
3 B1G_P119 Gross value added at basic prices, excluding FISIM
4 B1G Gross value added at basic prices, total activity
5 B1GA_B Agriculture, hunting and forestry; fishing (ISIC rev3)
28 B1_GE Gross domestic product (expenditure approach)
このような流れで、概ねどのような形でデータを取得すれば良さそうかアタリを付けていきます。
データの取得
データの取得に使用する関数は get_dataset
です。メタデータで必要なデータを確認し、引数の filter
に指定します。また、start_time
、end_time
を指定して必要な年次に絞ります。
今回は以下のデータを取得しました。
- 国は G7 (カナダ、フランス、ドイツ、イタリア、日本、英国、米国) に限定
- データは生産側 GDP
- 価格は現在の価格で現在の為替レート
- 1974 年から 2021 年まで(高度経済成長期が終わった後から現在まで)
dat_gdp <- get_dataset(dataset = "SNA_TABLE1",
filter = list(c("JPN", "CAN", "FRA",
"DEU", "ITA", "GBR", "USA"), # G7
"B1_GA", # 生産側 GDP
"CXC" # 現在の価格、現在の為替レート
),
start_time = 1974, end_time = 2021)
取得したデータを見てみます。
dat_gdp %>% head()
# A tibble: 6 × 9
LOCATION TRANSACT MEASURE TIME_FORMAT UNIT POWERCODE obsTime obsValue OBS_STATUS
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <chr>
1 CAN B1_GA CXC P1Y USD 6 1974 160406. E
2 CAN B1_GA CXC P1Y USD 6 1975 173841. E
3 CAN B1_GA CXC P1Y USD 6 1976 206570. E
4 CAN B1_GA CXC P1Y USD 6 1977 211624. E
5 CAN B1_GA CXC P1Y USD 6 1978 218641. E
6 CAN B1_GA CXC P1Y USD 6 1979 243067. E
例えば一番右の列にある OBS_STATUS
は E という値が入っています。これをメタデータで見てみると、推定値 (Estimated value) と暫定値 (Provisional value) がデータセットに含まれているようです。
metadata$OBS_STATUS
id label
4 E Estimated value
11 P Provisional value
加工と可視化
ここまでで必要なデータセットを取得できたので、最後はこれを加工して可視化します。本記事のメインスコープからはやや外れますので詳細な説明は避けますが、今回は ggplot
を使って折れ線グラフを作成しました。
dat_gdp %>%
# 可視化用にデータの加工
rename(`国` = LOCATION,
`年` = obsTime,
GDP = obsValue) %>%
group_by(`国`) %>%
mutate(`年` = as.double(`年`),
label = if_else(`年` == max(`年`), `国`, NA_character_)) %>%
# 可視化
ggplot(data = .,
mapping = aes(x = `年`, y = GDP, color = `国`)) +
geom_point(show.legend = TRUE) +
geom_line(show.legend = TRUE) +
geom_label_repel(mapping = aes(label = label), nudge_x = Inf,
na.rm = TRUE, show.legend = FALSE) +
scale_y_continuous(labels = unit_format(unit = "M"),
breaks = seq(0, 24000000, by = 2000000)) +
scale_x_continuous(breaks = seq(1974, 2021, by = 2)) +
coord_cartesian(xlim = c(1974, 2025), expand = TRUE) +
labs(title = "GDP の国際比較(USD)")
結果は以下画像のように表示されます。
以上です。お読みいただきありがとうございました。
Discussion