- Great Tables는 데이터 분석 흐름을 Python 코드 안에 유지하면서도, 20세기 중반 인쇄 표의 정교한 표현력을 되살리려는 테이블 제작 패키지임
- 표는 단순한 행·열 격자가 아니라, 열 순서·레이블·구분선을 통해 값을 찾고 비교하기 쉽게 만드는 정보 표현 형식임
- 고대 수메르 점토판부터 _Manual of Tabular Presentation_까지 표는 정보 밀도와 형식을 함께 발전시켰지만, 초기 스프레드시트는 계산 편의성에 비해 표현력이 부족했음
- Great Tables는 표를 6개 구성요소로 나누고,
tab_*,fmt_*,opt_*()계열 API로 구조·서식·스타일링을 분리함 - 이 패키지는 대용량 인터랙티브 탐색보다 논문·책·보고서에 들어가는 정적 요약 표의 출판·발표 품질을 높이는 데 초점을 둠
Great Tables가 풀려는 표 제작 딜레마
- 표는 플롯처럼 정보를 제시하는 마지막 단계에서 중요하며, 효과적인 표 설계에는 예상보다 많은 정교함과 뉘앙스가 있음
- 오늘날 데이터 작업자는 보통 두 선택지 사이에서 타협해야 함
- Excel 같은 도구로 데이터를 복사해 표를 다시 만들기
- 다듬어지지 않은 표를 그대로 표시하기
- Great Tables는 이 딜레마를 Python 코드 기반 인터페이스로 해결하려는 패키지임
- 데이터 수집, 분석, 요약 표 생성까지 Python 안에서 처리하면서도 표현력 있는 표를 만드는 것이 목표임
표의 기본 정의와 가독성 요소
- 표는 두 가지 기본 규칙으로 요약됨
- 데이터가 열과 행으로 표현됨
- 데이터가 주로 텍스트로 표현됨
- 예시 표는 사람을 행으로, 이름·주소·도시·우편번호·생년월일·키·몸무게 같은 특성을 열로 배치함
- 이런 배치는 개별 값을 찾거나 행과 열을 넘나들며 비교하기 쉽게 만듦
- 행 사이의 가로선은 필수 조건은 아니지만, 개별 행을 시각적으로 구분하는 보강 역할을 함
- 열의 순서도 가독성에 직접 영향을 줌
Name열이 오른쪽 끝에 있으면 각 레코드의 주체가 즉시 보이지 않아 독자가 더 혼란스러울 수 있음- 열 레이블은 각 열에 어떤 데이터가 들어 있는지 알려주며, 대부분의 경우 추측을 줄여줌
고대 표의 역사
- 표는 정보를 담을 수 있는 컨테이너인 정사각형 격자에서 출발함
- 프랑스 Lascaux와 Niaux 동굴 벽에는 약 2만 5천 년 전 격자 표현이 남아 있음
- 기원전 2세기 Hipparchus는 위도와 경도로 천체와 지상 위치를 나타냈고, 서기 150년 무렵 Ptolemy의 _Geographia_는 격자를 활용한 지도 제작 방법을 포함함
- 로마의 centuriation은 도로·운하·농경지를 통해 정사각형 격자를 형성하는 토지 측량 체계였음
- 농업이 널리 퍼진 약 1만 년 전 이후, 농업·가축·노동 분업 관련 경제 거래를 기록하고 관리할 필요가 커짐
수메르와 메소포타미아의 표 구조
- 기원전 4천 년기 메소포타미아 도시들은 먼 왕국들과 교역하며 기록을 보관해야 했고, Uruk에서 발견된 점토판에는 초기이지만 정교한 표가 남아 있음
- 기원전 3200~3000년경 Uruk 점토판은 맥주 생산을 위한 보리와 맥아 배송량을 기록함
- 오른쪽에서 왼쪽으로 읽는 구조임
- 각 칸에는 단어·개념을 나타내는 표의문자와 수량을 나타내는 숫자가 들어 있음
- 약 두 개의 행은 각각 한 사람에 대응함
- 오른쪽 두 열은 맥아와 보리 수량을 담음
- 세 번째 열은 개인별 소계를, 왼쪽 끝 열은 총계를 표시함
- 맨 아래 행에는 담당 관리의 이름이 있어 푸터처럼 동작함
- 약 천 년 뒤의 Nippur Enlil 신전 점토판은 수입원과 50명 신전 인력의 월별 지출을 담음
- 더 규칙적인 격자가 보임
- 월 이름 형태의 열 제목과 개인 이름·직업 형태의 행 제목이 있음
- 정보가 없는 빈 셀, 숫자 값, 6개월 단위 소계, 총계, 설명 주석이 포함됨
- 이후 표의 매체는 점토에서 밀랍판, 파피루스, 종이로 바뀌었고, 쓰기 기술과 표 디자인도 함께 변화함
20세기 중반 표 디자인의 정점
- 20세기 중반은 표 디자인이 특히 강했던 시기로 다뤄짐
- 오프셋 인쇄, 타자기, varitype 같은 문서 제작 기술이 표 요소를 정밀하게 조판할 수 있을 만큼 발전함
- 페이지 공간 제약은 있었지만, 표를 한 페이지에 맞추거나 여러 페이지에 나누는 다양한 해결책이 존재했음
- 고도화된 인쇄 기술과 표 디자인 지식이 결합되면서 아름다운 표를 만들 수 있었음
- 미국 인구조사국의 Manual of Tabular Presentation는 정보 밀도가 높은 표의 이상적 설계를 상세히 다룬 작업임
- 표의 여러 부분을 명명하고 엄밀하게 설명함
- 다양한 표 작성 상황에서 해야 할 것과 하지 말아야 할 것을 강하게 권고함
- 표가 보기 좋으면서도 많은 정보를 담을 수 있음을 보여줌
- Great Tables는 이 문서의 표 디자인 원칙을 많이 차용하며, 그 원칙이 지금도 유효하다는 전제에서 출발함
스프레드시트 이후의 후퇴와 한계
- 1970~1980년대 컴퓨팅 기술이 접근 가능해지면서 사람들은 전자 형태와 인쇄 형태로 표를 만들 수 있게 됨
- 계산 가능한 표의 대중화는 1979년 VisiCalc와 함께 시작된 것으로 볼 수 있음
- VisiCalc는 값을 빠르게 계산할 수 있었지만, 발표용 표를 만들기에는 표현력이 제한적이었음
- 격자 셀에 발표용 테두리 스타일을 줄 수 없었음
- 값을 서식화할 수 없었음
- 표를 인쇄할 수도 없었음
- 이후 10~15년에 걸쳐 스프레드시트 표는 보기 좋아짐
- 1990년대 초 Excel은 표에 테두리를 칠할 수 있었음
- 타이포그래피 지원이 나아짐
- 값 서식 기능도 더 갖춰짐
- 그래도 최근 30년의 Excel 표는 _Manual of Tabular Presentation_의 수준에 미치기 어려웠다고 평가됨
- 데이터 분석이 Excel 밖에서도 이루어지면서 세 가지 비효율적 시나리오가 생김
- Python 안에서 분석과 표 생성을 모두 처리하지만 표 품질이 낮음
- Excel 안에서 분석과 표 제작을 모두 처리하지만 분석 유연성이 낮음
- Python에서 분석하고 Excel로 복사해 표를 만들지만 재현 가능하지 않음
Great Tables의 표 모델
- Great Tables는 20세기 중반 표의 우아함을 코드 인터페이스의 힘과 결합하려는 Python 패키지임
- 표를 6개의 독립 구성요소 조합으로 표현함
- Table Header: 제목과 부제목을 넣어 표 내용을 간결하게 설명하는 공간
- Column Labels: 각 열의 내용을 정의하며, spanner는 여러 열 그룹 위에 놓이는 제목
- Stub Head: 왼쪽 위 위치로, 다양한 방식의 레이블을 둘 수 있음
- Row Stub: 행 정보와 행 그룹 레이블을 위한 영역
- Table Body: 셀을 포함하며 데이터가 위치하는 영역
- Table Footer: 표 내용과 관련된 추가 정보를 담는 공간
- Great Tables는 코드로 표 본문을 만든 뒤 스타일링, 서식, 다른 구성요소를 반복적으로 추가하는 방식으로 사용함
- 예시 코드는
GT(simple_table, rowname_col="Name")에서 시작해 제목, stub head, column spanner, source note, 날짜·정수 서식, 스타일 옵션을 추가함 - 예시 표에서는 파란 row stub가 행 레이블을 표 본문과 구분함
- 각 사람이 고유한 관측값이므로 행의 주체를 강조함
- 제목은 표에 담긴 내용을 설명함
Location과Personal Characteristicsspanner는 열을 의미 있는 그룹으로 묶음- 파란 선과 셀 배경의 일관된 사용은 전문적인 외형을 만듦
- 표 구성요소를 추가하는 메서드는
tab_로 시작함- 예:
tab_header()는 Table Header를 만듦
- 예:
서식화와 nanoplots
- 표 구조화만으로는 충분하지 않으며, 분야마다 값 표시 요구사항이 다름
- 숫자 하나도 공동체의 규범과 기대에 따라 여러 방식으로 표시될 수 있음
- 날짜, 시간, 통화까지 포함하면 서식화 범위는 더 넓어짐
- 원시 값
134,000은 요구사항에 따라 다르게 표현될 수 있음fmt_scientific(): 과학적 표기1.34 × 10^5fmt_number(): 독일 로케일 숫자134.000,00fmt_integer(): 압축 정수134K
- 값이 이미지나 플롯으로 전달되어야 할 때 서식화 문제는 더 커짐
- 의료 분석가가 환자 검사 결과의 개선·악화 추세를 전달해야 한다면, 행 전체의 숫자 시퀀스를 읽는 방식은 해석을 늦출 수 있음
fmt_nanoplot()은 nanoplots를 통해 표 안에서 작은 추세 시각화를 제공함- 데이터 포인트에 마우스를 올리면 각 날짜의 값을 볼 수 있음
- nanoplots는 플롯의 빠른 시각적 해석과 표의 컴팩트함 사이의 균형을 목표로 함
- Great Tables의 서식 메서드는
fmt_로 시작함 - 패키지는 다양한 사용자의 요구에 맞춰 많은 서식 메서드와 유용한 옵션을 제공하려 함
출판·발표용 정적 요약 표에 집중
- Great Tables는 테이블과 상호작용하는 여러 방식 중 출판과 발표용 표시에 초점을 맞춤
- 데이터베이스 분석에서는 수백, 수천, 또는 그 이상의 레코드를 탐색하고 필터링하는 단순 테이블 표시가 적합할 수 있음
- 결과 출판은 다른 작업이며, 여기서는 구조화·서식화·스타일링이 중심임
- 아름다운 표 표시는 다음을 충족해야 함
- 정보를 더 쉽게 소화하게 만듦
- 필요한 곳에 추가 맥락을 제공함
- 문서나 조직의 스타일을 따름
- 대상 사용 사례는 저널 논문, 책, 보고서에서 볼 수 있는 방식의 데이터 제시임
- Great Tables는 정적 요약 표가 별도 초점을 받을 만한 영역이라고 보고,
opt_*()메서드로 독자에게 더 좋은 표를 제공하기 쉽게 만들려 함 - 패키지의 성공 기준은 만들어낼 수 있는 표의 품질이며, API 개선 작업을 계속할 계획임
- 커뮤니티 피드백을 위해 Discord Server를 열어두고 있음