본문 바로가기
  • Homines, dum docent, discunt
  • Repetitio est Mater Memoriae
  • Dilige et fac quod vis
지식 창고/R 언어

재정경제통계시스템 R OPEN API 이용하기

by Manana Cho 2022. 5. 25.
반응형

###[3]통계데이터조회(Sttsapitbldata)-----------------------------------------------------------
Sttsapitbldata_url="https://www.nabostats.go.kr/openapi/Sttsapitbldata.do"
Type="xml"
pIndex=1
pSize=1000
STATBL_ID=""#필수)통계표ID
DTACYCLE_CD="YY"#필수)자료주기YY 혹은 MM으로 추정.개발가이드에 관련 내용이 없음으로 임의의 조합을 따름을 양해부탁드립니다.#분기와 반기가 있으나,Q나 H로시도했을시 실행되지 않습니다. 
##데이터 주기가 월(MM)이여도 MM으로 불러들이면 오류가 납니다. 일괄 YY로 해야 데이터가 파싱됩니다.  
WRTTIME_IDTFR_ID=""#선택)자료시점
STATBL_LIST=Sttsapitbl$STATBL_ID
#방법1
for(STATBL_IDinSTATBL_LIST){
  print(paste0(Sttsapitbl_url,
               '?Key=',api_key,
               '&Type=',Type,
               '&pIndex=',pIndex,
               '&pSize=',pSize,
               '&STATBL_ID=',STATBL_ID,
               '&DTACYCLE_CD=',DTACYCLE_CD ##YY로불러서안되는것들은자료주기가월(MM)일가능성이높습니다.서비스통계목록의DTACYCLE_NM을참조부탁드립니다.
               #,'&WRTTIME_IDTFR_ID=',WRTTIME_IDTFR_ID
               ))
}

https://www.nabostats.go.kr/portal/openapi/selectServicePage.do

 

오류 메세지 | 재정경제통계시스템

잘못된 페이지를 호출하셨거나 일시적인 시스템 오작동으로 요청하신 페이지를 찾을 수 없습니다. 이용에 불편을 드려 죄송합니다. 잠시 후 메인페이지로 이동합니다. 잘못된 페이지를 호출하

www.nabostats.go.kr

https://www.nabostats.go.kr/portal/openapi/openApiListPage.do

 

본 사이트는 열린 재정과 비슷한 구조로 작동하나, 규칙성이나 체제가 훨씬 더 잘 잡혀있고 

개발 가이드가 상세하여 훨씬 더 이용이 간편합니다. (물론 데이터 주기에 월과 분기, 반기라고 표시해두고 전부 YY(연도)로 돌아간다는 문제점은 있습니다만...)

 

[1] API 인증키를 발급받고 나면 R에서 필요 패키지를 설치해줍니다. 

###NADOSTATS재경경제통계시스템
###InstallPackages/Libraries-------------------------------
if(!require('httr'))install.packages('httr');library('httr')
if(!require('tidyverse'))install.packages('tidyverse');library('tidyverse')
if(!require('jsonlite'))install.packages('jsonlite');library('jsonlite')
if(!require('rvest'))install.packages('rvest');library('rvest')
if(!require('dplyr'))install.packages('dplyr');library('dplyr')
if(!require('stringr'))install.packages('stringr');library('stringr')
if(!require('magrittr'))install.packages('magrittr');library('magrittr')
if(!require('shiny'))install.packages('shiny');library('shiny')
if(!require('DT'))install.packages('DT');library('DT')
if(!require('XML'))install.packages('XML');library('XML')
if(!require('xml2'))install.packages('xml2');library('xml2')

[2] API키를 정의하고, xml 파싱 구문을 function으로 정리해주도록 하겠습니다. 

###API인증키
api_key="[개인 API 코드]"
#FUNCTION--------------------------------------------------
xmleasyfun=function(url){
temp=read_xml(url)
temp0=xmlParse(temp)
df=xmlToDataFrame(getNodeSet(temp0,"//row"))
}

[3] 통계목록을 불러와줍니다. 아주 체계적으로 잘 정리되어있습니다. 

###[1]서비스통계목록(Sttsapitbl)-----------------------------------------------------------
#parametersetting
Sttsapitbl_url="https://www.nabostats.go.kr/openapi/Sttsapitbl.do"
Type="xml"
pIndex=1
pSize=1000
STATBL_ID=""#선택)통계표ID
STATBL_NM=""#선택)통계표명
Sttsapitbl=paste0(Sttsapitbl_url,
'?Key=',api_key,
'&Type=',Type,
'&pIndex=',pIndex,
'&pSize=',pSize
)
Sttsapitbl=xmleasyfun(Sttsapitbl) #함수를이용한경우
Sttsapitbl
DT::datatable(Sttsapitbl)
write.csv(Sttsapitbl,"Sttsapitbl.csv")

#위 이미지처럼 통계표번호와 통계목록명이 나옴으로 작성에 크게 참고가 됩니다. 공공 데이터의 아주 좋은 사례입니다. 

Sttsapitbl.csv
0.21MB

 

###[2]통계세부항목조회(Sttsapitbl)-----------------------------------------------------------
Sttsapitblitm_url="https://www.nabostats.go.kr/openapi/Sttsapitblitm.do"
Type="xml"
pIndex=1
pSize=1000
STATBL_ID=""#필수)통계표ID
STATBL_LIST=Sttsapitbl$STATBL_ID
for(STATBL_ID in STATBL_LIST){
print(paste0(Sttsapitbl_url,
'?Key=',api_key,
'&Type=',Type,
'&pIndex=',pIndex,
'&pSize=',pSize,
'&STATBL_ID=',STATBL_ID))
}
###PASTEURL
STATBL_NM=Sttsapitbl$STATBL_NM
write.csv(STATBL_NM,'STATBL_NM.csv') #여기서 얻은 통계명을 이후 엑셀 템플릿에 붙여 for loop 구문을 코드로 만들어줍니다. 

#엑셀 템플릿은 이하와 같습니다. 

nadostatcodetemplate{public).xlsx
0.16MB

###[3]통계데이터조회(Sttsapitbldata)-----------------------------------------------------------
Sttsapitbldata_url="https://www.nabostats.go.kr/openapi/Sttsapitbldata.do"
Type="xml"
pIndex=1
pSize=1000
STATBL_ID=""#필수)통계표ID
DTACYCLE_CD="YY"#필수)자료주기YY 혹은 MM으로 추정.개발가이드에 관련 내용이 없음으로 임의의 조합을 따름을 양해부탁드립니다.#분기와 반기가 있으나,Q나 H로시도했을시 실행되지 않습니다. 
##데이터 주기가 월(MM)이여도 MM으로 불러들이면 오류가 납니다. 일괄 YY로 해야 데이터가 파싱됩니다.  
WRTTIME_IDTFR_ID=""#선택)자료시점
STATBL_LIST=Sttsapitbl$STATBL_ID
#방법1
for(STATBL_IDinSTATBL_LIST){
  print(paste0(Sttsapitbl_url,
               '?Key=',api_key,
               '&Type=',Type,
               '&pIndex=',pIndex,
               '&pSize=',pSize,
               '&STATBL_ID=',STATBL_ID,
               '&DTACYCLE_CD=',DTACYCLE_CD ##YY로불러서안되는것들은자료주기가월(MM)일가능성이높습니다.서비스통계목록의DTACYCLE_NM을참조부탁드립니다.
               #,'&WRTTIME_IDTFR_ID=',WRTTIME_IDTFR_ID
               ))
}

 

 

#[4]통계 용어사전 조회(DicApiList)----------------------------------------------------------
DicApiList_url="https://www.nabostats.go.kr/openapi/DicApiList.do"
Type="xml"
pIndex=1
pSize=1000
DIC_TITLE=""#선택)용어명
DicApiList=paste0(DicApiList_url,
                  '?Key=',api_key,
                  '&Type=',Type,
                  '&pIndex=',pIndex,
                  '&pSize=',pSize
)
DicApiList=xmleasyfun(DicApiList)#함수를이용한경우
DicApiList
DT::datatable(DicApiList)
write.csv(DicApiList,"DicApiList.csv")

 

#전체코드

 

nadostatcode.txt
0.23MB

 

 

반응형

댓글