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

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

작성일2019-02-13

지난 시간에는 방대한 자료(data)를 우리가 필요한 정보(information)로 가공하는 법을 배웠어. 자료들을 기준에 맞게 정렬하고 도식화하니 훨씬 깔끔하고 이해하기 쉬운 정보가 되었지. 오늘도 이 작업의 연장선으로 지리적 데이터를 시각화(Data Visualization) 해 볼게. 잘 따라올 준비되었지?

코딩_데이터시각화-720x480

서울시 미세먼지 현황을 찾아라! 데이터 수집(data collection)

3일은 추위, 4일은 미세먼지가 기승을 부린다는 뜻을 가지고 있는 ‘삼한사미’라는 유행어가 보여주듯, 미세먼지는 전 국민의 관심사가 되고 있어. 이에 기업에서도 미세먼지와 관련된 다양한 마케팅 및 프로모션 전략을 수립하고 있지. 이번에 우리가 살펴볼 과제도 미세먼지와 관련되어 있어.

1205_미세먼지 건강관리가전_01

오늘의 과제

공기청정기 마케팅을 위한 서울시 내 미세먼지 현황을 한 장으로 보고할 것

복잡한 현황을 간단하게 표현해야 할 때, 데이터를 시각화해야 한다는 것! 이제 잊지 않았지? 먼저 서울시의 미세먼지 현황 데이터를 살펴보기 위해 지난 시간에 활용했던 서울시 데이터 포털인 서울열린데이터광장(http://data.seoul.go.kr)을 이용해볼게.

코딩_지리데이터_01

서울열린데이터광장(http://data.seoul.go.kr)

‘서울시 대기오염’으로 검색했더니, 관련 자료를 찾을 수 있었어. 다음으로 데이터 파일인 CSV 파일을 다운로드하면 되지. (파일명: seoul_air_report_rev2.csv)

우리가 다운로드한 데이터 파일을 R프로그램에서 불러오려면 이미 설정되어 있는 작업공간으로 파일을 옮겨주거나, 데이터 파일이 있는 경로를 작업공간으로 먼저 설정해 주어야 하는 점 잊지 않았지? (작업공간 설정이 기억나지 않는다면 지난 시간 강의를 꼭 복습할 것!)

코딩_지리데이터_02

서울시 대기오염 통계자료 raw data

이번 과제가 지난번과 다른 점은, 지난번에는 우리나라 전체 지도에 자료를 매핑했다면 이번엔 ‘서울시’라는 좀 더 구체적인 행정 지역의 지도가 필요하다는 점이야.

여기서 또 꿀팁 하나 알려줄게. 우리나라뿐만 아니라 세계 각국의 행정지도 데이터를 제공하는 곳이 있어. 바로 세계 각국 행정지도(https://gadm.org/download_country_v3.html) 홈페이지야. 이곳에서는 국가별로 행정 지역의 정보가 담긴 데이터베이스를 손쉽게 다운로드할 수 있어.

코딩_지리데이터_03

세계 각국 행정지도(https://gadm.org/download_country_v3.html)

GAMD 옵션 살펴보기

R(sp) – Level 1: 경기도, 서울, 대전, 세종, 광주 등과 같은 시 · 도 규모의 행정지도

R(sp) – Level 2: 마포구, 용산구, 성동구, 강남구 등 세분화된 행정지도

우리가 필요한 지도는 서울시 내부의 행정지도이기 때문에 level 2를 클릭해 필요한 데이터를 작업 공간 내에 다운로드하자. (파일명: gadm36_KOR_2_sp.rds)

R프로그램을 활용한 데이터 시각화(Data Visualization)

이제 본격적으로 R프로그램을 실행해볼게. 그리고 콘솔에 아래 명령어를  줄씩 입력하고 엔터를 쳐보자.

install.packages(‘readxl’)

install.packages(‘sp’)

library 설치가 완료되었다면 아래 명령어를 통해 설치한 library를 불러오자.

library(readxl)

library(sp)

library(RColorBrewer)

이제 우리가 다운로드받은 행정구역별 지도 데이터를 library에 불러오도록 하자.

gadm <- readRDS(“gadm36_KOR_2_sp.rds”)

gadm_seoul <- subset(gadm, NAME_1==‘Seoul’)

plot(gadm_seoul)

위의 과정이 잘 입력되었으면 아래 그림처럼 R프로그램 창에 서울시 행정지도가 표시될 거야. 같은 방법으로 세종시(Sejong), 제주시(Jeju) 행정 지도도 쉽게 표현할 수 있지.

코딩_지리데이터_04

세분화된 행정구역(구 단위)으로 나눠진 서울시 행정지도

명령어 알고 가기

gadm_seoul <- subset(gadm, NAME_1==‘행정구역명’)

지도 데이터에서 해당하는 행정구역을 출력하는 명령어

서울열린데이터광장을 통해 다운로드한 서울시 대기오염 데이터파일을 R프로그램에서 불러오는 작업을 먼저 해볼게. 명령어가 많아 보여도 너무 걱정하지 말고 아래의 예시를 잘 따라 해보자.

seoul_air_data <- read.csv(“seoul_air_report.csv”, header=T)

print(seoul_air_data)

seoul_air_data <- seoul_air_data[-c(1,2,3),]

print(seoul_air_data)

Code <- c(13,14,25,21,12,2,15,20,6,1,17,4,19,16,23,8,9,10,24,3,11,18,7,22,5)

seoul_air_data <- cbind(seoul_air_data, Code)

위의 명령어에서 seoul_air_report_rev2.csv는 우리가 다운로드한 파일의 파일명인 건 알고 있지? 이제 복잡하게 설정된 열 제목(header)을 사용하기 쉽게 바꿔볼게.

names(seoul_air_data) = c(“기간”, “구분”, “아황산가스”, “일산화탄소”, “이산화질소”, “미세먼지”, “초미세먼지”, “오존”, “코드”)

seoul_air_data[,2:8] <- sapply(seoul_air_data[,2:8], as.factor)

print(seoul_air_data)

명령어 알고 가기

names(seoul_air_data) = c(“기간”, “구분”, “아황산가스”, “일산화탄소”, “이산화질소”, “미세먼지”, “초미세먼지”, “오존”, “코드”)

데이터의 header(열 제목)를 재지정하는 명령어

names라는 명령어를 통해 각 열 데이터 header(열의 제목)를 쉽게 재지정했어. 왜냐하면 실제 데이터 열들의 제목이 아황산가스(ppm), 일산화탄소(ppm), 이산화질소(ppm)와 같이 상세한 단위 정보가 포함되어 있기 때문이지. 단위를 일일이 타이핑하기 어려우니 더 쉽고 직관적인 데이터 header로 변경한 거지.

코딩_지리데이터_05

이제 입력된 데이터를 바탕으로 데이터를 도식화하는 작업을 해볼게. 아래 명령어를 복사해서 한 줄씩 붙여넣어 보자.

seoul_air_data = seoul_air_data[order(seoul_air_data$코드),]

standard = c(0,50,55,60,65)

sort = cut(as.numeric(seoul_air_data$미세먼지), breaks=standard)

gadm_seoul$factor = as.factor(sort)

col <- brewer.pal(5, “Reds”)

#col = rainbow(length(levels(gadm_seoul$factor)))

spplot(gadm_seoul, ‘factor’, col.regions=col, main=‘서울시 미세먼지 구별현황(단위:㎍/㎥)’)

명령어 알고 가기

standard = c(0,50,55,60,65)

데이터 범위를 지정해 범주로 표시하는 명령어로, 총 4개의 범위(①0~50, ②50~55, ③55~60, ④65 이상)가 설정되었다.

이렇게 명령어를 순서대로 입력하면 지도에 우리가 다운로드한 서울시 대기오염(미세먼지) 현황이 깔끔하게 가시화되는 것을 볼 수 있지!

코딩_지리데이터_06

서울시 미세먼지 현황

raw data 상에서 미세먼지 수치가 모두 50(㎍/㎥) 이하기 때문에 지도에서 차이가 없이 보이는구나. 그럼 초미세먼지 현황을 살펴볼까? 동일한 명령어에서 분석할 열을 ‘미세먼지’에서 ‘초미세먼지’로 변경해보자. 즉, 위의 명령어에서 seoul_air_data$초미세먼지로 변경하면 된단다.

초미세먼지는 미세먼지보다 더 작은 입자를 가지고 있으니 기준도 조금 낮추어 살펴보는 게 좋겠지? standard = c(0,25,26,27,28)로 변경해볼게.

코딩_지리데이터_07

서울시 초미세먼지 현황

어때, 지난 시간에 이어 복습해보니 어렵지 않지? 항상 강조하지만 모든 명령어를 외울 필요는 없어.

다만 다양한 활용을 위해서 위에서 별도로 살펴본 지도를 바꾸거나, 기준을 바꾸는 정도의 응용 명령어들만 잘 파악하고 필요에 따라 바꾸어 사용한다면 R프로그램을 활용해 더욱 다양한 이터들을 시각화(Data Visualization)할 수 있을 거야.

다음 시간에도 수치에 그칠 수 있는 데이터에 가치를 부여하는 다양한 방법을 살펴볼게!

김선택 프로필

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