티스토리 뷰

R

2019년 정부 예산 treemap 그리기

비조 2019. 6. 14. 15:59

재정정보원 Q/A와 며칠 씨름을 하다가 2019년 예산을 뽑아내는 코드를 완성했다.

아직까지 pIndex는 어떤 변수인지 알 수가 없지만, 어쨋든 중복이 있더라도 주욱 뽑고 중복을 제거하는 방식을 사용하였다.

 


budget <- data.frame()


for (i in 1:9) {

  url0    = "http://openapi.openfiscaldata.go.kr/TotalExpenditure1?"
  api_key = "(인증키)"
  type    = "Type=xml&"
  pIndex  = paste("pIndex=", i, "&", sep = "")
  pSize   = "pSize=1000&"
  # OJ_YY   = "OJ_YY=2010"
  FSCL_YY    = "FSCL_YY=2019"
  OFFC_NM   = "OFFC_NM=기획재정부"
  

  url = paste0(url0,
               api_key,
               type,
               pIndex,
               pSize,
               FSCL_YY)
  

  temp <- read_xml(url)
  temp0 <- xmlParse(temp)
  df <- xmlToDataFrame(getNodeSet(temp0, "//row"))
  
  budget <- budget %>% 
    rbind(df)
  
}

# unique
budget <- budget %>% 
  unique()

 

이렇게 읽어들인 사업수는 8070개이다.

이를 규모별로 나누어보려고 다음과 같이 treemap을 그렸다. 1단계는 부처, 2단계는 프로그램명으로 구분하도록 하였다.


library(treemap)  

budget %>% 
  group_by(OFFC_NM, PGM_NM) %>% 
  summarize(sum0 = round(sum(as.numeric(as.character(Y_YY_DFN_MEDI_KCUR_AMT))))*1e-9 ) %>% 
  mutate(sum = round(sum0,2)) %>% 
  treemap(index = c("OFFC_NM", "PGM_NM"), 
          vSize = "sum",
          type = "index",
          palette="RdYlBu",
          fontsize.labels=c(14,7),
          border.col=c("black","black"), 
          border.lwds=c(1,0.5) ,
          title = "부처별 예산액")

 

그러니가 아래와 같은 그림이 나오더라. 

한 가지 해결이 안된 문제는 트리맵 크기가 생각보다 작게 만들어지는데 크기 조정하는 방법을 모르겠다. 나중에는 D3.js 로 그리는 것이 하나의 방법이 아닐까 한다.

계획은 클릭하면 각 부처로 들어가는 걸 구축하는 건데 궁금해 하시는 분들이 많아서 중요부처별로 살펴보자.

 

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함