---
title: "지도제작 대회"
subtitle: "당원과 정당 수입지출"
description: |
당원수
author:
- name: 이광춘
url: https://www.linkedin.com/in/kwangchunlee/
affiliation: 한국 R 사용자회
affiliation-url: https://github.com/bit2r
title-block-banner: true
format:
html:
theme: flatly
code-fold: true
code-overflow: wrap
toc: true
toc-depth: 3
toc-title: 목차
number-sections: true
highlight-style: github
self-contained: false
default-image-extension: jpg
filters:
- lightbox
lightbox: auto
link-citations: true
knitr:
opts_chunk:
eval: true
message: false
warning: false
collapse: true
comment: "#>"
R.options:
knitr.graphics.auto_pdf: true
editor_options:
chunk_output_type: console
---
# 데이터셋
## 2022년
### 당원수
```{r}
library(tidyverse)
library(testthat)
party_2022 <- tribble(
~구분, ~당원수, ~분포비, ~등록된시도당수, ~시도당평균당원수,
"합계", 10653090, 100.0, 347, 30701,
"더불어민주당", 4849578, 45.5, 17, 285269,
"국민의힘", 4298593, 40.4, 17, 252858,
"정의당", 48892, 0.5, 17, 2876,
"기본소득당", 19874, 0.2, 6, 3312,
"시대전환", 8904, 0.1, 7, 1272,
"가나코리아", 5363, 0.1, 5, 1073,
"가자평화인권당", 6481, 0.1, 6, 1080,
"가자환경당", 7480, 0.1, 6, 1247,
"거지당", 10782, 0.1, 8, 1348,
"국가혁명당", 32543, 0.3, 16, 2034,
"국민대통합당", 6248, 0.1, 5, 1250,
"국민참여신당", 5773, 0.1, 5, 1155,
"기독당", 5272, 0.0, 5, 1054,
"깨어있는시민연대당", 6490, 0.1, 5, 1298,
"남북통일당", 5324, 0.0, 5, 1065,
"노동당", 11127, 0.1, 7, 1590,
"녹색당", 8399, 0.1, 5, 1680,
"대한국민당", 5456, 0.1, 5, 1091,
"대한당", 5565, 0.1, 5, 1113,
"대한민국당", 6726, 0.1, 5, 1345,
"더밝은미래당", 5248, 0.0, 5, 1050,
"미래당", 12946, 0.1, 6, 2158,
"민생당", 377538, 3.5, 11, 34322,
"민중민주당", 9869, 0.1, 7, 1410,
"새누리당", 36159, 0.3, 7, 5166,
"신한반도당", 8687, 0.1, 8, 1086,
"신한반도평화체제당", 6543, 0.1, 6, 1091,
"여성의당", 7858, 0.1, 5, 1572,
"열린민주당", 6305, 0.1, 6, 1051,
"우리공화당", 423216, 4.0, 13, 32555,
"자유당", 5462, 0.1, 5, 1092,
"자유민주당", 8288, 0.1, 5, 1658,
"자유의새벽당", 11256, 0.1, 5, 2251,
"자유통일당", 199350, 1.9, 16, 12459,
"중소자영업당", 5823, 0.1, 5, 1165,
"직능자영업당", 5184, 0.0, 5, 1037,
"진보당", 91620, 0.9, 16, 5726,
"충청의미래당", 5360, 0.1, 5, 1072,
"친박신당", 8312, 0.1, 6, 1385,
"통일한국당", 11978, 0.1, 6, 1996,
"한국국민당", 6880, 0.1, 6, 1147,
"한국독립당", 6649, 0.1, 6, 1108,
"한국복지당", 7071, 0.1, 7, 1010,
"한나라당", 5790, 0.1, 5, 1158,
"한류연합당", 9247, 0.1, 7, 1321,
"혁명21", 8941, 0.1, 6, 1490,
"홍익당", 6640, 0.1, 5, 1328
) |>
slice(2:n())
party_2022 |>
summarise(당원수 = sum(당원수)) # 10,653,090
# 당원수의 합계를 테스트하는 함수
test_that("Sum of 당원수 is correct", {
# 실제 데이터로부터 당원수의 합계 계산
calculated_sum <- sum(party_2022$당원수)
# 기대하는 합계 값 (예시로 10653090을 사용합니다)
expected_sum <- parse_number('10,653,090')
# 계산된 합계와 기대하는 합계를 비교
expect_equal(calculated_sum, expected_sum)
})
```
### 시도별
```{r}
library(tibble)
sido_party_2022 <- tribble(
~구분, ~합계, ~더불어민주당, ~국민의힘, ~정의당, ~기본소득당, ~시대전환, ~가나코리아, ~가자평화인권당, ~가자환경당, ~거지당, ~국가혁명당, ~국민대통합당,
"합계", 10653090, 4849578, 4298593, 48892, 19874, 8904, 5363, 6481, 7480, 10782, 32543, 6248,
"서울", 1854755, 863508, 678753, 9453, 3182, 1392, 1123, 1042, 1473, 1478, 3582, 1643,
"부산", 554370, 165043, 264645, 2190, 4124, 0, 0, 1103, 1413, 1300, 3023, 0,
"대구", 362994, 45308, 239323, 1194, 0, 1160, 0, 0, 0, 1450, 1649, 0,
"인천", 489052, 185594, 236693, 4578, 3059, 0, 1017, 0, 0, 1026, 1758, 0,
"광주", 535184, 389125, 63980, 2346, 2717, 1050, 0, 0, 1080, 1164, 1242, 0,
"대전", 372594, 149968, 196951, 1299, 0, 0, 0, 1016, 1149, 0, 2027, 0,
"울산", 267310, 67364, 166758, 1372, 0, 1116, 0, 0, 0, 1711, 1423, 0,
"세종", 42921, 19536, 15022, 1063, 0, 0, 0, 0, 0, 0, 1236, 0,
"경기", 2071257, 933330, 853968, 9871, 5723, 1935, 1035, 1106, 1178, 1504, 4808, 1403,
"강원", 355141, 119366, 210233, 1077, 0, 0, 1095, 0, 0, 0, 1434, 0,
"충북", 387660, 156788, 194237, 1091, 0, 0, 0, 0, 0, 0, 1496, 1059,
"충남", 509474, 216930, 243337, 1460, 0, 0, 1093, 0, 0, 0, 1785, 1057,
"전북", 817983, 660208, 72813, 3369, 0, 1121, 0, 1101, 0, 0, 1286, 1086,
"전남", 756584, 574962, 58828, 3883, 1069, 1130, 0, 0, 1023, 0, 0, 0,
"경북", 516815, 48731, 385151, 1303, 0, 0, 0, 0, 0, 0, 1495, 0,
"경남", 569774, 151515, 339374, 2143, 0, 0, 0, 1113, 1313, 0, 2762, 0,
"제주", 189222, 102302, 78527, 1200, 0, 0, 0, 0, 0, 0, 1537, 0
) |>
slice(2:n())
sido_party_2022 |>
summarise(합계 = sum(합계)) # 10,653,090
# 단위 테스트
test_that("Sum of 더불어민주당 and 국민의힘 is correct", {
# 더불어민주당의 총합 계산
sum_democratic <- sum(sido_party_2022$더불어민주당, na.rm = TRUE)
# 국민의힘의 총합 계산
sum_national_power <- sum(sido_party_2022$국민의힘, na.rm = TRUE)
# 예상되는 총합
expected_sum_democratic <- 4849578
expected_sum_national_power <- 4298593
# 계산된 총합과 예상 총합 비교
expect_equal(sum_democratic, expected_sum_democratic)
expect_equal(sum_national_power, expected_sum_national_power)
})
```
### 당비 납부자수
```{r}
library(tibble)
payer_2022 <- tribble(
~정당, ~당원수, ~납부자수, ~당비납부비율, ~등록된시도당수,
"합계", 10653090, 2521436, 23.7, 347,
"더불어민주당", 4849578, 1402809, 28.9, 17,
"국민의힘", 4298593, 897336, 20.9, 17,
"정의당", 48892, 22949, 46.9, 17,
"기본소득당", 19874, 1013, 5.1, 6,
"시대전환", 8904, 274, 3.1, 7,
"가나코리아", 5363, NA, NA, 5,
"가자평화인권당", 6481, NA, NA, 6,
"가자환경당", 7480, NA, NA, 6,
"거지당", 10782, NA, NA, 8,
"국가혁명당", 32543, 7581, 23.3, 16,
"국민대통합당", 6248, NA, NA, 5,
"국민참여신당", 5773, NA, NA, 5,
"기독당", 5272, NA, NA, 5,
"깨어있는시민연대당", 6490, 35, 0.5, 5,
"남북통일당", 5324, 216, 4.1, 5,
"노동당", 11127, 2698, 24.2, 7,
"녹색당", 8399, 4223, 50.3, 5,
"대한국민당", 5456, NA, NA, 5,
"대한당", 5565, NA, NA, 5,
"대한민국당", 6726, 85, 1.3, 5,
"더밝은미래당", 5248, NA, NA, 5,
"미래당", 12946, 1322, 10.2, 6,
"민생당", 377538, 7727, 2.0, 11,
"민중민주당", 9869, 58, 0.6, 7,
"새누리당", 36159, 713, 2.0, 7,
"신한반도당", 8687, 20, 0.2, 8,
"신한반도평화체제당", 6543, NA, NA, 6,
"여성의당", 7858, 1138, 14.5, 5,
"열린민주당", 6305, 902, 14.3, 6,
"우리공화당", 423216, 53503, 12.6, 13,
"자유당", 5462, 40, 0.7, 5,
"자유민주당", 8288, 590, 7.1, 5,
"자유의새벽당", 11256, 2276, 20.2, 5,
"자유통일당", 199350, 66973, 33.6, 16,
"중소자영업당", 5823, NA, NA, 5,
"직능자영업당", 5184, NA, NA, 5,
"진보당", 91620, 44765, 48.9, 16,
"충청의미래당", 5360, 1, 0.0, 5,
"친박신당", 8312, 218, 2.6, 6,
"통일한국당", 11978, 103, 0.9, 6,
"한국국민당", 6880, 106, 1.5, 6,
"한국독립당", 6649, 60, 0.9, 6,
"한국복지당", 7071, NA, NA, 7,
"한나라당", 5790, NA, NA, 5,
"한류연합당", 9247, 117, 1.3, 7,
"혁명21", 8941, 1449, 16.2, 6,
"홍익당", 6640, 136, 2.0, 5
) |>
slice(2:n())
payer_2022 |>
summarise( 당원수 = sum(당원수)) # 10,653,090
# 단위 테스트
test_that("Sum of 당원수 and 납부자수 is correct", {
# 당원수 총합 계산
sum_members <- sum(payer_2022$당원수, na.rm = TRUE)
# 납부자수 총합 계산
sum_payers <- sum(payer_2022$납부자수, na.rm = TRUE)
# 예상되는 총합
expected_sum_members <- 10653090
expected_sum_payers <- 2521436
# 계산된 총합과 예상 총합 비교
expect_equal(sum_members, expected_sum_members)
expect_equal(sum_payers, expected_sum_payers)
})
```
### 수입내역
단위: 백만원
```{r}
# R에서 데이터프레임 생성
income_2022 <- tribble(
~구분, ~합계, ~전년도이월, ~당비, ~기탁금, ~후원회기부금, ~보조금, ~차입금, ~기타,
"합계", 547471, 56287, 107892, 337, 6201, 140249, 71006, 165499,
"더불어민주당", 262553, 33808, 52588, 164, 244, 68463, 34988, 72298,
"국민의힘", 215350, 14685, 29031, 141, 1652, 60287, 30951, 78603,
"정의당", 20172, 1177, 3587, 23, 835, 9504, 1251, 3795,
"기본소득당", 3970, 232, 2242, 0, 57, 107, 0, 1332,
"시대전환", 283, 20, 87, 2, 9, 69, 0, 96,
"기타 정당", 45143, 6365, 20357, 7, 3404, 1819, 3816, 9375
) |>
slice(2:n())
# 데이터프레임 확인
income_2022 |>
summarise(당비 = sum(당비)) # 107,892
# 단위 테스트
test_that("Sum of 당비 and 기탁금 is correct", {
# 당비 총합 계산
sum_dangbi <- sum(income_2022$당비, na.rm = TRUE)
# 기탁금 총합 계산
sum_gitakgeum <- sum(income_2022$기탁금, na.rm = TRUE)
# 예상되는 총합 (여기서는 예시값을 사용합니다. 실제 값으로 대체해야 합니다.)
expected_sum_dangbi <- 107892 # 예시 값
expected_sum_gitakgeum <- 337 # 예시 값
# 계산된 총합과 예상 총합 비교
expect_equal(sum_dangbi, expected_sum_dangbi)
expect_equal(sum_gitakgeum, expected_sum_gitakgeum)
})
```
### 지출내역
단위: 백만원
```{r}
# R에서 데이터프레임 생성
expense_2022 <- tribble(
~구분, ~합계, ~선거비용, ~기본경비, ~정책개발비, ~조직활동비, ~여성정치발전비, ~청년정치발전비, ~그밖의경비,
"합계", 437321, 121531, 106586, 19626, 133354, 5303, 1801, 49120,
"더불어민주당", 193485, 55698, 40054, 7443, 47749, 2774, 748, 39019,
"국민의힘", 179147, 48332, 48838, 9667, 64962, 2034, 843, 4471,
"정의당", 19666, 4260, 5962, 1252, 5013, 399, 158, 2622,
"기본소득당", 3884, 1104, 466, 97, 2204, 4, 2, 7,
"시대전환", 241, 0, 219, 0, 1, 3, 2, 16,
"기타 정당", 40898, 12137, 11047, 1167, 13425, 89, 48, 2985
) |>
slice(2:n())
# 데이터프레임 확인
expense_2022 |>
summarise(선거비용 = sum(선거비용)) # 121,531
# 단위 테스트
test_that("Sum of 선거비용 and 조직활동비 is correct", {
# 선거비용 총합 계산
sum_election_expenses <- sum(expense_2022$선거비용, na.rm = TRUE)
# 조직활동비 총합 계산
sum_organizational_expenses <- sum(expense_2022$조직활동비, na.rm = TRUE)
# 예상되는 총합 (여기서는 예시값을 사용합니다. 실제 값으로 대체해야 합니다.)
expected_sum_election_expenses <- 121531 # 예시 값
expected_sum_organizational_expenses <- 133354 # 예시 값
# 계산된 총합과 예상 총합 비교
expect_equal(sum_election_expenses, expected_sum_election_expenses)
expect_equal(sum_organizational_expenses, expected_sum_organizational_expenses)
})
```
## 2021년
### 당원수
```{r}
library(tidyverse)
party_2021 <- tribble(
~구분, ~당원수, ~분포비, ~등록된_시도당수, ~시도당_평균당원수,
"합계", 10429577, 100, 355, 29379,
"더불어민주당", 4853266, 46.5, 17, 285486,
"국민의힘", 4070005, 39.0, 17, 239412,
"정의당", 50618, 0.5, 17, 2978,
"국민의당", 20185, 0.2, 7, 2884,
"열린민주당", 42944, 0.4, 5, 8589,
"기본소득당", 19814, 0.2, 5, 3963,
"시대전환", 8458, 0.1, 5, 1692,
"가가례도인연합", 6538, 0.1, 6, 1090,
"가나코리아", 5365, 0.1, 5, 1073,
"가자평화인권당", 6481, 0.1, 6, 1080,
"가자환경당", 7480, 0.1, 6, 1247,
"거지당", 10782, 0.1, 8, 1348,
"국가혁명당", 32153, 0.3, 16, 2010,
"국민대통합당", 6248, 0.1, 5, 1250,
"국민참여신당", 5773, 0.1, 5, 1155,
"국민혁명당", 148164, 1.4, 13, 11397,
"기독당", 5272, 0.1, 5, 1054,
"깨어있는시민연대당", 6490, 0.1, 5, 1298,
"남북통일당", 5324, 0.1, 5, 1065,
"노동당", 11039, 0.1, 7, 1577,
"녹색당", 8452, 0.1, 5, 1690,
"대한국민당", 5585, 0.1, 5, 1117,
"대한당", 5565, 0.1, 5, 1113,
"대한민국당", 6721, 0.1, 5, 1344,
"독도한국당", 6631, 0.1, 6, 1105,
"미래당", 12935, 0.1, 6, 2156,
"민생당", 378309, 3.6, 11, 34392,
"민중민주당", 9872, 0.1, 7, 1410,
"새누리당", 36170, 0.3, 7, 5167,
"신자유민주연합", 5362, 0.1, 5, 1072,
"신한반도당", 8872, 0.1, 8, 1109,
"여성의당", 9571, 0.1, 5, 1914,
"우리공화당", 411337, 3.9, 13, 31641,
"자유당", 5368, 0.1, 5, 1074,
"자유민주당", 7092, 0.1, 5, 1418,
"자유의새벽당", 11707, 0.1, 5, 2341,
"중소자영업당", 5823, 0.1, 5, 1165,
"직능자영업당", 5184, 0.0, 5, 1037,
"진보당", 85718, 0.8, 16, 5357,
"친박신당", 8310, 0.1, 6, 1385,
"친박연대", 5257, 0.1, 5, 1051,
"통일한국당", 11971, 0.1, 6, 1995,
"한국국민당", 6879, 0.1, 6, 1147,
"한국복지당", 7071, 0.1, 7, 1010,
"한나라당", 5790, 0.1, 5, 1158,
"한류연합당", 9305, 0.1, 7, 1329,
"한반도미래연합", 8498, 0.1, 8, 1062,
"혁명21", 11179, 0.1, 6, 1863,
"홍익당", 6644, 0.1, 5, 1329
) |>
slice(2:n())
party_2021 |>
summarise(당원수 = sum(당원수)) # 10,429,577
```
### 시도별
```{r}
library(tibble)
sido_party_2021 <- tribble(
~구분, ~합계, ~더불어민주당, ~국민의힘, ~정의당, ~국민의당, ~열린민주당, ~기본소득당, ~시대전환, ~가가례도인연합, ~가나코리아, ~가자평화인권당, ~가자환경당,
"합계", 10429577, 4853266, 4070005, 50618, 20185, 42944, 19814, 8458, 6538, 5365, 6481, 7480,
"서울", 1830842, 858016, 633807, 9882, 6847, 24768, 3254, 1290, 1041, 1123, 1042, 1472,
"부산", 530951, 158779, 245492, 2257, NA, 3996, 4436, NA, NA, NA, 1103, 1414,
"대구", 340866, 41126, 221321, 1228, 1138, NA, NA, NA, NA, NA, NA, NA,
"인천", 462086, 180174, 226077, 4661, 1686, NA, 3063, NA, 1103, 1017, NA, NA,
"광주", 544234, 398357, 56614, 2372, 1814, 5680, 3363, 1051, NA, NA, NA, 1080,
"대전", 372618, 151895, 191034, 1345, 3099, NA, NA, NA, NA, NA, 1016, NA,
"울산", 250177, 59315, 159387, 1390, NA, 4009, NA, NA, NA, NA, NA, NA,
"세종", 39355, 18972, 13300, 1070, NA, NA, NA, NA, NA, NA, NA, NA,
"경기", 1992315, 915531, 795874, 10394, 3703, NA, 5698, 1400, 1142, 1035, 1106, 1178,
"강원", 353634, 121301, 211046, 1143, NA, NA, NA, NA, 1081, 1095, NA, NA,
"충북", 380942, 158913, 188375, 1149, 1898, NA, NA, NA, NA, NA, NA, NA,
"충남", 514251, 223238, 240892, 1519, NA, NA, NA, NA, 1086, 1095, NA, NA,
"전북", 832477, 676755, 70693, 3449, NA, NA, NA, 2308, 1085, NA, 1101, NA,
"전남", 772029, 591321, 54630, 3981, NA, 4491, NA, 2409, NA, NA, NA, 1023,
"경북", 492060, 44788, 363621, 1361, NA, NA, NA, NA, NA, NA, NA, NA,
"경남", 531808, 148649, 323319, 2226, NA, NA, NA, NA, NA, NA, 1113, 1313,
"제주", 188932, 106136, 74523, 1191, NA, NA, NA, NA, NA, NA, NA, NA
) |>
slice(2:n())
sido_party_2021 |>
summarise(합계 = sum(합계))
```
### 당비 납부자수
```{r}
library(tibble)
payer_2021 <- tribble(
~정당, ~당원수, ~납부자수, ~당비납부비율, ~등록된_시도당수,
"합계", 10429577, 2133765, 20.5, 355,
"더불어민주당", 4853266, 1295909, 26.7, 17,
"국민의힘", 4070005, 609090, 15.0, 17,
"정의당", 50618, 26470, 52.3, 17,
"국민의당", 20185, 4683, 23.2, 7,
"열린민주당", 42944, 10383, 24.2, 5,
"기본소득당", 19814, 809, 4.1, 5,
"시대전환", 8458, 61, 0.7, 5,
"가가례도인연합", 6538, NA, NA, 6,
"가나코리아", 5365, 5, 0.1, 5,
"가자평화인권당", 6481, NA, NA, 6,
"가자환경당", 7480, NA, NA, 6,
"거지당", 10782, 301, 2.8, 8,
"국가혁명당", 32153, 8549, 26.6, 16,
"국민대통합당", 6248, NA, NA, 5,
"국민참여신당", 5773, NA, NA, 5,
"국민혁명당", 148164, 53720, 36.3, 13,
"기독당", 5272, NA, NA, 5,
"깨어있는시민연대당", 6490, 35, 0.5, 5,
"남북통일당", 5324, 216, 4.1, 5,
"노동당", 11039, 2781, 25.2, 7,
"녹색당", 8452, 3469, 41.0, 5,
"대한국민당", 5585, NA, NA, 5,
"대한당", 5565, NA, NA, 5,
"대한민국당", 6721, 167, 2.5, 5,
"독도한국당", 6631, NA, NA, 6,
"미래당", 12935, 1311, 10.1, 6,
"민생당", 378309, 9881, 2.6, 11,
"민중민주당", 9872, 57, 0.6, 7,
"새누리당", 36170, 844, 2.3, 7,
"신자유민주연합", 5362, 322, 6.0, 5,
"신한반도당", 8872, 20, 0.2, 8,
"여성의당", 9571, 2487, 26.0, 5,
"우리공화당", 411337, 50287, 12.2, 13,
"자유당", 5368, 40, 0.7, 5,
"자유민주당", 7092, 733, 10.3, 5,
"자유의새벽당", 11707, 2615, 22.3, 5,
"중소자영업당", 5823, NA, NA, 5,
"직능자영업당", 5184, NA, NA, 5,
"진보당", 85718, 46158, 53.8, 16,
"친박신당", 8310, 241, 2.9, 6,
"친박연대", 5257, NA, NA, 5,
"통일한국당", 11971, 94, 0.8, 6,
"한국국민당", 6879, 106, 1.5, 6,
"한국복지당", 7071, NA, NA, 7,
"한나라당", 5790, NA, NA, 5,
"한류연합당", 9305, 119, 1.3, 7,
"한반도미래연합", 8498, NA, NA, 8,
"혁명21", 11179, 1659, 14.8, 6,
"홍익당", 6644, 143, 2.2, 5
)
payer_2021 |>
summarise( 당원수 = sum(당원수))
```
### 수입내역
단위: 백만원
```{r}
# R에서 데이터프레임 생성
income_2021 <- tribble(
~"구분", ~"합계", ~"전년도이월", ~"당비", ~"기탁금", ~"후원회기부금", ~"보조금", ~"차입금", ~"기타",
"합계", 196317, 63629, 61507, 774, 4375, 46278, 3970, 15784,
"더불어민주당", 89396, 36400, 28402, 348, 350, 21060, 0, 2836,
"국민의힘", 57990, 15222, 12030, 305, 1352, 18500, 0, 10581,
"정의당", 12293, 2629, 3807, 51, 896, 3075, 1322, 513,
"국민의당", 2774, 547, 443, 22, 67, 1364, 0, 331,
"열린민주당", 3090, 731, 835, 21, 100, 1294, 0, 109,
"기본소득당", 1099, 25, 925, 0.5, 15, 32, 0, 101,
"시대전환", 263, 29, 84, 0.5, 32, 28, 0, 90,
"기타정당", 29412, 8046, 14981, 26, 1563, 925, 2648, 1223
)
# 데이터프레임 확인
income_2021 |>
summarise(당비 = sum(당비))
```
### 지출내역
단위: 백만원
```{r}
# R에서 데이터프레임 생성
expense_2021 <- tribble(
~"구분", ~"합계", ~"선거비용", ~"기본경비", ~"정책개발비", ~"조직활동비", ~"여성정치발전비", ~"그밖의경비",
"합계", 137932, 549, 65988, 17203, 44927, 4930, 4333,
"더불어민주당", 55624, 0, 24578, 5354, 23348, 2136, 208,
"국민의힘", 44224, 0, 20789, 9175, 9817, 1952, 2491,
"정의당", 10511, 260, 6478, 1175, 1602, 367, 629,
"국민의당", 2222, 0, 848, 485, 577, 195, 117,
"열린민주당", 1518, 0, 912, 94, 351, 150, 11,
"기본소득당", 873, 229, 427, 76, 136, 4, 1,
"시대전환", 243, 0, 223, 4, 8, 4, 4,
"기타정당", 22717, 60, 11733, 841, 9088, 122, 873
)
# 데이터프레임 확인
expense_2021 |>
summarise(선거비용 = sum(선거비용))
```
## 2020년
### 시도별
```{r}
# R에서 데이터프레임 생성
sido_party_2020 <- data.frame(
구분 = c("합계", "서울", "부산", "대구", "인천", "광주", "대전", "울산", "세종", "경기", "강원", "충북", "충남", "전북", "전남", "경북", "경남", "제주"),
더불어민주당 = c(4053466, 732483, 148679, 38874, 148971, 334034, 122231, 49331, 15889, 764856, 91291, 135103, 168409, 578593, 478573, 41698, 131459, 72992),
국민의힘 = c(3489924, 552794, 218624, 196849, 197176, 51999, 170297, 147025, 10539, 670052, 168159, 155963, 183772, 65861, 50544, 304372, 280395, 65503),
정의당 = c(53080, 11190, 2311, 1265, 4968, 2369, 1434, 1498, 1094, 10370, 1186, 1234, 1529, 3563, 4030, 1479, 2362, 1198),
국민의당 = c(16023, 4721, NA, 1030, 1606, 1746, 2805, NA, NA, 2393, NA, 1722, NA, NA, NA, NA, NA, NA),
열린민주당 = c(40456, 23431, 3731, NA, NA, 5202, NA, 3834, NA, NA, NA, NA, NA, NA, 4258, NA, NA, NA),
기본소득당 = c(19879, 3281, 4457, NA, 3616, 3050, NA, NA, NA, 5475, NA, NA, NA, NA, NA, NA, NA, NA),
시대전환 = c(6945, 1771, NA, NA, NA, 1051, NA, NA, NA, 1210, NA, NA, NA, 1121, 1792, NA, NA, NA),
가나코리아 = c(5365, 1123, NA, NA, 1017, NA, NA, NA, NA, 1035, 1095, NA, 1095, NA, NA, NA, NA, NA),
가자평화 = c(6707, 1026, 1026, NA, NA, NA, 1016, NA, NA, 1106, NA, NA, NA, 1101, NA, NA, 1432, NA),
인권당 = c(7487, 1471, 1415, NA, NA, 1080, NA, NA, NA, 1178, NA, NA, NA, NA, 1030, NA, 1313, NA)
) |>
slice(2:n()) |>
as_tibble()
# 데이터프레임 확인
sido_party_2020 |>
as_tibble() |>
summarise(민주당 = sum(더불어민주당))
```
### 당비 납부자수
```{r}
# R에서 데이터프레임 생성
payer_2020 <- data.frame(
정당 = c("합계", "더불어민주당", "국민의힘", "정의당", "국민의당", "열린민주당", "기본소득당", "시대전환", "가나코리아", "가자!평화인권당", "가자환경당", "거지당", "국가혁명당", "국민새정당", "국민참여신당"),
당원수 = c(8771263, 4053466, 3489924, 53080, 16023, 40456, 19879, 6945, 5365, 6707, 7487, 9505, 29757, 9032, 5773),
납부자수 = c(1433446, 896296, 347322, 39872, 3369, 12098, 1435, 77, 10, NA, 2, NA, 5889, NA, NA),
당비납부비율 = c(16.3, 22.1, 10.0, 75.1, 21.0, 29.9, 7.2, 1.1, 0.2, NA, NA, NA, 19.8, NA, NA),
등록된시도당수 = c(332, 17, 17, 17, 7, 5, 5, 5, 5, 6, 6, 8, 17, 8, 5)
) |>
slice(2:n()) |>
as_tibble()
# 데이터프레임 확인
payer_2020 |>
summarise(당원수 = sum(당원수))
```
### 수입내역
```{r}
# R에서 데이터프레임 생성
income_2020 <- tribble(
~"구분", ~"합계", ~"전년도이월", ~"당비", ~"기탁금", ~"후원회기부금", ~"보조금", ~"차입금", ~"기타",
"합계", 311220, 45278, 67895, 962, 6095, 90718, 60154, 40118,
"더불어민주당", 95045, 20643, 31211, 305, 403, 32706, 1840, 7937,
"국민의힘", 120989, 11301, 13383, 350, 541, 36115, 43897, 15402,
"정의당", 22597, 2084, 5156, 60, 1723, 5679, 2070, 5825,
"국민의당", 9045, 0, 242, 0, 60, 1017, 3482, 4244,
"열린민주당", 10245, 0, 881, 0, 505, 968, 4234, 3657,
"기본소득당", 633, 18, 392, 0, 55, 16, 48, 104,
"시대전환", 220, 6, 65, 0, 25, 15, 50, 59,
"기타정당", 52446, 11226, 16565, 247, 2783, 14202, 4533, 2890
) |>
as_tibble()
# 데이터프레임 확인
income_2020 |>
summarise(당비 = sum(당비))
```
### 지출내역
```{r}
# 추가로 만들어야 하는 데이터프레임
expense_2020 <- tribble(
~"구분", ~"합계", ~"선거비용", ~"기본경비", ~"정책개발비", ~"조직활동비", ~"여성정치발전비", ~"그밖의경비",
"합계", 248036, 31066, 115856, 14449, 58610, 5235, 22820,
"더불어민주당", 58549, 4058, 21682, 4274, 22438, 1891, 4206,
"국민의힘", 104155, 4844, 69579, 6410, 14364, 1877, 7081,
"정의당", 21042, 4709, 7384, 1180, 6345, 340, 1084,
"국민의당", 8512, 3911, 1022, 130, 415, 115, 2919,
"열린민주당", 9517, 3544, 685, 53, 603, 96, 4536,
"기본소득당", 633, 53, 341, 53, 165, 1, 20,
"시대전환", 197, 0, 121, 71, 2, 0, 3,
"기타정당", 45431, 9947, 15042, 2278, 14278, 915, 2971
)
# 데이터프레임 확인
expense_2020 |>
summarise(선거비용 = sum(선거비용))
```
## 2019년
### 시도별
```{r}
library(readxl)
sido_party_2019 <- read_excel("data/2019.xlsx", sheet="page01")
sido_party_2019 <- sido_party_2019 |>
filter(구분 != "합계")
sido_party_2019 |>
summarise(당원수 = sum(합계))
```
### 당비 납부자수
```{r}
payer_2019 <- read_excel("data/2019.xlsx", sheet="page02")
payer_2019 <- payer_2019 |>
filter(정당 != "합계") |>
mutate(납부자수 = parse_number(납부자수))
payer_2019 |>
summarise(당원수 = sum(당원수))
```
### 수입내역
```{r}
income_2019 <- read_excel("data/2019.xlsx", sheet="page03")
income_2019 <- income_2019 |>
filter(구분 != "합계")
income_2019 |>
summarise(당비 = sum(당비))
```
### 지출내역
```{r}
expense_2019 <- read_excel("data/2019.xlsx", sheet="page04")
expense_2019 <- expense_2019 |>
filter(구분 != "합계")
expense_2019 |>
summarise(합계 = sum(합계))
```
## 2018년
### 시도별
```{r}
library(readxl)
sido_party_2018 <- read_excel("data/2018.xlsx", sheet="page01")
sido_party_2018 <- sido_party_2018 |>
filter(구분 != "합계")
sido_party_2018 |>
summarise(당원수 = sum(합계))
```
### 당비 납부자수
```{r}
payer_2018 <- read_excel("data/2018.xlsx", sheet="page02")
payer_2018 <- payer_2018 |>
filter(정당 != "합계") |>
mutate(납부자수 = parse_number(납부자수))
payer_2018 |>
summarise(당원수 = sum(당원수))
```
### 수입내역
```{r}
income_2018 <- read_excel("data/2018.xlsx", sheet="page03")
income_2018 <- income_2018 |>
filter(구분 != "합계")
income_2018 |>
summarise(당비 = sum(당비))
```
### 지출내역
```{r}
expense_2018 <- read_excel("data/2018.xlsx", sheet="page04")
expense_2018 <- expense_2018 |>
filter(구분 != "합계")
expense_2018 |>
summarise(합계 = sum(합계))
```
## 2017년
### 시도별
```{r}
# tribble 함수를 이용해 DataFrame 생성
sido_party_2017 <- tribble(
~구분, ~합계, ~더불어민주당, ~자유한국당, ~국민의당, ~바른정당, ~정의당, ~민중당, ~대한애국당, ~가자코리아, ~경제애국당, ~공화당,
"합계", 7507952, 3568111, 3227708, 285023, 67053, 40362, 46539, 41685, 5288, 6779, 6568,
"서울", 1283838, 640138, 511970, 39119, 10777, 8224, 4684, 10272, 1114, 1185, 1034,
"부산", 360443, 135736, 190581, 8890, 2673, 1895, 2955, 2597, 1030, NA, NA,
"대구", 245098, 32984, 179375, 4147, 4557, 1796, 1120, 6200, 1059, NA, NA,
"인천", 361923, 135400, 188407, 6430, 3310, 2937, 1595, 2262, 1011, NA, NA,
"광주", 407488, 300064, 51398, 38655, 1419, 1443, 7131, 1090, NA, NA, NA,
"대전", 297531, 106025, 167572, 6366, 1451, 1928, 2206, 1920, 1072, NA, NA,
"울산", 183212, 34606, 135216, 2181, 2389, 1385, 3289, 1082, NA, NA, NA,
"세종", 24495, 13104, 9306, 1008, NA, NA, NA, NA, NA, NA, NA,
"경기", 1353048, 628929, 620356, 31616, 15947, 7171, 7839, 8970, 1031, 1159, 1069,
"강원", 264107, 80527, 162328, 7696, 1679, 1248, 1172, 1924, 1039, NA, NA,
"충북", 283900, 121696, 145490, 6021, 1358, 1003, 1106, 1293, NA, NA, NA,
"충남", 351195, 148353, 177742, 8025, 1922, 1115, 1554, 1412, 1093, NA, NA,
"전북", 674426, 545688, 63866, 48931, 1773, 2585, 2155, 1070, NA, NA, NA,
"전남", 561645, 427648, 50169, 66262, 1208, 3364, 6111, NA, NA, NA, NA,
"경북", 323115, 33684, 257338, 4417, 9145, 1920, 1575, 2248, 1180, NA, NA,
"경남", 391553, 115964, 251957, 4199, 5208, 1527, 1795, 1795, NA, NA, NA,
"제주", 140935, 67565, 64637, 2068, 2587, 1824, NA, NA, NA, NA, NA
) |>
filter(구분 != "합계")
# DataFrame 확인
sido_party_2017 |>
summarise(합계 = sum(합계))
```
### 당비 납부자수
```{r}
# tribble 함수를 사용하여 데이터 프레임을 생성한다
payer_2017 <- tribble(
~"정당", ~"당원수", ~"납부자수", ~"당비납부", ~"비율(%)", ~"등록된시·도당수",
"합계", 7507952, 1320976, NA, 17.6, 285,
"더불어민주당", 3568111, 834573, NA, 23.4, 17,
"자유한국당", 3227708, 335000, NA, 10.4, 17,
"국민의당", 285023, 44371, NA, 15.6, 16,
"바른정당", 67053, 29712, NA, 44.3, 16,
"정의당", 40362, 25687, NA, 63.6, 15,
"민중당", 46539, 25960, NA, 55.8, 15,
"대한애국당", 41685, 9579, NA, 23.0, 12,
"가자코리아", 5288, NA, NA, NA, 5,
"경제애국당", 6779, 6, NA, 0.1, 6,
"공화당", 6568, NA, NA, NA, 6,
"국민대통합당", 7161, NA, NA, NA, 6,
"국민새정당", 8983, NA, NA, NA, 8,
"국민행복당", 5253, 125, NA, 2.4, 5,
"국제녹색당", 12019, NA, NA, NA, 11,
"그린불교연합당", 5411, NA, NA, NA, 5,
"기독당", 6442, NA, NA, NA, 5,
"기독자유당", 9206, 2, NA, NA, 8,
"노동당", 11823, 4784, NA, 40.5, 7,
"녹색당", 9308, 5725, NA, 61.5, 5,
"늘푸른한국당", 20863, 262, NA, 1.3, 17,
"대한민국당", 6360, 134, NA, 2.1, 5,
"민중민주당", 6461, 19, NA, 0.3, 5,
"사회민주당", 4653, 38, NA, 0.8, 5,
"새누리당", 30603, 3784, NA, 12.4, 7,
"우리미래", 6269, 993, NA, 15.8, 5,
"인권정당", 6537, NA, NA, NA, 6,
"진리대한당", 5458, NA, NA, NA, 5,
"친박연대", 5257, NA, NA, NA, 5,
"통일한국당", 5787, 20, NA, 0.3, 5,
"통합민주당", 5262, NA, NA, NA, 5,
"한국국민당", 6832, 106, NA, 1.6, 6,
"한나라당", 5789, NA, NA, NA, 5,
"한누리평화통일당", 7064, NA, NA, NA, 7,
"한반도미래연합", 7392, NA, NA, NA, 7,
"홍익당", 6643, 96, NA, 1.4, 5
) |>
filter(정당 != "합계")
payer_2017 |>
summarise(당원수 = sum(당원수))
```
### 수입내역
```{r}
# tibble 패키지 로드
library(tibble)
# tribble 함수를 이용해 DataFrame 생성
income_2017 <- tribble(
~`구분`, ~`합계`, ~`전년도이월`, ~`당비`, ~`기탁금`, ~`후원회기부금`, ~`보조금`, ~`차입금`, ~`기타`,
"합 계", 399421, 39181, 46017, 4479, 4859, 84276, 88290, 132319,
"더 불 어 민 주 당", 139442, 8239, 14040, 1444, 330, 24965, 40887, 49537,
"자 유 한 국 당", 124191, 25005, 12191, 1413, 294, 24583, 25143, 35562,
"국 민 의 당", 90282, 4620, 2097, 1342, 4, 17678, 19570, 44971,
"바 른 정 당", 16108, 32, 3273, 5, 903, 11483, 12, 400,
"정 의 당", 13652, 669, 4059, 275, 1446, 5492, 656, 1055,
"민 중 당", 5158, 125, 3160, 0, 790, 28, 595, 460,
"대 한 애 국 당", 945, 0, 521, 0, 400, 7, 2, 15,
"기 타 정 당", 9643, 491, 6676, 0, 692, 40, 1425, 319
) |>
mutate(구분 = str_remove_all(구분, "\\s")) |>
filter(구분 != "합계")
# DataFrame 확인
income_2017
```
### 지출내역
```{r}
# tribble 함수를 이용해 DataFrame 생성
expense_2017 <- tribble(
~`구분`, ~`합계`, ~`선거비용`, ~`기본경비`, ~`정책개발비`, ~`조직활동비`, ~`여성정치발전비`, ~`그밖의경비`,
"합 계", 366341, 133900, 76293, 16992, 42509, 4727, 91920,
"더 불 어 민 주 당", 132145, 46114, 24973, 4254, 15288, 1287, 40229,
"자 유 한 국 당", 109761, 32835, 27333, 8371, 11042, 1706, 28474,
"국 민 의 당", 83101, 41915, 9343, 2907, 7869, 918, 20149,
"바 른 정 당", 13437, 4774, 5121, 336, 2543, 536, 127,
"정 의 당", 12866, 3532, 5318, 1046, 1620, 274, 1076,
"민 중 당", 5016, 909, 1694, 18, 1624, 4, 767,
"대 한 애 국 당", 873, 0, 276, 0, 595, 0, 2,
"기 타 정 당", 9142, 3821, 2235, 60, 1928, 2, 1096
) |>
mutate(구분 = str_remove_all(구분, "\\s")) |>
filter(구분 != "합계")
# DataFrame 확인
expense_2017
```
## 2016년
### 시도별
```{r}
library(readxl)
sido_party_2016 <- read_excel("data/2016.xlsx", sheet="page01")
sido_party_2016 <- sido_party_2016 |>
filter(구분 != "합계")
sido_party_2016 |>
summarise(당원수 = sum(합계))
```
### 당비 납부자수
```{r}
payer_2016 <- read_excel("data/2016.xlsx", sheet="page02")
payer_2016 <- payer_2016 |>
filter(정당 != "합계")
payer_2016 |>
summarise(당원수 = sum(당원수))
```
### 수입내역
```{r}
income_2016 <- read_excel("data/2016.xlsx", sheet="page03")
income_2016 <- income_2016 |>
filter(구분 != "합계")
income_2016 |>
summarise(당비 = sum(당비))
```
### 지출내역
```{r}
expense_2016 <- read_excel("data/2016.xlsx", sheet="page04")
expense_2016 <- expense_2016 |>
filter(구분 != "합계")
expense_2016 |>
summarise(합계 = sum(합계))
```
## 2015년
### 시도별
```{r}
library(readxl)
sido_party_2015 <- read_excel("data/2015.xlsx", sheet="page01")
sido_party_2015 <- sido_party_2015 |>
filter(구분 != "합계")
sido_party_2015 |>
summarise(당원수 = sum(합계))
```
### 당비 납부자수
```{r}
payer_2015 <- read_excel("data/2015.xlsx", sheet="page02")
payer_2015 <- payer_2015 |>
filter(정당 != "합계")
payer_2015 |>
summarise(당원수 = sum(당원수))
```
### 수입내역
```{r}
income_2015 <- read_excel("data/2015.xlsx", sheet="page03")
income_2015 <- income_2015 |>
filter(구분 != "합계")
income_2015 |>
summarise(당비 = sum(당비))
```
### 지출내역
```{r}
expense_2015 <- read_excel("data/2015.xlsx", sheet="page04")
expense_2015 <- expense_2015 |>
filter(구분 != "합계")
expense_2015 |>
summarise(합계 = sum(합계))
```
## 2014년
### 시도별
```{r}
# tibble 패키지 로드
library(tibble)
# tribble 함수로 DataFrame 생성
sido_party_2014 <- tribble(
~`구분`, ~`합계`, ~`새누리당`, ~`새정치 민주연합`, ~`정의당`, ~`겨레자유`, ~`평화통일당 경제민주당`, ~`공화당`, ~`국제녹색당`,
"합계", 5245611, 2708085, 2430111, 18184, 5340, 6121, 6661, 11993,
"서울", 854469, 440230, 392397, 2870, 1073, 1119, 1031, 1080,
"부산", 261053, 155380, 100032, 1152, 0, 0, 1130, 1084,
"대구", 142209, 116729, 22132, 1274, 0, 0, 0, 0,
"인천", 264772, 164672, 88937, 1483, 1050, 1039, 0, 1198,
"광주", 290523, 50746, 236369, 0, 0, 0, 0, 1079,
"대전", 235967, 152724, 75706, 1105, 0, 1014, 1072, 0,
"울산", 128820, 112527, 14198, 1073, 0, 0, 0, 0,
"세종", 15216, 8942, 6274, 0, 0, 0, 0, 0,
"경기", 945114, 543051, 383963, 2756, 1031, 1489, 1068, 1062,
"강원", 189618, 136025, 47140, 1078, 1093, 0, 0, 1050,
"충북", 203365, 118325, 81530, 0, 0, 0, 1290, 1030,
"충남", 224028, 150430, 68173, 0, 1093, 0, 0, 1030,
"전북", 506132, 59028, 442007, 1554, 0, 0, 1070, 1190,
"전남", 405205, 45805, 354887, 1224, 0, 0, 0, 1092,
"경북", 214150, 184736, 23390, 1365, 0, 1460, 0, 1098,
"경남", 259914, 200703, 57202, 0, 0, 0, 0, 0,
"제주", 105056, 68032, 35774, 1250, 0, 0, 0, 0
) |>
filter(구분 != "합계")
# DataFrame 확인
sido_party_2014 |>
summarise(합계 = sum(합계))
```
### 당비 납부자수
```{r}
# tribble 함수를 사용하여 데이터 프레임을 생성한다
payer_2014 <- tribble(
~"정당", ~"당원수", ~"납부자수", ~"비율(%)", ~"시·도당수",
"합계", 5245611, 591045, 11.2, 120,
"새누리당", 2708085, 253552, 9.4, 17,
"새정치민주연합", 2430111, 316836, 13.0, 17,
"정의당", 18184, 9921, 54.6, 12,
"겨레자유평화통일당", 5340, 0, NA, 5,
"경제민주당", 6121, 0, NA, 5,
"공화당", 6661, 35, 0.5, 6,
"국제녹색당", 11993, 0, NA, 11,
"그린불교연합당", 5155, 0, NA, 5,
"기독민주당", 5300, 6, 0.1, 5,
"노동당", 13015, 6552, 50.3, 7,
"녹색당", 6870, 4122, 60.0, 5,
"대한민국당", 6029, 0, NA, 5,
"민주당", 6225, 16, 0.3, 5,
"새마을당", 5549, 0, NA, 5,
"새정치국민의당", 5207, 5, 0.1, 5,
"한나라당", 5766, 0, NA, 5
) |>
filter(정당 != "합계")
payer_2014 |>
summarise(당원수 = sum(당원수))
```
### 수입내역
```{r}
# tibble 패키지 로드
library(tibble)
# tribble 함수로 DataFrame 생성
income_2014 <- tribble(
~`구분`, ~`합계`, ~`전년도이월`, ~`당비`, ~`기탁금`, ~`보조금`, ~`차입금`, ~`기타`,
"합계", 201388, 20935, 52086, 9907, 74343, 1186, 42931,
"새누리당", 97608, 8449, 26404, 4871, 36355, 220, 21309,
"새정치민주연합", 91737, 11392, 21284, 4466, 33831, 256, 20508,
"정의당", 8259, 560, 1647, 570, 4157, 514, 811,
"기타정당", 3784, 534, 2751, NA, NA, 196, 303
) |>
filter(구분 != "합계")
# DataFrame 확인
income_2014 |>
summarise(합계 = sum(합계))
```
### 지출내역
```{r}
expense_2014 <- tribble(
~`구분`, ~`합계`, ~`선거비용`, ~`기본경비`, ~`정책개발비`, ~`조직활동비`, ~`여성정치발전비`, ~`그밖의경비`,
"합계", 159263, 16152, 44310, 14208, 69070, 3693, 11830,
"새누리당", 77691, 7373, 21257, 9292, 30536, 1832, 7401,
"새정치민주연합", 70591, 7963, 18955, 4101, 34372, 1646, 3554,
"정의당", 7592, 422, 2689, 793, 2778, 215, 695,
"기타정당", 3389, 394, 1409, 22, 1384, NA, 180
) |>
filter(구분 != "합계")
expense_2014 |>
summarise(합계 = sum(합계))
```
## 데이터 정제
### 시도별 당원수
```{r}
object_list <- ls()
party_members <- object_list[str_detect(object_list, pattern = "^sido_party_\\d{4}")]
party_members_list <- mget(party_members)
party_members_sido_tbl <- party_members_list |>
enframe() |>
mutate(year = parse_number(name)) |>
mutate(data = map(value, select, 1:4)) |>
unnest(data) |>
pivot_longer(새누리당:국민의힘, names_to = "정당", values_to = "당원수") |>
select(year, 구분, 합계, 정당, 당원수) |>
mutate(정당명 = case_when(
str_detect(정당, "국민의힘|새누리당|자유한국당") ~ "국민의힘",
str_detect(정당, "더불어민주당|민주당|(새정치 민주연합)") ~ "민주당",
TRUE ~ "기타정당"
)) |>
filter(!is.na(당원수)) |>
arrange(desc(year)) |>
select(year, 구분, 합계, 정당명, 당원수)
```
### 당비 납입당원
```{r}
payers <- object_list[str_detect(object_list, pattern = "^payer_\\d{4}")]
payers_list <- mget(payers)
payers_members_tbl <- payers_list |>
enframe() |>
mutate(data = map(value, select, 1:3)) |>
unnest(data) |>
mutate(연도 = parse_number(name)) |>
mutate(정당명 = case_when(
str_detect(정당, "국민의힘|새누리당|자유한국당") ~ "국민의힘",
str_detect(정당, "더불어민주당|(새정치민주연합)") ~ "민주당",
TRUE ~ "기타정당"
)) |>
filter(정당명 != "기타정당",
납부자수 > 10000) |>
select(연도, 당원수, 정당명, 납부자수)
payers_members_tbl
```
### 수입내역
```{r}
income <- object_list[str_detect(object_list, pattern = "^income_\\d{4}")]
income_list <- mget(income)
income_party_tbl <- income_list |>
enframe() |>
mutate(data = map(value, select, c(구분, 합계, 당비, 기탁금, 보조금, 차입금))) |>
unnest(data) |>
mutate(연도 = parse_number(name)) |>
mutate(정당명 = case_when(
str_detect(구분, "국민의힘|새누리당|자유한국당") ~ "국민의힘",
str_detect(구분, "더불어민주당|(새정치민주연합)") ~ "민주당",
TRUE ~ "기타정당"
)) |>
filter(정당명 != "기타정당",
당비 > 5000) |>
select(연도, 정당명, 합계, 당비, 기탁금, 보조금, 차입금)
income_party_tbl
```
### 지출내역
```{r}
expense <- object_list[str_detect(object_list, pattern = "^expense_\\d{4}")]
expense_list <- mget(expense)
expense_party_tbl <- expense_list |>
enframe() |>
mutate(data = map(value, select, c(구분, 합계, 선거비용, 기본경비, 정책개발비, 조직활동비))) |>
unnest(data) |>
mutate(연도 = parse_number(name)) |>
mutate(정당명 = case_when(
str_detect(구분, "국민의힘|새누리당|자유한국당") ~ "국민의힘",
str_detect(구분, "더불어민주당|(새정치민주연합)") ~ "민주당",
TRUE ~ "기타정당"
)) |>
filter(정당명 != "기타정당") |>
select(연도, 정당명, 합계, 선거비용, 기본경비, 정책개발비, 조직활동비)
expense_party_tbl
```
# 분석
## 양당 당원
```{r}
library(ggrepel)
label_man <- function() {
function(x) {
paste0(scales::comma(x / 10000), "만")
}
}
party_members_g <- party_members_sido_tbl |>
group_by(year, 정당명) |>
summarise(당원수 = sum(당원수)) |>
ggplot(aes(x = year, y = 당원수, color = 정당명, group = 정당명)) +
geom_point(size = 3) +
geom_line() +
theme_korean() +
theme(legend.position = "top") +
labs(x = "",
y = "당원수",
title = "양당 당원수 추세",
caption = "출처: 중앙선관위 '정당의 활동개황 및 회계보고'") +
scale_y_continuous(labels = label_man()) +
scale_color_manual(values = c("국민의힘" = "red",
"민주당" = "blue")) +
geom_text_repel(aes(label = glue::glue("{scales::comma(당원수 / 10000, accuracy=1)}만"), show.legend = FALSE),
size = 4.5)
party_members_g
ggsave( glue::glue("images/당원수_양당.jpeg") ,
party_members_g,
device = ragg::agg_jpeg(),
width = 297, height = 210, units = "mm")
```
## 권역별 당원
```{r}
party_members_sido_g <- party_members_sido_tbl |>
mutate(권역 = case_when(
str_detect(구분, "전북|전남|광주") ~ "광주전라",
str_detect(구분, "부산|울산|경남|경북") ~ "부울경",
str_detect(구분, "대구|경북") ~ "대구경북",
str_detect(구분, "대전|충남|충북|세종") ~ "대전세종충청",
# str_detect(구분, "제주|강원") ~ "제주강원",
TRUE ~ 구분)) |>
mutate(권역 = factor( 권역, levels = c("서울", "경기", "인천",
"대전세종충청", "제주", "강원",
"대구경북", "부울경", "광주전라"))) |>
group_by(year, 정당명, 권역) |>
summarise(당원수 = sum(당원수)) |>
ggplot(aes(x = year, y = 당원수, color = 정당명, group = 정당명)) +
geom_point(size = 2.5) +
geom_line() +
theme_korean() +
facet_wrap(vars(권역), scales = "free") +
theme(legend.position = "top",
plot.background = element_rect(fill = "white", colour = "white"),
panel.background = element_rect(fill = "gray99"),
axis.text.x = ggplot2::element_text(family = "MaruBuri", size = 9),
axis.text.y = ggplot2::element_text(family = "MaruBuri", size = 9),
axis.title.x = ggplot2::element_text(family = "MaruBuri", size = 9),
axis.title.y = ggplot2::element_text(family = "MaruBuri", size = 9)) +
labs(x = "",
y = "당원수",
title = "양당 권역별 당원수 추세",
caption = "출처: 중앙선관위 '정당의 활동개황 및 회계보고'") +
scale_y_continuous(labels = label_man()) +
scale_color_manual(values = c("국민의힘" = "red",
"민주당" = "blue"))
party_members_sido_g
ggsave( glue::glue("images/당원수_시도별_양당.jpeg") ,
party_members_sido_g,
device = ragg::agg_jpeg(),
width = 297, height = 210, units = "mm")
```
## 납부당원
```{r}
payers_members_tbl |>
mutate(납부비율 = 납부자수 / 당원수) |>
pivot_longer(c(당원수, 납부자수, 납부비율), names_to = "구분", values_to = "당원수") |>
mutate(구분 = factor(구분, levels = c("당원수", "납부자수", "납부비율"))) |>
ggplot(aes(x = 연도, y = 당원수, color = 정당명, group = 정당명)) +
geom_point() +
geom_line() +
facet_wrap(vars(구분), scales = "free") +
theme_korean() +
theme(legend.position = "top") +
labs(x = "",
y = "당원수",
title = "양당 당비 납부자 추세",
caption = "출처: 중앙선관위 '정당의 활동개황 및 회계보고'") +
scale_y_continuous(labels = scales::comma) +
scale_color_manual(values = c("국민의힘" = "red",
"민주당" = "blue"))
```
## 수입내역
```{r}
income_party_tbl |>
pivot_longer(합계:차입금, names_to = "구분", values_to = "금액") |>
# mutate(구분 = factor(구분, levels = c("합계", "당비"))) |>
ggplot(aes(x = 연도, y = 금액, color = 정당명, group = 정당명)) +
geom_point() +
geom_line() +
facet_wrap(vars(구분)) +
theme_minimal() +
theme(legend.position = "top") +
labs(x = "",
y = "당원수",
title = "양당 수입내역 추세",
caption = "출처: 중앙선관위 '정당의 활동개황 및 회계보고'") +
scale_y_continuous(labels = scales::comma) +
scale_color_manual(values = c("국민의힘" = "red",
"민주당" = "blue"))
```
## 지출내역
```{r}
expense_party_tbl |>
pivot_longer(합계:조직활동비, names_to = "구분", values_to = "금액") |>
ggplot(aes(x = 연도, y = 금액, color = 정당명, group = 정당명)) +
geom_point() +
geom_line() +
facet_wrap(vars(구분)) +
theme_minimal() +
theme(legend.position = "top") +
labs(x = "",
y = "금액(백만원)",
title = "양당 지출내역 추세",
caption = "출처: 중앙선관위 '정당의 활동개황 및 회계보고'") +
scale_y_continuous(labels = scales::comma) +
scale_color_manual(values = c("국민의힘" = "red",
"민주당" = "blue"))
```