인트로
오늘의 데이터 분석 주제는 " 전라남도 코로나19 선별진료소 위치와 도시별 빈도 " 이다.
빈도 분석은 이전 글에서 다뤘던 count → arrange 문법과 ggplot2 의 reorder 옵션을 활용했고,
지도 시각화는 이미지를 끌어와서 시각화하는 방법과
지도 핀을 활용하게 해주는 패키지의 기능을 활용해보았다.
빈도분석
전처리는 Excel 에서 간단하게 행 몇가지와 필요없는 열을 삭제했고, R에서는 names 함수를 통해
열 이름을 한글에서 영어로 변경해주었다.
# names 함수 : 컬럼명 벡터로 return.
names(data) <- c('city','name','addr')
이후, count 함수를 통해 각 도시별 진료소 수를 담은 데이터프레임을 만들고
해당 데이터프레임을 geom_col 함수로 시각화한다. 너비(width)와 채우기(fill) 색깔 옵션을 넣는 것도 가능하다.
그래프의 테두리 색깔은 color 옵션을 활용한다.
data_n <- count(data,city) |> arrange(desc(n))
ggplot(data_n,aes(x=reorder(city,-n),y=n)) + geom_col(width=0.5,fill='#166b1b') +
labs(x='CITY',y='NUM OF CENTERS',title='전라남도 코로나19 선별진료소 현황')
지도 시각화 : 이미지 넣기
ggmap 패키지와 ggplot2 패키지를 동시에 사용해서 지도의 특정 위치에 좌표 데이터를 입력 후
geom_point 함수로 점을 넣는 기능을 사용할 수 있지만, 역시 데이터는 보는 사람에게 의미가 확실하게 드러나야 하기에
ggimage 패키지를 통해 인포그래픽의 성격을 살려서 편집자가 원하는 이미지를 활용할 수 있다.
여기서는 인포그래픽 제작 사이트인 '미리캔버스' 에서 간단하게 지도 핀을 만들어 활용했다.
# city 컬럼이 '나주시' 인 행만 추출
naju_data <- data[data$city=='나주시',]
# 이미지 데이터를 객체에 할당
map_pin <- c("C:/Users/준희/Desktop/Data Analysis/map_pin.png")
key <- 'AIzaSyBCMqZKnLmrZ3kT4kL426oPX3xjHpn4ECM'
register_google(key)
naju_data <- mutate_geocode(data=naju_data,location=addr,source='google')
naju_mapdata <- get_googlemap('나주',maptype = 'roadmap',zoom=11)
ggmap(naju_mapdata) + geom_image(data=naju_data,aes(x=lon,y=lat,image=map_pin))
mutate_geocode 함수 : 특정 데이터에 주소를 포함하는 열이 있다면, 해당 주소의 lon/lat 이 포함된 열을 데이터에 추가
naju_data <- mutate_geocode(data=naju_data,location=addr,source='google')
geom_image 함수 : geom_point 함수와 같은 기능을 하지만 aes 에 특정 이미지를 할당할 수 있다.
ggmap(naju_mapdata) + geom_image(data=naju_data,aes(x=lon,y=lat,image=map_pin))
지도 시각화 : markers 옵션
물론 이렇게 외부 이미지를 가져와서 시각화를 할 수 있지만, 패키지 안에서 제공하는
기본 이미지를 활용할 수도 있다. 구글이나 네이버에서 통상적으로 활용하는 지도 핀을 간단하게
활용하고 싶다면 get_googlemap 함수로 지도 데이터를 불러올 때 markers 옵션을 추가하면 된다.
# lon/lat 데이터만 가지고 있는 데이터프레임을 새로 만든다.
naju_data_marker <- data.frame(naju_data$lon,naju_data$lat)
# 지도 데이터를 만들때 markers 옵션으로 위의 데이터프레임을 추가한다.
# 이렇게 할 경우, 기본 지도에 위의 데이터프레임을 바탕으로 한 지도 핀이 추가된다.
naju_mapdata_m <- get_googlemap('나주',maptype='roadmap',zoom=11,markers = naju_data_marker)
# 마커에 해당 진료소의 이름을 넣는 geom_text 추가
ggmap(naju_mapdata_m) + geom_text(data=naju_data,aes(x=lon,y=lat),label=naju_data$name) +
labs(title='나주시 코로나19 선별진료소 위치')
마무리
지도 데이터는 가장 사용자에게 밀접한 시각화 자료 중 하나라고 생각한다.
우리가 살고 있는 장소에 대해 다양한 정보를 제공하고, 실제로 육안으로 찾아가 볼 수 있다는 것은
사용자에게 정확한 정보를 제공해준다는 점에 있어서 데이터의 진정한 의미를 잘 보여준다.
지금은 미시적으로 특정 시의 간단한 데이터만 다루고 있지만
추후에 R의 숙련도가 높아진다면 미국이나 하나의 대륙처럼 거시적으로 데이터의 범위를 확장해보고 싶다.
'Coding & Data Analysis > R' 카테고리의 다른 글
[R] R으로 보고서 & 인터랙티브 웹까지 만들수 있다. (feat. Shiny) (1) | 2024.08.29 |
---|---|
[R] 지역별 미세먼지 농도 비교 & 가설 검정 (6) | 2024.08.28 |
[R] 시각화를 위한 데이터 구조 변경 및 추가 개념 (0) | 2024.08.25 |
[R] Excel 전처리 & 빈도분석 시각화 개념들 (0) | 2024.08.25 |
[R] ggmap 패키지를 활용한 지도 시각화 (0) | 2024.08.21 |