แอนิเมชันแบบสะสม

การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

Adam Loy

Statistician, Carleton College

กราฟอนุกรมเวลาแบบแอนิเมชันของรายได้ต่อหัวของเบลเยียม

การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

ข้อมูลรายได้ของเบลเยียม

belgium <- world_indicators %>%
  filter(country == "Belgium")
belgium
# A tibble: 59 x 11
  country  year income   co2 military population  urban life_expectancy four_regions
  <chr>   <dbl>  <dbl> <dbl>    <dbl>      <dbl>  <dbl>           <dbl> <chr>       
1 Belgium  1960  12600  9.93     3.4     9170000 8.46e6            69.6 europe      
2 Belgium  1961  13100 10.1      3.26    9230000 8.50e6            70.5 europe      
3 Belgium  1962  13700 10.6      3.28    9280000 8.55e6            70.2 europe      
4 Belgium  1963  14100 11.3      3.22    9340000 8.62e6            70   europe      
5 Belgium  1964  15000 11        3.21    9390000 8.72e6            70.7 europe      
# … with 54 more rows, and 2 more variables: eight_regions <chr>, six_regions <chr>
การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

frame คืออะไร?

# A tibble: 59 x 11
  country  year income   co2
  <chr>   <dbl>  <dbl> <dbl>
1 Belgium  1960  12600  9.93
2 Belgium  1961  13100 10.1 
3 Belgium  1962  13700 10.6 
4 Belgium  1963  14100 11.3 
5 Belgium  1964  15000 11   
6 Belgium  1965  15300 11.2 
# … with 53 more rows, and 7
#   more variables

frame = ~year คืออะไร ??

การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

frame คืออะไร?

เป้าหมาย แสดงข้อมูลที่คงอยู่ระหว่างเฟรม

frame = ~year ไม่มีข้อมูลคงอยู่เมื่อกำหนด frame = ~year

การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

การสะสมชุดข้อมูล

ชุดข้อมูลสะสมสำหรับปี 1960

การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

การสะสมชุดข้อมูล

ชุดข้อมูลสะสมสำหรับปี 1961

การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

การสะสมชุดข้อมูล

ชุดข้อมูลสะสมถึงปี 1962

การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

`split()`

library(dplyr)
library(purrr)

belgium %>% split(.$year)

แบ่งชุดข้อมูลเป็น list ของ data.frame ตามตัวแปร year

การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

`accumulate()`

library(dplyr)
library(purrr)
belgium %>%
  split(.$year) %>%
  accumulate(~bind_rows(.x, .y)) 

แสดงการรวม data.frame แบบแถวซ้ำสะสม

การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

ตั้งชื่อ

library(dplyr)
library(purrr)
belgium %>%
  split(.$year) %>%
  accumulate(~bind_rows(.x, .y)) %>%
  set_names(1960:2018) 

แสดงการรวม data.frame แบบแถวซ้ำสะสม

การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

รวม

library(dplyr)
library(purrr)
belgium %>%
  split(.$year) %>%
  accumulate(~bind_rows(.x, .y)) %>%
  set_names(1960:2018) %>%
  bind_rows(.id = "frame")

แสดง list ของ data frame ที่ถูกรวมเป็นแถว

การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง
# A tibble: 1,770 x 12
   frame country  year income   co2 military population  urban life_expectancy
   <chr> <chr>   <dbl>  <dbl> <dbl>    <dbl>      <dbl>  <dbl>           <dbl>
 1 1960  Belgium  1960  12600  9.93     3.4     9170000 8.46e6            69.6
 2 1961  Belgium  1960  12600  9.93     3.4     9170000 8.46e6            69.6
 3 1961  Belgium  1961  13100 10.1      3.26    9230000 8.50e6            70.5
 4 1962  Belgium  1960  12600  9.93     3.4     9170000 8.46e6            69.6
 5 1962  Belgium  1961  13100 10.1      3.26    9230000 8.50e6            70.5
 6 1962  Belgium  1962  13700 10.6      3.28    9280000 8.55e6            70.2
 7 1963  Belgium  1960  12600  9.93     3.4     9170000 8.46e6            69.6
 8 1963  Belgium  1961  13100 10.1      3.26    9230000 8.50e6            70.5
 9 1963  Belgium  1962  13700 10.6      3.28    9280000 8.55e6            70.2
10 1963  Belgium  1963  14100 11.3      3.22    9340000 8.62e6            70  
# … with 1,760 more rows, and 3 more variables: four_regions <chr>,
#   eight_regions <chr>, six_regions <chr>
การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

แสดงแอนิเมชัน

library(dplyr)
library(purrr)
belgium %>%
  split(.$year) %>%
  accumulate(~bind_rows(.x, .y)) %>%
  set_names(1960:2018) %>%
  bind_rows(.id = "frame") %>%
  plot_ly(x = ~year, y = ~income) %>%
  add_lines(
    frame = ~frame, showlegend = FALSE
  )

แอนิเมชันรายได้ต่อหัวของเบลเยียมตามช่วงเวลา

การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

มาฝึกกันเถอะ!

การสร้างภาพข้อมูลเชิงโต้ตอบด้วย plotly ใน R ระดับกลาง

Preparing Video For Download...