R로 실제 데이터 분석을 어떻게 하는지, 공공데이터 사이트에서 손쉽게 구할 수 있는 다양한 데이터를 활용하여 수집부터 가공, 분석까지 단계별로 진행해 보겠습니다.

공공데이터포털에서 선별진료소의 위치 데이터를 가져와 구글 지도 위에 표시하는 지도 시각화에 대해 간단한 프로젝트를 만들어 볼건데요, 다음 프로젝트 과정을 참고하여 본인만의 프로젝트를 만들어 보세요!

 

프로젝트 시작 전, 분석 단계 정리하기

  • 주제 선정: 대전시에 코로나19 선별진료소가 얼마나 있고, 어디에 있을까요?
  • 데이터 수집: 공공데이터포털에서 코로나19 선별진료소 위치를 다운로드합니다.
  • 데이터 가공: 데이터 시각화에 필요한 컬럼만 추출하고, 컬럼명을 한글에서 영문으로 변경합
    니다.
  • 데이터 분석: 선별진료소가 어느 지역에 많고 적은지 빈도분석으로 확인하고, 그 중 대전시 선별
    진료소 데이터를 추출합니다. 그리고 구글 지도 API를 이용해 대전시를 지도 시각화합니다. 선
    별진료소 위치는 산점도를 그려 표시합니다.
  • 결론 도출: 대전시에는 총 14개의 선별진료소가 있고 그 위치를 지도에 표시합니다.

 

 

 


 

🗺데이터 수집: 코로나19 선별진료소 위치 정보 다운로드하기

 

01 메인 화면 검색 창에 [선별진료소 현황]을 입력하고 돋보기 버튼을 클릭해 데이터를 검색합니다.
공공데이터포털 홈페이지: 공공데이터포털 (data.go.kr)

공공데이터포털

 

 

02 파일데이터 목록 중 [보건복지부_코로나19 선별진료소_현황]을 클릭합니다.

보건복지부_코로나19 선별진료소 현황

 

 

 

03 파일데이터 정보 화면에서 메타데이터를 확인할 수 있습니다. 표 중간에 있는 URL 링크를 클릭하여 코로나19 선별진료소 현황 페이지로 이동합니다.

메타데이터란?) 데이터에 대한 데이터 즉 데이터 정보입니다. 데이터에 대한 정보를 분석, 분류하여 제공합니다.

 

파일데이터정보_메타데이터 다운로드

 

 

 

04 보건복지부의 코로나19 선별진료소 현황 페이지는 시간대별로 업데이트 되어 데이터 분석 연습에 사용하기 좋은 데이터입니다. 선별진료소 목록 오른쪽 위에 있는 [엑셀파일 다운로드]를 클릭하여 데이터 파일을 다운로드한 후 폴더에 저장합니다.

코로나19 선별진료소 현황 엑셀파일 다운로드

 

 

 


 

🗺데이터 가공: 필요한 데이터 추출하기

 

다운로드한 엑셀 파일을 열어 데이터를 먼저 확인해 보겠습니다. 데이터가 업데이트된 기준일, 시도, 시군구, 의료기관명, 주소, 운영시간 등 다양한 정보가 포함되어 있습니다.

이미 정리가 잘 되어 있어서 바로 R로 가공을 해도 충분해 보입니다. 이번에는 데이터 전처리부터 필요한 데이터 추출 등을 모두 R에서 진행해 보겠습니다.

read_excel 함수로 데이터 가져오기

 

 

 

엑셀 파일을 가져오기 위해 readxl 패키지를 로드하고 read_excel() 함수로 파일을 가져옵니다.
가져온 데이터는 View() 함수로 확인도 해줍니다.

*엑셀 파일 가져오기

library(readxl)

xlsdata <- read_excel(“C:/Rstudy/선별진료소_20211125194459.xls”)
View(xlsdata)

 

 

 

가져온 데이터가 엑셀 파일과 동일하게 출력되면 제대로 가져온 것입니다. 이제 데이터 세트에서 모든 데이터가 필요한 것은 아니므로 필요한 컬럼만 추출해서 따로 저장해 보겠습니다.

우리가 필요한 정보는 시도, 시군구, 의료기관명, 주소로 데이터 시각화에 필요한 정보만 추출하면 됩니다. xlsdata 데이터 세트의 모든 행 중에 2~5열만 추출합니다.

*데이터 컬럼 추출 및 열 이름 변경하기

data_raw <- xlsdata[,c(2:5)]
head(data_raw)

데이터 칼럼 추출 및 열 이름 변경하기

 

 

 

데이터 추출이 잘 되었는지 head() 함수로 일부분을 먼저 확인하고, 문제가 없다면 컬럼명을 변경하겠습니다. 컬럼명이 한글이면 데이터 분석 중에 오류가 발생할 수 있기 때문입니다. 영문로 state, city, name, addr로 각각 변경합니다.

*데이터 컬럼 추출 및 열 이름 변경하기

names(data_raw)
names(data_raw) <- c(“state”,”city”,”name”,”addr”)
names(data_raw)

열 이름 변경하기

한글 컬럼명이 영문으로 출력됩니다. 이제 데이터를 한번 탐색해 보겠습니다. 어느 지역에 선별진료소가 가장 많고 적은지 확인해 봅니다.

 

 

 


 

🗺데이터 분석(1): 빈도분석하기

 

어느 지역에 선별진료소가 많고 적은지 비교하려면 빈도분석을 해야합니다. table() 함수로 state 변수의 빈도를 구하고 막대 그래프로 그려 보겠습니다. 

*state 컬럼 빈도 확인하기

table(data_raw$state)
barplot(table(data_raw$state))

R 스튜디오 빈도분석 그래프

선별진료소가 경기도에 가장 많고 세종시에는 가장 적은 것을 수치로도 알 수 있지만, 막대 그래프로 그려 보면 경기도, 서울, 전남 순으로 많은 것을 시각적으로 알아보기 쉽습니다.

 

 

 

이번에는 시도 중에 대전시 데이터를 추출해서 시각화해 보겠습니다. state 열에서 값이 “대전”인 데이터만 추출해서 daejeon_data 변수에 저장합니다. 그리고 앞에서 table() 함수로 확인했던 빈도 결과와 동일한지 확인합니다.

*대전시 선별진료소 데이터 추출하기

daejeon_data <- data_raw[data_raw$state == “대전”,]
head(daejeon_data)

nrow(daejeon_data)

R스튜디오 데이터 추출하기

관측치 14로 앞에서 구한 빈도값 14와 일치하는 것을 알 수 있습니다. 이제 추출한 대전시 데이터를 지도로 시각화해 보겠습니다. 구글 지도 API를 사용하여 대전시 지도를 가져온 후 각 선별진료소의 위치를 점으로 표시합니다.

 

 

 


 

🗺데이터 분석(2): 지도 시각화하기

구글 지도를 이용하기 위해 ggmap 패키지를 로드한 후 발급받은 구글 지도 API 키 인증을 합니다. 그리고 각 선별진료소 위치에 점을 표시하려면 각 위치에 대한 위도와 경도 데이터가 필요합니다.

 

여러 위치를 표시해야 하므로 한글 주소를 하나하나 입력하여 위도와 경도 데이터를 불러오는 것 대신 데이터 세트에 있는 주소를 한 번에 불러오는 것이 좋습니다. 데이터 프레임에서 주소가 있는 열 전체를 가져와야 할 때는 mutate_geocode() 함수를 사용합니다.

*데이터 세트에서 선별진료소 위도와 경도 데이터 가져오기

library(ggmap)
ggmap_key <- “사용자 API 키를 입력하세요.
register_google(ggmap_key)

daejeon_data <- mutate_geocode(data = daejeon_data, location = addr, source = ‘google’)

head(daejeon_data)
head(daejeon_data$lon)

R스튜디오에서 위도와 경도 데이터 가져오기

 

 

head() 함수로 가져온 데이터 앞부분을 확인해 보면 addr 열 뒤에 경도(lon)와 위도(lat) 열이 추가된 것을 확인할 수 있습니다.
이처럼 mutate_geocode() 함수는 데이터 프레임의 컬럼명으로 주소가 있는 열을 기준으로 여러 주소의 경도와 위도 데이터를 한 번에 가져올 수 있습니다. 함수 사용 형식은 다음과 같습니다.

mutate_geocode(data = 데이터 프레임명, location = 주소가 적힌 열의 이름, source = ‘google’)

 

 

 

이제 모든 준비가 끝났습니다. get_googlemap() 함수로 대전시 지도를 가져온 후 ggmap() 함수로 지도를 그립니다. maptype은 roadmap으로, zoom은 11정도로 지도 크기를 조정하고 앞에서 확인한 선별진료소의 위도와 경도 데이터를 점으로 표시합니다.

*대전시 지도 시각화하기

daejeon_map <- get_googlemap(‘대전’, maptype = ‘roadmap’, zoom = 11)
ggmap(daejeon_map) +
    geom_point(data = daejeon_data, aes(x = lon, y = lat, color = factor(name)), size = 3)

R 데이터 스튜디오 지도 시각화

 

점 표시는 산점도로 시각화합니다. geom_point() 함수에 daejeon_data 데이터 세트의 lon과 lat 컬럼을 각각 x축과 y축에 매핑하고 선별진료소마다 색상이 다르게 표시되도록 color 옵션에 name 컬럼을 지정합니다. 이때 선별진료소 값은 범주형 데이터이므로 factor() 함수를 사용합니다.

 

지금까지 지도에 위치를 표시할 때 점으로만 표시했지만, geom_point() 함수를 사용하지 않고도 위치를 나타낼 수 있습니다. 바로 get_googlemap() 함수markers 옵션입니다. markers 옵션은 위치 데이터를 지도 위에 마커 형태로 표시할 수 있습니다. 이번에는 markers 옵션에 위도와 경도 데이터를 넣어 위치 데이터를 표시해 보겠습니다.

*마커로 위치 표시하고 위치 이름 넣기

daejeon_data_marker <- data.frame(daejeon_data$lon, daejeon_data$lat)
daejeon_map <- get_googlemap(‘대전’, maptype = ‘roadmap’, zoom = 11, markers = daejeon_data_marker)
ggmap(daejeon_map) +
    geom_text(data = daejeon_data, aes(x = lon, y = lat), 
size = 3, label = daejeon_data$name)

R studio 지도에 마커로 위치 표시하기

geom_point() 함수를 사용할 때는 x축과 y축에 위도와 경도 데이터가 있는 변수만 각각 매핑하면 되었지만, get_googlemap() 함수의 markers 옵션은 값에 데이터 프레임 유형의 위도와 경도 데이터를 지정해야 합니다.

 

따라서 get_googlemap() 함수를 사용하기 전에 daejeon_data 데이터 세트의 lon 컬럼과 lat 컬럼을 별도의 데이터 프레임으로 생성하고, 이 데이터 프레임을 markers 옵션에 지정해야 여러 위치를 지도에 표시할 수 있습니다. 추가로 geom_text() 함수를 이용해 지도에 장소명을 레이블로 넣어주면 선별진료소의 위치와 이름을 함께 파악할 수 있습니다.

 

 

▶ 표로 정리하는 핵심 함수

함수 기능
names() 컬럼명(변수명)을 지정합니다
table() 표 형태로 데이터 빈도를 보여줍니다
barplot() 막대 그래프를 그립니다
register_google() ggmap 패키지 구글 지도 API 키를 등록합니다
mutate_geocode() ggmap 패키지 여러 주소의 경도와 위도 데이터를 가져옵니다
get_googlemap() ggmap 패키지 위치 데이터로 구글 지도를 가져옵니다
geom_point() ggplot2 패키지 산점도를 그립니다
ggmap() ggplot2 패키지 위치 데이터를 구글 지도로 시각화합니다
geom_text() ggplot2 패키지 그래프 위에 레이블을 입력합니다

 

🙋‍♂️여기서 잠깐) 패키지는 어떻게 설치하나요?

 

 

 


 

혼자 공부하는 R 데이터 분석

위 내용은 『혼자 공부하는 R 데이터 분석』의 일부분을 재구성하여 작성하였습니다.

공공데이터 사이트에서 손쉽게 구할 수 있는 다양한 데이터를 활용하여 데이터 수집부터 가공, 분석까지 단계별로 진행해 볼 수 있습니다.

  1. 지역별 국내 휴양림 분포 비교막대 그래프 시각화
  2. 해외 입국자 추이 확인선 그래프누적 막대 그래프 시각화
  3. 코로나19 선별진료소 위치를 지도에 나타내기지도 시각화산점도
  4. 서울시 지역별 미세먼지 농도 차이 비교기술통계량상자 그림

 

👀 도서 자세히 보기

👨‍💻유튜브 강의로 더 자세히 알기
🙋‍♂️강전희&엄동란 저자님께 질문하기