본문 바로가기

R 크롤링

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

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

이 자료는 R markdown에서 작성하였습니다.

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

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

시도별 실시간 측정정보 조회

라이브러리 불러오기

##install.packages("rvest")
##install.packages("XML")
##install.packages("data.table")
library(rvest)
library(XML)
library(data.table)

서울시 정보 조회

url <- "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty"
serviceKey <- "?serviceKey=9x8WeUtQ1a6VrfDnAAN3PDJhSp4VFdoqfopYR4K31SeTR08xHjM3W05qW13HYEdKtOAu3U4RSeOfErde0EP2ng%3D%3D"
sido <- "&numOfRows=100&pageSize=1&pageNo=1&startPage=1&sidoName="
sido_name <- "%EC%84%9C%EC%9A%B8"
ver <- "&ver=1.3"

api_url <- paste(url,serviceKey,sido,sido_name,ver,sep="")

data3 <- xmlTreeParse(api_url,useInternalNodes = T, encoding = "UTF-8")
rootNode <- xmlRoot(data3)
items = rootNode[[2]][["items"]]
size=xmlSize(items)
data_subtotal <- list()
test2 <- data.frame()
test3 <- list()

for(i in 1:size)
{
  test <- xmlSApply(items[[i]],xmlValue)  
  test2 <- data.table(Sido="서울",
                      Sigungu=test[[1]],
                      Time=test[[3]],
                      so2=test[[4]],
                      co=test[[5]],
                      o3=test[[6]],
                      no2=test[[7]],
                      pm10=test[[8]],
                      pm1024=test[[9]],
                      pm25=test[[10]],
                      pm2524=test[[11]],
                      khai=test[[12]],
                      khaigrade=test[[13]],
                      so2grade=test[[14]],
                      cograde=test[[15]],
                      o3grade=test[[16]],
                      no2grade=test[[17]],
                      pm10grade=test[[18]],
                      pm25grade=test[[19]],
                      pm101hgrade=test[[20]],
                      pm251hgrade=test[[21]])
  test3[[i]]=test2
}
test4 <- rbindlist(test3)

서울시 미세먼지 미세먼지(pm25) 막대그래프

attach(test4)
n_co <- as.numeric(co)
n_co[is.na(n_co)] <- 0
##names(n_co) <- Sigungu
barplot(n_co)

측정장소를 x축에 넣고 싶었는데 실패했습니다. 측정장소 길이와 미세먼지 데이터 길이가 다르다고 하네요.

그 부분을 데이터를 확인할 필요가 있을 거 같습니다.

다른 시도도 같이 조회되도록 하겠습니다.


반응형