오픈 API를 활용한 공공데이터 불러오기(데이터 포맷: json)에 이어서 json 형태의 데이터 포맷을 불러오는 R 프로그래밍을 알아보도록 할게요. 공공데이터를 활용하기 위한 준비 단계는 여기를 참고하시면 됩니다.
비교를 위해서 지난번 포스팅에서와 같은 데이터를 불러와 보도록 할게요.
데이터 형식을 확인하기 위한 샘플데이터 확인하기
결과 형식을 json으로 변경한 후에 미리 보기 버튼을 클릭하시면,
아래와 같은 샘플데이터를 볼 수 있어요.
이를 참고해서 원하는 데이터를 추출해 보도록 할게요.
오픈 API URL구조에 대해서는 지난번 포스팅에서 설명해서 넘어가도록 할게요.
데이터 추출을 위한 R code(with jsonlite 패키지)
install.packages('jsonlite') # json 형식의 데이터 전처리를 위한 패키지 설치. 이미 설치되어 있으면 생략 install.packages('httr') # data를 GET 하기 위한 함수 GET 이용을 위한 패키지 설치. 이미 설치되어 있으면 생략 install.packages('tidyverse') # %>% 연산자 사용을 위한 패키지 설치. 이미 설치되어 있으면 생략
# 패키지 로드 library(jsonlite) library(httr) library(tidyverse)
# URL 입력 URL <- "http://apis.data.go.kr/1160100/service/GetFnCoBasiInfoService/getFnCoOutl"
## 인증키 key <- "********" # " " 안에 본인이 부여받은 인증키 입력
## 페이지 위치 지정 pageNo <- 1
## 오픈 API 호출 시 얻게 되는 데이터의 개수 지정 rows <- 10
# 추출 데이터 포맷 지정 type_data_format <- "json"
# GET 함수 활용하여 API로 호출 res <- GET(url = URL, query = list(serviceKey = key %>% I(), pageNo = 1, numOfRows = 10, resultType = type_data_format, basDt = 20200408))
# 호출 결과 확인 print(x = res) status 200으로 송/수신 확인 # json 형태의 data를 text로 추출 res %>% content(as = 'text', encoding = 'UTF-8') %>% fromJSON() -> json
# 추출된 데이터 구조 확인 str(json) list 데이터 구조로 추출
# 오픈 API 호출 결과 데이터의 개수 확인 numOfRows <- json$response$body$numOfRows
# 전체 데이터의 개수 확인 totalCount <- json$response$body$totalCount
# 총 오픈 API 호출 횟수 계산 loopCount <- ceiling(totalCount/numOfRows)
# 전체 데이터를 저장할 변수 선언 finalTotalData <- data.frame()
# 오픈 API 호출을 총 오픈API 호출 횟수만큼 반복 실행 for (i in 1:loopCount) {
# GET 함수 활용하여 API로 호출 res <- GET(url = URL, query = list(serviceKey = key %>% I(), pageNo = i, numOfRows = numOfRows, resultType = type_data_format, basDt = '20200408'))
# json 형태의 data를 text로 추출 res %>% content(as = 'text', encoding = 'UTF-8') %>% fromJSON() -> json
# 데이터 프레임만 선택하여 doc 객체에 저장 doc <- json$response$body$items$item
# 추출한 데이터를 전체 데이터를 저장할 변수에 누적 저장 finalTotalData <- rbind(finalTotalData, doc) }
댓글