안녕하세요. 춤추는초코칩입니다.
오픈API를 활용한 대기오염정보 조회(4)를 발행한지 1년 6개월이 지났습니다. 최근에 경제 빅데이터 저장소에서 제 글이 소개되었습니다. 저도 우연찮게 검색을 통해 알게되었는데요. 제 코딩이 너무 허접한거 같아서 조금 손 봤습니다.
이전 글은 아래 링크를 참고해주시기 바랍니다.
순서는 오히려 [경제 빅데이터 저장소]에서 잘해주셔서 제가 참고하게되었습니다.
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)
데이터까지 조회되면 이제 가공하여 정보로 만들어야 합니다. 시도별로 어떤 특성이 있는지 다음에 확인해보겠습니다.
참고사이트
- https://stackoverflow.com/questions/33446888/r-convert-xml-data-to-data-frame
'R 크롤링' 카테고리의 다른 글
네이버 금융 크롤링 in R (0) | 2022.02.23 |
---|---|
네이버 영화 리뷰 크롤링 in R (4) | 2019.07.23 |
[R] 디아블로3 API(6): 직업별 상위 100위 아이템 히스토그램 (0) | 2018.03.24 |
[R] 디아블로3 API를 활용하여 직업별 상위 랭킹 세팅 분포 구하기 다섯번째날 (0) | 2018.03.23 |
[R] 디아블로3 API를 활용하여 직업별 상위 랭킹 세팅 분포 구하기 네번째날 (0) | 2018.03.19 |