[코딩을 배우려는 당신에게] #4. 지리적 정보를 데이터 시각화(Data Visualization)하기 -2편 – LG 공식 블로그
본문 바로가기

[코딩을 배우려는 당신에게] #4. 지리적 정보를 데이터 시각화(Data Visualization)하기 -2편

작성일2019-07-02

지난 시간에 지리적 정보를 데이터로 시각화하는 방법을 배웠지. 오늘도 이렇게 데이터에 가치를 부여하는 새로운 방법을 알아보자. 최근에 회사에서 CCTV 프로모션에 관한 프로젝트를 맡았다고 들었어. CCTV 프로모션 타깃 지역을 선정하는 데 참고가 될 만한 자료를 코딩으로 한번 만들어 보는 게 어떨까?

‘CCTV 프로모션 타깃 지역을 선정할 (ASAP)’

CCTV 프로모션 타깃 지역을 어떻게 제안할까?

CCTV 프로모션 타깃 지역을 어떻게 제안할까?

대한민국 시도별 경찰관 1인이 담당하는 국민 수는 ? 데이터 수집

지난번 과제와 마찬가지로 데이터 수집부터 시작해보자. 먼저 지역별로 경찰관 1인이 담당하는 국민의 를 알아보려 해. 시도별 데이터는 행정안전부와 한국정보화진흥원에서 운영하는 국가 데이터 포털인 공공데이터포털(www.data.go.kr)을 이용해 수집할 수 있어.

데이터셋에서 경찰관을 검색하면 아래와 같이 시도별 경찰관 1인당 담당 인구수를 쉽게 찾을 수 있어. 이제 데이터를 다운받고 코딩으로 시각화하여 CCTV 프로모션을 진행할 타깃 지역을 찾아볼게.

공공데이터포털에서 경찰관 1인당 담당 인구수를 검색해보자.

공공데이터포털에서 경찰관 1인당 담당 인구수를 검색해보자.

우선 데이터 파일인 CSV파일을 다운받고 R프로그램에서 불러오도록 하자.

대한민국 행정지도를 찾아라! 라이브러리 다운로드

이제 대한민국 지도 위에 방금 찾은 전국 지역별 경찰관 1인당 담당 인구수 현황을 시각화해볼까? 작업 디렉토리를 설정하고 R프로그램을 실행해보자. 그리고 지난번에 설치한 library를 아래처럼 입력해서 불러오면 돼.

library(readxl)

library(sp)

library(RColorBrewer)

다음으로 대한민국 행정구역별 지도 library를 불러오자.

gadm <- readRDS(“gadm36_KOR_1_sp.rds”)

plot(gadm)

대한민국 행정지도가 뜬다.

대한민국 행정지도가 보이지?

Plot 함수를 통해 출력하면 이렇게 대한민국 행정지도를 확인할 수 있어.

자, 그럼 본격적으로 우리가 필요한 전국 지역별 경찰관 1인당 담당 인구수를 분석하고 가시화해볼게. 먼저 아래 명령어를 통해 데이터 파일을 R프로그램에서 불러오는 작업을 하자.

safety_korea_data <- read.csv(“경찰청_전국지역별_경찰관_1인당_담당_인구수_2018.csv”, header=T)

print(safety_korea_data)

safety_korea_data <- safety_korea_data[-c(9,18,19),]

levels(safety_korea_data$지방청) <- c(levels(safety_korea_data$지방청), “세종특별자치시”)

safety_korea_data <- rbind(safety_korea_data, list(“세종특별자치시”,”326”,”325,777”,998))

print(safety_korea_data)

명령어 알고가기

safety_korea_data <- safety_korea_data[-c(삭제할 삭제할 ),]

여기서 -c(9,18,19)는 9번째, 18번째, 19번째 행을 삭제해서 불필요한 데이터를 전처리 하는 과정이야. 반대로 +c(, )은 행을 삽입(Insert)하라는 명령어로 두 명령어 모두 데이터 전처리 과정에서 많이 활용하니 알아두면 작업이 더 편해질 거야.

데이터 전처리 전 표다.

데이터 전처리 전

데이터 전처리 후 표다.

데이터 전처리 후

위와 같이 전처리가 완료되었지? 그러면 이제 GADM에서 정리된 행정지도별 코드를 입력해 정렬한 후, header를 쉽게 수정하고 데이터를 시각화하는 작업을 해보자. 아래 명령어를 복사해서 한 줄씩 붙여넣어 봐.

Code <- c(16, 1, 4, 11, 7, 5, 17, 8, 6, 2, 3, 13, 14, 9, 10, 12, 15)

safety_korea_data <- cbind(safety_korea_data, Code)

print(safety_korea_data)

names(safety_korea_data) = c(“지방청“, “정원“, “인구“, “인당담당경찰관수“, “Code”)

 

uplus_cctv_needs = safety_korea_data[order(safety_korea_data$Code),]

print(uplus_cctv_needs)

standard = c(0,400,450,500,550,999)

sort = cut(uplus_cctv_needs$인당담당경찰관수, breaks=standard)

gadm$factor = as.factor(sort)

col <- brewer.pal(8, “Greens”)

spplot(gadm, ‘factor’, col.regions=col, main=’경찰관 1인당 담당 국민 (단위:)’)

명령어 알고가기

safety_korea_data <- cbind(safety_korea_data, Code)는 현재 데이터 셋에서 Code라는 열을 추가하는 명령!

행정코드는 경북(1), 광주(2), 울산(3), 충북(4), 경기도(5), 서울(6), 경남(7), 대구(8), 강원도(9), 전남(10), 인천(11), 세종(12), 충남(13), 제주(14), 대구(15), 부산(16)이니 참고하렴.

위에 열거된 명령어를 줄씩 순서대로 입력하면 대한민국 행정지도를 기반으로 우리나라 경찰관 1인당 담당 국민 수 현황을 깔끔하게 시각화할 수 있어.

코드를 알맞게 입력하면 대한민국 경찰관 1인당 담당 국민 수 현황이 뜬다.

대한민국 경찰관 1인당 담당 국민 수 현황

분석하면 대한민국 경찰관 1인당 담당 국민 수가 500명 이상인 지역은 충청남도이며, 550명 이상인 지역은 경기도와 세종특별자치시라는 것을 확인할 수 있지? 이 자료를 바탕으로 팀장님께 CCTV 프로모션 지역을 제안해보도록 하자!

코딩을 배우고 싶다며 처음 날 찾아왔던 네 모습이 기억나는구나. 초심자의 입장에서 차근차근 따라할 수 있도록 정리해봤는데 어땠니? 조금 어려운 부분도 열심히 복습하면 익숙해질 수 있을 거야. 앞으로도 코딩에 흥미를 잃지 않고 열심히 공부하길 바라며, 지금까지 배운 내용들이 작게나마 도움이 될 수 있기를 바랄게. :)

김선택 프로필

LG전자, Life is Good 봉사단에서 대화형 AI 팀장으로 더 나은 삶을 위해 도전하고 있습니다. 좋은 기술로 옳은 미래를 만들어 가고자 합니다. 연암문화재단을 통해 국립과학관이나 학교에 재능기부 강의도 하고 있습니다.