-
R을 이용한 간단한 데이터 시각화Programming & Machine Learning/R X 머신러닝 2017. 7. 21. 16:33
ggplot, googleVis, ggmap을 이용한 간단한 시각화
1. 지하철 유동인구 지도표시
1.1 ggmap, ggplot2, leaflet 활용
지하철 역, 일자, 하루 총 이용객, 시간대별 이용객 feature를 가진 subway.csv라는 파일에서, 구글 맵을 이용하여 지하철 유동인구를 지하철 역별로 시각화 해보는 연습. 먼저 두가지 방법으로 데이터를 전처리 하였다. 첫 번째로 2012년 5월 8일의 지하철 역 별 유동인구를 시각화했고, 두 번째로 2013년 총 유동인구가 가장 많은 지하철 역을 10순위까지 시각화 하였다.
subway = read.csv("subway.csv", header = T, fileEncoding="utf-8") subway_lonlat = read.csv("subway_latlong.csv", header = T, fileEncoding="utf-8") head(subway) colnames(subway_lonlat) = c("station", "stat_name", "LINE_NUM", "FR_CODE", "CYBER_ST_CODE", "XPOINT", "YPOINT", "XPOINT_WGS", "YPOINT_WGS") merged_subway = merge(x=subway, y=subway_lonlat, by="station") data_2012_05_08 = subset(merged_subway, income_date=="20120508", select=c("XPOINT_WGS", "YPOINT_WGS", "on_tot", "stat_name.x", "LINE_NUM")) str(data_2012_05_08) data_2012_05_08$YPOINT_WGS <- droplevels(data_2012_05_08$YPOINT_WGS) data_2012_05_08$XPOINT_WGS <- droplevels(data_2012_05_08$XPOINT_WGS) data_2012_05_08$YPOINT_WGS <- as.character(data_2012_05_08$YPOINT_WGS) data_2012_05_08$XPOINT_WGS <- as.character(data_2012_05_08$XPOINT_WGS) data_2012_05_08$YPOINT_WGS <- as.numeric(data_2012_05_08$YPOINT_WGS) data_2012_05_08$XPOINT_WGS <- as.numeric(data_2012_05_08$XPOINT_WGS) library(lubridate) str(merged_subway) merged_subway$year <- substring(as.character(merged_subway$income_date),1,4) library(doBy) temp = summaryBy(on_tot~stat_name.x+year+YPOINT_WGS+XPOINT_WGS, merged_subway, FUN = sum) data_2013 <- subset(temp, year=="2013") data_2013$YPOINT_WGS <- droplevels(data_2013$YPOINT_WGS) data_2013$XPOINT_WGS <- droplevels(data_2013$XPOINT_WGS) data_2013$YPOINT_WGS <- as.character(data_2013$YPOINT_WGS) data_2013$XPOINT_WGS <- as.character(data_2013$XPOINT_WGS) data_2013$YPOINT_WGS <- as.numeric(data_2013$YPOINT_WGS) data_2013$XPOINT_WGS <- as.numeric(data_2013$XPOINT_WGS) data_2013_top10 <- data_2013[with(data_2013, order(on_tot.sum, decreasing = T)), ][1:10,] data_2013_top10_fortext <- data_2013_top10 data_2013_top10_fortext$year <- NULL data_2013_top10_fortext$on_tot.sum <- NULL data_2013_top10_fortext$stat_name.x <- as.character(data_2013_top10_fortext$stat_name.x)
아래는 위 두 가지 상황에 대한 시각화 결과이다.
1.2 googleVis 활용
위의 데이터를 그대로 활용하여, 일자별로 특정 관측값의 경향을 캘린더의 형태로 볼 수 있게 해주는 googleVis의 gvisCalendar를 사용하였다. 광화문역과 답십리역의 캘린더를 비교하여, 두 역에서 유동인구의 일별 변화가 어떻게 되는지 살펴보았다.
library(googleVis) library(lubridate) subway_specific_gwanghwa = subset(subway, stat_name=="광화문") subway_specific_gwanghwa$income_date = ymd(subway_specific_gwanghwa$income_date) Subway_graph <- gvisCalendar(subway_specific_gwanghwa, datevar="income_date", numvar="on_tot", options=list( title="Daily traffic in Seoul", height=320, calendar="{yearLabel: { fontName: 'Times-Roman', fontSize: 32, color: '#1A8763', bold: true}, cellSize: 10, cellColor: { stroke: 'red', strokeOpacity: 0.2 }, focusedCellColor: {stroke:'red'}}") ) plot(Subway_graph) subway_specific_dap = subset(subway, stat_name=="답십리") subway_specific_dap$income_date = ymd(subway_specific_dap$income_date) Subway_graph <- gvisCalendar(subway_specific_dap, datevar="income_date", numvar="on_tot", options=list( title="Daily traffic in Seoul", height=320, calendar="{yearLabel: { fontName: 'Times-Roman', fontSize: 32, color: '#1A8763', bold: true}, cellSize: 10, cellColor: { stroke: 'red', strokeOpacity: 0.2 }, focusedCellColor: {stroke:'red'}}") ) plot(Subway_graph)
CalendarID3af4535d3cf1 Data: subway_specific_gwanghwa • Chart ID: CalendarID3af4535d3cf1 • googleVis-0.6.2
R version 3.4.0 (2017-04-21) • Google Terms of Use • Documentation and Data PolicyCalendarID3af4e4c1cf9 Data: subway_specific_dap • Chart ID: CalendarID3af4e4c1cf9 • googleVis-0.6.2
R version 3.4.0 (2017-04-21) • Google Terms of Use • Documentation and Data Policy--> R에서 위 코드를 시행하면 로컬 웹브라우저로 실행이 되는데, 브라우저의 개발자코드를 뜯어서 블로그에 임베딩 하였다.
'Programming & Machine Learning > R X 머신러닝' 카테고리의 다른 글
R을 이용한 머신러닝 - 6 (랜덤 포레스트 개념과 적용) (0) 2017.07.18 R을 이용한 머신러닝 - 5 (의사결정 트리) (0) 2017.07.14 R을 이용한 머신러닝 - 4 (로지스틱 회귀모델을 이용한 분류 문제) (0) 2017.07.14 R을 이용한 머신러닝 - 3 (분류와 클러스터링 : K-NN, K-means) (0) 2017.07.13 R을 이용한 통계분석 -5 (실제 데이터를 이용한 시계열 분석) (0) 2017.07.11 댓글