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 pembelajaran kali ini, dengan Modul yang disediakan oleh DQLab dengan di mentori oleh Muhammad Aswan Syahputra, akan dilakukan eksplorasi dan analisis mengenai data Covid-19 di Indonesia yang tersedia di covid19.go.id
if(!require(httr)) install.packages("httr")
if(!require(dplyr)) install.packages("dplyr")
if(!require(hrbrthemes)) install.packages("hrbrthemes")
if(!require(ggplot2)) install.packages("ggplot2")
if(!require(lubridate)) install.packages("lubridate")
if(!require(tidyr)) install.packages("tidyr")
library(httr)
library(dplyr)
library(hrbrthemes)
library(ggplot2)
library(lubridate)
library(tidyr)
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.
resp <- GET('https://data.covid19.go.id/public/api/update.json')
Akan kita lihat bagaimana status kode dari permintaan akses terhadap API
status_code(resp)
## [1] 200
Status kode 200 tersebut mengartikan permintaan sukses di akses
Ketika status kode sukses terpenuhi, sekarang jalankan fungsi header() pada respon untuk mengetahui metadata apa saja yang tersimpan.
headers(resp)
## $server
## [1] "nginx"
##
## $date
## [1] "Tue, 04 Aug 2020 02:34:20 GMT"
##
## $`content-type`
## [1] "application/json"
##
## $`last-modified`
## [1] "Tue, 04 Aug 2020 02:29:47 GMT"
##
## $`transfer-encoding`
## [1] "chunked"
##
## $connection
## [1] "keep-alive"
##
## $vary
## [1] "Accept-Encoding"
##
## $etag
## [1] "W/\"5f28c81b-e5e4\""
##
## $`content-encoding`
## [1] "gzip"
##
## attr(,"class")
## [1] "insensitive" "list"
Mengekstrak konten, bisa menggunakan fungsi content dengan menambahkan argumen as = "parsed" dan simplifyVector = TRUE . Akan dilihat juga ada berapa komponen dan komponen apa saja yang terdapat di dalam berkas.
cov_id_raw <- content(resp, as = "parsed",simplifyVector = TRUE)
length(cov_id_raw)
## [1] 2
names(cov_id_raw)
## [1] "data" "update"
#Di ekstrak dengan variabel baru lagi yaitu cov_id_update
cov_id_update <- cov_id_raw$update
Fokus pada analisis adalah pada cov_id_update untuk mengetahui : - Kapan pembaharuan data penambahan kasus? - Berapa jumlah penambahan kasus sembuh? - Berapa jumlah penambahan kasus meninggal? - Berapa jumlah total kasus positif hingga saat ini? - Berapa jumlah total kasus meninggal hingga saat ini?
Sebelum itu, lihat dahulu apa saja nama yang ada didalam objek dengan fungsi lappy
lapply(cov_id_update,names)
## $penambahan
## [1] "jumlah_positif" "jumlah_meninggal" "jumlah_sembuh" "jumlah_dirawat"
## [5] "tanggal" "created"
##
## $harian
## [1] "key_as_string" "key" "doc_count"
## [4] "jumlah_meninggal" "jumlah_sembuh" "jumlah_positif"
## [7] "jumlah_dirawat" "jumlah_positif_kum" "jumlah_sembuh_kum"
## [10] "jumlah_meninggal_kum" "jumlah_dirawat_kum"
##
## $total
## [1] "jumlah_positif" "jumlah_dirawat" "jumlah_sembuh" "jumlah_meninggal"
cov_id_update$penambahan$tanggal
## [1] "2020-08-03"
Didapatkan, pembaharuan data penambahan kasus COVID-19 ini yaitu pada tanggal 03 Agustus 2020
cov_id_update$penambahan$jumlah_sembuh
## [1] 1262
Didapatkan, jumlah penambahan kasus sembuh sebanyak 1262 orang
cov_id_update$penambahan$jumlah_meninggal
## [1] 66
Didapatkan, jumlah penambahan kasus meninggal sebanyak 66 orang
cov_id_update$total$jumlah_positif
## [1] 113134
Didapatkan, jumlah total kasus positif hingga saat ini sebanyak 113134 orang
cov_id_update$total$jumlah_meninggal
## [1] 5302
Didapatkan, jumlah total kasus meninggal hingga saat ini sebanyak 5302 orang
Selanjutnya, akan dilakukan analisis terhadap data Covid-19 pada Provinsi Banten dengan alamat API data.covid19.go.id/public/api/prov_detail_BANTEN.json
resp_banten <- GET("https://data.covid19.go.id/public/api/prov_detail_BANTEN.json")
status_code(resp_banten)
## [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_banten_raw <- content(resp_banten, as = "parsed", simplifyVector = TRUE)
names(cov_banten_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"
cov_banten_raw$kasus_total
## [1] 1870
Didapatkan, jumlah total kasus positif hingga saat ini di Provinsi Banten sebesar 1870 orang
cov_banten_raw$meninggal_persen
## [1] 4.812834
Didapatkan, persentase kematian akibat COVID-19 di Banten sebesar 4,8%
cov_banten_raw$sembuh_persen
## [1] 74.0107
Didapatkan, persentase tingkat kesembuhan dari COVID-19 di Banten sebesar 74%
Informasi umum mengenai COVID-19 di Jawa Barat 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_banten <- cov_banten_raw$list_perkembangan
str(cov_banten)
## 'data.frame': 150 obs. of 9 variables:
## $ tanggal : num 1.58e+12 1.58e+12 1.58e+12 1.58e+12 1.58e+12 ...
## $ KASUS : int 1 0 1 0 0 0 0 1 1 1 ...
## $ MENINGGAL : int 0 0 0 0 0 0 1 0 0 0 ...
## $ SEMBUH : int 0 0 0 0 0 0 0 0 0 0 ...
## $ DIRAWAT_OR_ISOLASI : int 1 0 1 0 0 0 -1 1 1 1 ...
## $ AKUMULASI_KASUS : int 1 1 2 2 2 2 2 3 4 5 ...
## $ AKUMULASI_SEMBUH : int 0 0 0 0 0 0 0 0 0 0 ...
## $ AKUMULASI_MENINGGAL : int 0 0 0 0 0 0 1 1 1 1 ...
## $ AKUMULASI_DIRAWAT_OR_ISOLASI: int 1 1 2 2 2 2 1 2 3 4 ...
head(cov_banten)
## tanggal KASUS MENINGGAL SEMBUH DIRAWAT_OR_ISOLASI AKUMULASI_KASUS
## 1 1.583453e+12 1 0 0 1 1
## 2 1.583539e+12 0 0 0 0 1
## 3 1.583626e+12 1 0 0 1 2
## 4 1.583712e+12 0 0 0 0 2
## 5 1.583798e+12 0 0 0 0 2
## 6 1.583885e+12 0 0 0 0 2
## AKUMULASI_SEMBUH AKUMULASI_MENINGGAL AKUMULASI_DIRAWAT_OR_ISOLASI
## 1 0 0 1
## 2 0 0 1
## 3 0 0 2
## 4 0 0 2
## 5 0 0 2
## 6 0 0 2
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.
Ada beberapa tahapan yang perlu dilakukan untuk menjinakan data cov_banten, yaitu:
Dengan mengaktifkan paket dplyr digunakan untuk melakukan pengolahan data.
new_cov_banten <-
cov_banten %>%
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_banten
str(new_cov_banten)
## 'data.frame': 150 obs. of 4 variables:
## $ tanggal : Date, format: "2020-03-06" "2020-03-07" ...
## $ kasus_baru: int 1 0 1 0 0 0 0 1 1 1 ...
## $ meninggal : int 0 0 0 0 0 0 1 0 0 0 ...
## $ sembuh : int 0 0 0 0 0 0 0 0 0 0 ...
Setelah menjinakan data cov_banten sehingga data lebih mudah untuk diolah dan kita sudah memiliki data yang rapi.