본문 바로가기
R 프로그래밍/R advance

오픈 API를 활용한 공공데이터 불러오기(데이터 포맷: json)

by 찐남 2022. 1. 27.

오픈 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)
}

# 데이터 확인하기
View(finalTotalData)

# CSV 파일로 저장하기
write.csv(finalTotalData, "금융회사기업개요조회(json).csv", row.names = FALSE)

 

아래에 링크되어 있는 이전 포스트 내용의 결과와 비교해 보면, 동일한 데이터가 추출되었음을 확인할 수 있어요!

(참고로 열의 순서는 xml 데이터 형식의 순서와 다릅니다.)

 

 

오픈 API를 활용한 공공데이터 불러오기(데이터 포맷: xml)

공공데이터 홈페이지 가입 및 데이터 추출 준비 정부가 개방한 공공데이터를 오픈 API를 활용해서 추출하는 방법에 대해서 설명드릴게요. 우선, 공공데이터 홈페이지에 접속해 볼게요. 공공데이

zzinnam.tistory.com

 

이상으로 오픈 API를 활용한 공공데이터를 R을 활용해서 추출하는 방법에 대해서 알아보았습니다.

 

 

반응형

댓글