호주에서 데이터 분석가로 일하고 있는만큼, 호주의 인구분포를 R로 나타내보았다.
사용된 패키지는 terra, giscoR, tidyverse 이다.
#-------------------------------------
# 1. GHSL데이터 웹사이트에서 다운로드
#-------------------------------------
url <- "https://jeodpp.jrc.ec.europa.eu/ftp/jrc-opendata/GHSL/GHS_POP_GLOBE_R2023A/GHS_POP_E2025_GLOBE_R2023A_4326_30ss/V1-0/GHS_POP_E2025_GLOBE_R2023A_4326_30ss_V1_0.zip"
file_name <- "GHS_POP_E2025_GLOBE_R2023A_4326_30ss_V1_0.zip"
options(timeout = max(300, getOption("timeout")))
download.file(
url = url,
path = getwd(),
destfile = file_name
)
#-------------------------------------
# 2. 다운로드 받은 데이터 R에 Load
#-------------------------------------
unzip(file_name)
raster_name <- gsub(".zip", ".tif",file_name)
pop <- terra::rast(raster_name)
#-------------------------------------
# 3. giscoR에서 호주 국경 Load
#-------------------------------------
get_country_borders <- function(){
country <- giscoR::gisco_get_countries(
country = "AU",
resolution = "3"
)
return(country)
}
country <- get_country_borders()
#----------------------------------------
# 5. GHSL데이터를 3에서 받은 호주 국경으로 Crop
#----------------------------------------
australia_pop <- terra::crop(
pop,
terra::vect(country),
snap = "in",
mask = T
)
#-------------------------------------
# 5. RASTER 데이터를 DATAFRAME으로 변환
#-------------------------------------
australia_pop_df <- as.data.frame(australia_pop, xy = T, na.rm = T)
head(australia_pop_df)
# 5-1. 카테고리 분류
#-------------------------------------
names(australia_pop_df)[3] <- "val"
australia_pop_df <- australia_pop_df |>
dplyr::mutate(
cat = dplyr::if_else(
val > 0, "Yes", "No"
)
)
australia_pop_df$cat <- as.factor(
australia_pop_df$cat
)
#-------------------------------------
# 6. MAP
#-------------------------------------
cols <- c("#0a1c29", "#edc241")
p <- ggplot() +
geom_raster(
data = australia_pop_df,
aes(x = x,
y = y,
fill = cat
)
) +
scale_fill_manual(
name = "Are there any people?",
values = cols,
na.value = "#0a1c29"
) +
guides(
fill = guide_legend(
direction = "horizontal",
keyheight = unit(5, "mm"),
keywidth = unit(15, "mm"),
label.position = "bottom",
label.hjust = .5,
nrow = 1,
byrow = T
)
) +
theme_void() +
theme(
legend.position = "top",
legend.title = element_text(size = 16, color = "grey10"),
legend.text = element_text(size = 14, color = "grey10"),
plot.caption = element_text(size = 10, color = "grey10", hjust = .25, vjust = 20),
plot.margin = unit(c(t = 0, b = -1,
l = -1, r = -1), "lines")
) +
labs(
title = "",
caption = "Data: Global Human Settlement Layer at 30 arcsec"
)
p
반응형
'통계 & 데이터분석 > DataViz' 카테고리의 다른 글
[R] 한국 인구밀도 R에서 3D로 그리기 (0) | 2024.08.27 |
---|---|
[R] Korea Forest in 3D (2) | 2024.08.27 |
[R] Carbon Dioxide uptake in Grass Plants(식물의 이산화탄소 흡수량 분석) (0) | 2023.07.06 |
[R] map_data와 ggplot 이용하여 지도 그리기 (0) | 2023.07.04 |
ggplot2 scatterplot 기초 (0) | 2023.05.26 |
댓글