R로 알아보는 미국 치안지도 ( + USArrests )
미국 50개 주의 폭력 범죄 데이터(USArrests)를 기반으로 군집분석(K-means Clustering)을 통해 각 주를 범죄 유형별로 분류해보고, 그 결과를 미국 지도 위에 시각화해 보도록 하겠습니다.
1. 데이터 소개: USArrests
USArrests는 R에 내장된 데이터로, 아래와 같은 정보를 담고 있습니다.

- Murder: 살인율 (10만 명당)
- Assault: 강도 발생 수
- UrbanPop: 도시 인구 비율 (%)
- Rape: 강간 발생 수
2. 데이터 전처리 및 군집분석
(1) 데이터 표준화 (scale)
scaled_data <- scale(USArrests)

각 변수의 단위가 달라서 반드시 표준화를 해줘야 정확한 군집이 생성됩니다.
(2) 군집 분석 실행 (k = 3)
set.seed(123)
k_result <- kmeans(scaled_data, centers = 3)

- 미국 50개 주를 3개의 군집으로 분류합니다.
- set.seed(123)을 지정해 결과가 매번 동일하게 재현되도록 설정합니다.
(3) 군집 번호 데이터프레임에 추가
arrests <- as.data.frame(USArrests)
arrests$state <- tolower(rownames(arrests))
arrests$cluster <- k_result$cluster

군집 번호를 데이터에 저장하여 지도와 병합할 수 있게 준비합니다.
3. 미국 지도 시각화
library(ggplot2)
library(maps)
library(dplyr)
states_map <- map_data("state") merged_data <- inner_join(states_map, arrests, by = c("region" = "state")) ggplot(merged_data, aes(long, lat, group = group, fill = factor(cluster))) + geom_polygon(color = "white") + scale_fill_brewer(palette = "Set1") + labs(title = "미국 범죄 유형별 주 분류 지도", fill = "클러스터") + coord_fixed() + theme_minimal()

미국 지도에 각 주가 군집별 색상으로 표시되며, 범죄 패턴이 유사한 주들이 시각적으로 분류됩니다.
4. 결과 해석
- 클러스터 1: 범죄 발생률(살인, 강간, 강도)이 높은 주들
- 클러스터 2: 중간 수준의 범죄 및 도시화율을 가진 주들
- 클러스터 3: 전반적으로 치안이 양호한 주들
지도만 봐도 위험 지역과 비교적 안전한 지역을 한눈에 확인할 수 있습니다!
5. 자주 묻는 질문 (FAQ)
Q1. set.seed(123)은 왜 쓰나요?
kmeans()는 초기 중심점을 무작위로 설정하기 때문에,
실행할 때마다 결과가 달라질 수 있습니다.
set.seed(123)을 사용하면 분석 결과가 항상 동일하게 재현됩니다.
→ 보고서, 블로그 작성, 강의 등에서 필수!
Q2. 왜 군집 수(centers)를 3으로 했나요?
- k = 2: 너무 단순해서 범죄 특성 구분이 어려움
- k = 4 이상: 해석이 복잡하고 시각화도 난해
- k = 3: 범죄율이 높은 주 / 중간 수준 / 낮은 주 로 구분하는 데 가장 적절한 수치
추가로 엘보우 기법을 사용하면 최적의 k값을 수치로 찾을 수 있습니다.
6. 마무리 및 시사점
- 군집분석은 미국 50개 주의 범죄 데이터를 기반으로 정량적 패턴을 시각적으로 분류하는 강력한 방법입니다.
- USArrests는 데이터 크기도 적당하고 시각화까지 가능해 머신러닝 입문자, 지도 분석 학습자에게 매우 유용합니다.
- 실무적으로는 범죄 대응 전략, 예산 배분, 정책 설계 등에 활용할 수 있는 분석 방식입니다.
'IT관련' 카테고리의 다른 글
| R로 배우는 회귀분석 실습 ( 베이징 미세먼지(PM2.5) 데이터 분석 ) (0) | 2025.04.24 |
|---|---|
| 지금 세상을 바꾸고 있는 기술, 생성형 AI란? (0) | 2025.04.24 |
| R 머신러닝, iris 품종 예측하기 (0) | 2025.04.17 |
| R을 활용한 당뇨병 데이터 분류 분석 (0) | 2025.04.16 |
| 수면 시간과 스트레스가 수면의 질에 어떤 영향을 줄까? ( + R 회귀분석 ) (0) | 2025.04.09 |