Analisis Data COVID-19 di Dunia dan ASEAN

Gifa Delyani Nursyafitri
5 min readSep 13, 2020
Source : Tribun News

Holaaa people, balik lagi bareng aku. Kali ini aku lagi ngikutin DQ-Weekend Challenge dari DQLab tentang Data COVID-19 di Dunia dan di ASEAN dengan menggunakan python.

Covid19 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 berbeda-beda tiap negara.

Di Indonesia kondisi pandemi terbilang cukup mengkhawatirkan, mengingat angka kasus positif terus meningkat setiap harinya. Gubernur DKI Jakarta, Anies Baswedan bahkan “menarik rem mendadak”. Anies memutuskan untuk mengembalikan tahapan PSBB ke langkah awal guna mencegah penyebaran COVID-19 yang semakin tinggi.

Pada kasus kali ini, kita akan mencoba menggali data covid19 dari salah satu open api yang tersedia yaitu https://covid19-api.org/.

Library yang dibutuhkan

  • json,
  • numpy,
  • pandas, dan
  • requests.
import json
import numpy as np
import pandas as pd
import requests

Membuat Fungsi get API

def get_json(api_url):
response = requests.get(api_url)
if response.status_code == 200:
return json.loads(response.content.decode('utf-8'))
else:
return None

Fungsi ini akan mengembalikan value berupa python dictionary jika status_code yang dihasilkan adalah 200. Jika tidak, maka value yang dikembalikan adalah None.

Memanggil API Covid19

Rekapitulasi data COVID-19 global berada di https://covid19-api.org/. Gunakan parameter record_date untuk mengambil data covid19 di seluruh negara pada tanggal tertentu. Untuk kasus ini, gunakan record_date ‘2020–08–17’, dan masukkan hasil respon api ke variable df_covid_worldwide.

Untuk mendapatkan dataframe covid19, gunakan fungsi pd.io.json.json_normalize dan panggil function yang sudah dibuat sebelumnya, yaitu get_json() Print sample data covid dengan menggunakan head() function.

record_date = '2020-08-17'
covid_url = 'https://covid19-api.org/api/status?date='+record_date
df_covid_worldwide = pd.io.json.json_normalize(get_json(covid_url))
print(df_covid_worldwide.head())

Merubah Format date

Ubah format kolom ‘last_update’ menggunakan fungsi to_datetime dengan format YYYY-mm-dd HH:MM:SS. Lalu ubah bentuk datetime ke bentuk date dengan fungsi date() melalui fungsi lambda untuk mengubah setiap row-nya.

df_covid_worldwide['last_update'] = pd.to_datetime(df_covid_worldwide['last_update'], format='%Y-%m-%d %H:%M:%S')
df_covid_worldwide['last_update'] = df_covid_worldwide['last_update'].apply(lambda x: x.date())

Mengambil Data Countries

Untuk membuat dataframe countries dapat dilakukan dengan memanggil variable countries_url ke api covid19-api.org. Lalu ubah nama kolom alpha2 menjadi country, kemudian ambil hanya kolom name dan country saja untuk dataframe countries (df_countries) ini.

countries_url = 'https://covid19-api.org/api/countries'
df_countries = pd.io.json.json_normalize(get_json(countries_url))
df_countries = df_countries.rename(columns={'alpha2': 'country'})[['name','country']]
print(df_countries.head())

Hasil yang didapatkan adalah sebagai berikut,

Kasus Covid-19 di Dunia dan Negara Mana yang Tertinggi?

Merge Covid19 Data dan Countries

Selanjutnya adalah mapping data covid19 dan data country. Untuk menggabungkan df_covid_worldwide dan df_countries dapat menggunakan fungsi merge pada pandas. Untuk merge, gunakan kolom country. Lalu print sample data dengan menggunakan head().

df_covid_denormalized = pd.merge(df_covid_worldwide, df_countries, on='country')print(df_covid_denormalized.head())

Menghitung Fatality Ratio

Untuk membuat kolom fatality_ratio, dilakukan dengan membagi antara kolom deaths dan cases.

df_covid_denormalized['fatality_ratio'] = df_covid_denormalized['deaths']/df_covid_denormalized['cases']

Visualisasi negara-negara dengan Fatality Ratio Tertinggi

Untuk memvisualisasikan negara-negara dengan kasus fatality rate tertinggi akibat covid-19 ini dapat dilakukan dengan menggunakan bar chart.

Variabel x axis adalah kolom name, dan kolom y atau value nya adalah kolom fatality_ratio dan gunakan fungsi plt.bar([value x axis, value y axis]).

Label sumbu x diputar 90 derajat untuk menghindari bertumpuknya nama-nama negara pada posisi 0 derajat.

df_top_20_fatality_rate = df_covid_denormalized.sort_values(by='fatality_ratio', ascending=False).head(20)
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
plt.figure(figsize=(20, 8))
x = df_top_20_fatality_rate['name']
y = df_top_20_fatality_rate['fatality_ratio']
plt.bar(x,y)
plt.xlabel('Country Name')
plt.ylabel('Fatality Rate')
plt.title('Top 20 Highest Fatality Rate Countries')
plt.xticks(rotation=90)
plt.tight_layout()
plt.show()

Didapatkan hasil sebagai berikut,

Yemen merupakan negara dengan yang memiliki fatality rate tertinggi, yaitu di atas 0.25.

Ternyata setelah New Normal, kasus positif COVID-19 tidak berkurang

Bagaimana Kasus Covid-19 di ASEAN?

Menggabungkan Dataframe

Selanjutnya adalah membandingkan kasus covid19 di Indonesia (ID) dengan negara-negara tetangga, yaitu:

  • MY -> Malaysia,
  • SG -> Singapure,
  • TH -> Thailand,
  • VN -> Vietnam.

Untuk itu, api country dipanggil berkali-kali sebanyak negara yang akan kita bandingkan.

countries = ['ID','MY','SG','TH','VN']
i = 0
for country in countries:
covid_timeline_url = 'https://covid19-api.org/api/timeline/'+country
df_covid_timeline = pd.io.json.json_normalize(get_json(covid_timeline_url))
df_covid_timeline['last_update'] = pd.to_datetime(df_covid_timeline['last_update'], format='%Y-%m-%dT%H:%M:%S')
df_covid_timeline['last_update'] = df_covid_timeline['last_update'].apply(lambda x: x.date())
if i==0:
df_covid_timeline_merged = df_covid_timeline
else:
df_covid_timeline_merged = df_covid_timeline.append(df_covid_timeline_merged, ignore_index=True)
i=i+1

print(df_covid_timeline_merged.head())

Merge Data Covid19 Dengan Data Country

Kemudian buat kolom baru dengan nama df_covid_timeline_denormalized dengan menggabungkan df_covid_timeline_merged dengan df_countries dengan kolom country sebagai pivot.

df_covid_timeline_denormalized = pd.merge(df_covid_timeline_merged , df_countries , on='country')

Kasus Covid-19 di ASEAN pada Bulan Maret 2020

Filter kolom last_update dari data covid19 sehingga hanya data dari tanggal 1 Maret 2020 ke atas yangdiambil. Format datetime.date menggunakan format YYYY, mm, dd.

import datetime
df_covid_timeline_denormalized = df_covid_timeline_denormalized[(df_covid_timeline_denormalized['last_update'] >= datetime.date(2020, 3, 1))]

Visualisasi Kasus Covid-19 di ASEAN

Variable merupakan tanggal (last_update) pada tiap-tiap negara dan variabel y adalah jumlah kasus (cases) pada tiap-tiap negara.

import matplotlib.pyplot as plt
plt.clf()
countries = ['ID','MY','SG','TH','VN']
for country in countries:
country_data = df_covid_timeline_denormalized['country']==country
x = df_covid_timeline_denormalized[country_data]['last_update']
y = df_covid_timeline_denormalized[country_data]['cases']
plt.plot(x, y, label = country)
plt.legend()
plt.xlabel('Record Date')
plt.ylabel('Total Cases')
plt.title('Asean Covid19 Cases Comparison')
plt.show()

Didapatkan hasil sebagai berikut,

Berdasarkan hasil tersebut, kita tentunya dapat melihat bahwa total kasus di Indonesia merupakan jumlah kasus tertinggi dibandingkan empat negara lainnya di ASEAN. Di September 2020 ini, jumlah kasus yang terjadi di Indonesia bahkan telah lebih dari 200.000 kasus. Dan akan terus meningkat jika setiap elemen tidak saling bekerja sama untuk menghentikannya.

Lalu masih kah kita menganggap virus ini bukan sesuatu yang mengerikan? Masih kah kita abai terhadap protokol kesehatan?

Lekas pulih Indonesia, lekas pulih dunia.

Thank you for reading. See you!

Reference:

Modul DQLab Data Science Project: Analisis Data COVID19 di Dunia & ASEAN : https://academy.dqlab.id/main/package/practice/260

Data Mentor : Syarif Hidayatullah

--

--

Gifa Delyani Nursyafitri

Ku abadikan disini, karena aku paham betul bahwa ingatan manusia terbatas.