본문 바로가기

R 크롤링

오픈API를 활용한 대기오염정보 조회(5)

반응형

안녕하세요. 춤추는초코칩입니다. 

 오픈API를 활용한 대기오염정보 조회(4)를 발행한지 1년 6개월이 지났습니다. 최근에 경제 빅데이터 저장소에서 제 글이 소개되었습니다. 저도 우연찮게 검색을 통해 알게되었는데요. 제 코딩이 너무 허접한거 같아서 조금 손 봤습니다.

 

 이전 글은 아래 링크를 참고해주시기 바랍니다. 

오픈API를 활용한 대기오염정보 조회(4)

오픈API를 활용한 대기오염정보 조회(3)

오픈API를 활용한 대기오염정보 조회(2)

오픈API를 활용한 대기오염정보 조회(1)

 

 순서는 오히려 [경제 빅데이터 저장소]에서 잘해주셔서 제가 참고하게되었습니다.

 

1. 서비스키 신청

  - 공공데이터포털(https://www.data.go.kr) 사이트에서 "대기오염정보 조회 서비스"의 인증키(서비스키) 신청

 

2. 라이브러리 불러오기


#install.packages("rvest") 
#install.packages("XML") 
#install.packages("data.table") 
#install.packages("urltools") 
#install.packages("dplyr") 

#parse 
library(rvest) 
#XML data control 
library(XML) 
library(data.table) 
#url encoding vector 
library(urltools) 
#data set control 
library(dplyr)


  - urltools와 dplyr 패키지를 추가했습니다. 

  - urltools는 퍼센트어를 인코딩 혹은 디코딩할 수 있는 패키지입니다. 기존의 시도 이름을 %EC%84%9C%EC%9A%B8와 같은 코드 형태로 입력했었는데요. 찾아보니깐 퍼센트어라는 용어가 있었습니다.

  - dplyr은 데이터를 핸들링할 때 사용되는 패키입니다.

 

3. URL 만들기


#시도이름을 퍼센트어로 인코딩
sido_name <- c("서울", "부산", "대구", "인천", "광주", "대전", "울산",
               "경기", "강원", "충북", "충남", "전북", "전남", "경북", "경남",
               "제주", "세종")
##incov()는 sido_name을 UTF-8 형태로 변환합니다. 별도의 패키지 설치가 필요없습니다.
##url_encode()는 vector를 퍼센트어로 변환합니다. urltools라는 패키지가 필요합니다.
sido <- url_encode(iconv(sido_name,to="UTF-8"))

#URL 구성요소
url_pre <- "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty?serviceKey="
## 서비스키는 공공데이터 포털에서 신청하여 사용하시기 바랍니다.
serviceKey <- "9x8WeUtQ1a6VrfDnAAN3PDJhSp4VFdoqfopYR4K31SeTR08xHjM3W05qW13HYEdKtOAu3U4RSeOfErde0EP2ng%3D%3D"
url_suf <- "&numOfRows=100&pageSize=1&pageNo=1&startPage=1&sidoName="
ver <- "&ver=1.3"

#URL 만들기
url <- paste(url_pre,serviceKey,url_suf,sido,ver,sep="")


4. 데이터 셋 만들기


# 빈 데이터셋 만들기
air <- data.frame()

# 시도별로 데이터를 조회해서 air에 적재
for(i in 1:17) {
air_raw<- xmlTreeParse(api_url[i],useInternalNodes = T, encoding = "UTF-8")
air_node <- xmlRoot(air_raw)
items = air_node[[2]][["items"]]
air.matrix <- xmlSApply(items, function(x) xmlSApply(x, xmlValue))
air.df <- data.frame(t(air.matrix),row.names=NULL)
air.df$sido_name <- sido_name[i]
air <- bind_rows(air,air.df)
}


  - 코드를 단순화시켰습니다.

 

5. 데이터 셋 조회


# air 데이터셋 조회
View(air)


<air data set>

 

 데이터까지 조회되면 이제 가공하여 정보로 만들어야 합니다. 시도별로 어떤 특성이 있는지 다음에 확인해보겠습니다.

 

 참고사이트

  - https://stackoverflow.com/questions/33446888/r-convert-xml-data-to-data-frame

  - https://kplus-biz.github.io/%EC%98%88%EC%A0%9C/2017/09/11/R%EC%97%90%EC%84%9C-%EB%84%A4%EC%9D%B4%EB%B2%84-%EA%B2%80%EC%83%89-API-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0/

반응형