BUKAN CORONA INI
COVID-19
COVID-19 merupakan suatu pandemi yang disebabkan oleh virus corona 2019. Informasi tentang pertumbuhan kasus COVID-19 selalu setiap hari diinformasikan baik pada media sosial dan media komunikasi lainnya. Pemerintah baik pada pusat dan daerah masing-masing selalu mengumpulkan, menyediakan, dan mempublikasikan pertumbuhan COVID-19 di Indonesia maupun di daerah. Data pertumbuhan COVID-19 tersebut berupa data mentah yang belum diolah, infografis, maupun suatu dasboard.
Dalam hal ini, saya akan melakukan eksplorasi dan analisis mengenai COVID-19 menggunakan data pada API, API adalah suatu cara komputer untuk berkomunikasi dengan komputer lainnya sehingga dapat terjadi transaksi pertukaran data. Data tersebut tersedia pada https://data.covid19.go.id/public/api/update.json untuk data pertumbuhan COVID-19 di Indonesia dan https://data.covid19.go.id/public/api/prov_detail_JAWA_BARAT.json untuk data pertumbuhan COVID-19 di JAWA BARAT.
library(httr)
library(tidyverse)
library(dplyr)
library(ggplot2)
library(hrbrthemes)
library(lubridate)
library(scales)
API_IND<-
GET("https://data.covid19.go.id/public/api/update.json")
Pada saat mengakses API ada beberapa hasil. Bisa terjadi permintaan sukses, data tidak ditemukan, dll.
Berikut merupakan kode dan arti dari kode ketika mengakses API.
1xx : Informational
2xx : Success
3xx : Redirections
4xx : Client Errors
5xx : Server Error
xxx : Pikiran anda kotor
Selengkapnya dapat dilihat disini
Untuk melihat kode tersebut lakukan :
status_code(API_IND)
## [1] 200
Data masih merupakan file json, sehingga butuh diekstrak supaya menjadi bentuk vector.
cov_id_raw <-
content(API_IND, as="parsed", simplifyVector=TRUE)
length(cov_id_raw)
## [1] 2
names(cov_id_raw)
## [1] "data" "update"
Data Pada Vector Data
cov_id_data<-
cov_id_raw$data
lapply(cov_id_data, names)
## $id
## NULL
##
## $jumlah_odp
## NULL
##
## $jumlah_pdp
## NULL
##
## $total_spesimen
## NULL
##
## $total_spesimen_negatif
## NULL
cov_id_data
## $id
## [1] 1
##
## $jumlah_odp
## [1] 124845
##
## $jumlah_pdp
## [1] 0
##
## $total_spesimen
## [1] 18734036
##
## $total_spesimen_negatif
## [1] 13350841
Pada data tersebut terlihat bahwa sebanyak 18734036 spesimen telah dites dan sebanyak 13350841 spesimen negatif COVID-19. Sisa spesimen adalah positif dan hasil test belum keluar.
Data Pada Vector Update
Data dubah dari list menjadi data frame biar enak eksplorasi dan analisisnya.
cov_id_update<-
cov_id_raw$update
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<-
as.data.frame(cov_id_update$penambahan)
cov_id_update_total<-
as.data.frame(cov_id_update$total)
cov_id_update_harian<-
as.data.frame(cov_id_update$harian)
Pada data diatas dapat diketahui:
Waktu terakhir penambahan kasus
Jumlah penambahan kasus sembuh, meninggal, positif, dan dirawat pada waktu tersebut
Jumlah penambahan kasus sembuh, meninggal, positif pada waktu tersebut total
Jumlah penambahan kasus sembuh, meninggal, positif, dan dirawat pada waktu tiap waktu
Jumlah penambahan kasus sembuh, meninggal, positif, dan dirawat pada waktu tiap waktu secara kumulatif.
cov_id_update_penambahan$tanggal
## [1] "2021-06-21"
Hal ini berarti data mencakup dari awal kasus pertama COVID-19 di Indonesia sampai tanggal 2021-06-21.
cov_id_update_penambahan %>%
select(-c("tanggal", "created"))
## jumlah_positif jumlah_meninggal jumlah_sembuh jumlah_dirawat
## 1 14536 294 9233 5009
cov_id_penambahan_pivot <-
cov_id_update_penambahan %>%
select(-c("tanggal", "created"))%>%
pivot_longer(
cols = starts_with("jumlah_"),
names_to = "kategori",
names_prefix = "jumlah_",
values_to = "jumlah"
)
cov_id_penambahan_pivot
## # A tibble: 4 x 2
## kategori jumlah
## <chr> <int>
## 1 positif 14536
## 2 meninggal 294
## 3 sembuh 9233
## 4 dirawat 5009
ggplot(cov_id_penambahan_pivot, aes(x=kategori, y= jumlah, fill = kategori))+
geom_col(show.legend = FALSE)+
scale_fill_manual(
values = c(
"positif" = "salmon",
"meninggal" = "darkslategray4",
"sembuh" = "olivedrab2",
"dirawat" = "lightblue"
)
)+
scale_y_continuous(limits = c(0,max(cov_id_penambahan_pivot$jumlah)), breaks = seq(0,max(cov_id_penambahan_pivot$jumlah), by = 1000))+
labs(
x = NULL,
y = NULL,
colour = NULL,
title = "Penambahan Kasus COVID-19 di Indonesia\npada Hari Terakhir Update",
caption = "Sumber data: covid.19.go.id"
) +
theme_ipsum_ps(
base_size = 13,
plot_title_size = 21,
grid = "Y",
ticks = TRUE
) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold")
)
Berikut merupakan data kasus COVID-19 di Indonesia pada tanggal 2021-06-21.
cov_id_total_pivot <-
cov_id_update_total %>%
select(-jumlah_dirawat)%>%
pivot_longer(
cols = starts_with("jumlah_"),
names_to = "kategori",
names_prefix = "jumlah_",
values_to = "jumlah"
)
cov_id_total_pivot
## # A tibble: 3 x 2
## kategori jumlah
## <chr> <int>
## 1 positif 2004445
## 2 sembuh 1801761
## 3 meninggal 54956
ggplot(cov_id_total_pivot, aes(x=kategori, y= jumlah, fill = kategori))+
geom_col(show.legend = FALSE)+
scale_fill_manual(
values = c(
"positif" = "salmon",
"meninggal" = "darkslategray4",
"sembuh" = "olivedrab2",
"dirawat" = "lightblue"
)
)+
scale_y_continuous(limits = c(0,max(cov_id_total_pivot$jumlah)), breaks =
seq(0,max(cov_id_total_pivot$jumlah), by = 100000))+
labs(
x = NULL,
y = NULL,
colour = NULL,
title = "Total Kasus COVID-19 di Indonesia\nSampai Hari Terakhir Update",
caption = "Sumber data: covid.19.go.id"
) +
theme_ipsum_ps(
base_size = 13,
plot_title_size = 21,
grid = "Y",
ticks = TRUE
) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold")
)
Berikut merupakan data kasus COVID-19 di Indonesia dari awal kasus sampai tanggal 2021-06-21, dengan rasio kematian 2.7417066%. Walaupun rasio kematian COVID-19 di Indonesia hanya sebesar 2.7417066%, namun untuk nyawa seseorang angka tersebut sangatlah besar (kata Pak Nar, pas kuliah).
cov_id_update_harian<-cov_id_update_harian%>%
unlist(recursive = T, use.names = F)%>%
matrix(ncol = 11, byrow = F)%>%
as_tibble()%>%
select(-c(V2,V3, V7))%>%
rename(tanggal = V1,
jumlah_meninggal = V4,
jumlah_sembuh = V5,
jumlah_positif = V6,
jumlah_positif_kumulatif = V8,
jumlah_sembuh_kumulatif = V9,
jumlah_meninggal_kumulatif = V10,
jumlah_dirawat_kumulatif = V11)%>%
mutate(tanggal= as.Date(tanggal))%>%
mutate_if(is.character, as.double)
cov_id_per_hari <-
cov_id_update_harian%>%
select(- contains("_kum"))%>%
pivot_longer(
cols = starts_with("jumlah_"),
names_to = "kategori",
names_prefix = "jumlah_",
values_to = "jumlah"
)
cov_id_per_hari
## # A tibble: 1,431 x 3
## tanggal kategori jumlah
## <date> <chr> <dbl>
## 1 2020-03-02 meninggal 0
## 2 2020-03-02 sembuh 0
## 3 2020-03-02 positif 2
## 4 2020-03-03 meninggal 0
## 5 2020-03-03 sembuh 0
## 6 2020-03-03 positif 0
## 7 2020-03-04 meninggal 0
## 8 2020-03-04 sembuh 0
## 9 2020-03-04 positif 0
## 10 2020-03-05 meninggal 0
## # ... with 1,421 more rows
lapply(cov_id_per_hari, class)
## $tanggal
## [1] "Date"
##
## $kategori
## [1] "character"
##
## $jumlah
## [1] "numeric"
ggplot(cov_id_per_hari, aes(tanggal, jumlah, colour= kategori))+
geom_line(size=1)+
facet_grid(. ~kategori)+
scale_fill_manual(
values = c(
"positif" = "salmon",
"meninggal" = "darkslategray4",
"sembuh" = "olivedrab2"
)
)+
scale_y_continuous(limits = c(0,max(cov_id_per_hari$jumlah)), breaks =
seq(0,max(cov_id_per_hari$jumlah), by = 1000))+
scale_x_date(date_breaks = "4 month", date_labels = "%m %y")+
labs(
x = NULL,
y = NULL,
colour = NULL,
title = "Kasus COVID-19 di Indonesia\ndari Hari ke Hari",
caption = "Sumber data: covid.19.go.id"
) +
theme_ipsum_ps(
base_size = 13,
plot_title_size = 21,
grid = "Y",
ticks = TRUE
) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
legend.position = "bottom"
)
Kasus COVID-19 di Indonesia cenderung selalu bertambah dari hari ke hari. Namun pada awal tahun 2021 sekitar awal Februari sampai akhir Mei, walaupun kembali meningkat sekitar pada awal Juni.
cov_ID_per_pekan <- cov_id_update_harian %>%
select(c(tanggal, jumlah_positif))%>%
count(
tahun = year(tanggal),
pekan_ke = week(tanggal),
wt = jumlah_positif,
name = "jumlah"
)%>%
mutate(
jumlah_pekanlalu = dplyr::lag(jumlah, 1),
jumlah_pekanlalu = ifelse(is.na(jumlah_pekanlalu), 0, jumlah_pekanlalu),
lebih_baik = jumlah < jumlah_pekanlalu
)
cov_ID_per_pekan
## # A tibble: 70 x 5
## tahun pekan_ke jumlah jumlah_pekanlalu lebih_baik
## <dbl> <dbl> <dbl> <dbl> <lgl>
## 1 2020 9 2 0 FALSE
## 2 2020 10 25 2 FALSE
## 3 2020 11 145 25 FALSE
## 4 2020 12 513 145 FALSE
## 5 2020 13 843 513 FALSE
## 6 2020 14 1210 843 FALSE
## 7 2020 15 2101 1210 FALSE
## 8 2020 16 2296 2101 FALSE
## 9 2020 17 2376 2296 FALSE
## 10 2020 18 2560 2376 FALSE
## # ... with 60 more rows
cov_ID_per_pekan%>%
ggplot(aes(x = pekan_ke, y = jumlah, fill= lebih_baik))+
geom_col()+
facet_grid(.~tahun)+
scale_y_continuous(limits = c(0,max(cov_ID_per_pekan$jumlah)), breaks =
seq(0,max(cov_ID_per_pekan$jumlah), by = 10000))+
scale_x_continuous(limits = c(0,max(cov_ID_per_pekan$pekan_ke)), breaks =
seq(0,max(cov_ID_per_pekan$pekan_ke), by = 4))+
scale_fill_manual(values = c("TRUE" = "green", "FALSE" = "red")) +
labs(
x = NULL,
y = "Jumlah Kasus",
colour = NULL,
subtitle = "hijau berarti terjadi penurunan kasus dari pekan sebelumnya,\nmerah berarti terjadi penambahan kasus dari pekan sebelumnya",
title = "Kasus Positif COVID-19 di Indonesia\ntiap Pekannya",
caption = "Sumber data: covid.19.go.id"
) +
theme_ipsum_ps(
base_size = 10,
plot_title_size = 21,
grid = "Y",
ticks = TRUE
) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(size = 9),
legend.position = "bottom"
)
Terlihat pada awal Februari sampai akhir Mei mengalami penurunan kasus COVID-19. Hal ini berarti akan lebih baik jika apa yang dilakukan setiap orang pada waktu awal Februari sampai akhir Mei dilakukan kembali sekarang.
cov_id_kumulatif <-
cov_id_update_harian%>%
select(c(contains("_kum"),tanggal, - jumlah_dirawat_kumulatif))%>%
mutate(jumlah_aktif = jumlah_positif_kumulatif - jumlah_meninggal_kumulatif - jumlah_sembuh_kumulatif)%>%
pivot_longer(
cols = starts_with("jumlah_"),
names_to = "kategori",
names_prefix = "jumlah_",
values_to = "jumlah"
)
cov_id_kumulatif
## # A tibble: 1,908 x 3
## tanggal kategori jumlah
## <date> <chr> <dbl>
## 1 2020-03-02 positif_kumulatif 2
## 2 2020-03-02 sembuh_kumulatif 0
## 3 2020-03-02 meninggal_kumulatif 0
## 4 2020-03-02 aktif 2
## 5 2020-03-03 positif_kumulatif 2
## 6 2020-03-03 sembuh_kumulatif 0
## 7 2020-03-03 meninggal_kumulatif 0
## 8 2020-03-03 aktif 2
## 9 2020-03-04 positif_kumulatif 2
## 10 2020-03-04 sembuh_kumulatif 0
## # ... with 1,898 more rows
lapply(cov_id_kumulatif, class)
## $tanggal
## [1] "Date"
##
## $kategori
## [1] "character"
##
## $jumlah
## [1] "numeric"
ggplot(cov_id_kumulatif, aes(tanggal, jumlah, colour= kategori))+
geom_line(size=1)+
facet_grid(. ~kategori)+
scale_fill_manual(
values = c(
"positif_kumulatif" = "red",
"meninggal_kumulatif" = "darkslategray4",
"sembuh_kumulatif" = "olivedrab2",
"aktif" = "salmon"
)
)+
scale_y_continuous(limits = c(0,max(cov_id_kumulatif$jumlah)), breaks =
seq(0,max(cov_id_kumulatif$jumlah), by = 250000))+
scale_x_date(date_breaks = "6 month", date_labels = "%m %y")+
labs(
x = NULL,
y = NULL,
colour = NULL,
title = "Total Kasus COVID-19 di Indonesia\ndari Hari ke Hari",
caption = "Sumber data: covid.19.go.id"
) +
theme_ipsum_ps(
base_size = 13,
plot_title_size = 21,
grid = "Y",
ticks = TRUE
) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
legend.position = "bottom"
)