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)
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 Policy
R version 3.4.0 (2017-04-21) • Google Terms of Use • Documentation and Data Policy
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 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 |