티스토리 뷰
원 소스는 아래 사이트 참조하세요.
https://stat-and-news-by-daragon9.tistory.com/
춤추는 초코칩의 통계흥신소(이하, 춤초통) 님의 코드를 약간 변형하여
data.go.kr 사이트에서 제공되는 airKorea의 open API 자료를 읽어들이는 코드를 작성하였습니다.
1. data.go.kr 에 회원가입하신 후에 에어코리아 관련 servicekey 를 받습니다. 신청하면 자동으로 서비스키가 생성이 됩니다.
2. 워드 파일로 되어 있는 참고자료를 다운 받아서 예시를 살펴보고, 원하는 자료의 URL 이 어떤 형태로 되어야 하는지를 참고합니다. 저는 아래의 페이지를 참고하였습니다.
3. 필요한 라이브러리를 불러들입니다. 저는 '춤코통'에서 사용된 rvest 와 XML, 그리고 data.table 을 불러들였습니다.
4. 그리고 시도 이름이 한글로 포함되면 오류가 난다고 하신 춤초통님의 조언에 따라 춤초통님이 만들어 놓은 벡터를 이용하였습니다.
rm(list = ls())
library(rvest)
library(XML)
library(data.table)
sido<-c("%EC%84%9C%EC%9A%B8","%EB%B6%80%EC%82%B0","%EB%8C%80%EA%B5%AC","%EC%9D%B8%EC%B2%9C",
"%EA%B4%91%EC%A3%BC","%EB%8C%80%EC%A0%84","%EC%9A%B8%EC%82%B0","%EA%B2%BD%EA%B8%B0",
"%EA%B0%95%EC%9B%90","%EC%B6%A9%EB%B6%81","%EC%B6%A9%EB%82%A8","%EC%A0%84%EB%B6%81",
"%EC%A0%84%EB%82%A8","%EA%B2%BD%EB%B6%81","%EA%B2%BD%EB%82%A8","%EC%A0%9C%EC%A3%BC",
"%EC%84%B8%EC%A2%85")
sido_name<-c("서울", "부산", "대구", "인천", "광주", "대전", "울산",
"경기", "강원", "충북", "충남", "전북", "전남", "경북", "경남",
"제주", "세종")
5. 그리고 위에서 본 URL 형식에 따라서 다음과 같이 URL를 3개의 파트로 구분하였습니다. 아마 따라하시는 분들은 servicekey 만 새로 받아서 바꿔끼우시면 될 것 같습니다.
url1 <- "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getCtprvnMesureSidoLIst?sidoName="
url2 <- "&searchCondition=DAILY&pageNo=1&numOfRows=10&ServiceKey="
serviceKey <- "wxtiqOxB6ldD6WTyg6jLorTdU3JaeaFdY4tt52kaz2M1cuoknozj%2BUsse%2BD0gbSwEPW5rsZBs4bMlLIU2hB3Sw%3D%3D"
6. '춤코통'에서 짜 놓은 for 룹을 돌렸습니다. 다만, 논문에 쓸 자료만 몇 개 포함시켰습니다.
air_poll <- list()
air_pollution <- list()
for(j in 1:17){
api_url <- paste(url1,sido[j], url2, serviceKey, sep="")
air_raw<- xmlTreeParse(api_url,useInternalNodes = T, encoding = "UTF-8")
rootNode <- xmlRoot(air_raw)
items = rootNode[[2]][["items"]]
size=xmlSize(items)
air_emp <- data.frame()
air_poll <- list()
for(i in 1:size)
{
test <- xmlSApply(items[[i]],xmlValue)
air_emp <- data.table(Province =sido_name[j],
cityname = test[[2]],
Time = test[[1]],
pm10 = test[[7]],
pm25 = test[[8]])
air_poll[[i]]=air_emp
}
air_pollution[[j]]=air_poll
}
air_poll_final <- list()
for(i in 1:17){
air_poll_final[[i]] <- rbindlist(air_pollution[[i]])
}
air_poll_final <- rbindlist(air_poll_final)
8. 이런 과정을 거치고 나면 다음과 같은 자료를 얻을 수 있습니다.
이상입니다.
'R' 카테고리의 다른 글
2019년 정부 예산 treemap 그리기 (2) | 2019.06.14 |
---|---|
열린재정 open API 이용하여 parsing 하기 (3) | 2019.06.08 |
열린재정 open API 사용 후기 (0) | 2019.06.06 |
한국은행 open API 이용하기 (0) | 2019.06.06 |
airkorea 자료를 이용해서 대기질 관련 자료 만들기 (0) | 2019.06.04 |