library(XML)
library(tidyverse)
library(lubridate)
#open api 인증키
service_key <-'본인인증키'
#open api url
url <- 'http://openapi.animal.go.kr/openapi/service/rest/abandonmentPublicSrvc/abandonmentPublic?'
#검색 시작일
bgnde = '20150101'
#축종코드 417000 = 개, 422400 = 묘
upkind = c('417000','422400')
#시도코드 6110000 = 서울특별시
uprcd = c('6110000','6260000','6270000','6280000','6290000',
'5690000','6300000','6310000','6410000',
'6420000','6430000','6440000','6450000','6460000','6470000',
'6480000','6500000')
#한번에 출력되는 값의 갯수
num_rows <- 50000
#xml을 담기 위한 리스트 생성
urlist <- list()
cnt <- 0
#for문을 이용하여 urlist에 xml 담기
for(i in 1:length(uprcd)){
for (j in 1:length(upkind)){
#cnt를 이용하여 인덱스 설정
cnt = cnt + 1
#xml을 urlist에 각 인덱스마다 복사
urlist[cnt] <- paste0(url,'bgnde=',bgnde,
'&upkind=', upkind[j],
'&upr_cd=', uprcd[i],
'&numOfRows=', num_rows,
'&ServiceKey=', service_key)
}
}
#urlist에 있는 xml을 파싱하기 위해 빈 리스트 생성
raw.data <- list()
rootnode <- list()
for(i in 1:length(urlist)){
#xml 파싱
# 생성한 URL 대로 XML 을 요청한다
raw.data[[i]] <- xmlTreeParse(urlist[i], useInternalNodes = TRUE,encoding = "utf-8")
#xml을 정보를 불러 올 수 있는 형태로 변환
rootnode[[i]] <- xmlRoot(raw.data[[i]])
}
#접수일, 품종, 발견장소,공고번호,상태 데이터를 담기 위해 빈 벡터 생
a <- c()
b <- c()
c <- c()
d <- c()
e <- c()
#벡터에 접수일, 품종, 발견장소, 공고번호,상태 삽입
#union_all을 하지 않으면 전에 삽입했던 값이 사리지고 union을사용하면 중복된 값이 삭제 됨
for(i in 1: length(rootnode)){
a <- union_all(a,xpathSApply(rootnode[[i]],"//happenDt",xmlValue))
b <- union_all(b,xpathSApply(rootnode[[i]],"//kindCd",xmlValue))
c <- union_all(c,xpathSApply(rootnode[[i]],"//happenPlace",xmlValue))
d <- union_all(d,xpathSApply(rootnode[[i]],"//orgNm",xmlValue))
e <- union_all(e,xpathSApply(rootnode[[i]],"//processState",xmlValue))
}
#벡터를 이용하여 유기견 데이터프레임 생성
df <- data.frame(접수일= a,
품종=b,
상태=e,
발견장소=c,
관활기간=d)
#df접수일을 date format으로 변환
df$접수일<-ymd(df$접수일)
view(table(year(df$접수일)))
#df$관할기간을 공백으로 분리후 첫번째 값을 시도로 지정
df$시도<-sapply(str_split(df$관활기간," "),head,1)
view(table(df$시도))
view(df)
#년도별에 따른 시도 유기동물 수 추출
df2<-df %>%
group_by(year(df$접수일), 시도) %>%
summarise(count = n())
write.csv(df,'./csv/abandoned_animal_national.csv',row.names = FALSE)