Scraping Dataset from Wikipedia

library(tidyverse)
library(rvest)
library(lubridate)
library(shinydashboard)
library(rsconnect)
library(glue)
library(plotly)

url = read_html("https://en.wikipedia.org/wiki/COVID-19_pandemic_in_Indonesia")

data_covid = url %>%
  html_table(fill = T, header = F) %>%
  .[[2]]

data_covid = data_covid[-c(1:4),]
data_covid$X2 = NULL
data_covid$X3 = NULL

gsub("\\(\\S*","",data_covid$X4) -> data_covid$X4
gsub("\\(\\S*","",data_covid$X5) -> data_covid$X5

names(data_covid)[c(1,2,3)] = c("Date","Case","Death")

data_covid$Case = gsub("[[:punct:]]","",data_covid$Case)
data_covid$Death = gsub("[[:punct:]]","",data_covid$Death)

row.names(data_covid) = seq(nrow(data_covid))

no = data_covid %>% tail(1) %>% row.names()
data_covid = data_covid[-as.numeric(no),]


data_covid[nchar(data_covid$Death)<1,]$Death = "0"


data_covid$Date = as.Date(data_covid$Date, "%Y-%m-%d")
data_covid$Case = as.numeric(data_covid$Case) 
data_covid$Death = as.numeric(data_covid$Death) 

data_covid %>%
  mutate(kasus1 = lag(Case, n = 1),
         Kasus_harian = Case - kasus1,
         kasus2 = lag(Death, n = 1),
         Kematian_harian = Death - kasus2) %>% 
  select(Date, Case, Kasus_harian, Death, Kematian_harian) %>% 
  rename("Total_kasus" = Case,
         "Total_kematian" = Death) -> data_covid

data_covid[is.na(data_covid$Kasus_harian),]$Kasus_harian = 0
data_covid[is.na(data_covid$Kematian_harian),]$Kematian_harian = 0
lubridate::month(data_covid$Date, label = T) -> data_covid$Bulan
lubridate::year(data_covid$Date) -> data_covid$Tahun

File ini berisi template untuk mejawab pertanyaan 5W+1H saat briefing Capstone Data Visualization sebagai langkah awal sebelum membuat Dashboard. Silakan Bapak/Ibu mengisi jawaban di bawah.

File ini tidak akan dinilai namun Bapak/Ibu WAJIB disubmit ke dalam classroom pada hari H briefing Capstone Data Visualization.

What

Tentukan tujuan atau informasi yang ingin ditampilkan dalam dashboard

Jawab

Tujuan yang ingin dicapai atau informasi yang ingin disampaikan:

  • mengetahui perkembangan covid di Indonesia
  • melihat jumlah positif & kematian tiap bulan nya
  • melihat korelasi positif & kematian

Who

Untuk siapa dashboard ini dibuat? Siapa target pembaca dari dashboard ini?

Jawab

  • Dapat dilihat untuk publik dan juga mahasiswa

Why

Apakah data yang dibuat relevan atau sesuai dengan tujuan? Mengapa?

Jawab

  • Sesuai karena dalam data tersebut terdapat Informasi yang bisa menggambarkan kasus Positif covid-19 di Indonesia

When

Apakah data yang digunakan masih up to date atau masih relevan dengan kondisi sekarang? Apakah ada informasi tentang tanggal update terakhir dari data tersebut?

Jawab

  • data tersebut diambil dengan teknik web scraping, sehingga akan terus diperbarui setiap harinya hingga covid di Indonesia selesai

How

Bagaimana Bapak/Ibu menggunakan visualisasi untuk menjawab tujuan yang telah disebutkan?

Buat plot yang akan dimasukkan ke dalam dashboard. Boleh dalam bentuk ggplot maupun plotly.

Jawab

Plot untuk menjawab tujuan pertama

# your code here
      plot1 <- ggplot(data = data_covid, aes(x = Date, 
                                      y = Kasus_harian, 
                                      text = glue("{Date} 
                                                  Sum of Positive Case: {Kasus_harian}"), 
                                      group = 1)) + 
            geom_line() +
            geom_line(data = data_covid[data_covid$Bulan %in% c("Jan","Feb"),], 
                      col = 'red') +
            geom_smooth(method = "loess", se = F, size = .2) +
            theme_minimal() +
            labs(x = NULL, 
                 y = "Daily Case", 
                 title = "Daily Case Positif Covid-19 in Indonesia") +
            theme(plot.title = element_text(hjust = .5))
        
        ggplotly(plot1, tooltip = c("text")) %>%
            config(displayModeBar = F)

Plot kedua

# your code here
data_covid %>%
    filter(Tahun == 2020) %>%
    group_by(Bulan) %>%
    summarise(positif = sum(Kasus_harian),
              death = sum(Kematian_harian)) %>%
    slice(3) %>%
    pivot_longer(cols = -Bulan) %>%
      mutate(prop = value / sum(value) *100) %>%
  mutate(ypos = cumsum(prop)- 0.5*prop ) %>%
ggplot(aes(x="", y=prop, fill=name)) +
  geom_bar(stat="identity", width=1, color="white") +
  coord_polar("y", start=0) +
  theme_void() + 
  theme(legend.position="none") +
  
  geom_text(aes(y = ypos, label = name), color = "white", size=6) +
  scale_fill_brewer(palette="Set1")

Plot ketiga

# your code here
plot3 <- ggplot(data = data_covid, aes(x=Kasus_harian,
                              y=Kematian_harian,
                              col = (Kasus_harian+Kematian_harian)/2,
                              text = glue("{Date}"))) +
    geom_point() +
    scale_color_gradient(low = "green", high = "red") +
    labs(x = "Positive Case",
         y = "Death Case",
         title = "Correlation about Positive & Death Pandemic in Indonesia") +
    theme_minimal() +
            theme(legend.position = "none",
              plot.title = element_text(hjust = .5))
ggplotly(plot3, tooltip = "text") %>%
   config(displayModeBar = F)

Buat chunk baru apabila ada lebih dari 3 plot.

Where

Bagaimana desain layout atau tata letak dashboard yang akan dibuat?

Jawab

Contoh penulisan layout.

Tab atau halaman pertama

  • kasus harian positif
  • positif vs death case

Tab atau halaman kedua