Ch4. Flexdashboard를 통한 Dashboard 만들기 2편
1편에서는 출력설정 및 레이아웃 배치를 주로 다뤄보았다면, 이번에는 컨텐츠를 작성하는 방법에 대해 다뤄보도록 하겠습니다. 먼저 컨텐츠의 종류는 다음과 같습니다.
- 설명 Text 작성
- ggplot 및 plotly 적용해서 그래프 작성
- value Box & gauge 함수를 통한 KPI 정보 제공
- render 함수를 통해 동적 그래프 생성
- 기타 아이콘 코드 및 색상 조정
- 설명 Text 작성
- 그냥 작성하면 됩니다. 다만 Markdown 문법을 조금 익히시고 쓰면 더 효과적일 것입니다.
ggplot 및 plotly 적용해서 그래프 작성
- 별거 없습니다. 'plotly' 패키지를 설치한 후, ggplot으로 작성한 그래프를 ggplotly()함수로 덮어주면 완료됩니다.
데이터 다운로드 링크: https://www.kaggle.com/PromptCloudHQ/imdb-data
library(dplyr) YEAR2 = DATA %>% 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)
value Box & gauge 플롯 작성
- valueBox : 플롯 안에 값을 텍스트 형식으로 보여주는 명령어 입니다.
valueBox(value = paste(nrow(DATA),"movies"), # value => 보여주고 싶은 통계값 color='royalblue') # color => 바탕 색 설정
- gauge : 게이지 형식의 그래프 표시 명령어
gauge(round(mean(DATA$Metascore,na.rm = TRUE),2), # 보여줄 통계값 계산 코드 min = 0, max = 100, # 게이지 범위 설정(최소 ~ 최대) gaugeSectors( # 게이지 영역을 구분함으로써, 각 구간에 따라 색이 변하게 표현해줌 success = c(80, 100), warning = c(40, 79), danger = c(0, 39) ))
render 함수를 통해 동적 그래프 생성
render 함수는 input parmater를 설정해줌으로써, 그래프가 설정하는 input에 따라 변할 수 있게 해주는 함수입니다. 만드는 방식은 다음과 같습니다.
- input 창을 만들어줍니다.
- 그래프가 해당 input값을 받아줄 수 있도록 작업을 해줍니다. 방식은 plotly처럼 그래프 위에 씌어주는 것이라고 볼 수 있습니다. 조금은 복잡하지만 구조만 이해하면 어렵지 않습니다.
input 만들기
input 창의 종류는 크게 3가지가 있습니다.
- selectInput
- numericInput
- sliderInput
selectInput의 값은 R내에서 input이란 객체 안에 존재하게 됩니다.
첫번째 'Genre'는 input 값의 이름을 input$Genre로 맞춰주기 위해서입니다.
두번때 'Genre'는 페이지에서 인풋칸의 제목을 'Genre'로 써주는 것입니다.
DATA$First_Genre는 input 창에 어떤 변수의 값들을 고를 수 있게 할 것인지 설정해주기 위함입니다.
'selected'는 input 명령어의 기본 옵션으로 처음 실행했을 때 시작 default값을 어떤 것으로 할지 설정해주는 옵션입니다.
renderplot 만들기
renderplot을 만드는 방법은 다음과 같습니다.
- input에서 설정된 값을 받아낼 수 있도록 selectedData를 생성
- 해당 selectedData를 통해 ggplot명령어 연계
- 완성 후에 render___명령어들로 덮어주기
- 여기서 %>% 라는 이상한 기호를 볼 수 있을 것입니다. 지금은 신경 쓰지 마시고, 다음 장 dplyr 패키지 소개를 해드릴 때 언급하도록 하겠습니다.
- 나머지 그래프 및 표들도 연습삼아 해보시면 될 것 같습니다. 대시보드 만들기는 여기까지로 마치도록 하겠습니다.
- 대시보드에서 가장 중요한 것은 디자인 센스 입니다.
# selectInput
selectInput('Genre', 'Genre',DATA$FIRST_GENRE,
selected = 'action')
첫번째 'Genre'는 input 값의 이름을 input$Genre로 맞춰주기 위해서입니다.
# 기타 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단계 selectedData 생성 방법
selectedData = reactive({
subset(DATA,FIRST_GENRE==input$Genre) ## selectInput에서 첫 Genre가 여기서 input$Genre로 input값이 저장될 수 있도록 연결하는 역할을 합니다.
})
# 2단계 renderPlotly로 동적 그래프 확인하기
## renderPlotly로 덮어주기 , render + plotly 합친 것이라고 보면 됩니다.
renderPlotly({
## YEAR2 라는 데이터는 input 값에 따라 변동 될수 있도록 설정
YEAR2 = selectedData() %>% # 1단계에서 만든 selectedData 설정
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)
})