데이터 과학자와 함께 하는 제19대 대통령 선거

OECD를 포함한 국제기구 데이터 읽어오기

1. OECD를 포함한 국제기구 데이터셋 1

경제개발협력기구(OECD)에서 취합하여 발간하는 데이터를 OECD.Stat에서 직접 가져오는 방법은 다음과 같이 크게 세가지가 있다.

  • 추출하고자 하는 데이터에 대한 명칭을 찾아 http://stats.oecd.org/Index.aspx?DataSetCode=PNNI_NEW처럼 웹브라우져 주소창에 넣어 데이터를 긁어오는 것으로 그다지 권장하고 싶지는 않다.
  • OECD Open API를 활용하여 데이터를 받아오는 방법.
  • SDMX 질의문 쿼리를 사용해서 데이터셋, 국가, 관측점 범위를 특정하여 가져오는 방법.

SDMX 추진 배경

SDMX는 데이터와 메타데이터로 구성되고, SDMX에 참여하고 있는 국제기구는 다음과 같다.

2. 통계데이터 및 메타데이터 교환 표준(SDMX) 활용

SDMX을 활용하여 데이터를 불러올 경우 다음 세가지 정보가 필수적이다. 사례를 통해 좀더 자세히 한걸음 들어가 보자.

http://stats.oecd.org/restsdmx/sdmx.ashx/GetData/UN_DEN/AUS+CAN+FRA+DEU+NZL+GBR+USA+OECD/OECD?startTime=1960&endTime=2012

  • UN_DEN: 데이터셋 코드를 지칭(Trade Union Density)
  • AUS+CAN+FRA+DEU+NZL+GBR+USA+OECD: ISO 국가코드
  • startTime=1960&endTime=2012: 데이터 추출 시점

3. R 팩키지

각 국제기구에 직접 붙어 데이터를 추출하기 보다 데이터 형식으로 SDMX를 지원하는 R 팩키지를 통해 데이터를 추출하면 효율적으로 작업을 수행할 수 있다. 다수 팩키지가 국제기구 SDMX 데이터 형식을 지원하기 위해 개발되었고 선의의 경쟁을 펼치고 있다. 개발당시에는 동작을 잘 했으나, 국제기구에서 인터페이스와 자료를 변경하여 지금은 동작하지 않는 팩키지도 존재하는 것이 사실이다.

rsdmx 팩키지는 SDMX-ML 형태로 데이터와 메타데이터를 읽어들일 수 있는 저수준 도구 모음이다.

3.1. OECD 데이터 목록 확인

rsdmx 팩키지를 불러와서 OECD에서 추출 가능한 데이터를 확인한다.

library(rsdmx)
# 1. 데이터 확인  --------------------------------------------------------------------------
# https://en.wikipedia.org/wiki/SDMX
# https://www.r-bloggers.com/deaths-from-assault-over-time-in-40-relatively-rich-countries/

## 1.1. OECD 데이터 목록
dsUrl <- "http://stats.oecd.org/restsdmx/sdmx.ashx/GetDataStructure/ALL"
ds <- readSDMX(dsUrl)
dsdf <- as.data.frame(ds)
head(dsdf)
           id agencyID
1         QNA     OECD
2     PAT_IND     OECD
3 SNA_TABLE11     OECD
4   EO78_MAIN     OECD
5       ANHRS     OECD
6    GOV_DEBT     OECD
                                                                                    Name.fr
1                                                            Comptes nationaux trimestriels
2                                                                     Brevets - Indicateurs
3                            11. Dépense des administrations publiques par fonction (COFOG)
4 Perspectives économiques No 78 - décembre 2005 - Projections annuelles pour les pays OCDE
5                                         Heures moyennes annuelles ouvrées par travailleur
6                                                        Dette de l'administration centrale
                                                                         Name.en
1                                                    Quarterly National Accounts
2                                                              Patent indicators
3                                 11. Government expenditure by function (COFOG)
4 Economic Outlook No 78 - December 2005 - Annual Projections for OECD Countries
5                                Average annual hours actually worked per worker
6                                                        Central Government Debt
  version  uri  urn isExternalReference isFinal validFrom validTo
1    <NA> <NA> <NA>                  NA      NA      <NA>    <NA>
2    <NA> <NA> <NA>                  NA      NA      <NA>    <NA>
3    <NA> <NA> <NA>                  NA      NA      <NA>    <NA>
4    <NA> <NA> <NA>                  NA      NA      <NA>    <NA>
5    <NA> <NA> <NA>                  NA      NA      <NA>    <NA>
6    <NA> <NA> <NA>                  NA      NA      <NA>    <NA>
## 1.1. 데이터구조 정의 (DataStructureDefinition, DSD)
dsdUrl <- "http://stats.oecd.org/restsdmx/sdmx.ashx/GetDataStructure/TABLE1"
dsd <- readSDMX(dsdUrl)

# DSD에서 코드 목록(codelist) 받아오기
cls <- slot(dsd, "codelists")
codelists <- sapply(slot(cls, "codelists"), function(x) slot(x, "id"))
codelist <- as.data.frame(slot(dsd, "codelists"), codelistId = "CL_TABLE1_FLOWS")

# DSD에서 concepts 확인
concepts <- as.data.frame(slot(dsd, "concepts"))

3.2. OECD 데이터 가져오기

readSDMX 함수를 활용하여 추출하고자 하는 데이터와 기간을 넣어 자료를 추출한다.

# 2. 데이터 불러오기 --------------------------------------------------------------------------
sdmx <- readSDMX(providerId = "OECD", resource = "data", flowRef = "WEALTH",
                 start = 2010, end = 2015)
-> Fetching 'http://stats.oecd.org/restsdmx/sdmx.ashx/GetData/WEALTH/all/all?startPeriod=2010&endPeriod=2015'
df <- as.data.frame(sdmx)
head(df)
  LOCATION          VAR AGE TIME_FORMAT  UNIT POWERCODE obsTime
1      AUS          MNW  TP         P1Y   AUD         0    2012
2      AUS         MENW  TP         P1Y   AUD         0    2012
3      AUS     MNW_MENW  TP         P1Y RATIO         0    2012
4      AUS    RATIO_TOP  TP         P1Y RATIO         0    2012
5      AUS RATIO_BOTTOM  TP         P1Y RATIO         0    2012
6      AUS      SHARE10  TP         P1Y    PC         0    2012
      obsValue
1 5.958200e+05
2 3.650000e+05
3 1.632384e+00
4 9.506181e+00
5 9.591151e-01
6 4.493983e+01