Visualisasi Sederhana Kasus Covid-19 dengan R

Halima Tusyakdiah
6 min readJun 21, 2020
Source: https://www.channelnewsasia.com/news/asia/coronavirus-covid19-indonesia-deaths-cases-rise-12535900

Kali ini kita akan melakukan visualisasi sederhana untuk melihat kondisi pandemi baru yaitu coronavirus.

dipetik dari Organisasi Kesehatan Dunia, coronavirus adalah keluarga besar virus yang dapat menyebabkan penyakit pada hewan atau manusia. Pada manusia, beberapa coronavirus diketahui menyebabkan infeksi pernafasan mulai dari flu biasa hingga penyakit yang lebih parah seperti Middle East Respiratory Syndrome (MERS) dan Severe Acute Respiratory Syndrome (SARS).
Sebagian besar orang yang terinfeksi virus COVID-19 akan mengalami penyakit pernapasan ringan hingga sedang dan sembuh tanpa memerlukan perawatan khusus. Orang yang lebih tua, dan mereka yang memiliki masalah medis mendasar seperti penyakit kardiovaskular, diabetes, penyakit pernapasan kronis, dan kanker lebih mungkin mengembangkan penyakit serius.

di indonesia sendiri awal ditemukan kasus ini pada akhir maret di depok yang kemudian menyebar dengan cepat ke seluruh provinisi di indonesia.

oke kita langsung saja..

IMPUTING DATA

pertama pastikan program r telah terinstall pada komputer anda, pada tutorial kali ini saya menggunakan Rstudio dengan versi r 4.0.1

kemudian install packages berikut.

install.packages(c("flexdashboard", "leaflet", "leafpop",'devtools',
'dplyr','magrittr','tidyverse','plotly'))

library(leaflet)
library(leafpop)
library(devtools)
library(dplyr)
library(magrittr)
library(plotly)
library(purrr)

selanjutnya memasukan data coronavirus. data terupdate corona virus sudah dapat diakses menggunakan r dengan nama packages coronavirus. packages ini dibuat Rami Krispin dan tersedia di https://github.com/RamiKrispin/coronavirus

sekarang dapat menginstall packages coronavirus dengan menggunakan perintah

install_github("RamiKrispin/coronavirus")

tunggu beberapa menit, jika muncul opsi berikut:

pilih 1 untu menginstal semua semua package yang diperlukan. setelah di install, untuk memanggila data terlebih dahulu panggil packages library(coronavirus) kemudian panggila data dengan perintah View(coronavirus)

data coronavirus terdiri dari 6 variabel yaitu: date, province, country, lat, long, type, cases.

VISUALIZATION

visulisasi pertama akan mengambil kasus di indonesia, dengan cara memfilter country lalu menjumlahkan kasus. Sintaks yang digunakan merujuk pada github Antoine Soetwey.

df <- coronavirus %>%
dplyr::filter(country == "Indonesia") %>%
dplyr::group_by(country, type) %>%
dplyr::summarise(total = sum(cases))
df
output filtering

Supaya tampilannya lebih bagus gunakan perintah

df <- coronavirus %>%
# dplyr::filter(date == max(date)) %>%
dplyr::filter(country == "Indonesia") %>%
dplyr::group_by(country, type) %>%
dplyr::summarise(total = sum(cases)) %>%
tidyr::pivot_wider(
names_from = type,
values_from = total
)
df

kemudian memfilter data harian dengan perintah berikut

df_harian <- coronavirus %>%
dplyr::filter(country == "Indonesia") %>%
dplyr::filter(date >= "2020-03-01") %>%
dplyr::group_by(date, type) %>%
dplyr::summarise(total = sum(cases, na.rm = TRUE)) %>%
tidyr::pivot_wider(
names_from = type,
values_from = total
) %>%
dplyr::arrange(date) %>%
dplyr::ungroup() %>%
dplyr::mutate(active = confirmed - death) %>%
dplyr::mutate(
confirmed_cum = cumsum(confirmed),
death_cum = cumsum(death),
active_cum = cumsum(active)
)
df_harian
data harian kasus korona di Indonesia

dari data yang sudah di filter kemudian di buat plot dengan perintah berikut.

confirmed_color <- "purple"
active_color <- "#1f77b4"
recovered_color <- "forestgreen"
death_color <- "red"
plotly::plot_ly(data = df_harian) %>%
plotly::add_trace(
x = ~date,
# y = ~active_cum,
y = ~confirmed_cum,
type = "scatter",
mode = "lines+markers",
name = "Confirmed",
line = list(color = active_color),
marker = list(color = active_color)
) %>%
plotly::add_trace(
x = ~date,
y = ~death_cum,
type = "scatter",
mode = "lines+markers",
name = "Death",
line = list(color = death_color),
marker = list(color = death_color)
) %>%
plotly::add_annotations(
x = as.Date("2020-03-02"),
y = 1,
text = paste("Kasus Pertama"),
xref = "x",
yref = "y",
arrowhead = 5,
arrowhead = 3,
arrowsize = 1,
showarrow = TRUE,
ax = -10,
ay = -80
) %>%
plotly::add_annotations(
x = as.Date("2020-03-11"),
y = 3,
text = paste("Kematian Pertama"),
xref = "x",
yref = "y",
arrowhead = 5,
arrowhead = 3,
arrowsize = 1,
showarrow = TRUE,
ax = -90,
ay = -90
) %>%
plotly::layout(
title = "",
yaxis = list(title = "Jumlah kumulatif banyak kasus"),
xaxis = list(title = "Tanggal"),
legend = list(x = 0.1, y = 0.9),
hovermode = "compare"
)
grafik jumlah kasus terkonfir covid-19 dan terkonfir meninggal

dari grafik terlihat kasus terkonfir covid-19 pertama pada tanggal 2 maret 2020 dengan kasus pertama terkonfir meninggal akibat covid-19 pada tanggal 13 maret 2020. Pada tangga 20 Maret 2020 terlihat grafik terkonfirmasi covid-19 mulai meningkat hingga 20 juni 2019 belum terlihat puncaknya. pada grafik terkonfimasi meninggal di awal maret terlihat cukup tinggi jika dibandingkan jumlah kasus terkonfimasi. namun semakin hari semakin terlihat gap yang cukup jauh antara keduanya sehingga dapat dikatakan cukup bagus mungkin dari penanganan pemerintah atau dari kesadaran masyarajat sendiri.

visualisasi kedua yaitu membandingkan kasusu baru beberapa negara menggunakan perintah berikut.

konfirmasi_harian <- coronavirus %>%
dplyr::filter(type == "confirmed") %>%
dplyr::filter(date >= "2020-02-25") %>%
dplyr::mutate(country = country) %>%
dplyr::group_by(date, country) %>%
dplyr::summarise(total = sum(cases)) %>%
dplyr::ungroup() %>%
tidyr::pivot_wider(names_from = country, values_from = total)
konfirmasi_harian

dapat ditampilkan dengan grafik beberapa negara tetangga dari indonesia yaitu Indonesia, Malaysia, Singapura, Thailand dengan perintah berikut

konfirmasi_harian %>%
plotly::plot_ly() %>%
plotly::add_trace(
x = ~date,
y = ~Indonesia,
type = "scatter",
mode = "lines+markers",
name = "Indonesia"
) %>%
plotly::add_trace(
x = ~date,
y = ~Malaysia,
type = "scatter",
mode = "lines+markers",
name = "Malaysia"
) %>%
plotly::add_trace(
x = ~date,
y = ~Singapore,
type = "scatter",
mode = "lines+markers",
name = "Singapore"
) %>%
plotly::add_trace(
x = ~date,
y = ~Thailand,
type = "scatter",
mode = "lines+markers",
name = "Thailand"
) %>%
plotly::layout(
title = "",
legend = list(x = 0.1, y = 0.9),
yaxis = list(title = "Jumlah kasus positif baru"),
xaxis = list(title = "Tanggal"),
hovermode = "compare",
margin = list(
b = 10,
t = 10,
pad = 2
)

kemudian membandingkan jumlah kasus kematian perharinya diatas dari ke empat negara tersebut dengan menggunakan perintah

kematian_harian <- coronavirus %>%
dplyr::filter(type == "death") %>%
dplyr::filter(date >= "2020-02-25") %>%
dplyr::mutate(country = country) %>%
dplyr::group_by(date, country) %>%
dplyr::summarise(total = sum(cases)) %>%
dplyr::ungroup() %>%
tidyr::pivot_wider(names_from = country, values_from = total)
kematian_harian %>%
plotly::plot_ly() %>%
plotly::add_trace(
x = ~date,
y = ~Indonesia,
type = "scatter",
mode = "lines+markers",
name = "Indonesia"
) %>%
plotly::add_trace(
x = ~date,
y = ~Malaysia,
type = "scatter",
mode = "lines+markers",
name = "Malaysia"
) %>%
plotly::add_trace(
x = ~date,
y = ~Singapore,
type = "scatter",
mode = "lines+markers",
name = "Singapore"
) %>%
plotly::add_trace(
x = ~date,
y = ~Thailand,
type = "scatter",
mode = "lines+markers",
name = "Thailand"
) %>%
plotly::layout(
title = "",
legend = list(x = 0.1, y = 0.9),
yaxis = list(title = "Jumlah kematian baru"),
xaxis = list(title = "Tanggal"),
hovermode = "compare",
margin = list(
b = 10,
t = 10,
pad = 2
)
)

terakhit, visualisasi ke empat memvisualisasikan kasus terkonfir covid-19, masus meninggal, dan kasus diseluruh dunia dengan menggunakan peta. maka dapat menggunakan sintaks berikut.

# map tab added by Art Steinmetz
library(leaflet)
library(leafpop)
library(purrr)
cv_data_for_plot <- coronavirus %>%
# dplyr::filter(country == "Indonesia") %>%
dplyr::filter(cases > 0) %>%
dplyr::group_by(country, province, lat, long, type) %>%
dplyr::summarise(cases = sum(cases)) %>%
dplyr::mutate(log_cases = 2 * log(cases)) %>%
dplyr::ungroup()
cv_data_for_plot.split <- cv_data_for_plot %>% split(cv_data_for_plot$type)
pal <- colorFactor(c("orange", "red", "green"), domain = c("confirmed", "death", "recovered"))
map_object <- leaflet() %>% addProviderTiles(providers$Stamen.Toner)
names(cv_data_for_plot.split) %>%
purrr::walk(function(df) {
map_object <<- map_object %>%
addCircleMarkers(
data = cv_data_for_plot.split[[df]],
lng = ~long, lat = ~lat,
# label=~as.character(cases),
color = ~ pal(type),
stroke = FALSE,
fillOpacity = 0.8,
radius = ~log_cases,
popup = leafpop::popupTable(cv_data_for_plot.split[[df]],
feature.id = FALSE,
row.numbers = FALSE,
zcol = c("type", "cases", "country", "province")
),
group = df,
# clusterOptions = markerClusterOptions(removeOutsideVisibleBounds = F),
labelOptions = labelOptions(
noHide = F,
direction = "auto"
)
)
})
map_object %>%
addLayersControl(
overlayGroups = names(cv_data_for_plot.split),
options = layersControlOptions(collapsed = FALSE)
)

oke cukup sekian tutorial visualisasi kasus korona 2020, semoga kita diberi ke tabahan, kekuatan dalam kondisi sekarang ini. Tetap patuhi protokol kesehatan dan semoga kita terus berada dalam lindungan Allah SWT.

terimakasih.. semoga bermanfaat :)

--

--

Halima Tusyakdiah

Statistics student at Islamic University of Indonesian