OECDパッケージを使ってデータ分析

2022/12/22に公開

記事について

この記事は R アドベントカレンダー 22 日目の記事です。

{OECD} パッケージを使って各国の GDP データを取得し、可視化するところまでを扱います。

OECDパッケージとは

用途

OECD のデータを検索し、抽出することができます。CRANの文書はこちらにあります。

使用の流れ

この記事では以下 3 つのプロセスに分けて紹介します。

  1. パッケージのインストール
  2. データの取得
  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_datasetget_data_structureget_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 つのプロセスで構成されます。

  1. データの検索
  2. メタデータの確認
  3. データの取得

データの検索

実際にどのようなデータがあるかを調べます。

データの検索を行うには search_dataset 関数を使用します。今回は各国の GDP を調べたいので、"GDP" という文字列を入力して検索しました。

どのようなワードで検索すれば良いか分からない場合は OECD Stat を直接見に行くのが良いです。

例えば以下画像の検索画面で National Accounts \rightarrow Main Aggregates \rightarrow 1. Gross domestic product (GDP) と進めばお目当てのデータにたどり着くことができます(この辺りは慣れが必要な部分でもあり、私も試行錯誤しています)。

OECD stat の検索画面

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_GAGross 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_timeend_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)")

結果は以下画像のように表示されます。

GDP の国際比較

以上です。お読みいただきありがとうございました。

GitHubで編集を提案

Discussion