서울시 자치구의 CCTV 현황
서울시 25개 자치구의 CCTV 현황에 대해 탐색하고자 합니다.
분석에 사용한 데이터는 다음과 같습니다.
- 서울시 CCTV 현황 데이터(2017년 기준)
- CCTV 데이터 출처 : 서울열린데이터광장의 서울시 자치구 년도별 CCTV 설치 현황 - 2019.06.26 데이터 참조
- 정리된 데이터 다운로드 : seoul_cctv_b2011_2018.csv
- CCTV 데이터 출처 : 서울열린데이터광장의 서울시 자치구 년도별 CCTV 설치 현황 - 2019.06.26 데이터 참조
- 서울시 인구 데이터(2017년 기준)
- 인구 데이터 출처 : 서울열린데이터광장의 서울시 주민등록인구 (구별) 통계
- 정리된 데이터 다운로드 : seoul_pop_1992_2018.csv
패키지 준비
library(tidyverse)
## Warning: 패키지 'readr'는 R 버전 4.1.1에서 작성되었습니다
library(readxl)
서울시 CCTV 데이터(csv 파일) 불러오기
서울시 각 자치구별 CCTV 설치현황이 들어 있는 데이터 파일을 불러옵니다.
cctv_seoul <- read.csv("data/seoul_cctv_b2011_2018.csv", stringsAsFactors = FALSE)
str(cctv_seoul)
## 'data.frame': 25 obs. of 10 variables:
## $ 기관명 : chr "강 남 구" "강 동 구" "강 북 구" "강 서 구" ...
## $ 소계 : int 5221 1879 1265 1617 3985 1581 3227 1634 1906 858 ...
## $ X2011년이전: int 1944 303 243 219 430 470 852 27 481 197 ...
## $ X2012년 : int 195 387 88 155 56 42 219 17 117 66 ...
## $ X2013년 : int 316 134 141 118 419 83 349 242 203 8 ...
## $ X2014년 : int 430 59 74 230 487 87 187 101 80 185 ...
## $ X2015년 : int 546 144 145 187 609 64 268 382 461 59 ...
## $ X2016년 : int 765 194 254 190 619 21 326 136 298 155 ...
## $ X2017년 : int 577 273 1 264 694 468 540 199 110 117 ...
## $ X2018년 : int 448 385 319 254 671 346 486 530 156 71 ...
데이터의 열 이름(변수명)은 영문으로 되어 있는 것이 더 편리하기 때문에 rename 함수를 이용하여 변수명을 변경합니다.
# 열(column)이름(변수명) 변경하기, new name = old name
cctv_seoul <- cctv_seoul %>%
rename("gu" = "기관명",
"total" = "소계",
"before2011" = "X2011년이전",
"y2012" = "X2012년",
"y2013" = "X2013년",
"y2014" = "X2014년",
"y2015" = "X2015년",
"y2016" = "X2016년",
"y2017" = "X2017년",
"y2018" = "X2018년")
str(cctv_seoul)
## 'data.frame': 25 obs. of 10 variables:
## $ gu : chr "강 남 구" "강 동 구" "강 북 구" "강 서 구" ...
## $ total : int 5221 1879 1265 1617 3985 1581 3227 1634 1906 858 ...
## $ before2011: int 1944 303 243 219 430 470 852 27 481 197 ...
## $ y2012 : int 195 387 88 155 56 42 219 17 117 66 ...
## $ y2013 : int 316 134 141 118 419 83 349 242 203 8 ...
## $ y2014 : int 430 59 74 230 487 87 187 101 80 185 ...
## $ y2015 : int 546 144 145 187 609 64 268 382 461 59 ...
## $ y2016 : int 765 194 254 190 619 21 326 136 298 155 ...
## $ y2017 : int 577 273 1 264 694 468 540 199 110 117 ...
## $ y2018 : int 448 385 319 254 671 346 486 530 156 71 ...
2017년을 기준으로 분석할 것이기 때문에 소계(total)에서 2018년 설치대수(y2018)를 빼어 새로운 변수를 만들고, total과 y2018 변수를 제거하고자 합니다.
# 2017년 기준 CCTV 설치누적대수 산출하기
cctv_seoul <- cctv_seoul %>%
mutate(total2017 = total - y2018) %>%
select(-c(total, y2018))
str(cctv_seoul)
## 'data.frame': 25 obs. of 9 variables:
## $ gu : chr "강 남 구" "강 동 구" "강 북 구" "강 서 구" ...
## $ before2011: int 1944 303 243 219 430 470 852 27 481 197 ...
## $ y2012 : int 195 387 88 155 56 42 219 17 117 66 ...
## $ y2013 : int 316 134 141 118 419 83 349 242 203 8 ...
## $ y2014 : int 430 59 74 230 487 87 187 101 80 185 ...
## $ y2015 : int 546 144 145 187 609 64 268 382 461 59 ...
## $ y2016 : int 765 194 254 190 619 21 326 136 298 155 ...
## $ y2017 : int 577 273 1 264 694 468 540 199 110 117 ...
## $ total2017 : int 4773 1494 946 1363 3314 1235 2741 1104 1750 787 ...
자치구 글자 사이에 공백이 있으므로 이를 제거하고자 한다.
cctv_seoul$gu <- str_replace_all(cctv_seoul$gu, " ", "")
cctv_seoul$gu
## [1] "강남구" "강동구" "강북구" "강서구" "관악구" "광진구"
## [7] "구로구" "금천구" "노원구" "도봉구" "동대문구" "동작구"
## [13] "마포구" "서대문구" "서초구" "성동구" "성북구" "송파구"
## [19] "양천구" "영등포구" "용산구" "은평구" "종로구" "중구"
## [25] "중랑구"
서울시 CCTV 데이터의 특성을 간단하게 파악합니다.
summary(cctv_seoul)
## gu before2011 y2012 y2013
## Length:25 Min. : 8.0 Min. : 7.0 Min. : 8.0
## Class :character 1st Qu.: 228.5 1st Qu.: 83.5 1st Qu.:106.5
## Mode :character Median : 481.0 Median :108.0 Median :185.0
## Mean : 580.5 Mean :123.8 Mean :194.2
## 3rd Qu.: 775.5 3rd Qu.:158.0 3rd Qu.:235.0
## Max. :1944.0 Max. :387.0 Max. :599.0
## NA's :2 NA's :2 NA's :2
## y2014 y2015 y2016 y2017
## Min. : 21.0 Min. : 59.0 Min. : 21.0 Min. : 1.0
## 1st Qu.: 87.0 1st Qu.:130.0 1st Qu.:155.0 1st Qu.:136.0
## Median : 134.0 Median :180.0 Median :254.0 Median :273.0
## Mean : 249.9 Mean :226.9 Mean :267.4 Mean :299.4
## 3rd Qu.: 241.0 3rd Qu.:268.0 3rd Qu.:326.0 3rd Qu.:372.0
## Max. :1326.0 Max. :609.0 Max. :765.0 Max. :933.0
##
## total2017
## Min. : 787
## 1st Qu.:1235
## Median :1740
## Mean :1870
## 3rd Qu.:2360
## Max. :4773
##
자치구별 CCTV 설치 현황 비교
CCTV 설치 대수가 가장 적은 자치구는?
cctv_seoul %>%
arrange(total2017) # 오름차순 정렬
## gu before2011 y2012 y2013 y2014 y2015 y2016 y2017 total2017
## 1 도봉구 197 66 8 185 59 155 117 787
## 2 강북구 243 88 141 74 145 254 1 946
## 3 중랑구 NA NA NA 770 102 121 66 1059
## 4 금천구 27 17 242 101 382 136 199 1104
## 5 송파구 600 99 88 21 166 100 116 1190
## 6 중구 25 165 114 80 245 270 317 1216
## 7 광진구 470 42 83 87 64 21 468 1235
## 8 강서구 219 155 118 230 187 190 264 1363
## 9 종로구 8 7 599 132 195 148 281 1370
## 10 강동구 303 387 134 59 144 194 273 1494
## 11 동작구 238 93 29 503 130 254 278 1525
## 12 영등포구 132 121 206 217 366 289 371 1702
## 13 마포구 585 108 69 70 177 359 372 1740
## 14 노원구 481 117 203 80 461 298 110 1750
## 15 동대문구 NA NA NA 1326 111 233 136 1806
## 16 서대문구 565 233 214 114 109 277 415 1927
## 17 양천구 772 161 185 169 172 349 137 1945
## 18 용산구 1279 152 201 107 102 89 60 1990
## 19 성북구 779 84 304 241 279 388 285 2360
## 20 성동구 665 109 118 101 258 201 933 2385
## 21 서초구 1172 91 228 134 215 352 247 2439
## 22 은평구 1365 83 99 343 180 296 229 2595
## 23 구로구 852 219 349 187 268 326 540 2741
## 24 관악구 430 56 419 487 609 619 694 3314
## 25 강남구 1944 195 316 430 546 765 577 4773
CCTV 설치 대수가 가장 작은 5개 구는 도봉구, 강북구, 중랑구, 금천구, 송파구입니다.
CCTV 설치 대수가 가장 많은 자치구는?
cctv_seoul %>%
arrange(desc(total2017)) # 내림차순 정렬
## gu before2011 y2012 y2013 y2014 y2015 y2016 y2017 total2017
## 1 강남구 1944 195 316 430 546 765 577 4773
## 2 관악구 430 56 419 487 609 619 694 3314
## 3 구로구 852 219 349 187 268 326 540 2741
## 4 은평구 1365 83 99 343 180 296 229 2595
## 5 서초구 1172 91 228 134 215 352 247 2439
## 6 성동구 665 109 118 101 258 201 933 2385
## 7 성북구 779 84 304 241 279 388 285 2360
## 8 용산구 1279 152 201 107 102 89 60 1990
## 9 양천구 772 161 185 169 172 349 137 1945
## 10 서대문구 565 233 214 114 109 277 415 1927
## 11 동대문구 NA NA NA 1326 111 233 136 1806
## 12 노원구 481 117 203 80 461 298 110 1750
## 13 마포구 585 108 69 70 177 359 372 1740
## 14 영등포구 132 121 206 217 366 289 371 1702
## 15 동작구 238 93 29 503 130 254 278 1525
## 16 강동구 303 387 134 59 144 194 273 1494
## 17 종로구 8 7 599 132 195 148 281 1370
## 18 강서구 219 155 118 230 187 190 264 1363
## 19 광진구 470 42 83 87 64 21 468 1235
## 20 중구 25 165 114 80 245 270 317 1216
## 21 송파구 600 99 88 21 166 100 116 1190
## 22 금천구 27 17 242 101 382 136 199 1104
## 23 중랑구 NA NA NA 770 102 121 66 1059
## 24 강북구 243 88 141 74 145 254 1 946
## 25 도봉구 197 66 8 185 59 155 117 787
# 서울시 CCTV 현황 그래프로 분석하기
cctv_seoul %>%
ggplot(aes(x = reorder(gu, total2017), y = total2017)) +
geom_bar(stat = "identity") +
coord_flip() +
xlab("자치구") +
ylab("CCTV")
CCTV 설치 대수가 가장 많은 5개 구는 강남구, 관악구, 구로구, 은평구, 서초구입니다.
최근 3년간 CCTV 증가율
최근 3년간 CCTV 증가율 변수를 추가하고자 합니다. 2015년~2017년을 합한 후 2014년도 이전으로 나누어 CCTV 증가율을 산출하겠습니다. 산출된 CCTV 증가율을 기준으로 정렬하여 CCTV 증가율이 가장 높은 자치구는 어디인지 살펴보겠습니다.
cctv_seoul <- cctv_seoul %>%
mutate_each(funs(replace(., which(is.na(.)), 0))) %>%
mutate(growth_rate = (y2015 + y2016 + y2017) /
(before2011 + y2012 + y2013 + y2014) * 100)
## Warning: `funs()` was deprecated in dplyr 0.8.0.
## Please use a list of either functions or lambdas:
##
## # Simple named list:
## list(mean = mean, median = median)
##
## # Auto named with `tibble::lst()`:
## tibble::lst(mean, median)
##
## # Using lambdas
## list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
## Warning: `mutate_each_()` was deprecated in dplyr 0.7.0.
## Please use `across()` instead.
cctv_seoul %>%
arrange(desc(growth_rate))
## gu before2011 y2012 y2013 y2014 y2015 y2016 y2017 total2017
## 1 중구 25 165 114 80 245 270 317 1216
## 2 금천구 27 17 242 101 382 136 199 1104
## 3 영등포구 132 121 206 217 366 289 371 1702
## 4 성동구 665 109 118 101 258 201 933 2385
## 5 관악구 430 56 419 487 609 619 694 3314
## 6 마포구 585 108 69 70 177 359 372 1740
## 7 노원구 481 117 203 80 461 298 110 1750
## 8 강서구 219 155 118 230 187 190 264 1363
## 9 종로구 8 7 599 132 195 148 281 1370
## 10 광진구 470 42 83 87 64 21 468 1235
## 11 동작구 238 93 29 503 130 254 278 1525
## 12 강북구 243 88 141 74 145 254 1 946
## 13 도봉구 197 66 8 185 59 155 117 787
## 14 서대문구 565 233 214 114 109 277 415 1927
## 15 구로구 852 219 349 187 268 326 540 2741
## 16 강동구 303 387 134 59 144 194 273 1494
## 17 성북구 779 84 304 241 279 388 285 2360
## 18 강남구 1944 195 316 430 546 765 577 4773
## 19 양천구 772 161 185 169 172 349 137 1945
## 20 서초구 1172 91 228 134 215 352 247 2439
## 21 송파구 600 99 88 21 166 100 116 1190
## 22 중랑구 0 0 0 770 102 121 66 1059
## 23 은평구 1365 83 99 343 180 296 229 2595
## 24 동대문구 0 0 0 1326 111 233 136 1806
## 25 용산구 1279 152 201 107 102 89 60 1990
## growth_rate
## 1 216.66667
## 2 185.27132
## 3 151.77515
## 4 140.18127
## 5 138.07471
## 6 109.13462
## 7 98.63791
## 8 88.78116
## 9 83.64611
## 10 81.08504
## 11 76.70915
## 12 73.26007
## 13 72.58772
## 14 71.13677
## 15 70.56627
## 16 69.19592
## 17 67.61364
## 18 65.44194
## 19 51.12665
## 20 50.09231
## 21 47.27723
## 22 37.53247
## 23 37.30159
## 24 36.19910
## 25 14.43358
분석결과, 최근 3년간 CCTV 증가율이 가장 높은 5개 구는 중구, 금천구, 영등포구, 성동구, 관악구입니다.
서울시 인구 데이터 불러오기
pop_seoul <- read.csv("data/seoul_pop_1992_2018.csv", stringsAsFactors = FALSE)
str(pop_seoul)
## 'data.frame': 693 obs. of 16 variables:
## $ 연도 : int 1992 1992 1992 1992 1992 1992 1992 1992 1992 1992 ...
## $ 자치구 : chr "합계" "종로구" "중구" "용산구" ...
## $ 세대 : int 3383169 75752 59667 96832 244888 149094 136876 163995 229923 174005 ...
## $ 인구 : int 10969862 227988 176836 287124 780526 470594 458391 527296 766799 571833 ...
## $ 남자 : int 5519096 114648 89537 144600 397121 238385 230937 266530 385385 284049 ...
## $ 여자 : int 5450766 113340 87299 142524 383405 232209 227454 260766 381414 287784 ...
## $ 한국인 : int 10935230 226240 174605 280671 778385 469843 458109 525943 765975 571171 ...
## $ 한국인남자: int 5500001 113677 88268 140424 395977 237979 230799 265830 385011 283705 ...
## $ 한국인여자: int 5435229 112563 86337 140247 382408 231864 227310 260113 380964 287466 ...
## $ 외국인 : int 34632 1748 2231 6453 2141 751 282 1353 824 662 ...
## $ 외국인남자: int 19095 971 1269 4176 1144 406 138 700 374 344 ...
## $ 외국인여자: int 15537 777 962 2277 997 345 144 653 450 318 ...
## $ 인구밀도 : chr "18121" "9496" "17701" "13135" ...
## $ 면적 : chr "605.36" "24.01" "9.99" "21.86" ...
## $ 세대당인구: num 3.24 3.01 2.96 2.97 3.19 3.16 3.35 3.22 3.34 3.29 ...
## $ 고령자 : int 434348 12096 8857 13957 28493 19142 15849 23020 29689 24345 ...
2017년도 기준으로 분석할 것이기 때문에 2017년도 데이터만 추출합니다. 또한 변수도 자치구, 인구, 한국인, 외국인, 고령자만 추출합니다.
pop_seoul <- pop_seoul %>%
filter(연도 == 2017) %>%
select(자치구, 인구, 한국인, 외국인, 고령자)
데이터의 열 이름(변수명)을 변경합니다.
# 변수명 변경하기
pop_seoul <- pop_seoul %>%
rename("gu" = "자치구",
"pop" = "인구",
"korean" = "한국인",
"foreign" = "외국인",
"aged" = "고령자")
pop_seoul
## gu pop korean foreign aged
## 1 합계 10124579 9857426 267153 1365126
## 2 종로구 164257 154770 9487 26182
## 3 중구 134593 125709 8884 21384
## 4 용산구 244444 229161 15283 36882
## 5 성동구 312711 304808 7903 41273
## 6 광진구 372298 357703 14595 43953
## 7 동대문구 366011 350647 15364 55718
## 8 중랑구 412780 408226 4554 59262
## 9 성북구 455407 444055 11352 66251
## 10 강북구 328002 324479 3523 56530
## 11 도봉구 346234 344166 2068 53488
## 12 노원구 558075 554403 3672 74243
## 13 은평구 491202 486794 4408 74559
## 14 서대문구 325028 312800 12228 49266
## 15 마포구 385783 374915 10868 49615
## 16 양천구 475018 471154 3864 55234
## 17 강서구 608255 601691 6564 76032
## 18 구로구 441559 410742 30817 58794
## 19 금천구 253491 235154 18337 34170
## 20 영등포구 402024 368550 33474 53981
## 21 동작구 408493 396217 12276 57255
## 22 관악구 520929 503297 17632 70046
## 23 서초구 445401 441102 4299 53205
## 24 강남구 561052 556164 4888 65060
## 25 송파구 671173 664496 6677 76582
## 26 강동구 440359 436223 4136 56161
합계 데이터는 불필요하기 때문에 합계가 입력되어 있는 첫번째 행을 삭제합니다.
# 첫번째 행(합계) 삭제하기
pop_seoul <- pop_seoul[-1,]
외국인 비율(foreign_percent)과 고령자 비율(aged_percent)을 계산하여 새로운 변수로 만듭니다.
# 외국인 비율과 고령자 비율 변수 생성
pop_seoul %>%
mutate(foreign_percent = foreign / pop * 100,
aged_percent = aged /pop * 100) -> pop_seoul
pop_seoul
## gu pop korean foreign aged foreign_percent aged_percent
## 2 종로구 164257 154770 9487 26182 5.7757051 15.93966
## 3 중구 134593 125709 8884 21384 6.6006404 15.88790
## 4 용산구 244444 229161 15283 36882 6.2521477 15.08812
## 5 성동구 312711 304808 7903 41273 2.5272536 13.19845
## 6 광진구 372298 357703 14595 43953 3.9202467 11.80587
## 7 동대문구 366011 350647 15364 55718 4.1976880 15.22304
## 8 중랑구 412780 408226 4554 59262 1.1032511 14.35680
## 9 성북구 455407 444055 11352 66251 2.4927153 14.54765
## 10 강북구 328002 324479 3523 56530 1.0740788 17.23465
## 11 도봉구 346234 344166 2068 53488 0.5972839 15.44851
## 12 노원구 558075 554403 3672 74243 0.6579761 13.30341
## 13 은평구 491202 486794 4408 74559 0.8973905 15.17889
## 14 서대문구 325028 312800 12228 49266 3.7621374 15.15746
## 15 마포구 385783 374915 10868 49615 2.8171278 12.86086
## 16 양천구 475018 471154 3864 55234 0.8134429 11.62777
## 17 강서구 608255 601691 6564 76032 1.0791527 12.50002
## 18 구로구 441559 410742 30817 58794 6.9791353 13.31509
## 19 금천구 253491 235154 18337 34170 7.2337874 13.47977
## 20 영등포구 402024 368550 33474 53981 8.3263686 13.42731
## 21 동작구 408493 396217 12276 57255 3.0051923 14.01615
## 22 관악구 520929 503297 17632 70046 3.3847223 13.44636
## 23 서초구 445401 441102 4299 53205 0.9651977 11.94542
## 24 강남구 561052 556164 4888 65060 0.8712205 11.59607
## 25 송파구 671173 664496 6677 76582 0.9948255 11.41017
## 26 강동구 440359 436223 4136 56161 0.9392337 12.75346
서울시 자치구별 인구현황 비교
인구가 가장 많은 자치구는?
# 인구수 기준으로 정렬
pop_seoul %>%
arrange(desc(pop))
## gu pop korean foreign aged foreign_percent aged_percent
## 1 송파구 671173 664496 6677 76582 0.9948255 11.41017
## 2 강서구 608255 601691 6564 76032 1.0791527 12.50002
## 3 강남구 561052 556164 4888 65060 0.8712205 11.59607
## 4 노원구 558075 554403 3672 74243 0.6579761 13.30341
## 5 관악구 520929 503297 17632 70046 3.3847223 13.44636
## 6 은평구 491202 486794 4408 74559 0.8973905 15.17889
## 7 양천구 475018 471154 3864 55234 0.8134429 11.62777
## 8 성북구 455407 444055 11352 66251 2.4927153 14.54765
## 9 서초구 445401 441102 4299 53205 0.9651977 11.94542
## 10 구로구 441559 410742 30817 58794 6.9791353 13.31509
## 11 강동구 440359 436223 4136 56161 0.9392337 12.75346
## 12 중랑구 412780 408226 4554 59262 1.1032511 14.35680
## 13 동작구 408493 396217 12276 57255 3.0051923 14.01615
## 14 영등포구 402024 368550 33474 53981 8.3263686 13.42731
## 15 마포구 385783 374915 10868 49615 2.8171278 12.86086
## 16 광진구 372298 357703 14595 43953 3.9202467 11.80587
## 17 동대문구 366011 350647 15364 55718 4.1976880 15.22304
## 18 도봉구 346234 344166 2068 53488 0.5972839 15.44851
## 19 강북구 328002 324479 3523 56530 1.0740788 17.23465
## 20 서대문구 325028 312800 12228 49266 3.7621374 15.15746
## 21 성동구 312711 304808 7903 41273 2.5272536 13.19845
## 22 금천구 253491 235154 18337 34170 7.2337874 13.47977
## 23 용산구 244444 229161 15283 36882 6.2521477 15.08812
## 24 종로구 164257 154770 9487 26182 5.7757051 15.93966
## 25 중구 134593 125709 8884 21384 6.6006404 15.88790
인구 수 기준으로 정렬한 결과 송파구, 강서구, 강남구, 노원구, 관악구 순으로 인구가 많은 것으로 나타납니다.
외국인이 많거나 외국인 비율이 높은 구는 어디인가?
# 외국인 기준으로 정렬
pop_seoul %>%
arrange(desc(foreign))
## gu pop korean foreign aged foreign_percent aged_percent
## 1 영등포구 402024 368550 33474 53981 8.3263686 13.42731
## 2 구로구 441559 410742 30817 58794 6.9791353 13.31509
## 3 금천구 253491 235154 18337 34170 7.2337874 13.47977
## 4 관악구 520929 503297 17632 70046 3.3847223 13.44636
## 5 동대문구 366011 350647 15364 55718 4.1976880 15.22304
## 6 용산구 244444 229161 15283 36882 6.2521477 15.08812
## 7 광진구 372298 357703 14595 43953 3.9202467 11.80587
## 8 동작구 408493 396217 12276 57255 3.0051923 14.01615
## 9 서대문구 325028 312800 12228 49266 3.7621374 15.15746
## 10 성북구 455407 444055 11352 66251 2.4927153 14.54765
## 11 마포구 385783 374915 10868 49615 2.8171278 12.86086
## 12 종로구 164257 154770 9487 26182 5.7757051 15.93966
## 13 중구 134593 125709 8884 21384 6.6006404 15.88790
## 14 성동구 312711 304808 7903 41273 2.5272536 13.19845
## 15 송파구 671173 664496 6677 76582 0.9948255 11.41017
## 16 강서구 608255 601691 6564 76032 1.0791527 12.50002
## 17 강남구 561052 556164 4888 65060 0.8712205 11.59607
## 18 중랑구 412780 408226 4554 59262 1.1032511 14.35680
## 19 은평구 491202 486794 4408 74559 0.8973905 15.17889
## 20 서초구 445401 441102 4299 53205 0.9651977 11.94542
## 21 강동구 440359 436223 4136 56161 0.9392337 12.75346
## 22 양천구 475018 471154 3864 55234 0.8134429 11.62777
## 23 노원구 558075 554403 3672 74243 0.6579761 13.30341
## 24 강북구 328002 324479 3523 56530 1.0740788 17.23465
## 25 도봉구 346234 344166 2068 53488 0.5972839 15.44851
# 외국인 비율 기준으로 정렬
pop_seoul %>%
arrange(desc(foreign_percent))
## gu pop korean foreign aged foreign_percent aged_percent
## 1 영등포구 402024 368550 33474 53981 8.3263686 13.42731
## 2 금천구 253491 235154 18337 34170 7.2337874 13.47977
## 3 구로구 441559 410742 30817 58794 6.9791353 13.31509
## 4 중구 134593 125709 8884 21384 6.6006404 15.88790
## 5 용산구 244444 229161 15283 36882 6.2521477 15.08812
## 6 종로구 164257 154770 9487 26182 5.7757051 15.93966
## 7 동대문구 366011 350647 15364 55718 4.1976880 15.22304
## 8 광진구 372298 357703 14595 43953 3.9202467 11.80587
## 9 서대문구 325028 312800 12228 49266 3.7621374 15.15746
## 10 관악구 520929 503297 17632 70046 3.3847223 13.44636
## 11 동작구 408493 396217 12276 57255 3.0051923 14.01615
## 12 마포구 385783 374915 10868 49615 2.8171278 12.86086
## 13 성동구 312711 304808 7903 41273 2.5272536 13.19845
## 14 성북구 455407 444055 11352 66251 2.4927153 14.54765
## 15 중랑구 412780 408226 4554 59262 1.1032511 14.35680
## 16 강서구 608255 601691 6564 76032 1.0791527 12.50002
## 17 강북구 328002 324479 3523 56530 1.0740788 17.23465
## 18 송파구 671173 664496 6677 76582 0.9948255 11.41017
## 19 서초구 445401 441102 4299 53205 0.9651977 11.94542
## 20 강동구 440359 436223 4136 56161 0.9392337 12.75346
## 21 은평구 491202 486794 4408 74559 0.8973905 15.17889
## 22 강남구 561052 556164 4888 65060 0.8712205 11.59607
## 23 양천구 475018 471154 3864 55234 0.8134429 11.62777
## 24 노원구 558075 554403 3672 74243 0.6579761 13.30341
## 25 도봉구 346234 344166 2068 53488 0.5972839 15.44851
외국인이 많은 구는 영등포구, 구로구, 금천구 등이며 외국인 비율이 높은 구는 영등포구, 금천구, 구로구 순입니다.
고령자가 많거나 고령자 비율이 높은 구는 어디인가?
# 고령자 기준으로 정렬
pop_seoul %>%
arrange(desc(aged))
## gu pop korean foreign aged foreign_percent aged_percent
## 1 송파구 671173 664496 6677 76582 0.9948255 11.41017
## 2 강서구 608255 601691 6564 76032 1.0791527 12.50002
## 3 은평구 491202 486794 4408 74559 0.8973905 15.17889
## 4 노원구 558075 554403 3672 74243 0.6579761 13.30341
## 5 관악구 520929 503297 17632 70046 3.3847223 13.44636
## 6 성북구 455407 444055 11352 66251 2.4927153 14.54765
## 7 강남구 561052 556164 4888 65060 0.8712205 11.59607
## 8 중랑구 412780 408226 4554 59262 1.1032511 14.35680
## 9 구로구 441559 410742 30817 58794 6.9791353 13.31509
## 10 동작구 408493 396217 12276 57255 3.0051923 14.01615
## 11 강북구 328002 324479 3523 56530 1.0740788 17.23465
## 12 강동구 440359 436223 4136 56161 0.9392337 12.75346
## 13 동대문구 366011 350647 15364 55718 4.1976880 15.22304
## 14 양천구 475018 471154 3864 55234 0.8134429 11.62777
## 15 영등포구 402024 368550 33474 53981 8.3263686 13.42731
## 16 도봉구 346234 344166 2068 53488 0.5972839 15.44851
## 17 서초구 445401 441102 4299 53205 0.9651977 11.94542
## 18 마포구 385783 374915 10868 49615 2.8171278 12.86086
## 19 서대문구 325028 312800 12228 49266 3.7621374 15.15746
## 20 광진구 372298 357703 14595 43953 3.9202467 11.80587
## 21 성동구 312711 304808 7903 41273 2.5272536 13.19845
## 22 용산구 244444 229161 15283 36882 6.2521477 15.08812
## 23 금천구 253491 235154 18337 34170 7.2337874 13.47977
## 24 종로구 164257 154770 9487 26182 5.7757051 15.93966
## 25 중구 134593 125709 8884 21384 6.6006404 15.88790
# 고령자 비율 기준으로 정렬
pop_seoul %>%
arrange(desc(aged_percent))
## gu pop korean foreign aged foreign_percent aged_percent
## 1 강북구 328002 324479 3523 56530 1.0740788 17.23465
## 2 종로구 164257 154770 9487 26182 5.7757051 15.93966
## 3 중구 134593 125709 8884 21384 6.6006404 15.88790
## 4 도봉구 346234 344166 2068 53488 0.5972839 15.44851
## 5 동대문구 366011 350647 15364 55718 4.1976880 15.22304
## 6 은평구 491202 486794 4408 74559 0.8973905 15.17889
## 7 서대문구 325028 312800 12228 49266 3.7621374 15.15746
## 8 용산구 244444 229161 15283 36882 6.2521477 15.08812
## 9 성북구 455407 444055 11352 66251 2.4927153 14.54765
## 10 중랑구 412780 408226 4554 59262 1.1032511 14.35680
## 11 동작구 408493 396217 12276 57255 3.0051923 14.01615
## 12 금천구 253491 235154 18337 34170 7.2337874 13.47977
## 13 관악구 520929 503297 17632 70046 3.3847223 13.44636
## 14 영등포구 402024 368550 33474 53981 8.3263686 13.42731
## 15 구로구 441559 410742 30817 58794 6.9791353 13.31509
## 16 노원구 558075 554403 3672 74243 0.6579761 13.30341
## 17 성동구 312711 304808 7903 41273 2.5272536 13.19845
## 18 마포구 385783 374915 10868 49615 2.8171278 12.86086
## 19 강동구 440359 436223 4136 56161 0.9392337 12.75346
## 20 강서구 608255 601691 6564 76032 1.0791527 12.50002
## 21 서초구 445401 441102 4299 53205 0.9651977 11.94542
## 22 광진구 372298 357703 14595 43953 3.9202467 11.80587
## 23 양천구 475018 471154 3864 55234 0.8134429 11.62777
## 24 강남구 561052 556164 4888 65060 0.8712205 11.59607
## 25 송파구 671173 664496 6677 76582 0.9948255 11.41017
고령자가 많은 구는 송파구, 강서구, 은평구 순이며 고령자 비율이 높은 구는 강북구, 종로구, 중구 순입니다.
CCTV 데이터와 인구 데이터 합치기
# 두 데이터 공통 변수인 구별(gu) 변수를 기준으로 병합(merge)
cctv_pop_seoul <- cctv_seoul %>% inner_join(pop_seoul, by = "gu")
str(cctv_pop_seoul)
## 'data.frame': 25 obs. of 16 variables:
## $ gu : chr "강남구" "강동구" "강북구" "강서구" ...
## $ before2011 : num 1944 303 243 219 430 ...
## $ y2012 : num 195 387 88 155 56 42 219 17 117 66 ...
## $ y2013 : num 316 134 141 118 419 83 349 242 203 8 ...
## $ y2014 : num 430 59 74 230 487 87 187 101 80 185 ...
## $ y2015 : num 546 144 145 187 609 64 268 382 461 59 ...
## $ y2016 : num 765 194 254 190 619 21 326 136 298 155 ...
## $ y2017 : num 577 273 1 264 694 468 540 199 110 117 ...
## $ total2017 : num 4773 1494 946 1363 3314 ...
## $ growth_rate : num 65.4 69.2 73.3 88.8 138.1 ...
## $ pop : int 561052 440359 328002 608255 520929 372298 441559 253491 558075 346234 ...
## $ korean : int 556164 436223 324479 601691 503297 357703 410742 235154 554403 344166 ...
## $ foreign : int 4888 4136 3523 6564 17632 14595 30817 18337 3672 2068 ...
## $ aged : int 65060 56161 56530 76032 70046 43953 58794 34170 74243 53488 ...
## $ foreign_percent: num 0.871 0.939 1.074 1.079 3.385 ...
## $ aged_percent : num 11.6 12.8 17.2 12.5 13.4 ...
필요없는 4개 변수(before2011, y2012 ~ y2017)를 제거합니다.
# 필요없는 열(변수) 제거하기
cctv_pop_seoul <- cctv_pop_seoul %>%
select(-c(before2011, y2012, y2013, y2014, y2015, y2016, y2017))
CCTV 대수를 인구로 나눈 CCTV 비율 변수(cctv_percent)를 추가로 만듭니다.
# CCTV 비율 변수 만들기
cctv_pop_seoul <- cctv_pop_seoul %>%
mutate(cctv_percent = total2017 / pop * 100)
새로 만든 CCTV 비율을 기준으로 정렬하여 그래프를 만들면 다음과 같습니다. CCTV 비율 기준으로 보면 중구, 강남구, 종로구, 용산구, 성동구가 높게 나옵니다.
cctv_pop_seoul %>%
ggplot(aes(x = reorder(gu, cctv_percent), y = cctv_percent)) +
geom_bar(stat = "identity") +
coord_flip() +
xlab("자치구") +
ylab("CCTV %")
서울시 인구와 CCTV 설치대수 관계 분석
인구와 CCTV 개수의 관계
# 인구와 CCTV 설치대수의 상관관계 분석
cor.test(cctv_pop_seoul$pop, cctv_pop_seoul$total2017)
##
## Pearson's product-moment correlation
##
## data: cctv_pop_seoul$pop and cctv_pop_seoul$total2017
## t = 1.8084, df = 23, p-value = 0.08365
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.04916648 0.65643612
## sample estimates:
## cor
## 0.3528187
p-값이 0.05보다 크므로 95% 신뢰수준에서 인구와 CCTV 개수의 상관관계는 없다고 판단할 수 있습니다. 상관계수는 0.35로 상관관계가 있다고 하더라도 낮은 수준입니다.
산점도를 보면 오른쪽 하단의 3개 점(노원구, 강서구, 송파구)으로 인해 상관관계가 낮게 나오는 것으로 보입니다. 이 3개 구가 인구 수에 비해 CCTV 설치대수가 상대적으로 적다고 볼 수 있습니다.
# 인구와 CCTV 설치대수의 산점도
cctv_pop_seoul %>%
ggplot(aes(pop, total2017)) +
geom_point()
고령자 비율과 CCTV 개수의 상관관계
cor.test(cctv_pop_seoul$aged_percent, cctv_pop_seoul$total2017)
##
## Pearson's product-moment correlation
##
## data: cctv_pop_seoul$aged_percent and cctv_pop_seoul$total2017
## t = -1.683, df = 23, p-value = 0.1059
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.64223796 0.07362443
## sample estimates:
## cor
## -0.3311397
p-값이 0.05보다 크므로 95% 신뢰수준에서 고령자 비율과 CCTV 개수의 상관관계는 없다고 판단할 수 있습니다.
외국인 비율과 CCTV 개수의 상관관계
cor.test(cctv_pop_seoul$foreign_percent, cctv_pop_seoul$total2017)
##
## Pearson's product-moment correlation
##
## data: cctv_pop_seoul$foreign_percent and cctv_pop_seoul$total2017
## t = -0.40161, df = 23, p-value = 0.6917
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.4633042 0.3223085
## sample estimates:
## cor
## -0.08345013
p-값이 0.05보다 크므로 95% 신뢰수준에서 외국인 비율과 CCTV 개수의 상관관계는 없다고 판단할 수 있습니다.
인구와 CCTV 개수의 관계 - 산점도와 회귀선
cctv_pop_seoul %>%
ggplot(aes(pop, total2017)) +
geom_point(color = "deepskyblue", size = 3) +
geom_text(aes(label = gu, vjust = -1, hjust = 0)) +
geom_smooth(method = lm, color = "deeppink") +
labs(x = "인구수", y = "CCTV")
## `geom_smooth()` using formula 'y ~ x'
자치구의 인구와 CCTV 개수의 일반적인 경향을 추정하기 위해 회귀선(핑크색 직선)을 그렸습니다. 회귀선 보다 위에 있는 자치구는 상대적으로 CCTV가 많이 설치된 자치구이고, 반대로 아래에 있는 자치구는 상대적으로 CCTV가 적에 설치된 자치구입니다. 강남구, 관악구, 구로구 등은 일반적인 경향보다 더 많이 설치된 자치구입니다. 강북구, 도봉구, 송파구, 강서구, 중랑구 등은 일반적인 경향보다 더 적게 설치된 자치구라 할 수 있습니다.
만일 노원구, 강서구, 송파구가 더 많은 CCTV를 설치한다면 회귀선과 상관관계는 많이 달라질 것으로 보입니다.
인구와 CCTV 비율의 관계 - 산점도와 회귀선
cctv_pop_seoul %>%
ggplot(aes(pop, cctv_percent)) +
geom_point(color = "deepskyblue", size = 3) +
geom_text(aes(label = gu, vjust = -1, hjust = 0)) +
geom_smooth(method = lm, color = "deeppink") +
labs(x = "인구수", y = "CCTV 비율")
## `geom_smooth()` using formula 'y ~ x'
참고로 자치구 인구와 CCTV 비율의 산점도와 회귀선을 그려 살펴본 결과 강남구, 관악구 등이 일반적인 경향보다 더 높은 것으로 나타납니다.
참고 : 민형기(2017)의 ’파이썬으로 데이터 주무르기’를 참고하여 R 언어로 분석