1 연대기 데이터

deeptime 팩키지에 나온 데이터를 활용하여 시각화해보자.

library(deeptime)
library(tidyverse)
library(divDyn)

data(corals)

corals_tbl <- corals %>% 
  as_tibble()

coral_div <- corals_tbl %>% 
  filter(stage != "") %>%
  group_by(stage) %>%
  summarise(n = n()) %>%
  mutate(stage_age = (stages$max_age[match(stage, stages$name)] + stages$min_age[match(stage, stages$name)])/2)

reactable::reactable(coral_div)

상기 데이터를 시각화하면 다음과 같다.

ggplot(coral_div) +
  geom_line(aes(x = stage_age, y = n)) +
  scale_x_reverse("Age (Ma)") +
  ylab("Coral Genera") +
  coord_geo( xlim = c(250, 0), ylim = c(0, 1700)) +
  theme_classic()

coord_geo() 함수가 핵심적인 역할을 수행하고 해당 데이터는 Macrostrat - A platform for geological data exploration, integration, and analysis 에 정의되어 있다. 별도 데이터를 연대기를 갖는 데이터를 원하는 경우 data(periods) 함수를 사용해서 이에 맞춰 표현이 가능하다.

library(gsloid)

lisiecki2005 %>% 
  as_tibble() %>% 
  ggplot(aes(x = d18O, y = Time/1000)) +
    geom_line(orientation = "y") +
    scale_y_reverse("Time (Ma)") +
    scale_x_reverse() +
    coord_geo(dat = "Geomagnetic Polarity Chron", xlim = c(6,2), ylim = c(6,0), pos = "left", rot = 90) +
    theme_classic()

연대기를 정의하는 기본 데이터는 다음 구조를 갖는다.

data(periods)
periods
             name  max_age  min_age abbr   color
6      Quaternary    2.588    0.000    Q #F9F97F
17        Neogene   23.030    2.588   Ng #FFE619
31      Paleogene   66.000   23.030   Pg #FD9A52
46     Cretaceous  145.000   66.000    K #7FC64E
61       Jurassic  201.300  145.000    J #34B2C9
73       Triassic  252.170  201.300   Tr #812B92
86        Permian  298.900  252.170    P #F04028
96  Carboniferous  358.900  298.900    C #67A599
107      Devonian  419.200  358.900    D #CB8C37
120      Silurian  443.400  419.200    S #B3E1B6
131    Ordovician  485.400  443.400    O #009270
148      Cambrian  541.000  485.400   Cm #7FA056
151     Ediacaran  635.000  541.000   Ed #FED96A
152    Cryogenian  850.000  635.000  Cry #FECC5C
154        Tonian 1000.000  850.000   Tn #FEBF4E
155       Stenian 1200.000 1000.000  Stn #FED99A
156      Ectasian 1400.000 1200.000   Ec #F3CC8A
158     Calymmian 1600.000 1400.000   Cl #FDC07A
159    Statherian 1800.000 1600.000  Stt #F875A7
160     Orosirian 2050.000 1800.000  Ors #F76898
161      Rhyacian 2300.000 2050.000    R #F75B89
164      Siderian 2500.000 2300.000   Sd #F74F7C

2 국내 데이터

library(rvest)

Sys.setlocale("LC_ALL", locale = "C")
[1] "C"
wiki_raw <- read_html(x = "https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EC%9D%B8%EA%B5%AC", encoding = 'utf-8') %>% 
  html_element(xpath = '//*[@id="mw-content-text"]/div[1]/table[6]') %>% 
  html_table(fill = TRUE)

Sys.setlocale("LC_ALL", locale = "Korean")
[1] "LC_COLLATE=Korean_Korea.949;LC_CTYPE=Korean_Korea.949;LC_MONETARY=Korean_Korea.949;LC_NUMERIC=C;LC_TIME=Korean_Korea.949"
wiki_tbl <- wiki_raw %>% 
  janitor::clean_names(ascii = FALSE) %>% 
  select(연도 = 연도_년, 인구 = 추계인구_명) %>% 
  mutate(인구 = parse_number(인구)) %>% 
  mutate(name = case_when( 연도 <= 1953 ~ "Korean War",
                          연도 > 1953 & 연도 <= 1963 ~ "Baby Boomer",
                          연도 > 1963 ~ "X Gen"))
  

wiki_tbl %>% 
  ggplot(aes(x = 연도, y = 인구)) +
    geom_line() +
    scale_y_continuous(labels = scales::comma) +
    labs(x=NULL, y=NULL, 
         title = "대한민국 인구") +
    theme_bw(base_family = "NanumGothic")

3 연대기 데이터

시대정신 - 유권자에 나타난 정보를 시각화해보자.

war_gen <- c("Korean War", 1900, 1953, "War", "#F9F97F")
babyboom_gen <- c("Baby Boomer", 1954, 1963, "Baby", "#FFE619")
x_gen  <- c("X Gen", 1964, 1980, "X-Gen", "#FD9A52")

gen_list <- list(war_gen, babyboom_gen, x_gen)

gen_tbl <- tibble(name    = map_chr(gen_list, 1),
                  min_age = map_chr(gen_list, 3) %>% as.integer,
                  max_age = map_chr(gen_list, 2) %>% as.integer,
                  abbr    = map_chr(gen_list, 4),
                  color   = map_chr(gen_list, 5))

periods <- gen_tbl

wiki_tbl %>% 
  ggplot(aes(x = 연도, y = 인구)) +
    geom_line() +
    scale_y_continuous(labels = scales::comma) +
    labs(x=NULL, y=NULL, 
         title = "대한민국 인구") +
    theme_bw(base_family = "NanumGothic") +
    coord_geo(dat = "periods", xlim = c(0, 2020))

 

데이터 과학자 이광춘 저작

kwangchun.lee.7@gmail.com