ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 시각화 - D3.js
    R 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일 경우

    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
    √  checking for file 'C:\Users\205\AppData\Local\Temp\Rtmpor9cPd\remotes18c073dc4dfd\saurfang-rCharts-e0106ed/DESCRIPTION'
    -  preparing 'rCharts': (5.6s)
    √  checking DESCRIPTION meta-information
    -  checking for LF line-endings in source and make files and shell scripts
    -  checking for empty or unneeded directories
    -  building 'rCharts_0.4.5.tar.gz'

    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

    Grouped와 Stacked로 모양 변경 가능

    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)
    1. '2014-01-01'
    2. '2014-01-08'
    3. '2014-01-15'
    4. '2014-01-22'
    5. '2014-01-29'
    6. '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

    네비게이터로 범위 축소 or 확대 가능

    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으로 예산 한눈에 보기

    • 러시아로 출발한 나폴레옹 병력 수 변화 그래프로 유명

    설치

    # 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

    작년에 구입한 아파트는 올랐을까?

    서울 / 구단위 아파트 가격 변화

    • 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
    1. '2006년_01월_전국_실거래가_아파트(매매).xls'
    2. '2006년_02월_전국_실거래가_아파트(매매).xls'
    3. '2006년_03월_전국_실거래가_아파트(매매).xls'
    4. '2006년_04월_전국_실거래가_아파트(매매).xls'
    5. '2006년_05월_전국_실거래가_아파트(매매).xls'
    6. '2006년_06월_전국_실거래가_아파트(매매).xls'
    7. '2006년_07월_전국_실거래가_아파트(매매).xls'
    8. '2006년_08월_전국_실거래가_아파트(매매).xls'
    9. '2006년_09월_전국_실거래가_아파트(매매).xls'
    10. '2006년_10월_전국_실거래가_아파트(매매).xls'
    11. '2006년_11월_전국_실거래가_아파트(매매).xls'
    12. '2006년_12월_전국_실거래가_아파트(매매).xls'
    13. '2007년_01월_전국_실거래가_아파트(매매).xls'
    14. '2007년_02월_전국_실거래가_아파트(매매).xls'
    15. '2007년_03월_전국_실거래가_아파트(매매).xls'
    16. '2007년_04월_전국_실거래가_아파트(매매).xls'
    17. '2007년_05월_전국_실거래가_아파트(매매).xls'
    18. '2007년_06월_전국_실거래가_아파트(매매).xls'
    19. '2007년_07월_전국_실거래가_아파트(매매).xls'
    20. '2007년_08월_전국_실거래가_아파트(매매).xls'
    21. '2007년_09월_전국_실거래가_아파트(매매).xls'
    22. '2007년_10월_전국_실거래가_아파트(매매).xls'
    23. '2007년_11월_전국_실거래가_아파트(매매).xls'
    24. '2007년_12월_전국_실거래가_아파트(매매).xls'
    25. '2008년_01월_전국_실거래가_아파트(매매).xls'
    26. '2008년_02월_전국_실거래가_아파트(매매).xls'
    27. '2008년_03월_전국_실거래가_아파트(매매).xls'
    28. '2008년_04월_전국_실거래가_아파트(매매).xls'
    29. '2008년_05월_전국_실거래가_아파트(매매).xls'
    30. '2008년_06월_전국_실거래가_아파트(매매).xls'
    31. '2008년_07월_전국_실거래가_아파트(매매).xls'
    32. '2008년_08월_전국_실거래가_아파트(매매).xls'
    33. '2008년_09월_전국_실거래가_아파트(매매).xls'
    34. '2008년_10월_전국_실거래가_아파트(매매).xls'
    35. '2008년_11월_전국_실거래가_아파트(매매).xls'
    36. '2008년_12월_전국_실거래가_아파트(매매).xls'
    37. '2009년_01월_전국_실거래가_아파트(매매).xls'
    38. '2009년_02월_전국_실거래가_아파트(매매).xls'
    39. '2009년_03월_전국_실거래가_아파트(매매).xls'
    40. '2009년_04월_전국_실거래가_아파트(매매).xls'
    41. '2009년_05월_전국_실거래가_아파트(매매).xls'
    42. '2009년_06월_전국_실거래가_아파트(매매).xls'
    43. '2009년_07월_전국_실거래가_아파트(매매).xls'
    44. '2009년_08월_전국_실거래가_아파트(매매).xls'
    45. '2009년_09월_전국_실거래가_아파트(매매).xls'
    46. '2009년_10월_전국_실거래가_아파트(매매).xls'
    47. '2009년_11월_전국_실거래가_아파트(매매).xls'
    48. '2009년_12월_전국_실거래가_아파트(매매).xls'
    49. '2010년_01월_전국_실거래가_아파트(매매).xls'
    50. '2010년_02월_전국_실거래가_아파트(매매).xls'
    51. '2010년_03월_전국_실거래가_아파트(매매).xls'
    52. '2010년_04월_전국_실거래가_아파트(매매).xls'
    53. '2010년_05월_전국_실거래가_아파트(매매).xls'
    54. '2010년_06월_전국_실거래가_아파트(매매).xls'
    55. '2010년_07월_전국_실거래가_아파트(매매).xls'
    56. '2010년_08월_전국_실거래가_아파트(매매).xls'
    57. '2010년_09월_전국_실거래가_아파트(매매).xls'
    58. '2010년_10월_전국_실거래가_아파트(매매).xls'
    59. '2010년_11월_전국_실거래가_아파트(매매).xls'
    60. '2010년_12월_전국_실거래가_아파트(매매).xls'
    61. '2011년_01월_전국_실거래가_아파트(매매).xls'
    62. '2011년_02월_전국_실거래가_아파트(매매).xls'
    63. '2011년_03월_전국_실거래가_아파트(매매).xls'
    64. '2011년_04월_전국_실거래가_아파트(매매).xls'
    65. '2011년_05월_전국_실거래가_아파트(매매).xls'
    66. '2011년_06월_전국_실거래가_아파트(매매).xls'
    67. '2011년_07월_전국_실거래가_아파트(매매).xls'
    68. '2011년_08월_전국_실거래가_아파트(매매).xls'
    69. '2011년_09월_전국_실거래가_아파트(매매).xls'
    70. '2011년_10월_전국_실거래가_아파트(매매).xls'
    71. '2011년_11월_전국_실거래가_아파트(매매).xls'
    72. '2011년_12월_전국_실거래가_아파트(매매).xls'
    73. '2012년_01월_전국_실거래가_아파트(매매).xls'
    74. '2012년_02월_전국_실거래가_아파트(매매).xls'
    75. '2012년_03월_전국_실거래가_아파트(매매).xls'
    76. '2012년_04월_전국_실거래가_아파트(매매).xls'
    77. '2012년_05월_전국_실거래가_아파트(매매).xls'
    78. '2012년_06월_전국_실거래가_아파트(매매).xls'
    79. '2012년_07월_전국_실거래가_아파트(매매).xls'
    80. '2012년_08월_전국_실거래가_아파트(매매).xls'
    81. '2012년_09월_전국_실거래가_아파트(매매).xls'
    82. '2012년_10월_전국_실거래가_아파트(매매).xls'
    83. '2012년_11월_전국_실거래가_아파트(매매).xls'
    84. '2012년_12월_전국_실거래가_아파트(매매).xls'
    85. '2013년_01월_전국_실거래가_아파트(매매).xls'
    86. '2013년_02월_전국_실거래가_아파트(매매).xls'
    87. '2013년_03월_전국_실거래가_아파트(매매).xls'
    88. '2013년_04월_전국_실거래가_아파트(매매).xls'
    89. '2013년_05월_전국_실거래가_아파트(매매).xls'
    90. '2013년_06월_전국_실거래가_아파트(매매).xls'
    91. '2013년_07월_전국_실거래가_아파트(매매).xls'
    92. '2013년_08월_전국_실거래가_아파트(매매).xls'
    93. '2013년_09월_전국_실거래가_아파트(매매).xls'
    94. '2013년_10월_전국_실거래가_아파트(매매).xls'
    95. '2013년_11월_전국_실거래가_아파트(매매).xls'
    96. '2013년_12월_전국_실거래가_아파트(매매).xls'
    97. '2014년_01월_전국_실거래가_아파트(매매).xls'
    98. '2014년_02월_전국_실거래가_아파트(매매).xls'
    99. '2014년_03월_전국_실거래가_아파트(매매).xls'
    100. '2014년_04월_전국_실거래가_아파트(매매).xls'
    101. '2014년_05월_전국_실거래가_아파트(매매).xls'
    102. '2014년_06월_전국_실거래가_아파트(매매).xls'
    103. '2014년_07월_전국_실거래가_아파트(매매).xls'
    104. '2014년_08월_전국_실거래가_아파트(매매).xls'
    105. '2014년_09월_전국_실거래가_아파트(매매).xls'
    106. '2014년_10월_전국_실거래가_아파트(매매).xls'
    107. '2014년_11월_전국_실거래가_아파트(매매).xls'
    108. '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())

    'R' 카테고리의 다른 글

    확률 - 예제  (0) 2020.07.13
    확률  (0) 2020.07.13
    시각화 - 예제  (0) 2020.07.09
    시각화  (0) 2020.07.07
    기술통계 - 실전 예제  (0) 2020.07.07
Designed by Tistory.