Course Map

  1. Dive Deeper Into Data Wrangling & Exploration Tools
  2. Static Visualization Transformation/Interactive Plot
  3. Web Dashboard

Dive Deeper Into Data Wrangling & Exploration Tools

Pada course kali ini, kita akan menggunakan package tidyverse, package tersebut terdiri dari beberapa package. Dimana setiap package yang tedapat pada package tidyverse akan mempermudah kita dalam melakukan wrangling dan eksplorasi data.

# install.packages("tidyverse")
library(tidyverse)

Beberapa package umum yang terdapat di dalam tidyverse antara lain:

  • ggplot2
  • dplyr
  • tidyr
  • readr
  • purrr
  • tibble
  • stringr
  • forcats

Membaca data dengan readr

Biasanya kita menggunakan fungsi read.csv() untuk membaca data. Kali ini mari kita coba menggunakan fungsi read_csv() dari library readr untuk membaca data YouTube Trending 2017, All Unique Videos.

Perbedaan menggunakan read_csv() dibandingkan read.csv():

  • read_csv() mendeteksi kolom bertipe data tanggal dan mengubahnya secara langsung.
# Please type your code here
vids <-  read_csv("data_input/youtubetrends.csv")
# Please type your code here
vids2 <-  read.csv("data_input/youtubetrends.csv")

Penjelasan mengenai 16 kolom dalam dataframe:

  • trending_date: tanggal trending (format: YY.MM.DD)
  • title: judul video
  • channel_title: nama channel Youtube
  • category_id: kategori video
  • publish_time: tanggal upload video (format: YYYY-MM-DD-HH-MM-SS)
  • views: jumlah views dalam video tersebut
  • likes: jumlah likes dalam video tersebut
  • dislikes: jumlah dislikes dalam video tersebut
  • comment_count jumlah komentar
  • comment_disabled: apakah kolom komentar tidak diaktifkan
  • rating_disabled: apakah rating video tidak diaktifkan
  • video_error_or_removed: apakah video dihapus
  • publish_hour: jam video tersebut dipublish
  • publish_when: range video tersebut dipublish
  • publish_wday: hari video tersebut dipublish
  • timetotrend: rentan waktu video tersebut dari dipublish sampai menjadi trending

Data Wrangling & Exploratory dengan dplyr

dplyr adalah package khusus yang mempermudah kita dalam melakukan data wrangling ataupun eksplorasi data. Berikut beberapa tahapan yang akan kita lakukan dalam melakukan data wrangling ataupun eksplorasi data.

  • Inspeksi data
  • Seleksi kolom
  • Filter baris
  • Membuat atau mengubah kolom
  • Agregasi data
  • Mengurutkan baris

Seleksi kolom

Tugas: Kita sebagai tim data diminta untuk mengambil data video youtube yang berisikan kolom trending_date dan title saja.

Cara base:

# Please run the code down below
vids[,c("trending_date", "title")]

Cara dplyr:

Fungsi yang akan digunakan adalah select()

# Please type your code here
select(.data = vids,
       trending_date, title)

Filter baris

Tugas: Kita sebagai tim data diminta untuk mengambil data video youtube yang kategorinya adalah Music dan memiliki views lebih dari 1 juta.

Cara base:

# Please run the code down below
vids[vids$category_id %in% "Music" & vids$views > 1000000,]

Cara dplyr:

Fungsi yang akan digunakan adalah filter()

# Please type your code here
filter(.data = vids,
       category_id %in% "Music" & views > 1000000)

Konsep Piping

Simbol %>% disebut sebagai piping, cara kerjanya adalah melanjutkan suatu proses ke proses lainnya secara sekuensial atau berurutan. Untuk lebih memahaminya, mari kita coba lihat perbandingan di bawah ini.

Sebagai contoh tugas: Kita secara tiba-tiba diminta tolong oleh Mas Jafar mengenai hal yang urgent, yaitu untuk menarik data dengan kolom title, category_id & likes untuk video youtube dengan kategori Entertainment & Comedy dengan likes lebih dari 50.000

Hasil tanpa piping:

# Please type your code here
cond1 <- select(.data = vids,
                title, category_id, likes)

cond2 <- filter(.data = cond1,
                category_id %in% c("Entertainment", "Comedy"),
                likes > 50000)

Hasil dengan piping:

# Please type your code here
vids %>% 
  select(title, category_id, likes) %>% 
  filter(category_id %in% c("Entertainment", "Comedy"), likes > 50000)

Shortcut Piping: CTRL/CMD + SHIFT + M

Inspeksi data

Inspeksi tipe data untuk membuktikan apakah fungsi read_csv() memang betul langsung mengubah tipe data yang tanggal atau tidak, sekaligus kita akan mencoba untuk mengecek tipe data apa saja yang belum sesuai.

Cara base:

# Please run the code down below
str(vids)
#> spec_tbl_df [2,986 × 16] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
#>  $ trending_date         : Date[1:2986], format: "2017-11-14" "2017-11-14" ...
#>  $ title                 : chr [1:2986] "WE WANT TO TALK ABOUT OUR MARRIAGE" "The Trump Presidency: Last Week Tonight with John Oliver (HBO)" "Racist Superman | Rudy Mancuso, King Bach & Lele Pons" "Nickelback Lyrics: Real or Fake?" ...
#>  $ channel_title         : chr [1:2986] "CaseyNeistat" "LastWeekTonight" "Rudy Mancuso" "Good Mythical Morning" ...
#>  $ category_id           : chr [1:2986] "People and Blogs" "Entertainment" "Comedy" "Entertainment" ...
#>  $ publish_time          : POSIXct[1:2986], format: "2017-11-13 12:13:01" "2017-11-13 02:30:00" ...
#>  $ views                 : num [1:2986] 748374 2418783 3191434 343168 2095731 ...
#>  $ likes                 : num [1:2986] 57527 97185 146033 10172 132235 ...
#>  $ dislikes              : num [1:2986] 2966 6146 5339 666 1989 ...
#>  $ comment_count         : num [1:2986] 15954 12703 8181 2146 17518 ...
#>  $ comments_disabled     : logi [1:2986] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>  $ ratings_disabled      : logi [1:2986] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>  $ video_error_or_removed: logi [1:2986] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>  $ publish_hour          : num [1:2986] 12 2 14 6 13 14 0 16 9 8 ...
#>  $ publish_when          : chr [1:2986] "8am to 3pm" "12am to 8am" "8am to 3pm" "12am to 8am" ...
#>  $ publish_wday          : chr [1:2986] "Monday" "Monday" "Sunday" "Monday" ...
#>  $ timetotrend           : chr [1:2986] "1" "1" "2" "1" ...
#>  - attr(*, "spec")=
#>   .. cols(
#>   ..   trending_date = col_date(format = ""),
#>   ..   title = col_character(),
#>   ..   channel_title = col_character(),
#>   ..   category_id = col_character(),
#>   ..   publish_time = col_datetime(format = ""),
#>   ..   views = col_double(),
#>   ..   likes = col_double(),
#>   ..   dislikes = col_double(),
#>   ..   comment_count = col_double(),
#>   ..   comments_disabled = col_logical(),
#>   ..   ratings_disabled = col_logical(),
#>   ..   video_error_or_removed = col_logical(),
#>   ..   publish_hour = col_double(),
#>   ..   publish_when = col_character(),
#>   ..   publish_wday = col_character(),
#>   ..   timetotrend = col_character()
#>   .. )
#>  - attr(*, "problems")=<externalptr>

Cara dplyr:

Fungsi yang akan digunakan adalah glimpse()

# Please type your code here
glimpse(vids)
#> Rows: 2,986
#> Columns: 16
#> $ trending_date          <date> 2017-11-14, 2017-11-14, 2017-11-14, 2017-11-14…
#> $ title                  <chr> "WE WANT TO TALK ABOUT OUR MARRIAGE", "The Trum…
#> $ channel_title          <chr> "CaseyNeistat", "LastWeekTonight", "Rudy Mancus…
#> $ category_id            <chr> "People and Blogs", "Entertainment", "Comedy", …
#> $ publish_time           <dttm> 2017-11-13 12:13:01, 2017-11-13 02:30:00, 2017…
#> $ views                  <dbl> 748374, 2418783, 3191434, 343168, 2095731, 1191…
#> $ likes                  <dbl> 57527, 97185, 146033, 10172, 132235, 9763, 1599…
#> $ dislikes               <dbl> 2966, 6146, 5339, 666, 1989, 511, 2445, 778, 11…
#> $ comment_count          <dbl> 15954, 12703, 8181, 2146, 17518, 1434, 1970, 34…
#> $ comments_disabled      <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE…
#> $ ratings_disabled       <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE…
#> $ video_error_or_removed <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE…
#> $ publish_hour           <dbl> 12, 2, 14, 6, 13, 14, 0, 16, 9, 8, 21, 22, 12, …
#> $ publish_when           <chr> "8am to 3pm", "12am to 8am", "8am to 3pm", "12a…
#> $ publish_wday           <chr> "Monday", "Monday", "Sunday", "Monday", "Sunday…
#> $ timetotrend            <chr> "1", "1", "2", "1", "2", "1", "2", "2", "1", "1…

Kolom apa saja yang belum sesuai dari hasil inspeksi datanya?

Menjadi Factor

  • channel_title
  • category_id
  • publish_hour
  • publish_when
  • publish_wday

Menjadi Numeric

  • timetotrend

Modifikasi tipe data & kolom

Modifikasti tipe data

Dari beberapa kolom yang tipe datanya belum sesuai mari kita coba ubah terlebih dahulu menjadi tipe yang lebih sesuai

Cara base:

# Please run the code down below
vids$category_id <- as.factor(vids$category_id)
glimpse(vids$category_id)
#>  Factor w/ 16 levels "Autos and Vehicles",..: 11 4 2 4 4 13 4 13 5 9 ...

Cara dplyr:

Fungsi yang akan digunakan adalah mutate()

# Please type your code here
vids_clean <- vids %>% 
  mutate(timetotrend = as.integer(timetotrend),
         category_id = as.factor(category_id),
         channel_title = as.factor(channel_title),
         publish_hour = as.factor(publish_hour),
         publish_when = as.factor(publish_when),
         publish_wday = as.factor(publish_wday))
vids_clean <- vids %>% 
  mutate(timetotrend = as.integer(timetotrend)) %>% 
  mutate_if(.predicate = is.character, .funs = as.factor)
vids_clean <- vids %>% 
  mutate(timetotrend = as.integer(timetotrend)) %>% 
  mutate_at(.vars = c("category_id", "channel_title", "publish_hour", "publish_when", "publish_wday"),
            .funs = as.factor)

Modifikasti kolom

Kita akan menambahkan beberapa kolom baru, yaitu:

  • likes_per_view: likes per views
  • dislikes_per_view: dislikes per views
  • comment_per_view: comment_count per views

Cara base:

# Please run the code down below
vids$likes_per_view <- vids$likes / vids$views

Cara dplyr:

Fungsi yang akan digunakan adalah mutate()

# Please type your code here
vids_clean <- vids_clean %>% 
  mutate(likes_per_view = likes / views,
         dislikes_per_view = dislikes / views,
         comment_per_view = comment_count / views)

glimpse(vids_clean)
#> Rows: 2,986
#> Columns: 19
#> $ trending_date          <date> 2017-11-14, 2017-11-14, 2017-11-14, 2017-11-14…
#> $ title                  <chr> "WE WANT TO TALK ABOUT OUR MARRIAGE", "The Trum…
#> $ channel_title          <fct> "CaseyNeistat", "LastWeekTonight", "Rudy Mancus…
#> $ category_id            <fct> People and Blogs, Entertainment, Comedy, Entert…
#> $ publish_time           <dttm> 2017-11-13 12:13:01, 2017-11-13 02:30:00, 2017…
#> $ views                  <dbl> 748374, 2418783, 3191434, 343168, 2095731, 1191…
#> $ likes                  <dbl> 57527, 97185, 146033, 10172, 132235, 9763, 1599…
#> $ dislikes               <dbl> 2966, 6146, 5339, 666, 1989, 511, 2445, 778, 11…
#> $ comment_count          <dbl> 15954, 12703, 8181, 2146, 17518, 1434, 1970, 34…
#> $ comments_disabled      <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE…
#> $ ratings_disabled       <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE…
#> $ video_error_or_removed <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE…
#> $ publish_hour           <fct> 12, 2, 14, 6, 13, 14, 0, 16, 9, 8, 21, 22, 12, …
#> $ publish_when           <fct> 8am to 3pm, 12am to 8am, 8am to 3pm, 12am to 8a…
#> $ publish_wday           <fct> Monday, Monday, Sunday, Monday, Sunday, Monday,…
#> $ timetotrend            <int> 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1,…
#> $ likes_per_view         <dbl> 0.076869319, 0.040179297, 0.045757800, 0.029641…
#> $ dislikes_per_view      <dbl> 0.0039632590, 0.0025409472, 0.0016729157, 0.001…
#> $ comment_per_view       <dbl> 0.0213182179, 0.0052518147, 0.0025634245, 0.006…

Agregasi Data

Tugas: Ternyata pekerjaan kita masih belum selesai, kita dimintakan tolong LAGI oleh Mas Jafar untuk menghitung rata-rata views video trending yang dimiliki oleh tiap channel YouTube

Cara base:

# Please run the code down below
aggregate(views ~ channel_title, data = vids_clean, FUN = mean)

Cara dplyr:

Pada dplyr, kita dapat melakukan aggregasi data menggunakan urutan fungsi berikut:

  • group_by(): melakukan pengelompokkan berdasarkan kolom tertentu, sehingga proses apapun setelahnya dilakukan berdasarkan pengelompokkan tersebut.
  • summarise(): menghitung nilai statistik tertentu.
  • ungroup(): melepaskan pengelompokkan dari fungsi group_by().

Notes: Untuk kolom baru yang akan dibuat akan disimpan dengan nama kolom mean_views dan keseluruhan objeknya akan dismpan dengan nama vids_agg

# Please type your code here
vids_agg <- 
vids_clean %>% 
  group_by(channel_title) %>% 
  summarise(mean_views = mean(views)) %>% 
  ungroup()

Note: penggunaan ungroup() memang sering kali tidak terlihat efeknya, namun best practice setelah melakukan tahapan yang menggunakan grouping adalah melepas grouping tersebut menggunakan ungroup.

Sebagai contohnya, mari kita coba cari tahu periode (hari dan jam) kapan seorang YouTuber dengan kontek category Music mendapatkan rata-rata views terbanyak!

Tanpa ungroup():

# Please run the code down below
vids_clean %>% 
  filter(category_id == "Music") %>% 
  group_by(publish_wday, publish_when) %>% 
  summarise(mean_views = mean(views)) %>%  
  top_n(1)

Dengan ungroup():

# Please run the code down below
vids_clean %>% 
  filter(category_id == "Music") %>% 
  group_by(publish_wday, publish_when) %>% 
  summarise(mean_views = mean(views)) %>% 
  ungroup() %>% 
  top_n(1)

Mengurutkan baris

Tugas: Agar hasil agregasi untuk rata-rata views dari setiap trending video.

Cara base:

# Please run the code down below
vids_agg[order(vids_agg$mean_views, decreasing = T),]

Cara dplyr:

Fungsi yang akan digunakan adalah arrange()

# Please type your code here
vids_agg %>% 
  arrange(-mean_views) %>% 
  head(3)

###️ Dive Deeper

Background: Mba Wulan saat ini adalah seorang Data Science Instructor di Algoritma. Untuk mengisi waktu luang, Mba Wulan ingin mengisi waktunya untuk menjadi seorang YouTuber. Akan tetapi, beliau masih bingung terkait konten apa yang sebaiknya dibuat, agar videonya cukup sering masuk ke jajaran trending.

  1. Dari cerita di atas, rekomendasikan kategori video apa yang sebaiknya Mba Wulan buat. Dengan kata lain, cari tahu banyaknya kemunculan (frekuensi) video yang trending dari setiap kategori video. Lalu, simpan ke objek bernama vids_count.

Hint:

  • Untuk melakukan perhitungan count, fungsi yang digunakan adalah n()
  • Urutkan hasilnya dengan mennggunakan fungsi arrange() dan jangan diambil nilai yang paling tingginya saja.
# Please type your code here
vids_count <- 
vids_clean %>% 
  group_by(category_id) %>% 
  summarise(freq = n()) %>% 
  arrange(-freq)

Insight: Kategori dengan jumlah video trending terbanyak adalah …

  1. Berdasarkan rekomendasi kategori video di atas, Mba Wulan juga ingin mengetahui beberapa channel terkenal yang nantinya akan digunakan sebagai referensi channel yang akan dibuat. Dengan kata lain, cari tahu top 10 YouTube channel dengan jumlah rata-rata views tertinggi pada kategori video tersebut. Lalu, simpan ke objek bernama vids_top_channel
# Please type your code here
vids_top_channel <- 
vids_clean %>% 
  filter(category_id %in% "Entertainment") %>% 
  group_by(channel_title) %>% 
  summarise(mean_views = mean(views)) %>% 
  arrange(-mean_views)

Official Documentation

Official Documentation & Cheatsheet dplyr: https://dplyr.tidyverse.org/

Static Visualization Transformation/Interactive Plot

Seiring bertambahnya data dalam kompleksitas dan ukuran, sering kali tim analis diberi tugas yang sulit untuk menyeimbangkan storytelling dengan hasil visualisasinya. Tim Analis juga ditugaskan untuk menemukan keseimbangan yang baik antara cakupan dan detail di bawah batasan grafik dan plot statis.

Harapannya dengan melakukan transformasi dari plot yang statis menjadi plot interaktif, kita sebagai tim analis dapat menyampaikan informasi yang lebih informatif dan menarik.

Interactive Plot dengan plotly

Packages plotly adalah salah satu package yang sangat dipuji dalam komunitas data science karena kapabilitas dan fleksibilitasnya untuk membantu kita dalam membuat visual interaktif dari objek ggplot.

# install.packages("plotly")
library(plotly)

Tahapan pembuatan interactive plot menggunakan plotly:

  1. Formulasikan business question
  2. Persiapan data
  3. visualisasi statis dengan ggplot()
  4. Mengubah objek ggplot menjadi plotly dengan ggplotly()

Plot 1:

Business Question:

Buatlah analisis kategori video yang paling sering masuk ke dalam jajaran video trending!

  • Persiapan data

Hint: Gunakan objek vids_count

# Please type your code here
vids_count %>% 
  head()
  • Visualisasi Statis
# Please type your code here
plot1 <- vids_count %>% 
  ggplot(aes(x = freq,
             y = reorder(category_id, freq),
             fill = freq)) +
  geom_col() +
  scale_fill_gradient(low = "red", high = "black") +
  labs(title = 'Trending Categories on Youtube US 2017' ,
       x = 'Video Count',
       y = NULL) +
  theme_minimal() +
  theme(legend.position = "none") 

Additional:

  labs(title = 'Trending Categories on Youtube US 2017' ,
       x = 'Video Count',
       y = NULL) +
  theme_minimal() +
  theme(legend.position = "none") 
  • Mengubah objek ggplot menjadi interaktif

Fungsi yang akan digunakan ggplotly()

# Please type your code here
ggplotly(plot1)

Tooltip

Tooltip adalah informasi atau label yang ditampilkan ketika user meng-hover plot.

# install.packages("glue")
library(glue)
# contoh penggunaan fungsi glue dari library glue
nama <- c("Wulan", "Jafar", "Fafil", "Kevin", "Lita", "Victor")
glue("Nama Instructor: {nama}")
#> Nama Instructor: Wulan
#> Nama Instructor: Jafar
#> Nama Instructor: Fafil
#> Nama Instructor: Kevin
#> Nama Instructor: Lita
#> Nama Instructor: Victor

Tahapan dalam menambahkan tooltip:

  1. Pada tahapan persiapan data, tambahkan kolom berisi informasi tulisan pada tooltip. Fungsi glue() digunakan untuk menampilkan nilai pada kolom.
# Please type your code here
vids_count <- vids_count %>% 
  mutate(label = glue("Category = {category_id}
                      Video Count = {freq} Videos"))
  1. Membuat ulang visualisasi dengan menambahkan parameter text pada aes()
# Please type your code here
plot1 <- vids_count %>% 
  ggplot(aes(x = freq,
             y = reorder(category_id, freq),
             fill = freq,
             text = label)) +
  geom_col() +
  scale_fill_gradient(low = "red", high = "black") +
  theme_minimal() +
  theme(legend.position = "none") +
  labs(title = 'Trending Categories on Youtube US 2017' ,
       x = 'Video Count',
       y = NULL)
  1. Menambahkan parameter tooltip = "text" pada ggplotly()
# Please type your code here
ggplotly(plot1, tooltip = "text")

Plot 2:

Business Question:

Dari kategori Entertainment, lakukan analisis top 10 channel YouTube dengan rata-rata jumlah views tertinggi!

  • Persiapan data

Hint: Gunakan objek vids_top_channel

# Please type your code here
vids_top10_channel <- vids_top_channel %>% 
  mutate(label = glue("Channel: {channel_title}
                      Mean Views: {scales::comma(mean_views)}")) %>% 
  head(10)
  • Visualisasi Statis
# Please type your code here
plot2 <- vids_top10_channel %>% 
  ggplot(aes(x = mean_views,
             y = reorder(channel_title, mean_views),
             color = mean_views,
             text = label)) +
  geom_segment(aes(x = 0, xend = mean_views, yend = channel_title), size = 1) +
  geom_point(size = 3) +
  labs(x = 'Mean Views',
       y = NULL,
       title = 'Top 10 YouTube Channels in Entertainment') +
  scale_color_gradient(low = "red", high = "black") +
  scale_x_continuous(labels = scales::comma) +
  theme_minimal() +
  theme(legend.position = "none",
        plot.margin = margin(r = 20)) 

Additional:

  scale_x_continuous(labels = scales::comma) +
  labs(x = 'Mean Views',
       y = NULL,
       title = 'Top 10 YouTube Channels in Entertainment') +
  theme_minimal() +
  theme(legend.position = "none",
        plot.margin = margin(r = 20)) 
  • Mengubah objek ggplot menjadi interaktif

Fungsi yang akan digunakan ggplotly()

# Please type your code here
ggplotly(plot2, tooltip = "text")

Plot 3:

Business Question:

Setelah menganalisis top 10 channel dari kategori video Entertainment, kita ingin melihat aktivitas viewers pada kategori tersebut di setiap publish_hour. Tipe plot apa yang baiknya digunakan? Buatlah interactive plotnya.

  • Persiapan data
# Please type your code here
vids_trend <- vids_clean %>% 
  filter(category_id == "Entertainment") %>% 
  group_by(publish_hour) %>% 
  summarise(mean_views = mean(views)) %>% 
  ungroup() %>% # opsional, karena grouping hanya 1 kolom
  mutate(label = glue("Publish Hour: {publish_hour}
                      Average Views: {scales::comma(mean_views)}"))
  • Visualisasi Statis
# Please type your code here
plot3 <- vids_trend %>% 
  ggplot(aes(x = publish_hour, y = mean_views)) +
  geom_area(group = 1, fill="red", alpha=0.4) +
  geom_line(group = 1, color = "red") +
  geom_point(aes(text = label)) +
  scale_y_continuous(labels = scales::comma) +
  labs(
    title = "Viewers Activity for Entertainment Videos",
    x = "Publish Hour",
    y = "Average Views"
  ) +
  theme_minimal()

Additional:

  scale_y_continuous(labels = scales::comma) +
  labs(title = "Viewers Activity for Entertainment Videos",
       x = "Publish Hour",
       y = "Average Views") +
  theme_minimal()
  • Mengubah objek ggplot menjadi interaktif

Fungsi yang akan digunakan ggplotly()

# Please type your code here
ggplotly(plot3, tooltip = "text")

Official Documentation

Official Documentation plotly: https://plotly.com/r/

Web Dashboard

Flexdashboard

Flex Dashboard adalah paket R yang mudah membuat dasbor fleksibel, menarik, dan interaktif”. Pembuatan dan penyesuaian dasbor dilakukan menggunakan R Markdown dengan format output flexdashboard::flex_dashboard.

# install.packages("flexdashboard")
library(flexdashboard)

Langkah membuat file Rmd dengan template flexdashboard:

  1. Pilih Menu File > New File > R Markdown
  2. Pada bagian “From Template”, pilih “Flex Dashboard”
  3. Klik tombol “OK”
  4. Simpan file Rmd dan beri nama file (bisa dengan shortcut CTRL + S)

Library & Data

# Settingan Agar tidak muncul numeric value
options(scipen = 9999)

# List Library
library(tidyverse)
library(scales)
library(flexdashboard)
library(plotly)
library(glue)
library(scales)

# Data
vids <- read_csv("data_input/youtubetrends.csv")

# Data Cleansing
vids_clean <- vids %>% 
  mutate(timetotrend = as.integer(timetotrend),
         category_id = as.factor(category_id),
         channel_title = as.factor(channel_title),
         publish_hour = as.factor(publish_hour),
         publish_when = as.factor(publish_when),
         publish_wday = as.factor(publish_wday)) %>% 
  mutate(likes_per_view = likes / views,
         dislikes_per_view = dislikes / views,
         comment_per_view = comment_count / views)

Shiny

Shiny adalah packages dari RStudio, yang menyediakan framework aplikasi web untuk membuat aplikasi web interaktif (visualisasi) yang disebut “Shiny apps”. Kemudahan bekerja dengan Shiny telah mempopulerkannya di antara pengguna R. Aplikasi web ini menampilkan objek R dengan cantik (seperti plot, tabel, dll.) dan juga dapat di-deploy untuk memungkinkan diakses oleh siapa saja.

Shiny menyediakan widget yang memungkinkan untuk membangun aplikasi yang elegan dengan sedikit usaha.

Struktur aplikasi shiny dasar:

knitr::include_graphics(path = "assets/shiny architecture.png")

  • global.R: Untuk menyiapkan lingkungan aplikasi, misalnya, library, impor data dan persiapan data.
  • ui.R: User Interface (UI) untuk menampilkan input dan output.
  • server.R: Untuk memproses input dari user dan mengubahnya menjadi output.
# install.packages("shinydashboard")
library(shinydashboard)

Referensi: