email : ?_?
ntraktir : https://trakteer.id/contekansial
nyawer :
https://saweria.co/contekansial
github :
https://bit.ly/origin-AL-GitHub
youtube :
https://bit.ly/origin-AL-youtube
COVID-19 merupakan penyakit yang saat ini telah menjadi pandemi secara global. Kondisi menjadi semakin mengkhawatirkan karena hingga detik ini masih belum ditemukan vaksin yang efektif untuk virus penyebab COVID-19. Pemerintah di berbagai negara umumnya dengan sigap membentuk gugus tugas (task force unit) untuk menangani penyebaran COVID-19 di masyarakat, termasuk pemerintah di Indonesia.
Salah satu bentuk aksi yang dilakukan oleh pemerintah adalah dengan mengumpulkan dan menyediakan data pertumbuhan kasus COVID-19 kepada publik. Data pertumbuhan kasus tersebut tidak jarang juga dilengkapi dengan dasbor dan grafik visualisasi pendukung dengan harapan masyarakat dapat memahami informasi dengan lebih mudah. Sebagai contoh adalah portal covid19.go.id besutan Gugus Tugas Penanganan COVID-19 Nasional dan portal PIKOBAR milik pemerintah Provinsi Jawa Barat. Serta banyak portal data COVID-19 lainnya yang disediakan oleh masing-masing pemerintah daerah.
Sebagai pemanasan sebelum Anda memulai proyek ini, buatlah sebuah
vektor karakter dengan 3 elemen dengan nama
lawan.covid yang merupakan kunci dasar menghindari
COVID-19 !
Jangan lupa untuk mencetak vektor lawan.covid tersebut
!
Begini :
#membuat vektor
lawan.covid <- c("cuci tangan", "jaga jarak", "pakai masker")
#menampilkan hasil
lawan.covid[1] "cuci tangan" "jaga jarak" "pakai masker"
Dalam proyek ini, kamu akan diminta untuk melakukan eksplorasi dan
analisis mengenai COVID-19 di Indonesia. Data yang Anda
pergunakan diambil langsung dari API (Application
Programming Interface) yang tersedia di covid19.go.id.
Sehingga dalam proyek ini kamu akan mempelajari teknik mengambil data
dari API, teknik mempersiapkan data, serta analisis dan
visualisasi data.
Apakah kamu siap untuk mengerjakan proyek analisis data ini ?
Jawablah dengan YA apabila kamu siap atau TIDAK jika kmau belum siap karena belum memakai masker.
Begini :
"YA"[1] "YA"
Rekapitulasi data COVID-19 Indonesia tersedia dalam API publik.
Salah satu cara untuk mengakses API adalah dengan
menggunakan fungsi GET() dari paket httr.
Sekarang aktifkanlah paket httr dan jalankan fungsi
GET() pada alamat API yang telah
disebutkan !
Simpan hasil fungsi tersebut dalam obyek bernama
respon.
Begini :
#set library yang dibutuhkan
library(httr)
#membuat konfigurasi
set_config(config(ssl_verifypeer = 0L))
#membuat variabel dataset
respon <- GET("https://storage.googleapis.com/dqlab-dataset/update.json")Saat kamu menjalankan fungsi GET(), pada dasarnya hal
yang terjadi adalah kamu membuat sebuah permintaan kepada
server penyedia API. Permintaan kamu tersebut
selanjutnya diproses dan dijawab oleh server sebagai sebuah
respon. Objek respon yang telah kamu buat memiliki
informasi respon oleh server.
Ada tiga informasi utama dalam sebuah respon API, yaitu status, headers, dan body. Status memiliki informasi apakah permintaan kamu berhasil atau tidak dan dinyatakan dalam status code. Headers umumnya mengandung informasi metadata. Sedangkan body berisikan konten atas permintaan yang telah dibuat.
Ada beberapa jenis status code yang umumnya dijumpai, antara lain:
200 = permintaan sukses dipenuhi404 = berkas yang diminta tidak dapat ditemukan403 = akses permintaan ditolak500 = terjadi kesalahan pada server.Kamu dapat menggunakan fungsi status_code() untuk
mengetahui status atas permintaan kamu melalui API.
Sekarang coba lihatlah status atas permintaan yang telah kamu buat !
Begini :
#set library yang dibutuhkan
library(httr)
#membuat konfigurasi
set_config(config(ssl_verifypeer = 0L))
#membuat variabel dataset
respon <- GET("https://storage.googleapis.com/dqlab-dataset/update.json")
#cek status
status_code(respon)[1] 200
Selain menggunakan fungsi status_code(), kamu juga dapat
mengetahui status permintaan dengan cara mengakses elemen dari
resp. Status code tersebut tersedia dengan nama
status_code dan dapat diakses dengan menggunakan operator
$ pada obyek resp.
Cobalah kembali akses status code dengan cara tersebut dan bandingkan hasilnya dengan cara pertama !
Begini :
#set library yang dibutuhkan
library(httr)
#membuat konfigurasi
set_config(config(ssl_verifypeer = 0L))
#membuat variabel dataset
respon <- GET("https://storage.googleapis.com/dqlab-dataset/update.json")
#cek status cara lain
respon$status_code[1] 200
#membandingkan hasil
identical(respon$status_code, status_code(respon))[1] TRUE
Selamat status permintaan kamu melalui API
sukses dipenuhi. Sekarang cobalah kamu jalankan fungsi
headers() pada resp untuk mengetahui
metadata apa saja yang tersimpan.
content-type ?Begini :
#set library yang dibutuhkan
library(httr)
#membuat konfigurasi
set_config(config(ssl_verifypeer = 0L))
#membuat variabel dataset
respon <- GET("https://storage.googleapis.com/dqlab-dataset/update.json")
#mengetahui metadata
headers(respon)$`x-guploader-uploadid`
[1] "ADPycdsREuXigfU_gRy8_qKVDl4iBuD2p0EutSJNzqbvHWD0ySTXS8djhp9XnjVonNe3TW1CNlbTKiO4P2428vrbT90ge-DqboH7"
$`x-goog-generation`
[1] "1654513959565478"
$`x-goog-metageneration`
[1] "1"
$`x-goog-stored-content-encoding`
[1] "identity"
$`x-goog-stored-content-length`
[1] "311897"
$`x-goog-hash`
[1] "crc32c=GMMqEA=="
$`x-goog-hash`
[1] "md5=8aR/820+lfYyWNlv5bLUOQ=="
$`x-goog-storage-class`
[1] "STANDARD"
$`accept-ranges`
[1] "bytes"
$`content-length`
[1] "311897"
$server
[1] "UploadServer"
$date
[1] "Mon, 20 Feb 2023 22:25:49 GMT"
$expires
[1] "Mon, 20 Feb 2023 23:25:49 GMT"
$`cache-control`
[1] "public, max-age=3600"
$age
[1] "1"
$`last-modified`
[1] "Mon, 06 Jun 2022 11:12:39 GMT"
$etag
[1] "\"f1a47ff36d3e95f63258d96fe5b2d439\""
$`content-type`
[1] "application/json"
$`alt-svc`
[1] "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\""
attr(,"class")
[1] "insensitive" "list"
Respon API dengan status code
200 menyatakan bahwa permintaan kamu berhasil dipenuhi dan
konten yang diminta tersedia untuk diekstrak. Selain itu kamu juga telah
mengetahui lewat fungsi headers() bahwa konten yang diminta
tersedia dalam bentuk application/json, yaitu berkas
JSON.
Selanjutnya kamu dapat mengekstrak konten tersebut dengan menggunakan
fungsi content(). Fungsi content() tersebut
secara cerdas akan menyesuaikan output sesuai dengan jenis
berkas yang tersedia, dalam hal ini adalah berkas
JSON.
Jalankan fungsi tersebut pada obyek respon dan tambahkan
argumen as = "parsed" dan
simplifyVector = TRUE !
Simpanlah hasilnya sebagai cov.id !
Begini :
#set library yang dibutuhkan
library(httr)
#membuat konfigurasi
set_config(config(ssl_verifypeer = 0L))
#membuat variabel dataset
respon <- GET("https://storage.googleapis.com/dqlab-dataset/update.json")
#mengekstrak konten
cov.id <- content(respon, as = "parsed", simplifyVector = TRUE)Dengan menggunakan fungsi length() dan
names() cobalah kamu amati ada berapa komponen serta apa
saja nama komponen dalam obyek cov.id tersebut !
Kemudian ekstraklah komponen ke-2 dan simpan dengan nama
cov.id.apdet.
Begini :
length(cov.id)[1] 2
names(cov.id)[1] "data" "update"
cov.id.apdet <- cov.id$updateSekarang kamu diminta untuk fokus pada obyek
cov.id.apdet untuk menjawab pertanyaan-pertanyaan
berikut:
Begini :
lapply(cov.id.apdet,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"
#pembaharuan data penambahan kasus
cov.id.apdet$penambahan$tanggal[1] "2022-05-14"
#penambahan kasus sembuh
cov.id.apdet$penambahan$jumlah_sembuh[1] 416
#penambahan kasus meninggal
cov.id.apdet$penambahan$jumlah_meninggal[1] 5
#total kasus positif sampai saat ini
cov.id.apdet$total$jumlah_positif[1] 6050519
#total kasus meninggal sampai saat ini
cov.id.apdet$total$jumlah_meninggal[1] 156453
Jumlah masyarakat yang terinfeksi dan meninggal akibat COVID-19 sudah sangat banyak. Kita harus waspada namun tetap tenang dalam menghadapi masa pandemi ini. Masih ingatkah kamu apa 3 langkah sederhana melawan COVID-19 ?
Cuci tangan, jaga jarak dan pakai masker.
Kamu telah berhasil menjawab pertanyaan mengenai kondisi COVID-19 di Indonesia dengan menggunakan data yang langsung diambil menggunakan API. Namun bagaimana jika kamu ingin berfokus dengan data COVID-19 di provinsi tempat menetap saat ini ?
covid19.go.id menyediakan data kasus
COVID-19 tingkat provinsi di alamat
API yang berbeda. Sebagai contoh data mengenai
COVID-19 Jawa Barat, tempat tinggal saya sekarang,
tersedia di https://data.covid19.go.id/public/api/prov_detail_JAWA_BARAT.json
dan dapat diakses menggunakan baris kode berikut:
respon.jabar <- GET("https://data.covid19.go.id/public/api/prov_detail_JAWA_BARAT.json")
covid.jabar <- content(respon.jabar, as = "parsed", simplifyVector = TRUE)
Sekarang jalankanlah fungsi names() pada
covid.jabar tersebut untuk mengetahui nama-nama elemen
utama yang tersedia dan jawablah pertanyaan berikut:
Begini :
#set library yang dibutuhkan
library(httr)
#membuat konfigurasi
set_config(config(ssl_verifypeer = 0L))
#membuat variabel dataset
respon.jabar <- GET("https://storage.googleapis.com/dqlab-dataset/prov_detail_JAWA_BARAT.json")
#mengekstrak konten
covid.jabar <- content(respon.jabar, as = "parsed", simplifyVector = TRUE)
#mengetahui nama elemen utama yang tersedia
names(covid.jabar) [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"
#total kasus COVID-19 di Jabar
covid.jabar$kasus_total[1] 1105134
#persentase kematian di Jabar
covid.jabar$meninggal_persen[1] 1.425619
#persentase kesembuhan di Jabar
covid.jabar$sembuh_persen[1] 98.28238
Informasi umum mengenai COVID-19 di Jawa Barat telah kamu dapatkan. Namun informasi akan lebih lengkap jika kamu memiliki data perkembangan COVID-19 dari waktu ke waktu.
Kabar baiknya adalah informasi tersebut juga disediakan oleh
covid19.go.id melalui permintaan API yang
telah kamu buat sebelumnya. Data historis perkembangan
COVID-19 tersebut tersimpan dengan nama
list_perkembangan. Silakan kamu ekstrak data tersebut dari
covid.jabar dan simpanlah hasilnya sebagai objek bernama
cov.jabar! Amati struktur cov.jabar
menggunakan fungsi str() dan head().
Begini :
#melihat perkembangan COVID-19 Jabar
cov.jabar <- covid.jabar$list_perkembangan
#melihat tipe data
str(cov.jabar)'data.frame': 785 obs. of 9 variables:
$ tanggal : num 1.58e+12 1.58e+12 1.58e+12 1.58e+12 1.58e+12 ...
$ KASUS : int 1 1 1 1 0 0 0 0 0 1 ...
$ MENINGGAL : int 1 0 0 0 0 0 0 0 1 0 ...
$ SEMBUH : int 0 0 0 0 0 0 0 0 0 0 ...
$ DIRAWAT_OR_ISOLASI : int 0 1 1 1 0 0 0 0 -1 1 ...
$ AKUMULASI_KASUS : int 1 2 3 4 4 4 4 4 4 5 ...
$ AKUMULASI_SEMBUH : int 0 0 0 0 0 0 0 0 0 0 ...
$ AKUMULASI_MENINGGAL : int 1 1 1 1 1 1 1 1 2 2 ...
$ AKUMULASI_DIRAWAT_OR_ISOLASI: int 0 1 2 3 3 3 3 3 2 3 ...
#menampilkan beberapa data
head(cov.jabar) tanggal KASUS MENINGGAL SEMBUH DIRAWAT_OR_ISOLASI AKUMULASI_KASUS
1 1.583194e+12 1 1 0 0 1
2 1.583280e+12 1 0 0 1 2
3 1.583366e+12 1 0 0 1 3
4 1.583453e+12 1 0 0 1 4
5 1.583539e+12 0 0 0 0 4
6 1.583626e+12 0 0 0 0 4
AKUMULASI_SEMBUH AKUMULASI_MENINGGAL AKUMULASI_DIRAWAT_OR_ISOLASI
1 0 1 0
2 0 1 1
3 0 1 2
4 0 1 3
5 0 1 3
6 0 1 3
Setelah mengekstrak dan mengamati cov.jabar, kamu
menemukan beberapa kejanggalan pada data tersebut. Diantaranya adalah
kejanggalan data pada kolom tanggal dan format penulisan
kolom yang tidak konsisten. Sekarang kamu akan mencoba melakukan
beberapa tahapan untuk menjinakkan data tersebut sehingga dapat diolah
dan dianalisis dengan lebih mudah.
Sebelum itu, silakan kamu aktifkan paket dplyr yang akan
dipergunakan untuk melakukan pengolahan data.
Ada beberapa tahapan yang akan kamu lakukan untuk menjinakkan data
cov.jabar, yaitu:
kasus.baruKamu akan menggunakan operator pipe (%>%)
untuk merangkai fungsi menjadi sebuah pipeline. Simpan hasil
pengolahan Anda dengan nama cov.jabar.baru.
Begini :
#set libraray yang dibutuhkan
library("dplyr")
#membuat variabel dataset baru
cov.jabar.baru <-
cov.jabar %>%
#menghapus kolom
select(-contains("DIRAWAT_OR_ISOLASI")) %>%
select(-starts_with("AKUMULASI")) %>%
#mengubah nama kolom
rename(
kasus.baru = KASUS,
meninggal = MENINGGAL,
sembuh = SEMBUH
) %>%
#memperbaiki data kolom tanggal
mutate(
tanggal = as.POSIXct(tanggal / 1000, origin = "1970-01-01"),
tanggal = as.Date(tanggal)
)
#melihat tipe data
str(cov.jabar.baru)'data.frame': 785 obs. of 4 variables:
$ tanggal : Date, format: "2020-03-03" "2020-03-04" ...
$ kasus.baru: int 1 1 1 1 0 0 0 0 0 1 ...
$ meninggal : int 1 0 0 0 0 0 0 0 1 0 ...
$ sembuh : int 0 0 0 0 0 0 0 0 0 0 ...
#melihat beberapa data
head(cov.jabar.baru) tanggal kasus.baru meninggal sembuh
1 2020-03-03 1 1 0
2 2020-03-04 1 0 0
3 2020-03-05 1 0 0
4 2020-03-06 1 0 0
5 2020-03-07 0 0 0
6 2020-03-08 0 0 0
Sekarang buatlah grafik serupa dengan menggunakan data kasus sembuh. Pergunakan warna “olivedrab2” untuk grafik kasus sembuh!
Begini ;
#set library yang dibutuhkan
library(ggplot2)
library(hrbrthemes)
#membuat bar chart kasus sembuh
ggplot(cov.jabar.baru, aes(tanggal, sembuh)) +
geom_col(fill = "olivedrab2") +
labs(
x = NULL,
y = "",
title = "Kasus Harian Sembuh dari COVID-19 di Jawa Barat",
subtitle = "",
caption = "Sumber data: covid.19.go.id"
) +
theme_ipsum(
base_size = 13,
plot_title_size = 18,
grid = "Y",
ticks = TRUE
) +
theme(plot.title.position = "plot")Sekarang buatlah grafik serupa dengan menggunakan data kasus meninggal. Pergunakan warna “darkslategray4” untuk kasus meninggal!
Begini :
#set library yang dibutuhkan
library(ggplot2)
library(hrbrthemes)
#membuat bar chart kasus meninggal
ggplot(cov.jabar.baru, aes(tanggal, meninggal)) +
geom_col(fill = "darkslategray4") +
labs(
x = NULL,
y = "",
title = "Kasus Harian Meninggal Akibat COVID-19 di Jawa Barat",
subtitle = "",
caption = "Sumber data: covid.19.go.id"
) +
theme_ipsum(
base_size = 13,
plot_title_size = 18,
grid = "Y",
ticks = TRUE
) +
theme(plot.title.position = "plot")Setelah mengamati grafik perkembangan kasus, kamu menyadari bahwa terjadi fluktuasi pertambahan kasus harian. Dilandasi hal tersebut kamu kemudian ingin mencoba mengamati bagaimana perkembangan kasus dalam rentang waktu mingguan.
Kamu dapat dengan mudah bekerja dengan data tanggal apabila
menggunakan paket lubridate. Adapun yang akan digunakan
untuk mengekstrak informasi minggu dalam satu tahun adalah fungsi
week().
Cobalah untuk menghitung pertambahan kasus mingguan dan simpanlah
hasilnya sebagai cov.jabar.mingguan! Anda juga diminta
untuk menggunakan fungsi glimpse() dari dplyr
untuk melakukan inspeksi data.
Begini :
#set library yang dibutuhkan
library("dplyr")
library(lubridate)
#membuat variabel dataset
cov.jabar.mingguan <- cov.jabar.baru %>%
count(
tahun = year(tanggal),
pekan_ke = week(tanggal),
wt = kasus.baru,
name = "jumlah"
)
#melakukan inspeksi data
glimpse(cov.jabar.mingguan)Rows: 115
Columns: 3
$ tahun <dbl> 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2…
$ pekan_ke <dbl> 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24…
$ jumlah <int> 1, 3, 16, 41, 98, 149, 153, 155, 156, 284, 803, 175, 395, 203…
Pertanyaan baru muncul di benak kamu setelah melakukan inspeksi
terhadap data cov.jabar.mingguan tersebut: “Apakah minggu
ini lebih baik dari minggu lalu?”.
Demi menjawab hal tersebut kamu melakukan kalkulasi sederhana dengan tahapan berikut:
jumlah.minggulalu.NA pada kolom
jumlah.minggulalu dengan nilai 0jumlah dengan kolom
jumlah.minggulalu. Hasil komparasi ini disimpan dalam kolom
baru dengan nama lebih.baik. Isinya adalah
TRUE apabila jumlah kasus baru minggu ini lebih rendah
dibandingkan jumlah kasus minggu lalu.Kamu akan menggunakan fungsi lag() dari
dplyr untuk membuat kolom jumlah.minggulalu.
Perhatikan bahwa disini fungsi tersebut dituliskan sebagai
dplyr::lag() untuk menghindari konflik dengan fungsi
lag() dari paket stats. Inspeksi hasil
pekerjaan kamu dengan menggunakan fungsi glimpse()!
Begini :
#set library yang dibutuhkan
library("dplyr")
#membuat variabel dataset
cov.jabar.mingguan <- cov.jabar.mingguan %>%
mutate(
jumlah.minggulalu = dplyr::lag(jumlah, 1),
jumlah.minggulalu = ifelse(is.na(jumlah.minggulalu), 0, jumlah.minggulalu),
lebih.baik = jumlah < jumlah.minggulalu
)
#melakukan inspeksi data
glimpse(cov.jabar.mingguan)Rows: 115
Columns: 5
$ tahun <dbl> 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020…
$ pekan_ke <dbl> 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2…
$ jumlah <int> 1, 3, 16, 41, 98, 149, 153, 155, 156, 284, 803, 175,…
$ jumlah.minggulalu <dbl> 0, 1, 3, 16, 41, 98, 149, 153, 155, 156, 284, 803, 1…
$ lebih.baik <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FAL…
Kamu sungguh luar biasa! Dengan menggunakan data hasil perhitungan tersebut maka sekarang kamu dapat membuat bar chart penambahan kasus mingguan yang ditambahkan informasi baru untuk menjawab pertanyaan: “Apakah minggu ini lebih baik?”
Begini :
#set library yang dibutuhkan
library(ggplot2)
library(hrbrthemes)
#membuat bar chart
ggplot(cov.jabar.mingguan[cov.jabar.mingguan$tahun==2022,], aes(pekan_ke, jumlah, fill = lebih.baik)) +
geom_col(show.legend = FALSE) +
scale_x_continuous(breaks = 9:29, expand = c(0, 0)) +
scale_fill_manual(values = c("TRUE" = "seagreen3", "FALSE" = "darkred")) +
labs(
x = NULL,
y = "",
title = "Kasus Mingguan Positif COVID-19 di Jawa Barat",
subtitle = "Data Tahun 2022",
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")Ada yang akhirnya sembuh, namun tak sedikit pula yang meninggal akibat COVID-19. Sementara itu penambahan kasus baru terus terjadi di masyarakat. Hal ini mungkin memicu pertanyaan lain di diri kamu: “Hingga saat ini ada berapa kasus yang masih aktif?”. Aktif dalam artian sedang dalam perawatan atau isolasi.
Informasi ini sebenarnya telah disediakan di dalam respon
API covid19.go.id yang kamu minta. Namun
tidak ada salahnya jika kamu mencoba menghitungnya sendiri.
Jumlah kasus aktif dapat dihitung dengan cara mengurangi jumlah
akumulasi positif dengan jumlah akumulasi sembuh dan jumlah akumulasi
meninggal. Kamu dapat menggunakan fungsi cumsum() untuk
menghitung nilai akumulasi dari suatu vektor numerik.
Begini :
#set library yang dibutuhkan
library("dplyr")
#menghitung jumlah kasus aktif
cov.jabar.akumulasi <-
cov.jabar.baru %>%
transmute(
tanggal,
akumulasi.aktif = cumsum(kasus.baru) - cumsum(sembuh) - cumsum(meninggal),
akumulasi.sembuh = cumsum(sembuh),
akumulasi.meninggal = cumsum(meninggal)
)
#melihat beberapa data
tail(cov.jabar.akumulasi) tanggal akumulasi.aktif akumulasi.sembuh akumulasi.meninggal
780 2022-04-21 11628 1077361 15731
781 2022-04-22 10753 1078344 15735
782 2022-04-23 9882 1079297 15737
783 2022-04-24 8709 1080519 15748
784 2022-04-25 5428 1083851 15751
785 2022-04-26 3253 1086129 15752
Sekarang cobalah kamu buat line chart pola kasus
aktif dengan menggunakan fungsi geom_line(). Sebagai
pengingat, kamu dapat menggunakan template kode berikut untuk
membuat grafik menggunakan ggplot2():
ggplot(data = ..., aes(x = ..., y = ...)) +
geom_xxx()
Begini :
#set library yang dibutuhkan
library(ggplot2)
#membuat line chart
ggplot(data = cov.jabar.akumulasi, aes(x = tanggal, y = akumulasi.aktif)) +
geom_line()Sebagai penutup analisis dalam project ini, kamu diminta untuk membuat grafik komparasi antara akumulasi kasus aktif, kasus sembuh, dan kasus meninggal.
Ada dua pilihan cara yang dapat kamu tempuh untuk membuat grafik tersebut:
Menggunakan data cov.jabar.akumulasi, kemudian buat
tiga layer geom_line() untuk setiap kolom satu per satu
dengan warna garis yang berbeda; atau
Melakukan pivot pada data
cov.jabar.akumulasi, kemudian buat satu layer
geom_line() dengan menggunakan
colour aesthetic
Kamu akan diminta untuk menempuh cara nomor 2, yaitu dengan cara melakukan pivot pada data terlebih dahulu.
Kamu akan menggunakan fungsi gather() dari paket
tidyr untuk mentransformasi data cov_jabar_akumulasi. Data
tersebut akan diubah dari yang semula berformat wide menjadi
format long.
AKtifkanlah paket tidyr terlebih dahulu dan lakukan
pivot data. Simpan hasil transformasi data tersebut sebagai
pivot.cov.jabar.akumulasi! Perhatikan hasil dari fungsi
dim() sebelum dan setelah kamu melakukan transformasi
data.
Begini :
#set library yang dibutuhkan
library("dplyr")
library("tidyr")
#mengecek ukuran data
dim(cov.jabar.akumulasi)[1] 785 4
#membuat pivot
pivot.cov.jabar.akumulasi <-
cov.jabar.akumulasi %>%
gather(
key = "kategori",
value = "jumlah",
-tanggal
) %>%
mutate(
kategori = sub(pattern = "akumulasi_", replacement = "", kategori)
)
#cek ukuran data baru
dim(pivot.cov.jabar.akumulasi)[1] 2355 3
#melakukan inspeksi data
glimpse(pivot.cov.jabar.akumulasi)Rows: 2,355
Columns: 3
$ tanggal <date> 2020-03-03, 2020-03-04, 2020-03-05, 2020-03-06, 2020-03-07, …
$ kategori <chr> "akumulasi.aktif", "akumulasi.aktif", "akumulasi.aktif", "aku…
$ jumlah <int> 0, 1, 2, 3, 3, 3, 3, 3, 2, 3, 6, 6, 4, 2, 13, 14, 17, 29, 34,…
#menampilkan beberapa data
head(pivot.cov.jabar.akumulasi) tanggal kategori jumlah
1 2020-03-03 akumulasi.aktif 0
2 2020-03-04 akumulasi.aktif 1
3 2020-03-05 akumulasi.aktif 2
4 2020-03-06 akumulasi.aktif 3
5 2020-03-07 akumulasi.aktif 3
6 2020-03-08 akumulasi.aktif 3
Semenjak tidyr versi 1.0.0, kamu disarankan
untuk menggunakan fungsi pivot_longer() sebagai pengganti
gather() dan pivot_wider() sebagai pengganti
spread(). pivot_longer() dan
pivot_wider() memiliki fitur yang lebih lengkap
dibandingkan gather() dan spread(). Proses
transformasi cov.jabar.akumulasi menjadi
pivot.cov.jabar.akumulasi dapat dikerjakan dengan
menggunakan pivot_longer().
Kamu dapat mencoba mempraktekkan coding dan apakah kamu menemukan perbedaan signifikan antara baris kode baru dan baris kode sebelumnya yang kamu gunakan?
Begini :
#set library yang dibutuhkan
library("dplyr")
library("tidyr")
#mengecek ukuran data
dim(cov.jabar.akumulasi)[1] 785 4
#membuat pivot
pivot.cov.jabar.akumulasi <-
cov.jabar.akumulasi %>%
pivot_longer(
cols = -tanggal,
names_to = "kategori",
names_prefix = "akumulasi_",
values_to = "jumlah"
)
#cek ukuran data baru
dim(pivot.cov.jabar.akumulasi)[1] 2355 3
#melakukan inspeksi data
glimpse(pivot.cov.jabar.akumulasi)Rows: 2,355
Columns: 3
$ tanggal <date> 2020-03-03, 2020-03-03, 2020-03-03, 2020-03-04, 2020-03-04, …
$ kategori <chr> "akumulasi.aktif", "akumulasi.sembuh", "akumulasi.meninggal",…
$ jumlah <int> 0, 0, 1, 1, 0, 1, 2, 0, 1, 3, 0, 1, 3, 0, 1, 3, 0, 1, 3, 0, 1…
#menampilkan beberapa data
head(pivot.cov.jabar.akumulasi)# A tibble: 6 × 3
tanggal kategori jumlah
<date> <chr> <int>
1 2020-03-03 akumulasi.aktif 0
2 2020-03-03 akumulasi.sembuh 0
3 2020-03-03 akumulasi.meninggal 1
4 2020-03-04 akumulasi.aktif 1
5 2020-03-04 akumulasi.sembuh 0
6 2020-03-04 akumulasi.meninggal 1
Kamu hampir selesai! Pada tahap terakhir ini kamu membuat grafik komparasi antara akumulasi kasus aktif, kasus sembuh dan kasus meninggal.
Begini :
#set library yang dibutuhkan
library(ggplot2)
library(hrbrthemes)
#membuat grafik komparasi
ggplot(pivot.cov.jabar.akumulasi, 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" = "red",
"meninggal" = "darkslategray4",
"sembuh" = "green"
),
labels = c("Aktif", "Meninggal", "Sembuh")
) +
labs(
x = NULL,
y = "Jumlah kasus akumulasi",
colour = NULL,
title = "Dinamika Kasus COVID-19 di Jawa Barat",
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"
)Selamat kamu telah menyelesaikan project analisis COVID-19 ini! Kamu telah berhasil melakukan import data melalui API, melakukan transformasi data, serta membuat visualisasi untuk mengkomunikasikan hasil analisis data tentang COVID-19.
Kamu dipersilakan untuk selanjutnya mengembangkan analisis dengan cara mengambil studi kasus provinsi lain atau bahkan melakukan komparasi antar provinsi. Kamu dapat menggunakan skrip dasar yang tersedia pada tautan ini untuk memulai analisis. Dengan menggunakan studi kasus provinsi pilihan kamu, dapatkah kamu menjawab dua tantangan ini:
Apakah jumlah kasus di minggu ini lebih rendah dibandingkan minggu lalu dan dua minggu lalu secara berturut-turut? Buatlah visualisasinya!
Salah satu metrik yang dapat dihitung untuk mengamati persebaran COVID-19 di masyarakat adalah Seventh-Day Amplification Factor (silakan baca ini dan ini). Dapatkah kamu menghitung metrik tersebut?