GIS Data Analysis

R Studio를 활용한 공간분석 - 생산 인구와 인구밀도 지표 분석

무혼 2023. 12. 1.
728x90

공간분석을 위해서는 데이터가 필요하다.

https://bigdata-geo.kr/

공간융합 빅데이터 플랫폼에 들어가면, 필요한 공간 데이터를 다운로드 받을 수 있다. (유료/무료)

 

'아파트단지 주변 사회통계 분석 정보'를 다운받았고,

이를 활용하여 생산 인구와 인구밀도 지표 분석을 해보겠다.

 

먼저, R Studio에서 필요한 라이브러리와 데이터(csv 파일)를 불러온다.

각 데이터별로 인코딩형식이 다른데, 잘 확인한 후 fileEncoding에 알맞게 설정해주어야 한다.

# 패키지 불러오기
library(ggplot2)
library(leaflet)
library(leaflet.extras)

# CSV 파일 불러오기
data <- read.csv("C:/폴더경로/파일명.csv", fileEncoding = "euc-kr")

 

 

 

생산인구와 인구밀도가 평균보다 높은 데이터만 분석해보겠다.

이를 위해서는 데이터 필터링과 데이터 전처리 과정이 필요하다.

평균 계산시, na.rm = TRUE로 지정해주어야, NA값을 갖는 데이터를 제외하여 평균이 NA가 나오지 않는다

(※ 생산인구 컬럼 : cross_smgu_prdctn_cnt, 인구밀도 컬럼 : ppltn_dens)

# 생산 인구 평균 계산 (NA 값 제외)
avg_production_population <- mean(data$cross_smgu_prdctn_cnt, na.rm = TRUE)

# 인구밀도 평균 계산
avg_population_density <- mean(data$ppltn_dens, na.rm = TRUE)

# 생산 인구와 인구밀도가 각각 평균 이상인 데이터 필터링
above_avg_data <- data[
  data$cross_smgu_prdctn_cnt > avg_production_population &
  data$ppltn_dens > avg_population_density,
  ]

 

 

 

이제, Leaflet 라이브러리를 활용하여 지도위에 시각화 해보겠다.

먼저, 생산인구와 인구밀도를 한번에 지도위에 나타내주겠다.

생산인구 / 인구밀도값을 팝업창에, 생산인구와 인구밀도 각각의 값을 라벨에 표현해주었다.

생산인구 / 인구밀도값을 이용해, 인구밀도에 비하여 생산인구가 부족한 지역을 확인해볼 수 있을 것 이다.

# Leaflet 맵 생성
map <- leaflet(above_avg_data) %>%
  addTiles() %>%  # 기본 배경 지도 타일 추가
  
  # 생산 인구가 적고 인구밀도가 높은 지역 표시
  addCircleMarkers(
    lng = ~lo,
    lat = ~la,
    popup = ~paste("Production Population / Population Density:", cross_smgu_prdctn_cnt / ppltn_dens),
    label = ~paste("Production Population:", cross_smgu_prdctn_cnt, "<br>",
                   "Population Density:", ppltn_dens),
    color = "red",  # 원의 색상 지정
    radius = 5  # 원의 반지름 크기 조절
  ) 

# 맵 출력
map​

map 실행 결과

 

 

 

이번에는 히트맵으로 시각화하여 생산인구 / 인구밀도값, 즉 생산인구의 비율이 높은 지역을 확인해 볼 수 있다.

이때에도, 누락된 값이나 잘못된 값이 있는 행을 제거해주는 데이터 전처리 과정을 거친다.

그리고 히트맵의 intensity를 생산인구 / 인구밀도값으로 설정해준다.

# 누락된 값이나 잘못된 값이 있는 행 제거
> clean_data <- na.omit(above_avg_data)

# Leaflet 맵 생성
heatmap_map <- leaflet(clean_data) %>%
  addTiles() %>%  # 기본 배경 지도 타일 추가

  # 히트맵 추가
  addHeatmap(
    data = clean_data,
    lat = ~la,
    lng = ~lo,
    intensity = ~cross_smgu_prdctn_cnt/ppltn_dens,
    blur = 20,
    radius = 15
  )
  
# 히트맵 출력
heatmap_map

heatmap_map 실행 결과

 

 

 

서울이나 부산 등 주요도시에 평균보다 높은 인구(+생산인구)가 몰려있고, 인구밀도도 높지만 생산인구 역시 높음을 확인할 수 있다.
ggplot 라이브러리를 활용하여 그래프로도 시각화 해볼 수 있다.

# 생산 인구와 인구밀도 시각화
ggplot(data, aes(x = cross_smgu_prdctn_cnt, y = ppltn_dens)) +
  geom_point() +
  labs(x = "Production Population", y = "Population Density")​

 

ggplot 실행 결과

 

 

 

여기서 데이터 이상치를 확인해볼 수 있다.

예를들어, 인구밀도는 높지만 생산인구는 이상하리만큼 낮은 지역이 보이는데,

간단하게 생산인구순으로 정렬을 하여 확인해보겠다.

 

 

 

서울특별시 송파구 헬리오시티임이 확인되었다. 구체적인 분석이 더 필요하겠지만, 아무래도 1만세대 가까운 인구가 살고있는 아파트 단지이고, 임대료가 높은 상권과 학원가가 많다보니 '주거인구는 많지만 일하는 사람은 적다'라고 해석된다.

728x90