2019. 5. 7. 01:23ㆍR/Advanced

서울 지하철역의 위치에 따른 역 사용자 수를 시각적으로 파악하려면 어떻게 해야 할까?
역의 위치 정보와 사용자 수 정보를 각각 획득한 후 ggmap을 통하여 분류하면 될 것 같다
우선 지하철 역의 주소를 찾아 보자
http://data.seoul.go.kr/dataList/datasetView.do?infId=OA-12035&srvType=A&serviceKind=1


위 데이터를 불러온 후 역명, 호선, 주소를 가져온다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <code>library(tidyverse) library(ggmap) library(readxl) ######################################### # import subway address setwd( 'e:/R_study' ) raw.subway = read_excel( 'seoul_subway_address.xlsx' ) View(raw.subway) head(raw.subway) subway.add = raw.subway % > % select(c( 3 , 2 , 6 )) % > % rename(line = 호선, station = 역명, address = 상세주소) % > % separate(address, c( 'address' , 'etc' ), sep = '[(]' ) % > % select( - etc) < / code> |

한글 주소에서 geocode를 사용하여 경도와 위도를 얻은 후 col bind를 진행 해보자
1 2 3 4 5 6 7 8 9 10 11 12 | <code> ######################################### # generate coordinate with geocode register_google(key = '구글맵 API를 여기에 입력' ) coordinate = subway.add$address % > % enc2utf8() % > % geocode() ## merging subway.lon.lat = bind_cols(subway.add, coordinate) subway.lon.lat < / code> |

위경도 정보를 얻었으니, 서울 지도를 불러 온 후 위치를 표시해 보자
1 2 3 4 5 6 7 8 9 | <code> ######################################### # display subway position on map map .seoul = get_googlemap( 'seoul' , maptype = 'roadmap' , zoom = 11 ) ggmap( map .seoul) + geom_point(data = subway.lon.lat, aes(x = lon, y = lat), color = 'blue' ) < / code> |

지하철 별 사용자 수 데이터를 가져와 보자
공공데이터포털
국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Dataset)와 Open API로 제공하는 사이트입니다.
www.data.go.kr

이 데이터를 R로 불러온 후 날짜, 호선, 역명, 구분, 합계 데이터로 새로운 Tibble을 생성한다
1 2 3 4 5 6 7 8 9 10 11 12 13 | <code> ######################################### # import subway transforting capability raw.pop = read.csv( 'subway_pop.csv' ) % > % as.tibble subway.pop = raw.pop % > % select( - c( 6 : 25 ), - 3 ) % > % rename(date = 날짜, line = 호선, station = 역명, type = 구분, pop = 합.계) % > % separate(line, c( 'line' , 'etc' ), sep = 1 ) % > % select( - etc) subway.pop subway.lon.lat[ 1 , 2 ] < - '서울역' subway.lon.lat < / code> |

위경도 데이터와 사용자수 데이터를 left_join으로 병합한다
상하차 수 중 하차 데이터만 filter로 가져온다
#########################################
# left join coordinate and popuation
subway.merged = left_join(subway.pop, subway.lon.lat, by = c('station')) %>% na.omit()
subway.merged
subway.final = subway.merged %>%
filter(line.x == line.y) %>%
filter(type == '하차') %>%
select(-line.y) %>%
rename(line = line.x)
subway.final$date = as.Date(subway.final$date)
subway.final$line = as.factor(subway.final$line)

사용자수와 경위도 정보를 ggmap을 사용하여 표시해보자
1 2 3 4 5 6 7 8 9 10 11 | <code> ######################################### # display subway position on map subway.final map .seoul = get_googlemap( 'seoul' , maptype = 'roadmap' , zoom = 11 ) ggmap( map .seoul) + geom_point(data = subway.final, aes(x = lon, y = lat, size = pop, color = 'blue' )) < / code> |

역의 위치를 표시하는 점의 크기로 내리는 사용자의 수를 알 수 있다
'R > Advanced' 카테고리의 다른 글
R로 텔레그램봇에 메세지 보내기 (0) | 2019.06.02 |
---|---|
Tidyr을 활용한 데이터 정리 (0) | 2019.04.18 |