위키백과사전 매니페스토(Manifesto)는 개인이나 단체가 대중에 대하여 확고한 정치적 의도와 견해를 밝히는 것으로 연설이나 문서의 형태로 어원은 라틴어에서 파생된 이탈리아어이며 “분명한 의미”, “매우 뚜렷함”이라는 의미를 갖는다. 중요한 매니페스토들로 미국 독립선언서에 영향을 준 벨기에 독립선언서 “the Manifesto of the Province of Flanders (1790년)”, 핵과 핵전쟁에 대한 반대를 표명한 “Russell-Einstein Manifesto(러셀-아인슈타인 선언, 1955년)”을 꼽을 수 있다.
한국매니페스토 실천본부는 공약정보센터를 통해서 국회의원, 대통령, 지방자치단체장에 대한 매니페스토 실천이행여부를 점검하고 있다.
한국매니페스토 실천본부 제20대 국회의원 공약이행자체평가표(2020년) 웹사이트에서 제20대 국회의원 평가데이터를 다운로드 받는다.
제20대 국회의원 공약이행자체평가표(2020년) 웹사이트가 깔끔하게 정리되어 있는데 시도별로 나눠줘있다.
webshot2::webshot("http://manifesto.or.kr/manifesto_data/20200210/2020na_map.htm", "fig/manifesto_2020.png")
먼저 특정시도를 하나 잡아서 이를 데이터프레임으로 만든다.
library(tidyverse)
library(rvest)
manifest_html <- read_html("http://www.manifesto.or.kr/manifesto_data/20200210/20na/01.html")
manifest_tbl <- manifest_html %>%
html_nodes("table") %>%
html_table(fill=TRUE) %>%
.[[1]]
manifest_df <- manifest_tbl %>%
janitor::clean_names() %>%
tbl_df %>%
set_names(manifest_tbl[1,]) %>%
slice(2:n())
manifest_df %>%
DT::datatable()
특정시도를 하나 잡아서 이를 데이터프레임을 제작한 다음 이를 함수로 만든다.
get_manifesto_list <- function(sido) {
manifesto_sido_url <- glue::glue("http://www.manifesto.or.kr/manifesto_data/20200210/20na/{sido}.html")
manifest_html <- read_html(manifesto_sido_url)
manifest_tbl <- manifest_html %>%
html_nodes("table") %>%
html_table(fill=TRUE) %>%
.[[1]]
manifest_df <- manifest_tbl %>%
janitor::clean_names() %>%
tbl_df %>%
set_names(manifest_tbl[1,]) %>%
slice(2:n())
return(manifest_df)
}
get_manifesto_list("01") %>%
DT::datatable()
앞서 제20대 국회의원 매니페스토 대상 목록을 파악했기 때문에 이를 바탕으로 공약이행자체평가표(2020년)를 다운로드 받는다.
download.file()
함수로 데이터를 가져올 경우 오류가 발생하여 전체 253개 지역구 국회의원에 대한 공약이행자체평가표를 다운로드 받을 수 없어 tryCatch()
를 사용해서 오류나는 경우는 화면에 출력하여 넘어가고 정상적인 공약이행자체평가표를 다운로드 받을 수 있도록 작업한다.
# 전체 URL
# for(index in 1:253) {
# three_digits <- str_pad(index, width=3, pad='0')
# cat(glue::glue("http://www.manifesto.or.kr/manifesto_data/20200210/2020/2020_{three_digits}.zip"), "\n")
# }
dir.create("data/manifesto")
for(index in 1:253) {
three_digits <- str_pad(index, width=3, pad='0')
tryCatch(
download.file(url = glue::glue("http://www.manifesto.or.kr/manifesto_data/20200210/2020/2020_{three_digits}.zip"), destfile=glue::glue("data/manifesto/manifesto_{three_digits}.zip")),
error = function(e) print(glue::glue("다운로드 {three_digits} 파일 없음"))
)
}
압축파일 압출을 푸는 방법 unzip
, 7za
등 쉘에서 압축을 푸는 방법으로 문제를 풀어본다. 이를 위해서 쉘 명령어를 사용한다.
for filename in data/manifesto/*.zip
do
echo "*** processing $filename ***"
7za x -y $filename -odata/manifesto
done
2020공약자체평가표_242.정점식.hwp
2020공약자체평가표_244.민홍철.hwp
2020공약자체평가표_245.김정호.hwp
2020공약자체평가표_250.강석진.hwp
2020공약자체평가표_251.강창일.hwp
2020공약자체평가표_252.오영훈.hwp
2020공약자체평가표_253.위성곤.hwp
2020공약자체평가표_별첨자료.hwp
2020공약자체평가표_공약이행근거자료(최종).hwp
2020의정활동결과표(유성엽).hwp