Copyright @ Sya’roni @ Aldhias Rizky Januar @ Prof.Dr. Suhartono M.Kom @ Magister Informatika @ UIN Maulana Malik Ibrahim @ UIN Malang
9/6/2021
COVID-19 adalah penyakit menular yang disebabkan oleh jenis coronavirus yang baru ditemukan. Virus baru dan penyakit yang disebabkannya ini tidak dikenal sebelum mulainya wabah di Wuhan, Tiongkok, bulan Desember 2019. COVID-19 ini sekarang menjadi sebuah pandemi yang terjadi di banyak negara di seluruh dunia terutama di Indonesia.
Pemerintah telah mengumpulkan dan menyediakan data perkembangan kasus COVID-19 kepada publik. Data kasus covid-19 tersebutpun dilengkapi dengan gambaran secara visual agar masyarakat dapat mudah memahaminya.Pada Tugas Akhir kali ini, akan dilakukan eksplorasi dan analisis mengenai data Covid-19 di Indonesia yang tersedia di covid19.go.id
Load Library
library(httr)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(hrbrthemes)
## NOTE: Either Arial Narrow or Roboto Condensed fonts are required to use these themes.
## Please use hrbrthemes::import_roboto_condensed() to install Roboto Condensed and
## if Arial Narrow is not on your system, please see https://bit.ly/arialnarrow
library(ggplot2)
library(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(tidyr)
library(deSolve)
Mengakses API
Data yang akan digunakan adalah data yang tersedia di covid19.go.id . Data akan diambil secara langsung dengan menggunakan Application Programming Interface (API). Application programming interface (API) adalah kode yang memungkinkan dua program perangkat lunak untuk saling berkomunikasi. Mengakses API covid19.go.id tersedia di data.covid19.go.id/public/api/update.json . Mengakses API dilakukan dengan mengaktifkan paket httr dan menggunakan fungsi GET() . Dengan menjalankan fungsi GET() berati kita membuat permintaan kepada server penyedia API. Permintaan akan diproses dan dijawab sebagai respon.
Data COVID-19 Di Provinsi Jawa Timur
Selanjutnya, kita akan dilakukan analisis terhadap data Covid-19 pada Provinsi Jawa Timur dengan alamat API : data.covid19.go.id/public/api/prov_detail_BANTEN.json
resp_jatim <- GET("https://data.covid19.go.id/public/api/prov_detail_JAWA_TIMUR.json")
status_code(resp_jatim)
## [1] 200
Ketika menghasilkan output 200 maka permintaan sukses. Selanjutnya dilakukan ekstrak isi responnya dan menjalankan fungsi names() untuk mengetahui nama-nama elemen yang tersedia.
cov_jatim_raw <- content(resp_jatim, as = "parsed", simplifyVector = TRUE)
names(cov_jatim_raw)
## [1] "last_date" "provinsi" "kasus_total"
## [4] "kasus_tanpa_tgl" "kasus_dengan_tgl" "meninggal_persen"
## [7] "meninggal_tanpa_tgl" "meninggal_dengan_tgl" "sembuh_persen"
## [10] "sembuh_tanpa_tgl" "sembuh_dengan_tgl" "list_perkembangan"
## [13] "data"
Analisis data
Berapa jumlah total kasus COVID-19 di Provinsi Jawa Timur?
cov_jatim_raw$kasus_total
## [1] 157016
Didapatkan, jumlah total kasus positif hingga saat ini tanggal 08 Juni 2021 di Provinsi Jawa Timur sebesar 156.326 orang
Berapa persentase kematian akibat COVID-19 di Provinsi Jawa Timur?
cov_jatim_raw$meninggal_persen
## [1] 7.355938
Didapatkan, persentase kematian akibat COVID-19 di Provinsi Jawa Timur hingga saat ini tanggal 08 Juni 2021 sebesar 7,3%
Berapa persentase tingkat kesembuhan dari COVID-19 di Provinsi Jawa Timur?
cov_jatim_raw$sembuh_persen
## [1] 91.0646
Didapatkan, persentase Kesembuhan dari COVID-19 di Provinsi Jawa Timur hingga saat ini tanggal 08 Juni 2021 sebesar 91,18%
Memperoleh Informasi yang Lebih Lengkap di Provinsi Jawa Timur Tentang COVID-19
Informasi umum mengenai COVID-19 di Provinsi Jawa Timur telah di dapatkan. Namun informasi akan lebih lengkap jika memiliki data perkembangan COVID-19 dari waktu ke waktu. Informasi tersebut juga disediakan oleh covid19.go.id melalui permintaan API yang telah Anda buat sebelumnya. Data akan di ekstrak dan dilihat struktur datanya. Akan ditampilkan pula data teratasnya.
cov_jatim <- cov_jatim_raw$list_perkembangan
str(cov_jatim)
## 'data.frame': 518 obs. of 9 variables:
## $ tanggal : num 1.58e+12 1.58e+12 1.58e+12 1.58e+12 1.58e+12 ...
## $ KASUS : int 9 0 0 0 0 0 0 0 0 0 ...
## $ MENINGGAL : int 3 1 1 3 3 0 0 0 0 0 ...
## $ SEMBUH : int 1 23 14 8 1 0 0 0 0 4 ...
## $ DIRAWAT_OR_ISOLASI : int 5 -24 -15 -11 -4 0 0 0 0 -4 ...
## $ AKUMULASI_KASUS : int 9 9 9 9 9 9 9 9 9 9 ...
## $ AKUMULASI_SEMBUH : int 1 24 38 46 47 47 47 47 47 51 ...
## $ AKUMULASI_MENINGGAL : int 3 4 5 8 11 11 11 11 11 11 ...
## $ AKUMULASI_DIRAWAT_OR_ISOLASI: int 5 -19 -34 -45 -49 -49 -49 -49 -49 -53 ...
head(cov_jatim)
## tanggal KASUS MENINGGAL SEMBUH DIRAWAT_OR_ISOLASI AKUMULASI_KASUS
## 1 1.578442e+12 9 3 1 5 9
## 2 1.578528e+12 0 1 23 -24 9
## 3 1.578614e+12 0 1 14 -15 9
## 4 1.578701e+12 0 3 8 -11 9
## 5 1.578787e+12 0 3 1 -4 9
## 6 1.578874e+12 0 0 0 0 9
## AKUMULASI_SEMBUH AKUMULASI_MENINGGAL AKUMULASI_DIRAWAT_OR_ISOLASI
## 1 1 3 5
## 2 24 4 -19
## 3 38 5 -34
## 4 46 8 -45
## 5 47 11 -49
## 6 47 11 -49
Dilihat dari 6 data teratas tersebut, terlihat isi dari kolom tanggal terlihat tidak beraturan dan tidak sesuai format tanggal. Dan terlihat, format penulisan kolomnya tidak konsisten.Maka akan dilakukan beberapa tahapan untuk menjinakan data tersebut sehingga dapat diolah dan dianalisis dengan lebih mudah.
Menselect atau Memilih Data
Ada beberapa tahapan yang perlu dilakukan untuk data cov_jatim, yaitu:
Dengan mengaktifkan paket dplyr digunakan untuk melakukan pengolahan data.
new_cov_jatim <-
cov_jatim %>%
select(-contains("DIRAWAT_OR_ISOLASI")) %>%
select(-starts_with("AKUMULASI")) %>%
rename(
kasus_baru = KASUS,
meninggal = MENINGGAL,
sembuh = SEMBUH
) %>%
mutate(
tanggal = as.POSIXct(tanggal / 1000, origin = "1970-01-01"),
tanggal = as.Date(tanggal)
)
#Dilihat struktur data dari new_cov_jatim
str(new_cov_jatim)
## 'data.frame': 518 obs. of 4 variables:
## $ tanggal : Date, format: "2020-01-08" "2020-01-09" ...
## $ kasus_baru: int 9 0 0 0 0 0 0 0 0 0 ...
## $ meninggal : int 3 1 1 3 3 0 0 0 0 0 ...
## $ sembuh : int 1 23 14 8 1 0 0 0 0 4 ...
Setelah menselect atau memilih data cov_jatim sehingga data lebih mudah untuk diolah dan kita sudah memiliki data yang rapi.
Menunjukkan Melalui Gambar/Grafik
Data COVID-19 akan divisualisasikan dengan grafik menggunakan paket ggplot2 dan hrbrthemes untuk melihat dinamika kasus Covid-19 di Provisi Jawa Timur dari waktu ke waktu.
Kasus Harian Positif
ggplot(new_cov_jatim, aes(tanggal, kasus_baru)) +
geom_col(fill = "salmon") +
labs(
x = NULL,
y = "Jumlah Kasus",
title = "Kasus Harian Positif COVID-19 di Provinsi Jawa Timur",
caption = "Sumber data: covid.19.go.id"
) +
theme_ipsum(
base_size = 13,
plot_title_size = 21,
grid = "Y",
ticks = TRUE
) +
theme(plot.title.position = "plot")
di Provinsi Jawa Timur cenderung fluktuatif. Dan terdapat perlonjakan kasus di bulan Januari pada awal tahun yang meningkat drastis yaitu lebih dari 1500 kasus baru.
Kasus Harian Sembuh
ggplot(new_cov_jatim, aes(tanggal, sembuh)) +
geom_col(fill = "olivedrab2") +
labs(
x = NULL,
y = "Jumlah kasus",
title = "Kasus Harian Sembuh Dari COVID-19 di Provinsi Jawa Timur",
caption = "Sumber data: covid.19.go.id"
) +
theme_ipsum(
base_size = 13,
plot_title_size = 21,
grid = "Y",
ticks = TRUE
) +
theme(plot.title.position = "plot")
penambahan kasus sembuh setiap harinya. Dan terdapat kenaikan drastis kasus sembuh pada awal tahun 2021 di bulan januari Juli yaitu lebih dari 1200 penambahan kasus sembuh.
Kasus Harian Meninggal
ggplot(new_cov_jatim, aes(tanggal, meninggal)) +
geom_col(fill = "darkslategray4") +
labs(
x = NULL,
y = "Jumlah kasus",
title = "Kasus Harian Meninggal Akibat COVID-19 di Provinsi Jawa Timur",
caption = "Sumber data: covid.19.go.id"
) +
theme_ipsum(
base_size = 13,
plot_title_size = 21,
grid = "Y",
ticks = TRUE
) +
theme(plot.title.position = "plot")
penambahan kasus meninggal setiap harinya.
Hingga saat ini, berapa banyak kasus yang masih aktif?
Aktif dalam artian sedang dalam perawatan atau isolasi.Jumlah kasus yang masih aktif dapat dihitung dengan mengurangi jumlah akumulasi kasus positif dengan jumlah akumulasi kasus yang sembuh, dan menguranginya juga dengan jumlah akumulasi kasus meninggal. Nilai akumulasi dihitung dengan fungsi cumsum().
cov_jatim_akumulasi <-
new_cov_jatim %>%
transmute(
tanggal,
akumulasi_aktif = cumsum(kasus_baru) - cumsum(sembuh) - cumsum(meninggal),
akumulasi_sembuh = cumsum(sembuh),
akumulasi_meninggal = cumsum(meninggal)
)
tail(cov_jatim_akumulasi)
## tanggal akumulasi_aktif akumulasi_sembuh akumulasi_meninggal
## 513 2021-06-03 2174 141913 11418
## 514 2021-06-04 2198 142168 11440
## 515 2021-06-05 2236 142348 11466
## 516 2021-06-06 2302 142537 11487
## 517 2021-06-07 2379 142734 11514
## 518 2021-06-08 2487 142981 11548
Output diatas menunjukan akumulasi kasus aktif dalam kurun waktu 1 pekan terakhir.
Pola kasus aktif di Provinsi Jawa Timur dapat dilihat dengan membuat line chart dengan fungsi geom_line().
ggplot(data = cov_jatim_akumulasi, aes(x = tanggal, y = akumulasi_aktif)) +
geom_line()
Transformasi Data
Akan dilakukan pivot pada data cov_jatim_akumulasi dan digunakan fungsi gather() di paket tidyr untuk mentransformasi data. Data akan dirubah dari yang semula berformat wide menjadi format long. Transformasi ini bermanfaat saat kita melakukan grafik komparasi antara kasus aktif, sembuh, dan meninggal.
cov_jatim_akumulasi_pivot <-
cov_jatim_akumulasi %>%
gather(
key = "kategori",
value = "jumlah",
-tanggal
) %>%
mutate(
kategori = sub(pattern = "akumulasi_", replacement = "", kategori)
)
glimpse(cov_jatim_akumulasi_pivot)
## Rows: 1,554
## Columns: 3
## $ tanggal <date> 2020-01-08, 2020-01-09, 2020-01-10, 2020-01-11, 2020-01-12,…
## $ kategori <chr> "aktif", "aktif", "aktif", "aktif", "aktif", "aktif", "aktif…
## $ jumlah <int> 5, -19, -34, -45, -49, -49, -49, -49, -49, -53, -61, -61, -6…
Membuat Grafik Komparasi Kasus Aktif, Sembuh, dan Meninggal
membuat satu layer geom_line() dengan menggunakan colour aesthetic.
ggplot(cov_jatim_akumulasi_pivot,aes(tanggal,jumlah,colour=(kategori))) +
geom_line(size=0.9) +
scale_y_continuous(sec.axis = dup_axis(name = NULL)) +
scale_colour_manual(
values = c(
"aktif" = "salmon",
"meninggal" = "darkslategray4",
"sembuh" = "olivedrab2"
),
labels = c("Aktif","Meninggal","Sembuh")
) +
labs(
x = NULL,
y = "Jumlah kasus akumulasi",
colour = NULL,
title = "Dinamika Kasus COVID-19 di Provinsi Jawa Timur",
caption = "Sumber data: covid.19.go.id"
) +
theme_ipsum(
base_size = 13,
plot_title_size = 21,
grid = "Y",
ticks = TRUE
) +
theme(
plot.title = element_text(hjust = 0.5),
legend.position = "top"
)
Grafik diatas merupakan gambaran terkait Kasus Aktif, Sembuh, dan Meninggal di Provinsi Jawa Timur sejak Bulan Maret 2020 hingga awal Bulan Juni 2021. Penanganan terhadap kasus Covid-19 terlihat cukup baik dengan terlihatnya kasus sembuh di Provinsi Banten yang terus meningkat. Namun pencegahan dan penanggulangan tetap harus terus dilakukan dengan maksimal. Karna terlihat dari grafik, garis kasus meninggal naik secara perlahan dan kasus positif pun bisa saja kembali naik.
Tidak hanya peran pemerintah yang dibutuhkan dalam mencegah dan mengurangi kasus baru, dalam penanggulangan memutus rantai penularan virus diperlukannya peran seluruh masyarakat agar menjaga pola hidup dan memenuhi aturan protokol kesehatan yang sudah di tetapkan. Jangan lupa untuk rajin mencuci tangan, memakai masker, dan menjaga jarak!