티스토리 뷰

 

 

 

원 소스는 아래 사이트 참조하세요.

https://stat-and-news-by-daragon9.tistory.com/

 

춤추는초코칩의 통계흥신소

통계분석, 데이터분석, 통계 패키지, 프로그래밍 언어

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. 이런 과정을 거치고 나면 다음과 같은 자료를 얻을 수 있습니다.

 

이상입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함