Must Learning With Statistics

[R 대시보드] Flexdashboard 패지키를 활용한 R 대시보드 만들기 2편 본문

R Code

[R 대시보드] Flexdashboard 패지키를 활용한 R 대시보드 만들기 2편

Doublek Park 2020. 2. 9. 21:35

Flexdashboard를 통한 Dashboard 만들기 2편

1편에서는 출력설정 및 레이아웃 배치를 주로 다뤄보았다면, 이번에는 컨텐츠를 작성하는 방법에 대해 다뤄보도록 하겠습니다. 먼저 컨텐츠의 종류는 다음과 같습니다.

  • 설명 Text 작성
  • ggplot 및 plotly 적용해서 그래프 작성
  • value Box & gauge 함수를 통한 KPI 정보 제공
  • render 함수를 통해 동적 그래프 생성
  • 기타 아이콘 코드 및 색상 조정

1. 설명 Text 작성

  • 그냥 작성하면 됩니다. 다만 Markdown 문법을 조금 익히시고 쓰면 더 효과적일 것입니다.

2. ggplot 및 plotly 적용해서 그래프 작성

  • 'plotly' 패키지를 설치한 후, ggplot으로 작성한 그래프를 ggplotly()함수로 덮어주면 완료됩니다.
library(dplyr)
YEAR2 = IMDB %>%
group_by(Year) %>%
dplyr::summarise(MEAN = mean(Revenue..Millions.,na.rm = TRUE),
MEDIAN = median(Revenue..Millions.,na.rm = TRUE))

library(ggplot2)
p = ggplot(YEAR2) +
geom_line(aes(x=Year,y=MEAN),group = 1 , col ='red') +
geom_point(aes(x=Year,y=MEAN), col ='red') +
geom_line(aes(x=Year,y=MEDIAN),group = 1 , col = 'royalblue') +
geom_point(aes(x=Year,y=MEDIAN) , col = 'royalblue') +
xlab("년도") + ylab("매출액") 

ggplotly(p)

3. value Box & gauge 플롯 작성

  • valueBox : 플롯 안에 값을 텍스트 형식으로 보여주는 명령어 입니다.
valueBox(value = paste(nrow(IMDB),"movies"), # value => 보여주고 싶은 통계값  
color='royalblue') # color => 바탕 색 설정 

  • gauge : 게이지 형식의 그래프 표시 명령어
gauge(round(mean(IMDB$Metascore,na.rm = TRUE),2), # 보여줄 통계값 계산 코드 
min = 0, max = 100, # 게이지 범위 설정(최소 ~ 최대)
gaugeSectors( # 게이지 영역을 구분함으로써, 각 구간에 따라 색이 변하게 표현해줌
success = c(80, 100), warning = c(40, 79), danger = c(0, 39)
))

4. render 함수를 통해 동적 그래프 생성
  • render 함수는 input parmater를 설정해줌으로써, 그래프가 설정하는 input에 따라 변할 수 있게 해주는 함수입니다. 만드는 방식은 다음과 같습니다.

  • input 창을 만들어줍니다.

  • 그래프가 해당 input값을 받아줄 수 있도록 작업을 해줍니다. 방식은 plotly처럼 그래프 위에 씌어주는 것이라고 볼 수 있습니다. 조금은 복잡하지만 구조만 이해하면 어렵지 않습니다.

  1. input 만들기
  • input 창의 종류는 크게 3가지가 있습니다.

  • selectInput

  • numericInput

  • sliderInput

# selectInput 
selectInput('Genre', 'Genre',IMDB$FIRST_GENRE, 
selected = 'action')

첫번째 'Genre'는 input 값의 이름을 input$Genre로 맞춰주기 위해서입니다. 
  • selectInput의 값은 R내에서 input이란 객체 안에 존재하게 됩니다.

  • 첫번째 'Genre'는 input 값의 이름을 input$Genre로 맞춰주기 위해서입니다.

  • 두번때 'Genre'는 페이지에서 인풋칸의 제목을 'Genre'로 써주는 것입니다.

  • IMDB$First_Genre는 input 창에 어떤 변수의 값들을 고를 수 있게 할 것인지 설정해주기 위함입니다.

  • 'selected'는 input 명령어의 기본 옵션으로 처음 실행했을 때 시작 default값을 어떤 것으로 할지 설정해주는 옵션입니다.

# 기타 input 설정 
numericInput("Rating", "min Rating:", 6)

## slider input 예시 , 해당대시보드에서는 사용하지 않음.
sliderInput("bw_adjust", label = "Bandwidth adjustment:",
min = 0.2, max = 2, value = 1, step = 0.2)

  1. renderplot 만들기
  • renderplot을 만드는 방법은 다음과 같습니다.

  • input에서 설정된 값을 받아낼 수 있도록 selectedIMDB를 생성

  • 해당 selectedIMDB를 통해 ggplot명령어 연계

  • 완성 후에 render___명령어들로 덮어주기

# 1단계 selectedIMDB 생성 방법
selectedIMDB = reactive({
subset(IMDB,FIRST_GENRE==input$Genre)})
## selectInput에서 첫 Genre가 input$Genre로 input값이 저장되도록 하는 역할을 합니다.

# 2단계 renderPlotly로 동적 그래프 확인하기

## renderPlotly로 덮어주기 , render + plotly 합친 것이라고 보면 됩니다.
renderPlotly({
## YEAR2 라는 데이터는 input 값에 따라 변동 될수 있도록 설정
YEAR2 = selectedIMDB() %>%  # 1단계에서 만든 selectedIMDB 설정
group_by(Year) %>% 
dplyr::summarise(MEAN = mean(Revenue..Millions.,na.rm = TRUE),
MEDIAN = median(Revenue..Millions.,na.rm = TRUE))

## ggplot2 시작    
p = ggplot(YEAR2) +
geom_line(aes(x=Year,y=MEAN),group = 1 , col ='red') +
geom_point(aes(x=Year,y=MEAN), col ='red') +
geom_line(aes(x=Year,y=MEDIAN),group = 1 , col = 'royalblue') +
geom_point(aes(x=Year,y=MEDIAN) , col = 'royalblue') +
xlab("년도") + ylab("매출액") 

ggplotly(p)
})

  • 나머지 그래프 및 표들도 연습삼아 해보시면 될 것 같습니다. 대시보드 만들기는 여기까지로 마치도록 하겠습니다.

  • 대시보드에서 가장 중요한 것은 디자인 센스 입니다.

Comments