-
시각화 - D3.jsR 2020. 7. 9. 18:23
시각화
보고를 위한 그래프 그리기
D3.sj 와 그 외 JS 그래프
-
D3.js 는 html, javascirpt 로 만들 수 있는 그래프
-
R에서는 rCharts 를 이용 html, js를 몰라도 사용 가능
-
rChart : JS 라이브러리를 R 에서 직접 사용하게 해주는 패키지
-
D3.js 는 인터랙티브 그래프
install.packages('devtools')
also installing the dependencies 'ini', 'gh', 'rematch2', 'rex', 'crosstalk', 'xopen', 'brew', 'usethis', 'covr', 'DT', 'git2r', 'memoise', 'rcmdcheck', 'remotes', 'roxygen2', 'rversions', 'sessioninfo' package 'ini' successfully unpacked and MD5 sums checked package 'gh' successfully unpacked and MD5 sums checked package 'rematch2' successfully unpacked and MD5 sums checked package 'rex' successfully unpacked and MD5 sums checked package 'crosstalk' successfully unpacked and MD5 sums checked package 'xopen' successfully unpacked and MD5 sums checked package 'brew' successfully unpacked and MD5 sums checked package 'usethis' successfully unpacked and MD5 sums checked package 'covr' successfully unpacked and MD5 sums checked package 'DT' successfully unpacked and MD5 sums checked package 'git2r' successfully unpacked and MD5 sums checked package 'memoise' successfully unpacked and MD5 sums checked package 'rcmdcheck' successfully unpacked and MD5 sums checked package 'remotes' successfully unpacked and MD5 sums checked package 'roxygen2' successfully unpacked and MD5 sums checked package 'rversions' successfully unpacked and MD5 sums checked package 'sessioninfo' successfully unpacked and MD5 sums checked package 'devtools' successfully unpacked and MD5 sums checked The downloaded binary packages are in C:\Users\205\AppData\Local\Temp\Rtmpor9cPd\downloaded_packages
# rChart 설치 - Github library(devtools)
Warning message: "package 'devtools' was built under R version 4.0.2" Loading required package: usethis Warning message: "package 'usethis' was built under R version 4.0.2"
install.packages('devtools')
Warning message: "package 'devtools' is in use and will not be installed"
install.packages('Rtools')
Warning message: "package 'Rtools' is not available (for R version 4.0.1)"
Rtools Error일 경우
-
사용하는 R 버젼에 맞춰서 설치
install_github('saurfang/rCharts', ref='utf8-writelines')
Downloading GitHub repo saurfang/rCharts@utf8-writelines RCurl (NA -> 1.98-1.2) [CRAN] RJSONIO (NA -> 1.3-1.4 ) [CRAN] bitops (NA -> 1.0-6 ) [CRAN] Installing 3 packages: RCurl, RJSONIO, bitops package 'RCurl' successfully unpacked and MD5 sums checked package 'RJSONIO' successfully unpacked and MD5 sums checked package 'bitops' successfully unpacked and MD5 sums checked The downloaded binary packages are in C:\Users\205\AppData\Local\Temp\Rtmpor9cPd\downloaded_packages [32m√[39m [90mchecking for file 'C:\Users\205\AppData\Local\Temp\Rtmpor9cPd\remotes18c073dc4dfd\saurfang-rCharts-e0106ed/DESCRIPTION'[39m[36m[39m [90m-[39m[90m [39m[90mpreparing 'rCharts':[39m[36m[36m (5.6s)[36m[39m [32m√[39m [90mchecking DESCRIPTION meta-information[39m[36m[39m [90m-[39m[90m [39m[90mchecking for LF line-endings in source and make files and shell scripts[39m[36m[39m [90m-[39m[90m [39m[90mchecking for empty or unneeded directories[39m[36m[39m [90m-[39m[90m [39m[90mbuilding 'rCharts_0.4.5.tar.gz'[39m[36m[39m
Rcpp 오류시 conda consol에서 설치
conda install -c conda-forge r-rcpp
32비트의 경우 64비트 아나콘다 설치 후 가상환경 만들고 재시도
# 개발자 제공 기본 예제 해보기 library('rCharts')
hair_eye_male <- subset(as.data.frame(HairEyeColor), Sex == 'Male') n1 <- nPlot(Freq ~ Hair, group='Eye', data=hair_eye_male, type='multiBarChart') n1
nPlot()
-
D3.js의 NVD3 라이브러리 기반
# 데이터 적재 df <- read.csv('r-ggagi-data/example_studentlist2.csv') attach(df)
# 산포도 그리기 type='scatterChart' n1 <- nPlot(data = df, height~weight, group='sex', type='scatterChart') n1
# 파이 차트 그리기 type='pieChart' n2 <- nPlot(data = df, ~bloodtype, type='pieChart') n2
# 파이 차트 => 도넛 차트 n2$chart(donut=T) n2
library(dplyr)
# 멀티 막대그래프 # 도수를 자동으로 처리해 주지 않음 # 단축키 Ctrl + Shift + M = %>% : 체인역할을 함 + 의식의 흐름대로 작성 가능 df2 <- df %>% group_by(bloodtype, sex) %>% summarise(n=n())
`summarise()` regrouping output by 'bloodtype' (override with `.groups` argument)
n4 <- nPlot(data=df2, n~bloodtype, group='sex', type='multiBarChart') n4
# 라인차트 ts <- read.csv('r-ggagi-data/example_ts2.csv')
ts$time <- as.Date(ts$time) ts2 <- ts %>% filter(year == 2014) head(ts2)
A data.frame: 6 × 3 time sales year <date> <int> <int> 1 2014-01-01 4510 2014 2 2014-01-08 5063 2014 3 2014-01-15 3694 2014 4 2014-01-22 3768 2014 5 2014-01-29 3850 2014 6 2014-02-05 4300 2014 n5 <- nPlot(data=ts2, sales~time, type='lineChart') # X축 time 값이 이상함 n5
# x축 time 값 변환 xAxis() n5$xAxis(tickFormat = "#! function(d) { return d3.time.format('%Y-%m-%d') (new Date(d*1000*3600*24)); } !#", rotateLabels = -45) n5
# 누적 영역 차트 ts3 <- read.csv('r-ggagi-data/example_ts3.csv') head(ts3$time)
- '2014-01-01'
- '2014-01-08'
- '2014-01-15'
- '2014-01-22'
- '2014-01-29'
- '2014-02-05'
ts3$time <- as.Date(ts3$time) head(ts3$time) n6 <- nPlot(data=ts3, sales~time, group='product', type='stackedAreaChart') # x축 time 값이 이상함 n6
# X축 time 값 변환 xAxis() n6$xAxis(tickFormat = "#! function(d) { return d3.time.format('%Y-%m-%d') (new Date(d*1000*3600*24)); } !#", rotateLabels = -45) n6
# 라인포커스 - 2개 그래프, 아래 그래프는 네비게이터 n7 <- nPlot(data = ts3, sales~time, group = 'product', type='lineWithFocusChart') # X축 time 값이 이상함 n7$xAxis(tickFormat = "#! function(d) { return d3.time.format('%Y-%m-%d') (new Date(d*1000*3600*24)); } !#", rotateLabels = -15) n7
head(ts3)
A data.frame: 6 × 3 time sales product <date> <int> <chr> 1 2014-01-01 4716 product1 2 2014-01-08 4875 product1 3 2014-01-15 4570 product1 4 2014-01-22 3798 product1 5 2014-01-29 3987 product1 6 2014-02-05 3571 product1 Sankey Diagram으로 예산 한눈에 보기
-
러시아로 출발한 나폴레옹 병력 수 변화 그래프로 유명
설치
-
https://github.com/timelyportfolio/rCharts_d3_sankey download
-
작업폴더에 libraries/압축풀기
# library load library(dplyr) library(rCharts)
# Data set : 2015년 예산안 DF <- read.csv('r-ggagi-data/example_2015_expenditure.csv') str(DF)
'data.frame': 62 obs. of 6 variables: $ 소관명 : chr "A부서" "A부서" "A부서" "A부서" ... $ 회계명 : chr "과학관관련" "과학관관련" "과학관관련" "과학관" ... $ 분야명 : chr "기술" "기술" "기술" "기술" ... $ 부문명 : chr "기술일반" "기술일반" "기술일반" "기술일반" ... $ 프로그램명 : chr "계정간거래" "과학관관련운영" "회계기금간거래" "계정간거래" ... $ sum.확정안.: num 1301000 25336500 486000 1501000 31113145 ...
# 원본 복사 DF2 <- DF
# sum. 확정안 이름 및 단위 변경 (원 => 천원) colnames(DF2)[6] <- 'value' DF2['value'] <- round(DF2['value']/1000) head(DF2)
A data.frame: 6 × 6 소관명 회계명 분야명 부문명 프로그램명 value <chr> <chr> <chr> <chr> <chr> <dbl> 1 A부서 과학관관련 기술 기술일반 계정간거래 1301 2 A부서 과학관관련 기술 기술일반 과학관관련운영 25336 3 A부서 과학관관련 기술 기술일반 회계기금간거래 486 4 A부서 과학관 기술 기술일반 계정간거래 1501 5 A부서 과학관 기술 기술일반 과학관운영 31113 6 A부서 과학관 기술 기술일반 회계기금간거래 419 # 데이터 전처리 DF3 <- DF2
# Sankey Diagram은 모든 노드 1차원, 각각은 sum으로 합산되어 있어야 함 # 소관명노드 => 회계명노드 sum1 <- DF3 %>% group_by(소관명, 회계명) %>% summarise(sum(value)) sum2 <- DF3 %>% group_by(회계명, 분야명) %>% summarise(sum(value)) sum3 <- DF3 %>% group_by(분야명, 부문명) %>% summarise(sum(value)) sum4 <- DF3 %>% group_by(부문명, 프로그램명) %>% summarise(sum(value))
`summarise()` regrouping output by '소관명' (override with `.groups` argument) `summarise()` regrouping output by '회계명' (override with `.groups` argument) `summarise()` regrouping output by '분야명' (override with `.groups` argument) `summarise()` regrouping output by '부문명' (override with `.groups` argument)
sum1
A grouped_df: 8 × 3 소관명 회계명 sum(value) <chr> <chr> <dbl> A부서 과학관 33033 A부서 과학관관련 27123 A부서 발전균형특별회계 3499882 A부서 보험특별회계 609665 A부서 사업특별회계 1110638 A부서 에너지및자원사업특별회계 579411 A부서 예금특별회계 1115288 A부서 일반회계 6763710 # Sankey Diagram은 'source', 'target', 'value' 구성되어야 함 colnames(sum1) <- c("source", "target", "value") colnames(sum2) <- c("source", "target", "value") colnames(sum3) <- c("source", "target", "value") colnames(sum4) <- c("source", "target", "value")
head(sum1)
A grouped_df: 6 × 3 source target value <chr> <chr> <dbl> A부서 과학관 33033 A부서 과학관관련 27123 A부서 발전균형특별회계 3499882 A부서 보험특별회계 609665 A부서 사업특별회계 1110638 A부서 에너지및자원사업특별회계 579411 # 하나의 객체로 bind sum1 <- as.data.frame(sum1) sum2 <- as.data.frame(sum2) sum3 <- as.data.frame(sum3) sum4 <- as.data.frame(sum4) DF4 <- rbind(sum1, sum2, sum3, sum4)
head(DF4) tail(DF4)
A data.frame: 6 × 3 source target value <chr> <chr> <dbl> 1 A부서 과학관 33033 2 A부서 과학관관련 27123 3 A부서 발전균형특별회계 3499882 4 A부서 보험특별회계 609665 5 A부서 사업특별회계 1110638 6 A부서 에너지및자원사업특별회계 579411 A data.frame: 6 × 3 source target value <chr> <chr> <dbl> 76 정운사업 회계간거래 108173 77 정운사업 회계간거래(전출금) 978939 78 정운사업 회계기금간거래 234343 79 정운사업 회계기금간거래(전출금) 26000 80 평생·직업교육 연구공동체활성화 26600 81 평생·직업교육 평생직업교육체제구축 17974 # library load sankeyPlot <- rCharts$new() # rChart 객체 생성 sankeyPlot$setLib('r-ggagi-data/libraries/sankey') # rChart 속성 지정 sankeyPlot$setTemplate(script = "r-ggagi-data/libraries/sankey/layouts/chart.html") # rChart 속성 지정
# 그래프 속성 지정 sankeyPlot$set( data = DF4, nodeWidth = 15, nodePadding = 13, layout = 300, width = 900, height = 600, units = "천원", title = "Sankey Diagram" )
# 그래프 실행 - 라인두께가 예산 금액 # 예산이 어디로 흘러가는 지 한눈에 알 수 있음 sankeyPlot
작년에 구입한 아파트는 올랐을까?
-
New York Times Visualization Lab 뉴욕타임즈 시각화 팀
-
https://www.nytimes.com/interactive/2014/01/23/business/case-shiller-slider.html
-
미국 지역 / 구입년도 선택하면 집값 변동과 다른 지역의 상대적인 변화도 보여줌
서울 / 구단위 아파트 가격 변화
-
Data set : 국토교통부 실거래가 공개 시스템 데이터 2006~2014
# library load library(readxl) library(dplyr) library(stringr) library(rCharts)
Warning message: "package 'readxl' was built under R version 4.0.2" Warning message: "package 'dplyr' was built under R version 4.0.2" Attaching package: 'dplyr' The following objects are masked from 'package:stats': filter, lag The following objects are masked from 'package:base': intersect, setdiff, setequal, union Warning message: "package 'stringr' was built under R version 4.0.2"
# 데이터 로드 - sprintf() files <- sprintf('%4d년_%02d월_전국_실거래가_아파트(매매).xls', rep(2006:2014, each=12), 1:12)
files
- '2006년_01월_전국_실거래가_아파트(매매).xls'
- '2006년_02월_전국_실거래가_아파트(매매).xls'
- '2006년_03월_전국_실거래가_아파트(매매).xls'
- '2006년_04월_전국_실거래가_아파트(매매).xls'
- '2006년_05월_전국_실거래가_아파트(매매).xls'
- '2006년_06월_전국_실거래가_아파트(매매).xls'
- '2006년_07월_전국_실거래가_아파트(매매).xls'
- '2006년_08월_전국_실거래가_아파트(매매).xls'
- '2006년_09월_전국_실거래가_아파트(매매).xls'
- '2006년_10월_전국_실거래가_아파트(매매).xls'
- '2006년_11월_전국_실거래가_아파트(매매).xls'
- '2006년_12월_전국_실거래가_아파트(매매).xls'
- '2007년_01월_전국_실거래가_아파트(매매).xls'
- '2007년_02월_전국_실거래가_아파트(매매).xls'
- '2007년_03월_전국_실거래가_아파트(매매).xls'
- '2007년_04월_전국_실거래가_아파트(매매).xls'
- '2007년_05월_전국_실거래가_아파트(매매).xls'
- '2007년_06월_전국_실거래가_아파트(매매).xls'
- '2007년_07월_전국_실거래가_아파트(매매).xls'
- '2007년_08월_전국_실거래가_아파트(매매).xls'
- '2007년_09월_전국_실거래가_아파트(매매).xls'
- '2007년_10월_전국_실거래가_아파트(매매).xls'
- '2007년_11월_전국_실거래가_아파트(매매).xls'
- '2007년_12월_전국_실거래가_아파트(매매).xls'
- '2008년_01월_전국_실거래가_아파트(매매).xls'
- '2008년_02월_전국_실거래가_아파트(매매).xls'
- '2008년_03월_전국_실거래가_아파트(매매).xls'
- '2008년_04월_전국_실거래가_아파트(매매).xls'
- '2008년_05월_전국_실거래가_아파트(매매).xls'
- '2008년_06월_전국_실거래가_아파트(매매).xls'
- '2008년_07월_전국_실거래가_아파트(매매).xls'
- '2008년_08월_전국_실거래가_아파트(매매).xls'
- '2008년_09월_전국_실거래가_아파트(매매).xls'
- '2008년_10월_전국_실거래가_아파트(매매).xls'
- '2008년_11월_전국_실거래가_아파트(매매).xls'
- '2008년_12월_전국_실거래가_아파트(매매).xls'
- '2009년_01월_전국_실거래가_아파트(매매).xls'
- '2009년_02월_전국_실거래가_아파트(매매).xls'
- '2009년_03월_전국_실거래가_아파트(매매).xls'
- '2009년_04월_전국_실거래가_아파트(매매).xls'
- '2009년_05월_전국_실거래가_아파트(매매).xls'
- '2009년_06월_전국_실거래가_아파트(매매).xls'
- '2009년_07월_전국_실거래가_아파트(매매).xls'
- '2009년_08월_전국_실거래가_아파트(매매).xls'
- '2009년_09월_전국_실거래가_아파트(매매).xls'
- '2009년_10월_전국_실거래가_아파트(매매).xls'
- '2009년_11월_전국_실거래가_아파트(매매).xls'
- '2009년_12월_전국_실거래가_아파트(매매).xls'
- '2010년_01월_전국_실거래가_아파트(매매).xls'
- '2010년_02월_전국_실거래가_아파트(매매).xls'
- '2010년_03월_전국_실거래가_아파트(매매).xls'
- '2010년_04월_전국_실거래가_아파트(매매).xls'
- '2010년_05월_전국_실거래가_아파트(매매).xls'
- '2010년_06월_전국_실거래가_아파트(매매).xls'
- '2010년_07월_전국_실거래가_아파트(매매).xls'
- '2010년_08월_전국_실거래가_아파트(매매).xls'
- '2010년_09월_전국_실거래가_아파트(매매).xls'
- '2010년_10월_전국_실거래가_아파트(매매).xls'
- '2010년_11월_전국_실거래가_아파트(매매).xls'
- '2010년_12월_전국_실거래가_아파트(매매).xls'
- '2011년_01월_전국_실거래가_아파트(매매).xls'
- '2011년_02월_전국_실거래가_아파트(매매).xls'
- '2011년_03월_전국_실거래가_아파트(매매).xls'
- '2011년_04월_전국_실거래가_아파트(매매).xls'
- '2011년_05월_전국_실거래가_아파트(매매).xls'
- '2011년_06월_전국_실거래가_아파트(매매).xls'
- '2011년_07월_전국_실거래가_아파트(매매).xls'
- '2011년_08월_전국_실거래가_아파트(매매).xls'
- '2011년_09월_전국_실거래가_아파트(매매).xls'
- '2011년_10월_전국_실거래가_아파트(매매).xls'
- '2011년_11월_전국_실거래가_아파트(매매).xls'
- '2011년_12월_전국_실거래가_아파트(매매).xls'
- '2012년_01월_전국_실거래가_아파트(매매).xls'
- '2012년_02월_전국_실거래가_아파트(매매).xls'
- '2012년_03월_전국_실거래가_아파트(매매).xls'
- '2012년_04월_전국_실거래가_아파트(매매).xls'
- '2012년_05월_전국_실거래가_아파트(매매).xls'
- '2012년_06월_전국_실거래가_아파트(매매).xls'
- '2012년_07월_전국_실거래가_아파트(매매).xls'
- '2012년_08월_전국_실거래가_아파트(매매).xls'
- '2012년_09월_전국_실거래가_아파트(매매).xls'
- '2012년_10월_전국_실거래가_아파트(매매).xls'
- '2012년_11월_전국_실거래가_아파트(매매).xls'
- '2012년_12월_전국_실거래가_아파트(매매).xls'
- '2013년_01월_전국_실거래가_아파트(매매).xls'
- '2013년_02월_전국_실거래가_아파트(매매).xls'
- '2013년_03월_전국_실거래가_아파트(매매).xls'
- '2013년_04월_전국_실거래가_아파트(매매).xls'
- '2013년_05월_전국_실거래가_아파트(매매).xls'
- '2013년_06월_전국_실거래가_아파트(매매).xls'
- '2013년_07월_전국_실거래가_아파트(매매).xls'
- '2013년_08월_전국_실거래가_아파트(매매).xls'
- '2013년_09월_전국_실거래가_아파트(매매).xls'
- '2013년_10월_전국_실거래가_아파트(매매).xls'
- '2013년_11월_전국_실거래가_아파트(매매).xls'
- '2013년_12월_전국_실거래가_아파트(매매).xls'
- '2014년_01월_전국_실거래가_아파트(매매).xls'
- '2014년_02월_전국_실거래가_아파트(매매).xls'
- '2014년_03월_전국_실거래가_아파트(매매).xls'
- '2014년_04월_전국_실거래가_아파트(매매).xls'
- '2014년_05월_전국_실거래가_아파트(매매).xls'
- '2014년_06월_전국_실거래가_아파트(매매).xls'
- '2014년_07월_전국_실거래가_아파트(매매).xls'
- '2014년_08월_전국_실거래가_아파트(매매).xls'
- '2014년_09월_전국_실거래가_아파트(매매).xls'
- '2014년_10월_전국_실거래가_아파트(매매).xls'
- '2014년_11월_전국_실거래가_아파트(매매).xls'
- '2014년_12월_전국_실거래가_아파트(매매).xls'
DF <- NULL for(i in 1:length(files)){ t <- read_excel(path=paste0("r-ggagi-data/rawdata","/",files[i]), sheet=1, col_names=T) t <- mutate(t, date=paste0(substr(files[i], 1,4), "-", month=substr(files[i], 7,8),"-10")) DF <- rbind(DF, t) }
head(DF)
A tibble: 6 × 11 시군구 본번 부번 단지명 전용면적(m2) 계약일 거래금액(만원) 층 건축년도 도로명주소 date <chr> <dbl> <dbl> <chr> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> 서울특별시 강남구 개포동 12 0 대청 39.53 21~31 22,300 15 1992 개포로109길 2006-01-10 서울특별시 강남구 개포동 12 0 대청 39.53 1~10 24,800 5 1992 개포로109길 2006-01-10 서울특별시 강남구 개포동 12 0 대청 39.53 11~20 23,720 15 1992 개포로109길 2006-01-10 서울특별시 강남구 개포동 12 0 대청 51.12 11~20 33,700 8 1992 개포로109길 2006-01-10 서울특별시 강남구 개포동 12 0 대청 60.00 11~20 44,000 14 1992 개포로109길 2006-01-10 서울특별시 강남구 개포동 12 0 대청 60.00 11~20 44,000 7 1992 개포로109길 2006-01-10 #안전을 위해 새로운 객체에 복사 DF2 <- DF
# 변수명 변경 - 한글 변수명 깨진 경우만 colnames(DF2) <- c("시군구", "본번", "부번", "단지명", "전용면적", "계약일", "거래금액", "층", "건축년도", "도로명주소", "date")
# 필요한 데이타 불러오기 DF3 <- data.frame(date=DF2$date, addr = DF2$시군구, val=DF2[['거래금액']], stringsAsFactors=T)
# 거래금액 value ',' 제거하기 위한 str_replace_all DF3[['val']] <- str_replace_all(DF3[['val']], ',', '')
# 데이터 형 변환 str(DF3) DF3[['val']] <- as.integer(DF3[['val']])
'data.frame': 588766 obs. of 3 variables: $ date: Factor w/ 108 levels "2006-01-10","2006-02-10",..: 1 1 1 1 1 1 1 1 1 1 ... $ addr: Factor w/ 326 levels "서울특별시 강남구 개포동",..: 1 1 1 1 1 1 1 1 1 1 ... $ val : chr "22300" "24800" "23720" "33700" ...
# 주소 변환 서울특별시 강남구 개포동 => 강남구 City <- str_split_fixed(DF3[,2], " ", 4) City <- data.frame(City) str(City)
'data.frame': 588766 obs. of 4 variables: $ X1: chr "서울특별시" "서울특별시" "서울특별시" "서울특별시" ... $ X2: chr "강남구" "강남구" "강남구" "강남구" ... $ X3: chr "개포동" "개포동" "개포동" "개포동" ... $ X4: chr "" "" "" "" ...
DF4 <- data.frame(date = DF3[,1], addr=City[,2], val=DF3[,3]) str(DF4)
'data.frame': 588766 obs. of 3 variables: $ date: Factor w/ 108 levels "2006-01-10","2006-02-10",..: 1 1 1 1 1 1 1 1 1 1 ... $ addr: chr "강남구" "강남구" "강남구" "강남구" ... $ val : int 22300 24800 23720 33700 44000 44000 45250 15900 18400 24700 ...
head(DF4)
A data.frame: 6 × 3 date addr val <fct> <chr> <int> 1 2006-01-10 강남구 22300 2 2006-01-10 강남구 24800 3 2006-01-10 강남구 23720 4 2006-01-10 강남구 33700 5 2006-01-10 강남구 44000 6 2006-01-10 강남구 44000 # 구별 평균 구하기 - 중앙값, 또는 면적별 평균등 다양하게 DF5 <- DF4 %>% group_by(date, addr) %>% summarise(mean(val)) head(DF5)
`summarise()` regrouping output by 'date' (override with `.groups` argument)
A grouped_df: 6 × 3 date addr mean(val) <fct> <chr> <dbl> 2006-01-10 강남구 76892.96 2006-01-10 강동구 39031.67 2006-01-10 강북구 18964.91 2006-01-10 강서구 25348.86 2006-01-10 관악구 24570.44 2006-01-10 광진구 37802.83 # 최종 데이터 정리 colnames(DF5)[3] <- "val" DF5[['date']] <- as.character(DF5[['date']]) DF5$val <- DF5$val/500 head(DF5)
A grouped_df: 6 × 3 date addr val <chr> <chr> <dbl> 2006-01-10 강남구 153.78591 2006-01-10 강동구 78.06334 2006-01-10 강북구 37.92981 2006-01-10 강서구 50.69771 2006-01-10 관악구 49.14088 2006-01-10 광진구 75.60566 # 그래프 그리기 g2 <- rCharts$new()
g2$setLib('r-ggagi-data/libraries/nyt_home') g2$setTemplate(script = "r-ggagi-data/libraries/nyt_home/layouts/nyt_home.html")
g2$set( description = "This data comes from the 'rt.molit.go.kr' dataset", data = DF5, groups = "addr" )
g2
# html로 출력하기 #cat(g2$html())
-