패키지
데이터 불러오기
# 광주 지역 shp
gwang_ju <- readOGR("LSMD_ADM_SECT_UMD_29.shp",encoding = "euc-kr")
#> OGR data source with driver: ESRI Shapefile
#> Source: "C:\Users\seong taek\Desktop\3-1 DataVisualize\data_visualize\LSMD_ADM_SECT_UMD_29.shp", layer: "LSMD_ADM_SECT_UMD_29"
#> with 203 features
#> It has 5 fields
gwang_ju %>% class()
#> [1] "SpatialPolygonsDataFrame"
#> attr(,"package")
#> [1] "sp"
# 의류수거함
cloth <- read.csv("광주광역시_주택가주변의류수거함 현황_20221209.csv",fileEncoding = "CP949")
cloth %>% head()
#> 연번 자치구 설치지역.동명. 설치업체
#> 1 1 동구 동명동
#> 2 2 동구 동명동
#> 3 3 동구 동명동
#> 4 4 동구 동명동
#> 5 5 동구 동명동
#> 6 6 동구 동명동
#> 설치위치.장소. 데이터기준일자
#> 1 광주광역시 동구 필문대로253번길 5(조대명품타운 건너편) 2022-12-09
#> 2 광주광역시 동구 동명로14번길 27(true 옆) 2022-12-09
#> 3 광주광역시 동구 동계천로 156 2022-12-09
#> 4 광주광역시 동구 동명로20번길 33(동명아파트 옆) 2022-12-09
#> 5 광주광역시 동구 백서로 226-1(서석교회 옆) 2022-12-09
#> 6 광주광역시 동구 필문대로 261 입구(동천주차장 입구) 2022-12-09
# 구글맵 키
register_google(key = 'AIzaSyCQhISmZrGYjMTh5J42qmSVytOVgzs6YlQ')
전처리
# sp → sf 변환
gwang_ju <- st_as_sf(gwang_ju)
gwang_ju %>% head()
#> Simple feature collection with 6 features and 5 fields
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: 922908.9 ymin: 1685904 xmax: 937583.2 ymax: 1691397
#> Projected CRS: Korea 2000 / Unified CS
#> EMD_CD EMD_NM SGG_OID COL_ADM_SE GID geometry
#> 0 29200202 오선동 3233 29200 3247 MULTIPOLYGON (((934856 1689...
#> 1 29200178 동림동 3232 29200 3248 MULTIPOLYGON (((925403.5 16...
#> 2 29200177 양산동 3231 29200 3249 MULTIPOLYGON (((925032.9 16...
#> 3 29200176 덕림동 1605 29200 3250 MULTIPOLYGON (((925606 1686...
#> 4 29200175 동호동 1604 29200 3251 MULTIPOLYGON (((925167 1688...
#> 5 29200174 명도동 3228 29200 3252 MULTIPOLYGON (((925936.6 16...
# 주소 기반으로 위도/경도 추가
cloth <- mutate_geocode(data = cloth, location = 설치위치.장소., source = "google")
cloth %>% head()
#> 연번 자치구 설치지역.동명. 설치업체
#> 1 1 동구 동명동
#> 2 2 동구 동명동
#> 3 3 동구 동명동
#> 4 4 동구 동명동
#> 5 5 동구 동명동
#> 6 6 동구 동명동
#> 설치위치.장소. 데이터기준일자
#> 1 광주광역시 동구 필문대로253번길 5(조대명품타운 건너편) 2022-12-09
#> 2 광주광역시 동구 동명로14번길 27(true 옆) 2022-12-09
#> 3 광주광역시 동구 동계천로 156 2022-12-09
#> 4 광주광역시 동구 동명로20번길 33(동명아파트 옆) 2022-12-09
#> 5 광주광역시 동구 백서로 226-1(서석교회 옆) 2022-12-09
#> 6 광주광역시 동구 필문대로 261 입구(동천주차장 입구) 2022-12-09
#> lon lat
#> 1 126.9295 35.14841
#> 2 126.9262 35.14994
#> 3 126.9221 35.15180
#> 4 126.9273 35.15041
#> 5 126.9269 35.14792
#> 6 126.9234 35.14895
시각화
광주지역 ‘구’ 분류
gwang_ju %>% ggplot(aes(fill=COL_ADM_SE)) +
geom_sf() +
theme_minimal() +
labs(title = "광주") +
theme(plot.title = element_text(size = 20)) + # 글꼴 크기를 20으로 설정
scale_fill_discrete(name = "구",
labels = c("동구","서구","남구","북구","광산구")) # 범례 설정
광주지역 ‘동’ 분류
gwang_ju_dong <- gwang_ju %>%
ggplot(aes(fill=EMD_NM))+ # '동' 별로 채우기
geom_sf()+
geom_sf_text(mapping = aes(label = EMD_NM))+
labs(title = "광주")+
theme_minimal()+
scale_fill_discrete(name = "동")
# 제목 크기 변경
plotly_gwang_ju <- ggplotly(gwang_ju_dong) %>%
layout(title = list(text = "광주", font = list(size = 25)))
plotly_gwang_ju
전처리2
# 결측값 제거
cloth <-
cloth %>% na.omit()
# 이상치 제거
cloth <- cloth %>%
filter(!(`설치지역.동명.` %in% c('건국동','문화동','유덕동','광천동','신안동','임 동','금호2동','상무2동','서창동','금호1동')))
# 데이터프레임 → sf객체
gwang_ju_cloth <- cloth %>%
st_as_sf(coords = c("lon", "lat"))
# 좌표 할당
st_crs(gwang_ju_cloth) <- 4737
gwang_ju_cloth %>% head()
#> Simple feature collection with 6 features and 6 fields
#> Geometry type: POINT
#> Dimension: XY
#> Bounding box: xmin: 126.9221 ymin: 35.14792 xmax: 126.9295 ymax: 35.1518
#> Geodetic CRS: Korea 2000
#> 연번 자치구 설치지역.동명. 설치업체
#> 1 1 동구 동명동
#> 2 2 동구 동명동
#> 3 3 동구 동명동
#> 4 4 동구 동명동
#> 5 5 동구 동명동
#> 6 6 동구 동명동
#> 설치위치.장소. 데이터기준일자
#> 1 광주광역시 동구 필문대로253번길 5(조대명품타운 건너편) 2022-12-09
#> 2 광주광역시 동구 동명로14번길 27(true 옆) 2022-12-09
#> 3 광주광역시 동구 동계천로 156 2022-12-09
#> 4 광주광역시 동구 동명로20번길 33(동명아파트 옆) 2022-12-09
#> 5 광주광역시 동구 백서로 226-1(서석교회 옆) 2022-12-09
#> 6 광주광역시 동구 필문대로 261 입구(동천주차장 입구) 2022-12-09
#> geometry
#> 1 POINT (126.9295 35.14841)
#> 2 POINT (126.9262 35.14994)
#> 3 POINT (126.9221 35.1518)
#> 4 POINT (126.9273 35.15041)
#> 5 POINT (126.9269 35.14792)
#> 6 POINT (126.9234 35.14895)
# '동' 별 의류수거함
existing_categories <- unique(gwang_ju_cloth$설치지역.동명.)
# viridis 색상 팔레트 사용
colors <- magma(length(existing_categories))
# 설치'동'명과 색상을 매칭하는 데이터프레임 생성
color_mapping <- data.frame(번호 = existing_categories,
색상 = colors)
color_mapping %>% head()
#> 번호 색상
#> 1 동명동 #000004FF
#> 2 계림1동 #010108FF
#> 3 계림2동 #03030EFF
#> 4 지산1동 #050416FF
#> 5 지산2동 #07061CFF
#> 6 산수1동 #0B0923FF
광주지역 의류수거함 시각화
gwang_ju_all_cloth <- ggplot() +
geom_sf(data = gwang_ju, fill = 'grey90') +
geom_sf(data = gwang_ju_cloth, aes(color = 설치지역.동명.), size = 0.8) +
scale_color_manual(values = color_mapping$색상,
breaks = color_mapping$설치지역.동명.,
labels = color_mapping$설치지역.동명.) +
theme_minimal() +
labs(title = "광주지역 의류수거함 위치")
gwang_ju_all_cloth %>% ggplotly()