Eksplorasi dan Analisis Data COVID-19 di Sulawesi Tengah

Uyun Mubarak
8 min readApr 17, 2021

--

Photo by Martin Sanchez on Unsplash

Halo, ini adalah tulisan perdana aku di medium. Kali ini aku ingin membahas tentang eksplorasi dan analisis data COVID-19 di Sulawesi Tengah menggunakan bahasa pemrograman Python. Ini juga merupakan project perdana yang aku pelajari di salah satu online course yaitu DQLab.

Sebelum memulai projectnya, kita harus mengetahui terlebih dahulu apa yang dimaksud dengan eksplorasi data? Eksplorasi data atau EDA (Exploratory Data Analyst) adalah salah satu proses untuk memahami isi data yang akan digunakan. EDA dapat membantu menemukan sebuah pola pada data mulai dari distribusi, frekuensi, dan korelasi, mengidentifikasi kesalahan, serta mendeteksi outlier.

Latar belakang dari project ini adalah COVID-19 atau Coronavirus disease. COVID-19 adalah pandemi yang sudah mewabah ke seluruh dunia. Sebagian besar negara-negara di dunia sudah terjangkit. Penanganan tiap-tiap negara pun berbeda, sesuai dengan kebijakan pemerintah. Hal ini mengakibatkan perbedaan trend kenaikan atau penurunan kasus COVID-19 berbeda-beda di tiap negara.

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.

Data yang akan digunakan dalam project ini merupakan data yang telah disediakan di portal covid19.go.id. Adapun cara untuk mengambil data dari portal tersebut secara langsung adalah dengan menggunakan Application Programming Interface (API). Secara sederhana API dapat dipahami sebagai cara komputer untuk berkomunikasi dengan komputer lainnya sehingga dapat terjadi transaksi pertukaran data.

Untuk data COVID-19 di Sulawesi Tengah tersedia di https://data.covid19.go.id/public/api/prov_detail_SULAWESI_TENGAH.json. Mengapa aku fokus untuk memilih data COVID-19 di Sulawesi Tengah? Hal ini dikarenakan Provinsi Sulawesi Tengah adalah tempat tinggal aku sekarang. Jika teman-teman memiliki ketertarikan dengan data dan ingin mengeksplorasi serta menganalisis data COVID-19, kalian juga bisa mencobanya lhoo berdasarkan provinsi tempat kalian tinggal. Portal covid19.go.id menyediakan data kasus COVID-19 tingkat Provinsi di alamat API yang berbeda-beda.

Akses API covid19.go.id

Salah satu cara untuk mengakses API adalah dengan menggunakan fungsi get() dari library requests. Kemudian aktifkan library requests dan jalankan fungsi get() pada alamat API yang telah disebutkan. Simpan hasil fungsi tersebut dalam obyek bernama resp_sulteng seperti berikut.

import requests
import json
resp_sulteng = requests.get('https://data.covid19.go.id/public/api/prov_detail_SULAWESI_TENGAH.json')

Mengevaluasi Respon

Saat menjalankan fungsi get(), pada dasarnya adalah membuat sebuah permintaan kepada server penyedia API. Permintaan tersebut selanjutnya diproses dan dijawab oleh server sebagai sebuah respon. Objek resp_sulteng memiliki informasi respon oleh server seperti berikut.

print(resp_sulteng)

Apabila outputnya berupa :

200. Artinya permintaan sukses dipenuhi.

404. Artinya berkas yang diminta tidak dapat ditemukan.

500. Artinya akses permintaan ditolak.

501. Artinya terjadi kesalahan pada server.

Informasi lebih lengkap mengenai jenis-jenis status kode dapat di pelajari https://restfulapi.net/http-status-codes/.

Selanjutnya untuk mengetahui metadata apa saja yang tersimpan, gunakan respon API berupa headers. Dengan cara sebagai berikut:

print(resp_sulteng.headers)
content-type berupa application/json, yang artinya jenis data yang digunakan adalah JSON.

Selanjutnya ekstrak konten tersebut dengan menggunakan method json(). Method json() merupakan builtin JSON decoder untuk mengekstrak content bertipe JSON.

Jalankan method json() pada obyek resp_sulteng dan simpanlah hasilnya sebagai cov_sulteng_raw yang bertipe data dict seperti berikut.

cov_sulteng_raw = resp_sulteng.json()

Jika ingin melihat banyaknya jumlah kolom, nama-nama elemen utama pada data, jumlah total kasus COVID-19 di Sulawesi Tengah, Persentase kematian dan kesembuhan COVID-19 di Sulawesi Tengah kalian dapat mencobanya dengan cara berikut :

print('Jumlah kolom pada data : ', len(cov_sulteng_raw))print('Nama-nama elemen utama : ', cov_sulteng_raw.keys())print('Jumlah total kasus COVID-19 di Sulawesi Tengah : %d' %cov_sulteng_raw['kasus_total'])print('Persentase kematian akibat COVID-19 di Sulawesi Tengah : %f%%' %cov_sulteng_raw['meninggal_persen'])print('Persentase kesembuhan dari COVID-19 di Sulawesi Tengah : %f%%' %cov_sulteng_raw['sembuh_persen'])

Mendapatkan Informasi Lebih Lengkap

Informasi umum tentang COVID-19 di Sulawesi Tengah telah berhasil didapatkan. Tetapi informasi akan jauh lebih lengkap jika memiliki data perkembangan COVID-19 dari waktu ke waktu bukan? Bagaimana cara mendapatkan informasi lebih lengkap? Ternyata informasi tersebut juga disediakan oleh covid19.go.id. Data perkembangan COVID-19 tersimpan dengan nama list_perkembangan.

Untuk lebih memudahkan ketika menginspeksi data, ekstrak data dari cov_sulteng_raw dan ubahlah data bertipe dict ke dataframe menggunakan pandas seperti berikut.

import numpy as np
import pandas as pd
cov_sulteng = pd.DataFrame(cov_sulteng_raw['list_perkembangan'])
cov_sulteng.info()
cov_sulteng.head()

Menjinakkan Data

Setelah diperhatikan, ada beberapa hal yang mengganjal dari data tersebut. Kolom tanggal dan format penulisannya tidak konsisten. Maka dari itu lakukan beberapa tahap agar data lebih mudah diolah dan dianalisis seperti berikut :

  1. Hapus kolom DIRAWAT atau ISOLASI dan semua kolom yang berisi nilai kumulatif.
  2. Mengubah format penulisan semua kolom menjadi huruf kecil.
  3. Mengganti nama kolom ‘kasus’ menjadi ‘kasus_baru’.
  4. Memperbaiki tipe data pada kolom tanggal.
covSultengNew = (cov_sulteng.drop(columns=[item for item in cov_sulteng.columns if item.startswith('AKUMULASI')or item.startswith('DIRAWAT')])
.rename(columns=str.lower)
.rename(columns={'kasus':'kasus_baru'})
)
covSultengNew['tanggal'] = pd.to_datetime(cov_sulteng['tanggal']*1e6, unit='ns')

Setelah itu tampilkan lima data teratas, seperti berikut :

print('Lima data teratas : \n', covSultengNew.head())

Pada tampilan data tersebut, data telah berhasil diubah dan lebih mudah untuk diolah dan dianalisis.

Visualisasi Data Kasus Harian Positif COVID-19 di Sulawesi Tengah

Pada tahap selanjutnya visualisasikan data ‘Kasus Harian Positif Covid-19 di Sulawesi Tengah’ melalui gambar dalam bentuk grafik menggunakan library matplotlib dengan cara berikut:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
plt.clf()
fig, ax = plt.subplots(figsize=(16,5))
ax.bar(data=covSultengNew, x='tanggal', height='kasus_baru')
fig.suptitle('Kasus Harian Positif Covid-19 di Sulawesi Tengah', y=1.00, fontsize=20, fontweight='bold', ha='center')
ax.set_title('\nTerjadi Pelonjakan Kasus di Bulan Januari dan Februari 2021')
ax.set_xlabel('')
ax.set_ylabel('Jumlah Kasus')
ax.text(1, -0.1, 'Sumber data : covid19.go.id', ha='right', color='blue', transform=ax.transAxes)
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
plt.grid(axis='y')
plt.tight_layout()
plt.show()

Visualisasi Data Kasus Harian Sembuh COVID-19 di Sulawesi Tengah

Selanjutnya visualisasikan data serupa seperti grafik sebelumnya dengan ‘Kasus Harian Sembuh Covid-19 di Sulawesi Tengah’ seperti berikut.

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
plt.clf()
fig, ax = plt.subplots(figsize=(16,5))
ax.bar(data=covSultengNew, x='tanggal', height='sembuh', color='seagreen')
ax.set_title('Kasus Harian Sembuh Dari Covid-19 di Sulawesi Tengah', fontsize=20, fontweight='bold', ha='center')
ax.set_xlabel('')
ax.set_ylabel('Jumlah Kasus')
ax.text(1, -0.1,'Sumber data : covid19.go.id', color='blue', ha='right', transform=ax.transAxes)
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
plt.grid(axis='y')
plt.tight_layout()
plt.show()

Visualisasi Data Kasus Harian Meninggal Akibat COVID-19 di Sulawesi Tengah

Sekarang, mari visualisasikan data serupa seperti grafik sebelumnya dengan ‘Kasus Harian Meninggal Covid-19 di Sulawesi Tengah’ dengan cara berikut.

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
plt.clf()
fig, ax = plt.subplots(figsize=(16,5))
ax.bar(data=covSultengNew, x='tanggal', height='meninggal', color='brown')
ax.set_title('Kasus Harian Meninggal Akibat COVID-19 di Sulawesi Tengah', fontsize=20, fontweight='bold', ha='center')
ax.set_xlabel('')
ax.set_ylabel('Jumlah Kasus')
ax.text(1, -0.1, 'Sumber data : covid19.go.id', color='blue', ha='right', transform=ax.transAxes)
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
plt.grid(axis='y')
plt.tight_layout()
plt.show()

Bagaimana Kondisi Pekan Ini di Sulawesi Tengah?

Pertama, set kolom tanggal pada covSultengNew sebagai index. Kemudian terapkan method pada time series di pandas, resampling per pekan dan gunakan agregasi penjumlahan. Untuk mengekstrak informasi pekan dalam satu tahun gunakan weekofyear dan year untuk tahun. Untuk lebih jelasnya, perhatikan kode berikut :

covSultengPekanan = (covSultengNew.set_index('tanggal')['kasus_baru']
.resample('W')
.sum()
.reset_index()
.rename(columns={'kasus_baru' : 'jumlah'})
)
covSultengPekanan['tahun'] = covSultengNew['tanggal'].apply(lambda x: x.year)
covSultengPekanan['pekan_ke'] = covSultengNew['tanggal'].apply(lambda x: x.weekofyear)
covSultengPekanan = covSultengPekanan[['tahun', 'pekan_ke', 'jumlah']]
print('Info Sulawesi Tengah Pekanan : ')
print(covSultengPekanan.info())
print('Lima data teratas : \n', covSultengPekanan.head())

Setelah melakukan inspeksi terhadap data cov_sulteng_pekanan, apakah pekan ini di Sulawesi Tengah lebih baik dari pekan kemarin? Untuk menjawabnya, lakukan tahapan ini :

1. Membuat kolom baru berisi jumlah kasus baru dalam satu pekan sebelumnya.

2. Mengganti nilai NaNf pada kolom jumlah_pekanlalu dengan nilai 0.

3. 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.

covSultengPekanan['jumlah_pekanlalu'] = covSultengPekanan['jumlah'].shift().replace(np.nan, 0).astype(np.int)covSultengPekanan['lebih_baik'] = covSultengPekanan['jumlah'] < covSultengPekanan['jumlah_pekanlalu']print('Sepuluh Data teratas : \n', covSultengPekanan.head(10))

Langkah selanjutnya buat bar-chart untuk penambahan kasus pekanan, seperti berikut.

import matplotlib.pyplot as plt
plt.clf()
fig, ax = plt.subplots(figsize=(16,5))
ax.bar(data=covSultengPekanan, x='pekan_ke', height='jumlah', color=['seagreen' if x is True else 'brown' for x in covSultengPekanan['lebih_baik']])
fig.suptitle('Kasus Pekanan COVID-19 di Sulawesi Tengah', y=1.00, fontsize=20, fontweight='bold', ha='center')
ax.set_title('\nKolom hijau menunjukkan penambahan kasus baru lebih sedikit dibandingkan satu pekan sebelumnya', fontsize=12)
ax.set_xlabel('')
ax.set_ylabel('Jumlah Kasus')
ax.text(1, -0.1, 'Sumber data : covid19.go.id', color='blue', ha='right', transform=ax.transAxes)
plt.grid(axis='y')
plt.tight_layout()
plt.show()

Berapa banyak kasus yang masih aktif saat ini? Aktif dalam artian sedang dalam perawatan atau isolasi. Jumlah kasus aktif dapat dihitung dengan cara mengurangi jumlah akumulasi positif dengan jumlah akumulasi sembuh dan jumlah akumulasi meninggal. Gunakan method cumsum() seperti berikut.

covSultengAkumulasi = covSultengNew[['tanggal']].copy()covSultengAkumulasi['akumulasi_aktif'] = (covSultengNew['kasus_baru']-covSultengNew['sembuh']-covSultengNew['meninggal']).cumsum()covSultengAkumulasi['akumulasi_sembuh'] = covSultengNew['sembuh'].cumsum()covSultengAkumulasi['akumulasi_meninggal'] = covSultengNew['meninggal'].cumsum()covSultengAkumulasi.tail()

Sekarang mari gambarkan line-chart pola kasus aktif menggunakan method plot pada ax seperti kode berikut.

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
plt.clf()
fig, ax = plt.subplots(figsize=(16,5))
ax.plot('tanggal', 'akumulasi_aktif', data=covSultengAkumulasi, lw=2)
ax.set_title('Akumulasi Aktif COVID-19 di Sulawesi Tengah', fontsize=22)
ax.set_xlabel('')
ax.set_ylabel('Akumulasi Aktif')
ax.text(1, -0.1, 'Sumber : covid19.go.id', color='blue', ha='right', transform=ax.transAxes)
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
plt.grid(axis='y')
plt.tight_layout()
plt.show()

Pada tahap terakhir, komparasikan antara akumulasi kasus aktif, kasus sembuh dan kasus meninggal pada line-chart berikut.

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
plt.clf()
fig, ax = plt.subplots(figsize=(16,5))
covSultengAkumulasi.plot(x='tanggal', kind='line', ax=ax, lw=3, color=['blue','seagreen','brown'])
ax.set_title('Dinamika Kasus COVID-19 di Sulawesi Tengah')
ax.set_xlabel('')
ax.set_ylabel('Akumulasi Aktif')
ax.text(1, -0.1, 'Sumber data : covid19.go.id', color='blue', ha='right', transform=ax.transAxes)
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
plt.grid(axis='y')
plt.tight_layout()
plt.show()

Itulah pembahasan tentang eksplorasi dan analisis data COVID-19 di Sulawesi Tengah menggunakan bahasa pemrograman Python. Terima kasih telah membaca tulisan ini hingga akhir. Jika ada masukan atau kritik bisa komentar dibawah ini. Bila kalian suka dengan tulisan ini, silahkan klik gambar clap atau tepuk tangan (hal itu sangat aku apresiasi). Sampai jumpa di pembahasan project selanjutnya.

Sumber :

covid19.go.id dan https://dqlab.id/

--

--

No responses yet