역별, 시간대별로 유사한 패턴이 일어나는 곳은 주거지역, 업무지역, 유흥가, 대학가 등등으로 분류가 될 것으로 예상했다.
우선 kmeans clustering시 클러스터간 거리의 합이 유의하게 줄어드는 지점을 찾기 위해 아래와 클러스터 개수별 거리의 합을 그래프로 그렸다.
# Data Import
d <- read.csv("subway_congestion.csv", header=FALSE, encoding="utf-8")
head(d)
# 3행을 header로 사용, 소문자로 변환
colnames(d) <- apply(d[2, ], 1, print)
colnames(d) <- tolower(colnames(d))
# 1,2행을 날리고 column명을 재지정하자
d <- d[c(-1,-2), ]
# 평일 데이터만 추리기
d <- d[d$day_of_wk == "평일", ]
head(d)
# 기준년도도 2013으로 동일하니 날리자.
d$year <- NULL
# 상/하행, 내/외선 이름 합치기
d$stn_nm <- paste(d$stn_nm, d$train_cs, sep=".")
d$train_cs <- NULL
head(d)
d3 <- d
# data frame의 column을 숫자 형태로 바꾸고, 데이터를 정규화
d3[, 1:20] <- sapply(d3, as.numeric)
d3 <- scale(d3)
wss <- 0
# 그래프에서 거리의 제곱합이 최소가 되는 지점 (클러스터의 개수) 을 찾아야 한다.
for(i in 1:15) wss[i] <- sum(kmeans(d3, centers=i)$withinss)
plot(1:15, wss, type="b", xlab="Number of Clusters", ylab="Within group sum of squares")
약 4~5개 정도부터 유의하게 줄어드는 것으로 보고, 클러스터링 수행.
#### Clustering
d3 <- d
d3$day_of_wk <- NULL
d3$line_no <- NULL
d3$stn_nm <- NULL
# k=5로 kmeans clustering 수행
kc <- kmeans(d3, 5)
d3 <- cbind(d3, kc$cluster)
d3 <- cbind(d3, d$stn_nm)
head(d3)
colnames(d3) <- c("cluster", "stn_nm")
d3[d3$cluster==1, 2] # 클러스터 1
d3[d3$cluster==2, 2] # 클러스터 2
아래는 각 클러스터별 해당 역 리스트.
내선, 외선의 구분도 필요하고 하지만, 모여있는 역들을 보면 왠지 클러스터4가 주요 업무 지역인 것으로 예측된다.
강남, 종로, 삼성, 을지로3가, ...
클러스터별 무슨 의미인지는 클러스터 개수도 변화를 주고, 시간대별로 잘라보기도 하고 등등을 더 해야할 것 같지만 귀찮으니 패스.
> d3[d3$cluster==1, 2]
[1] 동대문.하선 동묘앞.하선 신설동.하선
[4] 제기동.하선 청량리(지하).하선 교대.외선
[7] 낙성대.외선 당산.내선 도림천.외선
[10] 문래.내선 방배.외선 봉천.외선
[13] 사당.외선 서울대입구.외선 서초.외선
[16] 신도림.내선 신림.외선 신정네거리.외선
[19] 신천.내선 신촌.내선 아현.내선
[22] 양천구청.외선 영등포구청.내선 이대입구.내선
[25] 잠실.내선 종합운동장.내선 충정로.내선
[28] 합정.내선 홍대입구.내선 경복궁.하선
[31] 녹번.하선 독립문.하선 무악재.하선
[34] 불광.하선 안국.하선 종로3가.하선
[37] 홍제.하선 길음.하선 동대문.하선
[40] 동대문역사문화공원.하선 미아.하선 미아사거리.하선
[43] 성신여대.하선 수유.하선 한성대입구.하선
[46] 혜화.하선
> d3[d3$cluster==2, 2]
[1] 서울역.상선 서울역.하선 시청.상선
[4] 시청.하선 종각.상선 청량리(지하).상선
[7] 강변.내선 강변.외선 건대입구.내선
[10] 건대입구.외선 구의.내선 구의.외선
[13] 동대문역사문화공원.내선 뚝섬.내선 뚝섬.외선
[16] 상왕십리.내선 상왕십리.외선 성내.내선
[19] 성내.외선 성수.내선 성수.외선
[22] 시청.내선 신당.내선 신당.외선
[25] 신정네거리.내선 왕십리.내선 왕십리.외선
[28] 을지3가.외선 을지입구.내선 을지입구.외선
[31] 잠실.외선 한양대.내선 한양대.외선
[34] 남부터미널.하선 녹번.상선 도곡.상선
[37] 매봉.상선 매봉.하선 불광.상선
[40] 양재.상선 양재.하선 연신내.하선
[43] 지축.상선 지축.하선 동작.상선
[46] 동작.하선 명동.하선 미아.상선
[49] 사당.상선 사당.하선 삼각지.상선
[52] 삼각지.하선 서울역.상선 서울역.하선
[55] 수유.상선 숙대입구.상선 숙대입구.하선
[58] 신용산.상선 신용산.하선 쌍문.하선
[61] 이촌.상선 이촌.하선 총신대입구.상선
[64] 총신대입구.하선 충무로.하선 회현.상선
[67] 회현.하선
> d3[d3$cluster==3, 2]
[1] 동대문.상선 동묘앞.상선 신설동.상선
[4] 제기동.상선 종로3가.상선 종로5가.상선
[7] 강남.내선 교대.내선 낙성대.내선
[10] 당산.외선 도림천.내선 방배.내선
[13] 봉천.내선 사당.내선 삼성.외선
[16] 서울대입구.내선 서초.내선 선릉.외선
[19] 시청.외선 신도림(지선).내선 신천.외선
[22] 신촌.외선 아현.외선 양천구청.내선
[25] 이대입구.외선 종합운동장.외선 충정로.외선
[28] 합정.외선 홍대입구.외선 경복궁.상선
[31] 금호.상선 독립문.상선 동대입구.상선
[34] 무악재.상선 신사.상선 안국.상선
[37] 압구정.상선 약수.상선 옥수.상선
[40] 을지3가.상선 종로3가.상선 충무로.상선
[43] 홍제.상선 길음.상선 남태령.하선
[46] 동대문.상선 동대문역사문화공원.상선 명동.상선
[49] 미아사거리.상선 성신여대.상선 충무로.상선
[52] 한성대입구.상선 혜화.상선
> d3[d3$cluster==4, 2]
[1] 종각.하선 종로3가.하선 종로5가.하선 강남.외선
[5] 구로디지털단지.내선 구로디지털단지.외선 대림.내선 대림.외선
[9] 문래.외선 삼성.내선 선릉.내선 신대방.내선
[13] 신대방.외선 신도림.외선 신림.내선 역삼.내선
[17] 역삼.외선 영등포구청.외선 고속터미널.상선 고속터미널.하선
[21] 교대.상선 교대.하선 금호.하선 남부터미널.상선
[25] 동대입구.하선 신사.하선 압구정.하선 약수.하선
[29] 옥수.하선 을지3가.하선 잠원.상선 잠원.하선
[33] 충무로.하선 남태령.상선
> d3[d3$cluster==5, 2]
[1] 까치산.내선 까치산.외선 동대문역사문화공원.외선
[4] 성수(지선).내선 성수(지선).외선 신답.내선
[7] 신답.외선 신도림(지선).외선 신설동.내선
[10] 신설동.외선 용답.내선 용답.외선
[13] 용두.내선 용두.외선 을지3가.내선
[16] 을지4가.내선 을지4가.외선 가락시장.상선
[19] 가락시장.하선 경찰병원.상선 경찰병원.하선
[22] 구파발.상선 구파발.하선 대청.상선
[25] 대청.하선 대치.상선 대치.하선
[28] 도곡.하선 수서.상선 수서.하선
[31] 연신내.상선 오금.상선 오금.하선
[34] 일원.상선 일원.하선 학여울.상선
[37] 학여울.하선 노원.상선 노원.하선
[40] 당고개.상선 당고개.하선 상계.상선
[43] 상계.하선 쌍문.상선 창동.상선
[46] 창동.하선
댓글 없음:
댓글 쓰기