그것이 알고싶다.
며칠 전부터 시작해서 오늘자(!) 저녁 뉴스에 국회의원 특수활동비에 대한 리포트가 줄을 이었다.
언론사마다 데이터 분석팀을 꾸렸는지 아니면 기자 중에 데이터 분석 역량이 있는 사람이 맡아서 작업을 했는지
다양한 숫자들을 내놓았다.
(사실 분석이라기엔 너무나도 기초적인 데이터의 집계 혹은 나열이었고, 관점이 그리 다양하진 않았다.)
그런 뉴스를 보다가 RAW 데이터를 봐야겠다는 생각이 들었고,
매우 상투적인 수사지만
때는 바야흐로 정보 공개의 시대, 그리고 데이터 시대.
직접 데이터를 확인해보자. 어떻게?
잘.
뉴스 기사에 나온 자료 출처 : 국회 사무처를 찾아봤다.
그런데 [새소식]에도 [정보마당], [알림마당]에도 없었다.
[보도자료] 국회사무처, 참여연대에 특수활동비 집행내역 정보공개 라는 한장짜리 보도자료 뿐.
다음엔 위 보도자료에 나온 정보공개 청구인인 참여연대를 사이트를 찾았다.
팝업 공지라도 있을 줄 알았지만 그렇진 않았고, 좌측 한 귀퉁이에 브리핑 내용이 있었다.
이 내용들을 바탕으로 기사를 작성했나보다.
우린 누군가 가공한 보고서를 보고싶었던 게 아니니까 날RAW 데이터를 찾아보자.
▣ 국회 특수활동비 지출명세서(PDF) 로데이터 : 정말 로데이터였다. 명세서를 모아놓은.
분석이 가능한 형태로 전처리Pre-processing를 해야하는데, 전처리는 이 포스트의 범위를 벗어난다.여기선 다루지 않을 예정이다.
마침 스프레드 시트로 정리된 연도별 내역까지 있었다.
※ 주소가 바뀔 수도 있으니 원 출처를 확인하는 걸 추천
구글 드라이브에서 xls파일로 저장을 하고,
데이터 분석 도구 'R'을 써볼 것이다.
이전에 설치해놨던 도커Docker를 실행시키고
RStudio 서버 컨테이너를 Run(실행)한다.
브라우저를 열고 localhost:8787
끝.
IDE 배경색이 어두운 걸 선호하니까 Tools - Global Options에서 테마도 좀 바꿔주고.
Note
굳이 도커까지 갈 필요도 없이 윈도우나 맥 PC에 RStudio를 직접 설치할 수도 있고,
방법은 여러 가지니까.
여기까진 구글링을 추천한다.
readxl 라이브러리를 이용해서, 연도별로 나눠진 시트를 하나씩 읽어들인다.
library(readxl)
AW20180705_국회특수활동비_연도별내역_2011_ <- read_excel("AW20180705_국회특수활동비_연도별내역(2011_2013).xlsx")
AW20180705_국회특수활동비_연도별내역_2012_ <- read_excel("AW20180705_국회특수활동비_연도별내역(2011_2013).xlsx",
sheet = "2012년_전체")
AW20180705_국회특수활동비_연도별내역_2013_ <- read_excel("AW20180705_국회특수활동비_연도별내역(2011_2013).xlsx",
sheet = "2013년_전체")
(RStudio 기본 창배열 기준으로) 우상단에서 불러온 Data를 볼 수 있다.
각각 1605, 1201, 1082개(행)의 데이터가 있고 16개 변수를 갖고 있다.
위 Environment 창에서 더블클릭하거나
View([데이터명])를 하면
아름답게 보여준다.
가볍게 훑어보니
데이터프레임(data.frame) 형태로 내용이 '알아서', '적절하게' 들어간 듯하다.
여기까진 엑셀에서 파일을 열어서 눈으로 보는 것과 크게 다를 바 없다.
Note
실무에서 엑셀로 된 각종 데이터들을 넘겨받을 때마다 참 아쉬운 게
동일한 형태(열/컬럼Column)의 데이터들을 굳이 여러 시트에 한땀한땀 나눠놓은 데이터들이다.
이번 특수활동비 파일처럼 연도별로, 혹은 날짜별로 시트를 구분해놓은 건데,
데이터에 보통 날짜를 포함하는 경우가 많아서 시트를 나눠놓을 필요가 없이 한데 모아두고
원할 때 pivot을 사용해보면 된다.
날짜 외에 다른 구분이 필요해서 시트를 나눠야겠다면 열을 하나 맨앞 A열에 추가해서 해당 구분 정보를 넣어주면 좋다.
작업을 매번 연도별로 3회 반복하고 싶지 않다면
dplyr 패키지를 써서
library(dplyr)
df <- bind_rows(AW20180705_국회특수활동비_연도별내역_2011_, AW20180705_국회특수활동비_연도별내역_2012_, AW20180705_국회특수활동비_연도별내역_2013_)
bind_rows(데이터1,데이터2,...)를 하면 짠-하고 합쳐진다.
전체는 3,888행이다.
그 결과를 콘솔에서 보고 마는 것이 아니라
df <-
를 앞에 넣어서 새로운 데이터프레임 'df'에 대입해준다.
여기서 df는 그저 임의의 변수명이다.
Note
기초 강의는 아니지만,
짧지만 생소한 코드 이해에 어려움을 겪을 독자를 위해
R에서 '<-'는 다른 언어에서 흔히 쓰는 대입연산자 '='과 같다. R에서도 '='를 쓸 수 있다.
데이터를 한데 모았으니
summary(df)
요청일자는 2011년 1월 4일부터 2013년 12월 31일까지의 데이터고,
지급금액은 16,100원부터 299,500,000원까지, 그밖에 평균Mean값과 중위Median값도 한눈에 알 수 있다.
'Max가 뭔가 너무 커보이니까 데이터가 이상한 게 아닌가 싶고, 그럼 산술평균보다는 중앙값을 봐서 한번에 대략 350만원씩 지급이 되었구나.'
이제 또 뭘 알아볼까.
뉴스에서는 가장 많이 받은 수령인(국회의원 또는 당직자)을 찾아서 알려주던데, 한번 확인해보자.
먼저 그룹화 group_by()
df %>%
group_by(수령인)
# A tibble: 3,888 x 16
# Groups: 수령인 [299]
3,888건이 299명으로 모아졌다.
그룹을 tally()
df %>%
group_by(수령인) %>%
tally(지급금액)
# A tibble: 299 x 2 수령인 n <chr> <dbl> 1 강기갑 22223000 2 강기정 16676000 3 강길부 106451610 4 강대훈 237078870 5 강명순 7460000 6 강봉균 6343000 7 강용석 1991850 8 강창일 239448510 9 고승덕 12460000 10 고흥길 5261000 # ... with 289 more rows
사람별로 묶이긴 했는데 ㄱㄴㄷ순으로 표시됐다.
%>% 체인을 하나 더 붙여서
arrange()로 정렬하되 내림차순 desc()으로
df %>%
group_by(수령인) %>%
tally(지급금액) %>%
arrange(desc(n))
# A tibble: 299 x 2 수령인 n <chr> <dbl> 1 농협은행(급여성경비) 3866524110 2 농협중앙회(급여성경비) 2057500000 3 채수근 1706984710 4 이미영 1390433780 5 이지민 1105321840 6 박지원 591100380 7 김진표(민주당) 489630170 8 한나라당(정책위) 463703630 9 최민수(운영위) 432128610 10 전병헌 381748750 # ... with 289 more rows
뉴스에서 확인한 수령액 Top 국회의원들을 재확인했다.
정렬은 잘 됐는데 낯익은 국회의원 이름 외에도 낯선 이름들이 섞여있다.
새롭게 알게 된 사실은 없지만 오늘은 여기까지.
코드 단 몇줄로 뉴스가 취사선택한 정보들이 왜곡되지는 않았는지
날것Raw 그대로 직접 확인해본 것으로 마무리한다.
-.null
각 의원의 소속 정당, 선수選數, 의원실별 비서관 성명 등의 자료를 구해서 Back데이터를 풍부하게 하고
정당별 집계
연도별/월별 시계열 추세 확인
아직 데이터가 공개되지 않은 이후('14~'17년) 자료를 미리 예측
단 13줄이다. 그 중 절반은 데이터를 불러오는 데 썼다.
library(readxl)
AW20180705_국회특수활동비_연도별내역_2011_ <- read_excel("AW20180705_국회특수활동비_연도별내역(2011_2013).xlsx")
AW20180705_국회특수활동비_연도별내역_2012_ <- read_excel("AW20180705_국회특수활동비_연도별내역(2011_2013).xlsx",
sheet = "2012년_전체")
AW20180705_국회특수활동비_연도별내역_2013_ <- read_excel("AW20180705_국회특수활동비_연도별내역(2011_2013).xlsx",
sheet = "2013년_전체")
library(dplyr)
df <- bind_rows(AW20180705_국회특수활동비_연도별내역_2011_, AW20180705_국회특수활동비_연도별내역_2012_, AW20180705_국회특수활동비_연도별내역_2013_)
summary(df)
df %>%
group_by(수령인) %>%
tally(지급금액) %>%
arrange(desc(n))