시도별 여론조사 현황
# 1. 데이터 -----
## 2018-06-03
sido_df <- read_rds("data/sido_survey_df.rds")
names(sido_df) <- c("조사 의뢰", "조사 기관", "응답 인원", "더불어민주당", "자유한국당",
"바른미래당", "정의당", "기타·무응답", "참고", "조사일", "시도명",
"민주평화당", "무소속")
sido_now_df <- sido_df %>%
mutate(무소속 = str_replace_all(무소속, "%", "") %>% as.numeric,
민주평화당 = str_replace_all(민주평화당, "%", "") %>% as.numeric) %>%
group_by(시도명) %>%
arrange(조사일) %>%
filter(row_number() == n()) %>%
select(시도명, contains("당"), contains("무소속")) %>%
ungroup()
current_df <- sido_now_df %>%
gather(정당, 지지율, -시도명) %>%
mutate(지지율 = as.numeric(지지율)) %>%
group_by(시도명) %>%
summarise(지지율 = max(지지율, na.rm=TRUE))
sido_current_df <- sido_now_df %>%
gather(정당, 지지율, -시도명) %>%
mutate(지지율 = as.numeric(지지율)) %>%
inner_join(current_df)
sido_viz_df <- sido_current_df %>%
count(정당)
DT::datatable(sido_current_df)
시도 현황 지도
# 2. 시각화 -----
## 2.0. 지도정보 룩업표 -----
spatial_tbl <- tribble(
~"CTPRVN_CD", ~"CTP_KOR_NM", ~"시도명",
11, "서울특별시", "서울특별시장",
26, "부산광역시", "부산광역시장",
27, "대구광역시", "대구광역시장",
28, "인천광역시", "인천광역시장",
29, "광주광역시", "광주광역시장",
30, "대전광역시", "대전광역시장",
31, "울산광역시", "울산광역시장",
36, "세종특별자치시", "세종특별자치시장",
41, "경기도", "경기도지사",
42, "강원도", "강원도지사",
43, "충청북도", "충청북도지사",
44, "충청남도", "충청남도지사",
45, "전라북도", "전라북도지사",
46, "전라남도", "전라남도지사",
47, "경상북도", "경상북도지사",
48, "경상남도", "경상남도지사",
50, "제주특별자치도", "제주특별자치도지사"
)
## 2.1. 지도 데이터 가져오기 -----
# sido_shp <- st_read("data/shapefile_sido/TL_SCCO_CTPRVN.shp")
sido_shp$CTP_KOR_NM <- iconv(sido_shp$CTP_KOR_NM, from = "CP949", to = "UTF-8", sub = NA, mark = TRUE, toRaw = FALSE)
sido_simp_shp <- st_simplify(sido_shp, dTolerance = 100)
## 2.2. 지지율 데이터 병합 ----
sido_current_df <- left_join(sido_current_df, spatial_tbl) %>%
mutate(CTPRVN_CD = factor(CTPRVN_CD))
sido_simp_shp <- left_join(sido_simp_shp, sido_current_df)
## 2.3. 지지율 데이터 시각화 ----
sido_simp_shp %>%
ggplot(aes(fill=sido_simp_shp$정당)) +
geom_sf() +
theme_minimal(base_family="NanumGothic") +
labs(title="제7회 지방선거 - 광역단체장") +
theme(legend.position = "right") +
scale_fill_manual(values = c("blue", "gray", "red", "white")) +
labs(fill="정당") +
theme(panel.grid.major = element_line(colour = 'transparent'),
panel.grid = element_blank(),
line = element_blank(),
axis.ticks = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
legend.position = "top")
## 2.4. 인터랙티브 그래프 ----
sido_simp_shp %>%
mapview(., zcol="정당", col.regions = c("blue", "gray", "red", "red"))
sido_now_df <- sido_df %>%
mutate(무소속 = str_replace_all(무소속, "%", "") %>% as.numeric,
민주평화당 = str_replace_all(민주평화당, "%", "") %>% as.numeric) %>%
select(시도명, 조사일, contains("당"), contains("무소속")) %>%
ungroup() %>%
as_tibble()
# 2. 시계열 추세 -----
## 2.1. 정적 시계열 추세 -----
sido_ts_df <- sido_now_df %>%
gather(정당, 지지율, -시도명, -조사일) %>%
mutate(정당 = factor(정당, levels=c("더불어민주당","자유한국당", "바른미래당", "민주평화당", "정의당", "무소속"))) %>%
filter(!str_detect(시도명, "광주")) %>%
mutate(지지율 = as.numeric(지지율))
sido_ts_df %>%
ggplot(aes(x=조사일, y=지지율, color=정당, group=정당)) +
geom_line() +
geom_point() +
facet_wrap(~시도명) +
scale_color_manual(values=c("blue", "red", "cyan", "green", "yellow", "gray"))
## 2.2. 동적 시계열 추세 -----
### 2.2.1. 공유 데이터
sido_ts_sd <- SharedData$new(sido_ts_df)
### 2.2.2. 제어
filter_checkbox("시도명", "광역시도명", sido_ts_sd, ~시도명, inline = TRUE)
# sido_ctrl <- filter_select("시도명", "광역시도명", sido_ts_sd, ~시도명)
### 2.2.3. 시각화
sido_ts_g <- ggplot(sido_ts_sd, aes(x=조사일, y=지지율, color=정당, group=정당)) +
geom_line() +
geom_point() +
scale_color_manual(values=c("blue", "red", "cyan", "green", "yellow", "gray"))
sido_ts_gg <- ggplotly(sido_ts_g)
### 2.2.4. 인터랙티브 시각화
bscols(widths = c(12),
sido_ts_gg)
## 2018-06-04
gg_sigun_df <- read_rds("data/gg_sigun_df.rds") %>%
rename(시군명 = sigun) %>%
filter(X1 != "?%")
gg_sigun_now_df <- gg_sigun_df %>%
group_by(시군명) %>%
arrange(시작일) %>%
filter(row_number() == n()) %>%
mutate(X1 = str_replace(X1 , "%", "") %>% as.numeric(),
X2 = str_replace(X2 , "%", "") %>% as.numeric(),
X3 = str_replace(X3 , "%", "") %>% as.numeric(),
X4 = str_replace(X4 , "%", "") %>% as.numeric(),
X5 = str_replace(X5 , "%", "") %>% as.numeric(),
X6 = str_replace(X6 , "%", "") %>% as.numeric(),
X7 = str_replace(X7 , "%", "") %>% as.numeric(),
X8 = str_replace(X8 , "%", "") %>% as.numeric(),
X9 = str_replace(X9 , "%", "") %>% as.numeric(),
X10= str_replace(X10, "%", "") %>% as.numeric()) %>%
rename("더불어민주당" = X1,
"자유한국당" = X2,
"바른미래당" = X3,
"민주평화당" = X4,
"정의당" = X5,
"민중당" = X6,
"대한애국당" = X7,
"원외1" = X8,
"원외2" = X9,
"원외3" = X10) %>%
ungroup()
## 1.1. 경기도 시군 현재1위 -----
gg_sigun_now_df$당선 <- names(gg_sigun_now_df[,4:13])[apply(gg_sigun_now_df[,4:13], 1, which.max)]
gg_sigun_now_df$지지율1위 <- apply(gg_sigun_now_df[,4:13], 1, max, na.rm=TRUE)
gg_sigun_now_df %>%
count(당선) %>%
rename(정당=당선) %>%
mutate(비율= scales::percent(n/sum(n))) %>%
rename(현재1위=n)
# A tibble: 3 x 3
정당 현재1위 비율
<chr> <int> <chr>
1 더불어민주당 21 91.3%
2 원외2 1 4.3%
3 자유한국당 1 4.3%
gg_sigun_now_df %>%
DT::datatable()
# 2. 시각화 -----
## 2.1. 경기도 시군코드 --------
sido_cd_df <- read_excel("data/jscode/jscode20171218/KIKmix.20171218.xlsx", sheet="KIKmix")
sigungu_cd_df <- sido_cd_df %>%
mutate(CTPRVN_CD = str_sub(행정동코드, 1,5)) %>%
group_by(CTPRVN_CD) %>%
summarise(시도명 = first(시도명),
시군구명 = first(시군구명)) %>%
mutate(시군구명 = ifelse(is.na(시군구명), 시도명, 시군구명))
gg_cd_v <- sigungu_cd_df %>%
filter(str_detect(시도명, "경기")) %>%
pull(CTPRVN_CD)
## 2.2. 지도 데이터 가져오기 -----
# sgg_shp <- st_read("data/shapefile_sgg/TL_SCCO_SIG.shp")
sgg_shp$SIG_KOR_NM <- iconv(sgg_shp$SIG_KOR_NM, from = "CP949", to = "UTF-8", sub = NA, mark = TRUE, toRaw = FALSE)
sgg_smpl_shp <- st_simplify(sgg_shp, dTolerance = 100)
gg_shp <- sgg_smpl_shp %>%
filter(SIG_CD %in% gg_cd_v)
## 2.3. 경기 시군 데이터 정리 --------
gg_shp <- gg_shp %>%
mutate(시군명 = case_when(str_detect(SIG_KOR_NM, "수원") ~ "수원시",
str_detect(SIG_KOR_NM, "성남") ~ "성남시",
str_detect(SIG_KOR_NM, "안양") ~ "안양시",
str_detect(SIG_KOR_NM, "안산") ~ "안산시",
str_detect(SIG_KOR_NM, "고양") ~ "고양시",
str_detect(SIG_KOR_NM, "용인") ~ "용인시",
TRUE ~ SIG_KOR_NM))
## 2.4. 지지율 데이터 병합 ----
gg_sigun_shp <- left_join(gg_shp, gg_sigun_now_df, by="시군명")
gg_sigun_shp <- gg_sigun_shp %>%
mutate(당선 = factor(당선, levels = c("더불어민주당", "자유한국당", "원외2")))
# 3. 시각화 ----
## 3.1. 정적 그래프 ----
leader_party_g <- ggplot(data=gg_sigun_shp, aes(fill=당선)) +
geom_sf() +
theme_minimal(base_family="NanumGothic") +
labs(title="제7회 지방선거 - 경기도 기초단체장") +
scale_fill_manual(values = c("blue", "red", "gray"), name = "1위 당선자 정당") +
theme(panel.grid.major = element_line(colour = 'transparent'),
panel.grid = element_blank(),
line = element_blank(),
axis.ticks = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
legend.position = "right")
leader_rate_g <- ggplot(data=gg_sigun_shp, aes(fill=지지율1위)) +
geom_sf() +
theme_minimal(base_family="NanumGothic") +
labs(title="제7회 지방선거 - 경기도 기초단체장") +
scale_fill_gradient(low = "wheat1", high = "red", name = "1위 당선자 지지율", labels = scales::comma) +
theme(panel.grid.major = element_line(colour = 'transparent'),
panel.grid = element_blank(),
line = element_blank(),
axis.ticks = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
legend.position = "right")
grid.arrange(leader_party_g, leader_rate_g, nrow=1)
## 3.2. 인터랙티브 그래프 ----
gg_sigun_shp %>%
mapview(., zcol="당선", col.regions = c("blue", "red", "gray", "gray"))
# 1. 데이터 -----
gg_sigun_df <- read_rds("data/gg_sigun_df.rds")
# 2. 시계열 추세 -----
## 2.1. 정적 시계열 추세 -----
gg_sigun_ts_df <- gg_sigun_df %>%
select(-조사기관) %>%
rename("더불어민주당" = X1,
"자유한국당" = X2,
"바른미래당" = X3,
"민주평화당" = X4,
"정의당" = X5,
"민중당" = X6,
"대한애국당" = X7,
"원외1" = X8,
"원외2" = X9,
"원외3" = X10) %>%
gather(정당, 지지율, -sigun, -시작일) %>%
filter(정당 %in% c("더불어민주당","자유한국당", "바른미래당", "민주평화당", "정의당")) %>%
mutate(지지율 = str_replace(지지율, "%", "") %>% as.numeric) %>%
mutate(정당 = factor(정당, levels=c("더불어민주당","자유한국당", "바른미래당", "민주평화당", "정의당")))
gg_sigun_ts_df %>%
ggplot(aes(x=시작일, y=지지율, color=정당, group=정당)) +
geom_line() +
geom_point() +
facet_wrap(~sigun) +
scale_color_manual(values=c("blue", "red", "cyan", "green", "yellow", "gray")) +
labs(x="")
## 2.2. 동적 시계열 추세 -----
### 2.2.1. 공유 데이터
sigun_ts_sd <- SharedData$new(gg_sigun_ts_df)
### 2.2.2. 제어
filter_checkbox("sigun", "경기 시군명", sigun_ts_sd, ~sigun, inline = TRUE)
### 2.2.3. 시각화
sigun_ts_g <- sigun_ts_sd %>%
ggplot(aes(x=시작일, y=지지율, color=정당, group=정당)) +
geom_line() +
geom_point() +
scale_color_manual(values=c("blue", "red", "cyan", "green", "yellow", "gray")) +
labs(x="")
sigun_ts_gg <- ggplotly(sigun_ts_g)
### 4.2.5. 인터랙티브 시각화
bscols(widths = c(12),
sigun_ts_gg)