Pendahuluan

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

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)

Mengakses API covid.go.id

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?

Mengekstrak Data

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"

Mengkases data historis

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

Mempebaiki Struktur data

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.

Grafik Kasus Sembuh

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.

Grafik Kasus Meninggal

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 Kasus Pekanan

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,

Mengambil data pekanan

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

Perbandingan data Pekanan

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

Tampilan Grafik Perbandingan Pekanan

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.

Grafik Dinamika Kasus AKtif

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

Membuat kolom Kasus aktif

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

Menampilkan Grafik Kasus Aktif

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,

Grafik perbandingkan Akumulasi Kasus Aktif, Sembuh dan meninggal

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

Grafik Perbandingan Kasus Aktif, Sembuh, Meninggal

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.