Dalam proyek ini, Anda akan diminta untuk melakukan eksplorasi dan analisis mengenai COVID-19 di Provinsi Papua Barat. Data yang Anda pergunakan diambil langsung dari API (Application Programming Interface) yang tersedia di covid19.go.id. Sehingga dalam proyek ini Anda akan mempelajari teknik mengambil data dari API, teknik mempersiapkan data, serta analisis dan visualisasi data.
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(ggplot2)
library(hrbrthemes)
library(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(tidyr)
covid19.go.id menyediakan data kasus COVID-19 tingkat provinsi di alamat API yang berbeda.yang dapat di akses dengan menggunakan fungsi GET() dari packet httr, untuk provinsi papua barat dapat di akses pada https://data.covid19.go.id/public/api/prov_detail_PAPUA_BARAT.
resp <-GET("https://data.covid19.go.id/public/api/prov_detail_PAPUA_BARAT.json")
cov_pabar <- content(resp, as="parsed", simplifyVector =TRUE)
Sekarang jalankanlah fungsi names() pada cov_pabar tersebut untuk mengetahui nama-nama elemen utama yang tersedia dan jawablah pertanyaan berikut: • Berapa jumlah total kasus COVID-19 di Papua Barat? • Berapa persentase kematian akibat COVID-19 di Papua Barat? • Berapa persentase tingkat kesembuhan dari COVID-19 di Papua Barat?
names(cov_pabar)
## [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_pabar$kasus_total
## [1] 1820
cov_pabar$meninggal_persen
## [1] 1.593407
cov_pabar$sembuh_persen
## [1] 57.08791
cov_pabar$last_date
## [1] "2020-09-25"
Data historis perkembangan COVID-19 tersebut tersimpan dengan nama list_perkembangan. Silakan Anda ekstrak data tersebut dari cov_pabar dan simpanlah hasilnya sebagai obyek bernama cov_id_pabar! gunakan fungsi str() untuk melihat struktur data dan gunakan juga fungsi head()
cov_id_pabar <- cov_pabar$list_perkembangan
str(cov_id_pabar)
## 'data.frame': 183 obs. of 9 variables:
## $ tanggal : num 1.59e+12 1.59e+12 1.59e+12 1.59e+12 1.59e+12 ...
## $ KASUS : int 2 0 0 0 0 0 0 0 0 0 ...
## $ MENINGGAL : int 0 0 0 0 0 0 0 0 0 0 ...
## $ SEMBUH : int 0 0 0 0 0 0 0 0 0 0 ...
## $ DIRAWAT_OR_ISOLASI : int 2 0 0 0 0 0 0 0 0 0 ...
## $ AKUMULASI_KASUS : int 2 2 2 2 2 2 2 2 2 2 ...
## $ AKUMULASI_SEMBUH : int 0 0 0 0 0 0 0 0 0 0 ...
## $ AKUMULASI_MENINGGAL : int 0 0 0 0 0 0 0 0 0 0 ...
## $ AKUMULASI_DIRAWAT_OR_ISOLASI: int 2 2 2 2 2 2 2 2 2 2 ...
head(cov_id_pabar)
## tanggal KASUS MENINGGAL SEMBUH DIRAWAT_OR_ISOLASI AKUMULASI_KASUS
## 1 1.585267e+12 2 0 0 2 2
## 2 1.585354e+12 0 0 0 0 2
## 3 1.585440e+12 0 0 0 0 2
## 4 1.585526e+12 0 0 0 0 2
## 5 1.585613e+12 0 0 0 0 2
## 6 1.585699e+12 0 0 0 0 2
## AKUMULASI_SEMBUH AKUMULASI_MENINGGAL AKUMULASI_DIRAWAT_OR_ISOLASI
## 1 0 0 2
## 2 0 0 2
## 3 0 0 2
## 4 0 0 2
## 5 0 0 2
## 6 0 0 2
Setelah mengekstrak dan mengamati cov_jabar, Anda menemukan beberapa kejanggalan pada data tersebut. Diantaranya adalah kejanggalan data pada kolom tanggal dan format penulisan kolom yang tidak konsisten. Sekarang Anda akan mencoba melakukan beberapa tahapan untuk memperbaiki data tersebut sehingga dapat diolah dan dianalisis dengan lebih mudah. gunakan paket dplyr untuk melakukannya Ada beberapa tahapan yang akan Anda lakukan untuk memperbaiki data cov_id_pabar, yaitu: 1. Menghapus kolom “DIRAWAT_OR_ISOLASI” dan “AKUMULASI_DIRAWAT_OR_ISOLASI” 2. Menghapus semua kolom yang berisi nilai kumulatif 3. Mengganti nama kolom “KASUS” menjadi “kasus_baru” 4. Merubah format penulisan kolom berikut menjadi huruf kecil o kolom MENINGGAL o kolom SEMBUH 5. Memperbaiki data pada kolom tanggal Lengkapilah baris kode berikut untuk melakukan menjinakan data sesuai dengan tahapan yang telah Anda rencanakan! Anda akan menggunakan operator pipe (%>%) untuk merangkai fungsi menjadi sebuah pipeline. Simpan hasil pengolahan Anda dengan nama new_cov_pabar.
new_cov_pabar <- cov_id_pabar %>%
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)
)
str(new_cov_pabar)
## 'data.frame': 183 obs. of 4 variables:
## $ tanggal : Date, format: "2020-03-27" "2020-03-28" ...
## $ kasus_baru: int 2 0 0 0 0 0 0 0 0 0 ...
## $ meninggal : int 0 0 0 0 0 0 0 0 0 0 ...
## $ sembuh : int 0 0 0 0 0 0 0 0 0 0 ...
Setelah melakukan perbaikan pada data selanjutya tampilkan informasi yang ada pada data dalam format Grafik agar mudah di baca, gunakan paket ggplot2 dan hrbrthemes ## Grafik Kasus Positif
ggplot(new_cov_pabar, aes(tanggal, kasus_baru))+
geom_col(fill = "salmon")+
labs(
x = NULL,
y = "Jumlah Kasus",
title = "Kasus Harian Positif COVID-19 di Papua Barat",
subtitle ="terjadi peningkatan terkonfirmasi positif pada rentang bulan September",
caption = "Sumber: data.covid19.go.id"
)
pada Grafik ini terlihat jumlah kasus positif terus mengalami peningkatan pada rentang bulan September sekalipun kasus harian berfluktuasi namun, hampir mayoritas konsisten mengalami peningkatan di tiap harinya.
ggplot(new_cov_pabar, aes(tanggal, sembuh))+
geom_col(fill = "olivedrab2")+
labs(
x = NULL,
y = "Jumlah Kasus",
title = "Kasus Sembuh COVID-19 di Papua Barat",
subtitle ="Terjadi peningkatan signifikan kasus sembuh pada bulan September",
caption = "Sumber: data.covid19.go.id"
)
terjadi peningkatan kasus sembuh yang signifikan pada bulan september, namun data pada grafik menunjukan rata-rata kasus sembuh masih cukup rendah yaitu kurang dari 25 orang, sekalipun peningkatan sgnifikan kasus sembuh terjadi di bulan september.
ggplot(new_cov_pabar, aes(tanggal, meninggal))+
geom_col(fill = "darkslategray4")+
labs(
x = NULL,
y = "Jumlah Kasus",
title = "Kasus Harian Meninggal Akibar Covid-19 di Papua Barat",
subtitle ="Terjadi peningkatan signifikan kasus sembuh pada bulan September",
caption = "Sumber: data.covid19.go.id"
)
terjadi peningkatan kasus meninggal yang cukup signifikan pada bulan september 2020 di Papua Barat dengan kasus tertinggi sebanyak 4 orang
Grafik pekanan akan menampilkan data kasus Covid-19 dalam akumulasi kasus perpekan yang maksudkan untuk mengecek apakah pekan ini lebih baik dari sebelumnya, untuk bisa menampilkan Grafik Pekanan Terlebih dahulu harus didapatkan data pekan dalam satu tahun, kemudian buat data perbandingkan antara satu pekan dengan pekan sebelumnya,
untuk mendaptkan data pekanan dapat menggunakan fungsi week() dari paket lubridate untuk mengkonversi pekan dalam satu tahun, gunakan juga glimpse() untuk inspeksi data.
cov_pabar_pekanan <- new_cov_pabar %>%
count(
tahun = year(tanggal),
pekan_ke = week(tanggal),
wt = kasus_baru,
name = "jumlah"
)
glimpse(cov_pabar_pekanan)
## Rows: 27
## Columns: 3
## $ tahun <dbl> 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020...
## $ pekan_ke <dbl> 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27...
## $ jumlah <int> 2, 0, 0, 5, 30, 12, 21, 35, 27, 40, 11, 29, 12, 15, 27, 26...
cov_pabar_pekanan$pekan_ke
## [1] 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
## [26] 38 39
selanjutnya lakukan kalkulasi sederhana dengan tahapan berikut; • Membuat kolom baru yang berisi jumlah kasus baru dalam satu pekan sebelumnya. Kolom ini diberi nama “jumlah_pekanlalu”. • Mengganti nilai NA pada kolom “jumlah_pekanlalu” dengan nilai 0 • Melakukan komparasi antara kolom “jumlah” dengan kolom “jumlah_pekanlalu”. Hasil komparasi ini disimpan dalam kolom baru dengan nama “lebih_baik”, isinya adalah TRUE apabila jumlah kasus baru pekan ini lebih rendah dibandingkan jumlah kasus pekan lalu Anda akan menggunakan fungsi lag() dari dplyr untuk membuat kolom “jumlah_pekanlalu”. Perhatikan bahwa disini fungsi tersebut dituliskan sebagai dplyr::lag() untuk menghindari konflik dengan fungsi lag() dari paket stats. Inspeksi hasil pekerjaan Anda dengan menggunakan fungsi glimpse()
cov_pabar_pekanan <- cov_pabar_pekanan %>%
mutate(
jumlah_pekanlalu = dplyr::lag(jumlah, 1),
jumlah_pekanlalu = ifelse(is.na(jumlah_pekanlalu), 0, jumlah_pekanlalu),
lebih_baik = jumlah<jumlah_pekanlalu
)
glimpse(cov_pabar_pekanan)
## Rows: 27
## Columns: 5
## $ tahun <dbl> 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 20...
## $ pekan_ke <dbl> 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25...
## $ jumlah <int> 2, 0, 0, 5, 30, 12, 21, 35, 27, 40, 11, 29, 12, 15...
## $ jumlah_pekanlalu <dbl> 0, 2, 0, 0, 5, 30, 12, 21, 35, 27, 40, 11, 29, 12,...
## $ lebih_baik <lgl> FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FAL...
cov_pabar_pekanan$pekan_ke
## [1] 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
## [26] 38 39
ggplot(cov_pabar_pekanan, aes(x=pekan_ke, y=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"="salmon"))+
labs(
x= NULL,
y= "Jumlah Kasus",
title = "Kasus Pekanan Covid-19 di Papua Barat",
subtitle = "Kolom hijau menandakan jumlah penambahan kasus lebih sedikit dari pekan sebelumnya",
caption = "Sumber: data.covid19.go.id"
)
terlihat pada pekan ke 38 dan 39 kasus terkonfirmasi postif meningkat tajam bahkan kenaikan pada pekan ke 39 mencatat kenaikan lebih tinggi dari pekan sebelumnya dan pada pekan ke 40 terjadi penurunan sekalipun tidak signifikan karena jumlahnya masih cukup tinggi.
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 Anda: “Hingga saat ini ada berapa kasus yang masih aktif?”. Aktif dalam artian sedang dalam perawatan atau isolasi. untuk melihat data kasus yang masih aktif dapat di lakukan dengan melakukan perbandingan terhadap total konfirmasi positif, meninggal dan sembuh, kemdian hasilnya bisa tampilkan dalam grafik
Jumlah kasus aktif dapat dihitung dengan cara mengurangi jumlah akumulasi positif dengan jumlah akumulasi sembuh dan jumlah akumulasi meninggal. Anda dapat menggunakan fungsi cumsum() untuk menghitung nilai akumulasi dari suatu vektor numerik. Lengkapilah baris kode berikut untuk menghitung jumlah akumulasi kasus aktif, kasus sembuh, dan kasus meninggal
library(dplyr)
cov_pabar_akumulasi <-
new_cov_pabar %>%
transmute(
tanggal,
akumulasi_aktif = cumsum(kasus_baru) - cumsum(sembuh) - cumsum(meninggal),
akumulasi_sembuh = cumsum(sembuh),
akumulasi_meninggal = cumsum(meninggal)
)
tail(cov_pabar_akumulasi)
## tanggal akumulasi_aktif akumulasi_sembuh akumulasi_meninggal
## 178 2020-09-20 566 904 25
## 179 2020-09-21 574 917 25
## 180 2020-09-22 642 920 25
## 181 2020-09-23 710 939 25
## 182 2020-09-24 710 939 25
## 183 2020-09-25 753 1039 28
ggplot(cov_pabar_akumulasi, aes(tanggal, akumulasi_aktif))+
geom_line()
terlihat Grafik Kasus aktif terus mengalami peningkatan bahkan pada bulan september terjadi peningkatan kasus aktif yang cukup signifikan,
untuk menampilkan grafik ini terlabih dahulu lakukan pivot pada data akumulasi kasus aktif sembuh dan meninggal terlebih dahulu. ### Pivot data Semenjak tidyr versi 1.0.0, Anda 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_pabar_akumulasi menjadi cov_pabar_akumulasi_pivot dapat dikerjakan dengan menggunakan pivot_longer()
cov_pabar_akumulasi_pivot <- cov_pabar_akumulasi %>%
pivot_longer(
cols = -tanggal,
names_to ="kategori",
names_prefix = "akumulasi_",
values_to ="jumlah"
)
cov_pabar_akumulasi_pivot
## # A tibble: 549 x 3
## tanggal kategori jumlah
## <date> <chr> <int>
## 1 2020-03-27 aktif 2
## 2 2020-03-27 sembuh 0
## 3 2020-03-27 meninggal 0
## 4 2020-03-28 aktif 2
## 5 2020-03-28 sembuh 0
## 6 2020-03-28 meninggal 0
## 7 2020-03-29 aktif 2
## 8 2020-03-29 sembuh 0
## 9 2020-03-29 meninggal 0
## 10 2020-03-30 aktif 2
## # ... with 539 more rows
ggplot(cov_pabar_akumulasi_pivot, aes(tanggal, jumlah, colour=kategori))+
geom_line(size =0.9)+
scale_y_continuous(sec.axis = dup_axis(name = NULL))+
scale_color_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 Papua Barat",
caption = "Sumber data: covid.19.go.id"
)+
theme(
plot.title = element_text(hjust = 0.5),
legend.position = "top"
)
dari Grafik di atas terlihat kasus covid-19 prov papua barat terus mengalami peningkatan sejalan dengan itu kasus sembuh juga terus mengalami peningkatan namun peningkatan kasus sembuh masih cukup rendah dibanding kasus aktif yang mengalami peningkatan cukup tajam pada bulan september ini.