이전 장에서 우리는 적절한 글꼴, 색상, 테마를 사용한 그래프가 데이터 시각화에서 얼마나 중요한지 살펴봤다. 이번 장에서는 문서를 구성하는 또 다른 중요한 요소인 ‘표(table)’, 특히 ‘gt’ (grammar of tables) 테마를 중심으로 살펴볼 것이다. 표는 복잡한 데이터를 정리하고 분석하는 데 없어서는 안 될 도구다. ’gt’는 표 구성과 디자인에 대한 체계적인 접근 방법을 제공함으로써 표를 통해 효과적으로 정보를 전달할 수 있을 뿐만 아니라 시각적으로 미려한 표를 만들 수 있다는 점에서 매우 유용하다.
문서에 표를 넣으면 정보를 효과적으로 요약하고 가독성을 크게 높일 수 있다. 표를 만들 때 사용할 수 있는 도구로는 마크다운(Markdown), gt 패키지, \(\LaTeX\)이 있는데, 각각 독특한 장점이 있다. 마크다운은 사용하기 쉽고 복잡한 설치나 추가 패키지 없이 기본적인 표를 신속하게 만들 수 있다. 반면 \(\LaTeX\)은 논문이나 학술 자료에 적합하도록 고급 품질의 표를 만들 수 있는 전문적인 도구다. 그래프 문법이 정립된 이후 가장 최근에 소개된 gt는 마크다운의 간편함과 \(\LaTeX\)과 같은 전문적인 표를 만들 수 있는 기능을 모두 갖추고 있다.
웹과 PDF 출력, 테마 지정 등에서 gt 패키지가 뛰어나고 gt 패키지는 그래프 문법에 기초하여 고급 표제작도 수월하게 작성가능하고, 특히, 데이터 중심 표를 작성할 때 필요한 다양한 기능을 제공하기 때문에 탄탄한 표 문법에 기반한 gt 패키지가 여러가지 장점이 많다.
11.1gt 표 작성하기
gt 패키지는 R Tidyverse 생태계에 속한 표 제작 목적으로 특별히 제작된 패키지로 그래프 문법에 기반한 ggplot2 패키지에 친숙하신 저자는 쉽게 표도 gt 패키지를 사용해서 다양한 표 제작이 가능하다. 다음 예시에서는 palmerpenguins 데이터 패키지 penguins 데이터셋을 활용하여 “남극 펭귄 서식섬과 종 빈도표”를 제작한다.
웹 프로그램을 제작할 때 HTML로 콘텐츠를 제작하고 CSS/SCSS 파일로 스타일을 적용하는 것처럼 유지보수성이 뛰어나고 가독성이 좋은 표를 제작하기 위해 저자가 익혀야 되는 필수적인 기본기 중 하나다. penguins_gt 표는 핵심 정보가 잘 요약되어 있지만, 색상이나 다른 외양 관련 설정은 기본설정값만 따르고 있다.
gt 패키지 opt_stylize() 함수는 표 스타일링에 다양한 선택지를 제공한다. 미리 정의된 배경색, 선 색상, 선 스타일 등을 다르게 적용할 수 있어 스타일은 총 36개에 이른다. 표 테두리, 표 요약 부분과 스텁(stub)에 더 어두운 색상을 적용, 수직선 반영여부가 포함된다.
R 코드 opt_colors 벡터에 총 6가지 색상(파란색, 청록색, 분홍색, 녹색, 붉은색, 회색) 중 5개 색상을 지정하고, draw_color_gt 함수를 이용하여 이 색상들을 penguins_gt 표에 opt_stylize 함수를 호출하여 표 색상을 적용한다.
opt_colors<-c("blue", "cyan", "green", "red", "gray")draw_color_gt<-function(gt_color="blue"){penguins_gt|>opt_stylize(style =1, color =gt_color)}gt_colors_list<-map(opt_colors, draw_color_gt)for(iin1:length(opt_colors)){gtsave(gt_colors_list[[i]], str_glue("images/gt_theme_{opt_colors[i]}.png"))}
11.1.2 스타일
gt 패키지는 opt_stylize() 함수를 통해서 색상뿐만 아니라 스타일도 달리해서 표를 제작할 수 있다. gt 패키지 1 ~ 6까지 번호 총6가지 스타일 선택이 가능하고, 기본값은 1 로 설정되어 있고, 저자가 복잡한 설정 없이 번호를 지정함으로써 표 디자인을 빠르게 변경할 수 있다. 번호로 스타일을 선택하게 되면, 데이터 분석과정에서 다양한 표 스타일을 빠르게 시험하고 가장 적절한 표를 신속히 제작하는데 도움이 된다.
opt_styles<-1:5draw_style_gt<-function(opt_sytle, gt_color="blue"){penguins_gt|>opt_stylize(style =opt_sytle, color =gt_color)}gt_styles_list<-map(opt_sytles, draw_style_gt)for(iin1:length(opt_styles)){gtsave(gt_styles_list[[i]], str_glue("images/gt_theme_style_{opt_styles[i]}.png"))}
11.2gtExtra
gtExtras 패키지는 gt 패키지를 보완하여 더 미려한 표를 생성할 수 있도록 도와주는 목적으로 개발되었다. gt 패키지에서 구현되지 않은 기능을 추가하거나, 반복되는 코드를 줄이기 위한 래퍼(wrapper) 함수로 작성되었다. gt 패키지를 확장한 다양한 기능이 있지만 테마와 관련된 사항을 집중적으로 살펴보자.
gt_theme_espn() 함수는 gt 패키지로 생성된 표에 ESPN 테마를 적용한다. 이 함수는 gt 테이블 객체(gt_tbl 클래스)를 인자로 받으며, 선택적으로 gt::table_options()에 전달할 추가 인자를 받을 수 있다. 반환 값은 gt_tbl 클래스의 객체이다. 다음은 다른 테마 함수들에 대한 간략한 설명이다:
사용자 정의 테마의 필요성은 다양하며 주로 보고서나 PPT 발표에서 중요한 역할을 한다. 동일한 스타일과 구성을 가진 표를 사용하면 데이터를 쉽고 빠르게 이해할 수 있고, 일관된 스타일은 전문성을 강조하고, 독자에게 깊은 인상을 남길 수 있다.
gtExtras와 같은 패키지에서 제공되는 테마는 코드 한 줄로 빠르고 깔끔한 표를 만들 수 있어 시간을 절약할 수 있다는 큰 장점이 있지만, 특정 요구사항이나 브랜딩 지침을 완전히 맞춤화하기 쉽지 않고, 복잡한 데이터 구조나 특별한 시각화 요구사항을 충족시키는 데에도 한계가 있다.
사용자 정의 테마를 개발함으로써 gtExtras에서 제공하는 테마처럼 표 제작을 빠르고 편하게 지원할 수 있으면서도, 저자가 필요로 하는 브랜드나 스타일을 반영할 수 있다. 이렇게 하면 표가 더 전문적이면서도 개성있게 작성할 수 있다.
11.3.1gtExtras 확장
penguins_gt라는 기존 gt 표 객체에 gt_theme_538() 테마를 선택하고 글꼴, 색상, 정렬 등 세부적인 작업을 진행하고 그 결과를 .png 파일로 저장한다. gt 패키지는 tidyverse 생태계 일원으로 파이프 연산자를 통해 세부적인 기능을 긴밀히 조합하여 단순한 코드로 제작되지만 최종 결과물로 상당히 높은 난이도를 갖는 표를 제작할 수 있다.
gt_theme_538(): FiveThirtyEight 스타일 테마 적용
tab_options(): 테이블의 글꼴, 제목 크기, 배경색 등 다양한 표 선택옵션 설정
cols_align(): 숫자형 열은 가운데 정렬하고, 문자형 열은 자동 정렬
tab_style(): “MaruBuri” 글꼴과 굵은 글씨체를 제목, 본문, 열에 적용
gtsave(): 최종적으로 작업한 표를 PNG 이미지로 저장
11.3.2gt_theme_hangul() 테마
gt_theme_538() 함수처럼 사용자 정의 함수를 gt_theme_hangul() 테마명을 지정해 두면 모든 표에 통일성을 유지한 테마를 간편하게 적용시킬 수 있다.
gt_tbl 데이터프레임을 입력받아 gt_theme_538()을 기본표 테마로 지정하고, tab_options() 함수를 통해 글꼴, 제목 크기, 배경색 등을 설정하고, 나눔스퀘어(NanumSquare), 마루부리(MaruBuri) 글꼴을 사용하여 한글 표에 더 적합한 스타일을 적용하고, cols_align()과 tab_style() 함수를 사용해서 숫자형 열(칼럼)은 가운데 정렬시키고, 문자형 열은 자동 정렬토록 하고, 특정 셀에 굵은 글씨체와 각기 다른 글꼴을 적용하여 좀더 독특하고 전문적인 느낌을 심는다. tab_style() 기능을 이용해 표 홀수 번째 행에만 회색 배경(‘grey90’)을 적용하여 가독성을 높게 한다. 마지막으로 사용자 정의 테마 함수도 예를 들어 기억하기 좋게 gt_theme_hangul()으로 작명하여 문서에서 표가 필요한 부분에 별도 검색작업 없이 적용시킬 수 있도록 한다.
gt_theme_hangul<-function(gt_tbl){# Grab number of rows of data from gt objectn_rows<-nrow(gt_tbl$`_data`)gt_tbl|>gt_theme_538()|>tab_options( table.font.names ="NanumSquare", heading.title.font.size =px(26), heading.subtitle.font.size =px(16), heading.background.color ="transparent", column_labels.font.weight ='bold', table_body.hlines.width =px(0), data_row.padding =px(6), heading.align ='center', stub.background.color ="#ffffff", stub.font.weight ="bold", source_notes.font.size =px(10), row.striping.include_table_body =FALSE)|>cols_align( align ="center", columns =where(is.numeric))|>cols_align( align ="auto", columns =where(is.character))|>## 글꼴 달리 적용tab_style( style =cell_text( font ="MaruBuri", weight ='bold'), locations =cells_title(groups ='subtitle'))|>tab_style( style =cell_text( font ="MaruBuri", weight ='bold'), locations =cells_body())|>tab_style( style =cell_text( font ="MaruBuri", weight ='bold'), locations =cells_column_labels())|>tab_style( style =cell_text( font ="MaruBuri", ), locations =cells_source_notes())|>tab_style( style =cell_fill(color ='grey90'), locations =cells_body(rows =seq(1, n_rows, 2)))}penguins_gt|>gt_theme_hangul()
남극 펭귄 서식섬과 종 빈도표
palmerpenguins 데이터 패키지
Biscoe
Dream
Torgersen
Adelie
44
56
52
Chinstrap
0
68
0
Gentoo
124
0
0
합계
168
124
52
자료출처: penguins 데이터셋
그림 11.5: 사용자 정의 gt 테마 적용 사례
11.4.Rprofile 설정작업
.Rprofile 파일에 테마 함수를 반영시키면 R 세션을 시작할 때마다 테마가 자동으로 로드되어 일일이 코드를 실행할 필요가 없어 작업 효율성을 크게 높여줌은 물론, 프로젝트 간 일관된 스타일과 브랜딩을 유지할 수 있다. 코드 작성 측면에서 테마 함수를 .Rprofile에 추가하여 코드 재사용성을 높이고, 테마 관련 설정을 한 곳에서 관리할 수 있게 함으로써 작업 일관성과 전문성이 높아져 시간과 노력을 크게 절약할 수 있다.
작성한 테마를 매번 코드를 “복사하여 붙여넣기” 하여 사용하는 대신 .Rprofile 파일에 반영하여 매번 gt 표를 제작할 때마다 gt_theme_hangul() 테마를 적용하는 방법은 다음과 같다. 먼저, usethis 패키지 edit_r_profile() 함수를 호출하여 앞서 작성한 테마를 반영한다.