xwMOOC 데이터 제품
등록된 자동차 현황 - 성남시
1. 디젤차? 1
자동차 배기가스 통제를 강화하면 공기질이 좋아질 것인가? 전세계 대도시의 공기품질 향상을 위해서 다양한 실험을 진행중에 있고, 베이징도 자동차 배기가스 통제를 비롯한 도심 공기청정기술을 도입하는 등 다양한 시도를 취하고 있다.
공기품질을 높일 수 있는 여러방안이 있지만 가장 먼저 자동차 등록대수 현상파악부터 시작을 해 보자.
2. 자동차 등록현황 데이터
국토교통 통계누리 자동차등록현황보고 (Total Registered Moter Vehicles) 웹사이트를 통해 자동차 등록현황 데이터를 다운로드 받아볼 수 있다.
웹사이트에서 다운로드 받은 데이터가 깔끔한 형태가 아니라서, 데이터를 깔끔하게 정제작업을 수행한다.
library(tidyverse)
library(readxl)
library(xts)
library(extrafont)
loadfonts()
library(ggthemes)
library(DT)
library(treemap)
library(highcharter)
Error in library(highcharter): there is no package called 'highcharter'
library(d3treeR)
Error in library(d3treeR): there is no package called 'd3treeR'
# 1. 데이터 가져오기 -----
read_excel("data/자동차대수/2018년_01월_자동차_등록자료_통계.xlsx", sheet="02.통계표_시군구", skip=3)
auto_dat <-
# 2. 데이터 정제 -----
auto_dat %>%
auto_dat <- select("X__1", "X__2", "관용", "자가용", "영업용", "관용__1",
"자가용__1", "영업용__1", "관용__2", "자가용__2", "영업용__2",
"관용__3", "자가용__3", "영업용__3") %>%
rename(시도=X__1, 시군구=X__2) %>%
mutate(시도 = na.locf(시도)) %>%
filter(시군구 != "계") %>%
rename(승용_관용 = "관용",
"자가용",
승용_자가용 = "영업용",
승용_영업용 = "관용__1",
승합_관용 = "자가용__1",
승합_자가용 = "영업용__1",
승합_영업용 = "관용__2",
화물_관용 = "자가용__2",
화물_자가용 = "영업용__2",
화물_영업용 = "관용__3",
특수_관용 = "자가용__3",
특수_자가용 = "영업용__3") 특수_영업용 =
Error: Can't subset columns that don't exist.
x Column `X__1` doesn't exist.
auto_dat %>% select(시도, 시군구, contains("승용")) %>%
승용_df <- gather(용도, 대수, -시도, -시군구)
Error: Can't subset columns that don't exist.
x Column `시도` doesn't exist.
auto_dat %>% select(시도, 시군구, contains("화물")) %>%
화물_df <- gather(용도, 대수, -시도, -시군구)
Error: Can't subset columns that don't exist.
x Column `시도` doesn't exist.
auto_dat %>% select(시도, 시군구, contains("특수")) %>%
특수_df <- gather(용도, 대수, -시도, -시군구)
Error: Can't subset columns that don't exist.
x Column `시도` doesn't exist.
bind_rows(승용_df, 화물_df, 특수_df) auto_df <-
Error in list2(...): object '승용_df' not found
3. 시군구별 자동차 등록현황 통계
정제가 완료된 데이터를 차량유형별, 차량용도별로 표로 만들어 살펴보자.
3.1. 차량유형별
승용, 특수, 화물 차량 유형별로 살펴보자.
# 2. 데이터 정제하기 -----
auto_df %>%
auto_df <- separate(용도, into=c("차량", "용도")) %>%
separate(시군구, into=c("시군", "시군구"), sep=" ", fill="right") %>%
mutate(시군구 = ifelse(is.na(시군구), 시군, 시군구))
Error in separate(., 용도, into = c("차량", "용도")): object 'auto_df' not found
## 2.1. 시도별 차량유형별 차량 등록대수표
%>% group_by(차량, 시도) %>%
auto_df summarize(대수 = sum(대수)) %>%
arrange(desc(대수)) %>%
spread(차량, 대수) %>%
datatable(options = list(pageLength = 10),
autoHideNavigation = getOption("DT.autoHideNavigation", NULL)) %>%
formatCurrency(c("승용", "특수", "화물"), currency="", interval=3, digits=0)
Error in group_by(., 차량, 시도): object 'auto_df' not found
3.2. 차량용도별
관용, 영업용, 자가용 차량용도별로 살펴보자.
%>% group_by(용도, 시도) %>%
auto_df summarize(대수 = sum(대수)) %>%
arrange(desc(대수)) %>%
spread(용도, 대수) %>%
datatable(options = list(pageLength = 10),
autoHideNavigation = getOption("DT.autoHideNavigation", NULL)) %>%
formatCurrency(c("관용", "영업용", "자가용"), currency="", interval=3, digits=0)
Error in group_by(., 용도, 시도): object 'auto_df' not found
4. 자동차 등록현황 시각화
4.1. 시도별 자동차 등록대수
시도별 자동차 등록대수를 정적 그래프를 통해 시각화해보자.
# 3. 시각화 -----
## 3.1. 시도별 차량 등록대수
%>% group_by(시도) %>%
auto_df summarize(대수 = sum(대수)) %>%
arrange(desc(대수)) %>%
ggplot(aes(x=fct_reorder(시도, 대수), y=대수)) +
geom_col() +
coord_flip() +
labs(y="등록대수", x="") +
scale_y_continuous(labels = scales::comma) +
theme_bw(base_family="NanumGothic")
Error in group_by(., 시도): object 'auto_df' not found
4.2. 시군구별 자동차 등록현황
시도별, 시군구별 자동차 등력현황을 treemap
을 통해 시각화해 보자.
## 3.2. treemap: 시도, 시군, 시군구, 차량
auto_df %>% group_by(시도, 시군, 시군구, 차량) %>%
auto_treemap_df <- summarize(대수 = sum(대수))
Error in group_by(., 시도, 시군, 시군구, 차량): object 'auto_df' not found
treemap(auto_treemap_df,
auto_treemap <-index = c("시도", "시군", "시군구", "차량"),
vSize = "대수",
vColor = "대수",
title = "차량등록대수",
fontsize.labels=c(12, 8),
draw = FALSE,
type = "value",
format.legend = list(scientific = FALSE, big.mark = ","),
title.legend="")
Error in treemap(auto_treemap_df, index = c("시도", "시군", "시군구", : object 'auto_treemap_df' not found
d3tree2(auto_treemap, rootname = "대한민국")
Error in d3tree2(auto_treemap, rootname = "대한민국"): could not find function "d3tree2"