시작하기 전에
다음의 패키지가 설치되어 있지 않으면 설치한다.
# remotes::install_github("baumer-lab/fec12") # 2012 Federal Election Commission dataset
# install.packages("tidyverse")
# install.packages("tidygraph")
# install.packages("ggraph")
# install.packages("usethis")
# install.packages("mdsr")
# install.packages("mosaicData")
# install.packages("tidycensus")
# install.packages("alr4")
# install.packages("ggrepel")
library(fec12)
library(tidyverse)
library(tidygraph)
library(ggraph)
library(mdsr)
library(tidycensus)
library(alr4)
library(ggrepel)
library(RColorBrewer)
sessionInfo()
R version 4.3.3 (2024-02-29)
Platform: x86_64-apple-darwin20 (64-bit)
Running under: macOS Sonoma 14.2.1
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRlapack.dylib; LAPACK version 3.11.0
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
time zone: Asia/Seoul
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RColorBrewer_1.1-3 ggrepel_0.9.5 alr4_1.0.6 effects_4.2-2
[5] car_3.1-2 carData_3.0-5 tidycensus_1.6 mdsr_0.2.7
[9] ggraph_2.2.0 tidygraph_1.3.1 lubridate_1.9.3 forcats_1.0.0
[13] stringr_1.5.1 dplyr_1.1.4 purrr_1.0.2 readr_2.1.5
[17] tidyr_1.3.1 tibble_3.2.1 ggplot2_3.5.0 tidyverse_2.0.0
[21] fec12_0.0.0.9012
loaded via a namespace (and not attached):
[1] DBI_1.2.2 gridExtra_2.3 rlang_1.1.3 magrittr_2.0.3
[5] e1071_1.7-14 compiler_4.3.3 vctrs_0.6.5 rvest_1.0.4
[9] pkgconfig_2.0.3 crayon_1.5.2 fastmap_1.1.1 utf8_1.2.4
[13] promises_1.2.1 rmarkdown_2.25 tzdb_0.4.0 ps_1.7.6
[17] nloptr_2.0.3 xfun_0.42 cachem_1.0.8 jsonlite_1.8.8
[21] later_1.3.2 uuid_1.2-0 tweenr_2.0.3 R6_2.5.1
[25] stringi_1.8.3 boot_1.3-29 Rcpp_1.0.12 knitr_1.45
[29] base64enc_0.1-3 Matrix_1.6-5 splines_4.3.3 nnet_7.3-19
[33] igraph_2.0.2 timechange_0.3.0 tidyselect_1.2.0 rstudioapi_0.15.0
[37] abind_1.4-5 yaml_2.3.8 viridis_0.6.5 websocket_1.4.1
[41] processx_3.8.3 lattice_0.22-5 withr_3.0.0 evaluate_0.23
[45] survival_3.5-8 sf_1.0-15 survey_4.2-1 units_0.8-5
[49] proxy_0.4-27 polyclip_1.10-6 xml2_1.3.6 pillar_1.9.0
[53] tigris_2.1 KernSmooth_2.23-22 insight_0.19.8 generics_0.1.3
[57] chromote_0.2.0 hms_1.1.3 munsell_0.5.0 scales_1.3.0
[61] minqa_1.2.6 class_7.3-22 glue_1.7.0 tools_4.3.3
[65] lme4_1.1-35.1 graphlayouts_1.1.0 grid_4.3.3 mitools_2.4
[69] colorspace_2.1-0 nlme_3.1-164 repr_1.1.6 ggforce_0.4.2
[73] cli_3.6.2 rappdirs_0.3.3 fansi_1.0.6 viridisLite_0.4.2
[77] gtable_0.3.4 digest_0.6.34 classInt_0.4-10 htmlwidgets_1.6.4
[81] skimr_2.1.5 farver_2.1.1 memoise_2.0.1 htmltools_0.5.7
[85] lifecycle_1.0.4 httr_1.4.7 MASS_7.3-60.0.1
데이터 시각화
- 데이터에 내재된 패턴을 묘사하고 표현하는 데 강력하고 편리한 도구
- 데이터 시각화가 왜 중요한가?
- 구성 요소는 무엇이 있는가?
- 본 강의에서는 R의 기본 내장
plot
이 아닌 강력한 전처리 도구인 tidyverse
와 시각화 툴인 ggplot2
를 사용할 것이다.
데이터 시각화 예시
2012년 미국 연방 선거 (대통령 선거 포함)
미국 연방 선거에서는 위원회 시스템 (특히 political action committees, PACs)에 의해 무제한 기부금을 받아들이고 특정 후보자 또는 후보자 세트에 대해 지출할 수 있다.
복잡한 선거비용의 지출 네트워크를 풀어내는 것은 훌룡한 데이터과학 연습이 된다.
미 연방 선거관리위원회(Federal Election Commission, FEC)는 개인이 후보자와 위원회에 기부한 $200 이상의 모든 기부금과 각 위원회가 선거 운동에 지출한 금액의 기록을 제공하는 웹사이트를 운영하고 있다.
FEC는 또한 어느 후보자가 선거에서 얼마만큼 승리했는지에 대한 별도의 자료도 제공한다.
이들 데이터셋을 하나로 묶기 위해서는 수고가 필요하며, 수업의 전반부 동안 이러한 기술을 공부할 것이다.
이 강의에서는 데이터로부터 얻을 수 있는 정보의 시각적인 표현에 집중한다.
이 단계에서의 주안점은 특정 데이터의 메시지를 명확하고도 정확하게 전달하도록 어떻게 표시할 것인가에 있다.
사용 데이터(fec12
): 2012년 미국 연방 선거에서 각 후보에 대해 지출된 비용에 대한 자료
가장 기본적인 질문: 각 후보가 얼마나 많은 돈을 모금했나?
- 복잡한 선거 자금 방정식은 이 간단한 질문조차도 대답하기 어렵게 만듦.
- 이 질문은 생각보다 의미가 없음.
더 좋은 질문: 어느 후보에게 가장 많은 비용이 지출되었나?
- 먼저 후보별 지출(4백만불 이상)부터 간단하게 그려 보자.
지출항목별 구분
이로부터 오바마에 대한 공격에 훨씬 많은 비용이 지출된 것이 확인 가능
롬니에 대해 지출된 대부분의 자금이 그를 공격하는 것이었지만, 롬니에 대한 부정적 지출의 비율(70%)은 오바마(92%)보다 낮음.
Figure 1 와 Figure 2 의 차이는 후자에서는 색상을 사용하여 세 번째 변수(지출 유형)를 그래프에 포함시켰다는 점
- 이를 통해 이전 그래프에서 도출할 수 있는 결론을 중요하게 바꾸는 명확한 비교를 할 수 있음
- 특히 먼저의 그래프에서는 오바마 대통령의 선거 자금이 롬니를 압도하는 것처럼 보였지만 실제로는 그 반대
롬니보다 오바마를 공격하는 데 훨씬 더 많은 비용이 지출되었으므로 Figure 2 에서 공화당이 이번 선거 기간 동안 자금 모금에 더 성공적이었다고 결론을 내릴 수 있다.
다음 Figure 3 에서 민주당보다 공화당 후보를 지지하는 데 더 많은 비용이 지출되었고, 공화당보다 민주당 후보를 공격하는 데 더 많은 돈이 지출되었으므로 실제로 그랬음을 확인할 수 있다. 또한 거의 모든 자금이 민주당 또는 공화당에 지출되었음을 알 수 있다.
교락 (confounding)
그러나 후보자에게 지출된 돈이 실제로 정당에 따라 차이가 있었는지에 대한 질문은 조금 더 까다로움.
위에서 살펴본 바와 같이 2012년 연방 선거에서는 대선이 정치 기부금을 지배했고, 롬니 후보는 현직 대통령에 맞서는 심각히 불리한 입장에 놓임. 이 경우 대통령직이 교락 변수가 될 수 있음.
다음 Figure 4 는 Figure 3 의 기부금을 추구하는 공직별로 더 세분화
- 모든 선출직 선거에 대해 공화당 후보를 지원하는 데 더 많은 돈이 지출된 반면, 대통령 선거에서만 민주당 후보를 공격하는 데 더 많은 돈이 지출됨.
- 공화당 하원 및 상원 후보를 공격하는 데 약간 더 많은 비용이 지출
- Figure 3 와 Figure 4 는 동일한 데이터를 표시
변동을 그래프로 표시
주장
롬니가 소수의 부유한 기부자들의 지지를 받은 반면, 오바마는 다양한 경제적 스펙트럼의 사람들로부터 지지를 받았다
- 오바마가 더 많은 소액 기부를 받은 것으로 보이지만 이 증거가 결정적인 것은 아님.
두 후보 모두 소액 기부는 많이 받았지만 고액 기부는 소수에 불과하며, 가로축의 척도 때문에 실제로 어떤 일이 벌어지고 있는지 확인하기 어려움
히스토그램을 나란히 배치하여 비교하기 어려움
대선 두 단계(예비선거와 본선거)의 모든 기부금을 한데 묶어 표시
해결 방안
- 히스토그램 대신 밀도 곡선을 사용하여 분포를 직접 비교할 수 있도록 함
- 중요한 데이터에 집중할 수 있도록 가로축(기부 금액)을 로그 척도로 변경
- 선거 단계별로 기부금을 분리
- Figure 6 의 오른쪽 패널은 오바마의 기부금이 예비선거 단계에서 더 광범위한 기반에서 나왔다는 주장을 뒷받침함.
- 이 단계에서 오바마의 기부금 중 더 많은 금액이 소액으로 기부된 것으로 보임.
- 본선 단계에서는 두 캠페인에 기부된 기부금 분포에 사실상 차이가 없음.
변수간의 관계 도시
캠페인 지출이 무제한인 경우, 가장 많은 지출을 한 후보가 가장 많은 표를 얻을까?
민주당 하원선거에서 각 후보별 지출금액과 받은 투표수의 산점도를 그리면 두 변수간의 상관관계를 파악할 수 있음
Figure 8 은 Figure 7 에서는 볼 수 없었던 디테일을 포함한다.
- 후보자를 지지하는 자금의 비율과 후보자의 득표율 사이에는 양의 상관관계가 있는 것으로 보인다.
- 상관관계 유무는 선거가 실제로 경합하는 산점도의 중앙에서 가장 중요.
- 이 지역을 벗어나면 한 후보자가 55% 이상의 득표율을 얻으며, 일반적으로 지출되는 비용이 거의 없음.
- 왼쪽 아래 모서리에 있는 점 중 하나는 당시 하원의장이었던 존 보너가 경쟁자 없이 출마하여 당선된 오하이오주 제8선거구
- 산점도 중앙의 점들이 더 크게 표시 — 경합 선거에 더 많은 자금이 지출
- 그러나 경합 선거에서 더 많은 재정 지원이 더 많은 득표와 상관관계가 있다는 증거는 상대적으로 약함
- 가장 많은 돈이 지출된 선거(1,100만 달러 이상)인 오하이오주 16지구에서는 선거구 재획정의 결과로 양당 현역 의원이 경합. 지출된 돈 중 51.2%가 서튼 후보를 지지하는 데 사용되었지만 서튼 후보는 48.0%의 득표율에 그침
데이터 그래픽 작성법
요리와 데이터 그래픽의 비교
아무나 |
전자렌지에 데워먹기 |
plot |
셰프 |
도구 마스터, 구성요소에 대한 이해와 통찰, 창의성 |
좌동 |
데이터 그래픽 분류 (Yau, 2013)
- 시각적 단서 (visual cues)
- 좌표계 (coordinate systems)
- 척도 (scale)
- 맥락 (context)
시각적 단서
- 상대의 시선을 원하는 정보에 집중시키는 그래픽 요소
- 어떤 시각적 단서를 사용하여 어떤 종류의 양을 나타낼 것인가?
Visual cues and what they signify.
Position |
numerical |
where in relation to other things? |
Length |
numerical |
how big (in one dimension)? |
Angle |
numerical |
how wide? parallel to something else? |
Direction |
numerical |
at what slope? in a time series, going up or down? |
Shape |
categorical |
belonging to which group? |
Area |
numerical |
how big (in two dimensions)? |
Volume |
numerical |
how big (in three dimensions)? |
Shade |
either |
to what extent? how severely? |
Color |
either |
to what extent? how severely? |
좌표계
데카르트(직교) 좌표계 \((x, y)\)
극좌표계 \((r, \theta)\)
- 직교 좌표계에 대한 대안으로, 특히 데이터를 원형 또는 방사형 문맥에서 표현할 때 유용하다.
지리적 좌표계 (경도, 위도)
- 지구 표면을 나타내는 곡면 상 위치를 2차원으로 표현한다.
- 예: 항공기 노선과 같은 지리 공간 데이터를 평면의 직교 좌표계에 표시하면 현실의 심각한 왜곡을 초래할 수 있음
척도
데이터 그래픽에서의 거리가 정량적으로 의미 있는 차이로 어떻게 해석되는가?
수치형 (numeric
): 선형, 로그, 또는 백분율 척도.
- 주의: 로그 척도는 예들 들어 1cm의 위치 차이가 눈금의 어느 위치에서나 동일한 양의 차이를 나타내지 않음
범주형 (factor
, ordered
): 순서가 없거나 (예: 민주당, 공화당, 또는 무소속), 있거나 (예: 비흡연자, 과거 흡연자, 현재 흡연자).
시간 ("POSIXct
, POSIXt
)
- 특별한 속성을 가진 수치형 변수
- 달력 때문에 다양한 단위(예: 년, 월, 일 등)로 나뉘어질 수 있음
- 주기성을 띄고 있어 “wrap-around” 척도로 간주 가능
- 흔히 사용되나 오용이 많음
- 척도의 오용은 자료점의 상대적 위치를 완전히 왜곡할 수 있기 때문에 주의가 필요
맥락
- 부적절한 데이터 그래픽은 보는 사람이 의미있는 비교를 하도록 돕는 목적의 정반대 결과를 초래할 수 있음
적절한 맥락 제공이 필요.
- 제목/부제: 보여지는 내용을 설명
- 축 레이블: 단위와 척도가 어떻게 나타내지는지 명확히 함.
- 기준점/기준선: 관련 외부 정보를 제공
색상
가장 눈에 띄지만 잘못 인식되기 쉽고 오용이 잦음 (참고, 음영)
수치형 변수를 나타낼 때, 특히 작은 차이가 중요한 경우에는 좋은 표현 방법이 아님
색이 가장 효과적으로 사용되는 경우: 산점도에서 세 번째 또는 네 번째 숫자 변수를 나타내는 경우
전체 인구의 약 8%가 색맹 (특히 적록 색맹)
데이터 시각화 예시
자유형 100m 세계기록 추이
좌표계: 데카르트 좌표계
세로축: 초 (수치형, 선형 척도)
가로축: 연 (수치형, 선형 척도)
시각적 단서
- 색상: 성별(범주형) 구분
- 방향: 산점도 상의 점을 선으로 연결. 기록 시간의 진행을 나타냄.
- 각도: 시간 및 성별에 따른 세계 기록 단축을 비교
- 점 모양: 성별 구분
약물 남용 임상시험
실제 비율:
# A tibble: 3 × 3
substance Homeless Housed
<fct> <chr> <chr>
1 alcohol n = 103 (49.3%) n = 74 (30.3%)
2 cocaine n = 59 (28.2%) n = 93 (38.1%)
3 heroin n = 47 (22.5%) n = 77 (31.6%)
데이터 시각화의 중요성
우주왕복선 챌린저호 사고 (1986)
1986년 1월 27일, 미 항공우주국(NASA)의 우주왕복선에 고체 로켓 모터를 제공한 Morton Thiokol사의 엔지니어들은 다음날 발사 예정인 우주왕복선 챌린저호의 안전성을 위협할 수 있는 추운 날씨 예보에 근거해 발사 연기를 권고함.
엔지니어들은 13개의 차트를 제공했고, 엔지니어와 관리자, NASA가 참여한 2시간의 컨퍼런스 콜을 통해 이를 검토했으나 권고는 설득력 있는 증거 부족으로 인해 거부되었고 발사는 계획대로 진행됨.
발사 후 73초 만에 엔지니어들이 우려한 대로 O링이 고장나서 챌린저는 폭발하고 탑승한 7명의 우주비행사가 모두 사망.
Tufte의 데이터 그래픽 (1997)
Tufte (1997)는 엔지니어들의 실패에 대한 철저한 비평을 제공하고 있으며, 그 중 많은 부분은 데이터과학자들에게 교훈이 될 만한 내용임.
책임자 부재: 도표에 이름이 없어 책임성 부재를 불러 일으켰고, 의견을 기각하기가 쉬움.
단변량 분석: 엔지니어들은 여러 단변량 데이터 표를 제공했지만 중요한 의사 결정에 영향을 미치는 두 변수 간의 관계를 보여주지 않았다.
- 표 형식으로 둘 사이의 연관성을 확인하기가 매우 어렵다.
단편적인 증거: 표본 크기가 작기 때문에 이상치(SRM-22)에 기반한 단편적인 반박에 대응하기 어려움.
자료 누락: 엔지니어들은 22개의 다른 운행에서 얻은 데이터를 제시하지 않아 전체 발사 중 92%를 대표하는 중요한 정보를 생략함.
혼란: 시간 제약과 협업을 고려할 때 엔지니어들은 종종 erosion(부식)과 blow-by(가스가 새는 현상)와 같은 두 가지 다른 유형의 손상을 명확히 구분하지 않음.
- 불명확한 용어 사용은 의사결정권자의 이해를 방해할 수 있음.
교훈
명확성과 맥락: 데이터 과학자는 맥락과 변수 간의 관계를 고려하여 증거를 명확하게 제시해야 한다.
포괄적인 분석: 단편적인 증거나 중요한 데이터를 생략하지 않고 모든 데이터를 고려할 필요가 있다.
시각화: 효과적인 데이터 그래픽은 표보다 복잡한 관계를 강력하게 전달할 수 있다.
- 적절한 축 레이블, 추가 텍스트 설명 및 캡션으로 명확하게 설명해야 한다.
책임성: 분석을 특정 개인에게 명시적으로 할당하여 데이터에 기반한 결정에 대한 책임을 부여해야 한다.
효과적인 프레젠테이션 기술
- 효과적인 프레젠테이션은 데이터 과학자에게 중요한 기술
- 학술회의, 강의실, 회의실, 심지어 무대 위에서도 청중과 소통하는 능력은 헤아릴 수 없는 가치를 지니고 있음.
- 시간 관리
- 발표와 질의응답 시간은 정해져 있음
- 발표 시간이 너무 짧거나 길면 준비되지 않은 것으로 인식
- 리허설: 여러 번. 리허설할 때보다 실제 발표할 때 더 빨리 말하는 경향이 있을 수 있음
- 속도를 높이기 위해 더 빨리 말하는 것은 좋지 않은 전략. 핵심 슬라이드나 결론으로 직행하는 것이 훨씬 나음
- 한 화면에 너무 많은걸 담지 말 것
- 청중이 슬라이드를 읽고 있지 않도록 할 것.
- 슬라이드는 말을 대신하는 것이 아니라 요점에 대한 시각적 단서를 제공해야 함.
문제에 맥락을 줄 것
- 대부분의 청중은 발표 주제에 대한 지식이 거의 없음
- 발표 시작 직후 몇 분 정도 시간을 할애하여 주제의 가장 기본적인 측면을 소개하고 발표할 내용에 대한 동기를 제시하라.
크고 명확하게 말할 것
알고 있는 모든 것을 말하려 하지 말 것
- 큰 주제를 명확하게 전달하기 위해 노력하되 세부적인 내용에 집착하지 말 것
- 청중이 연구 질문이 무엇인지, 이를 어떻게 해결했는지, 연구 결과의 함의가 무엇인지 이해하고 떠날 수 있다면 성공!