<jupyter_start><jupyter_text>PendahuluanCovid19 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.Pada kasus kali ini, kita akan mencoba menggali data covid19 dari salah satu open api yang tersedia yaitu https://covid19-api.org/.&nbsp;&nbsp; Library yang dibutuhkanPertama-tama, import terlebih dahulu library yang dibutuhkan, antara lain secara berurutan adalahjson,numpy,pandas, danrequests.Library numpy dan pandas diimport sebagai aliasnya.&nbsp;<jupyter_code>import json
import numpy as np
import pandas as pd
import requests<jupyter_output><empty_output><jupyter_text>Membuat Fungsi get APIBuat fungsi python get_json dengan parameter api_url. fungsi ini akan mengembalikan value berupa python dictionary jika status_code yang dihasilkan adalah 200. Jika tidak, maka value yang dikembalikan adalah None.&nbsp;&nbsp;<jupyter_code>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<jupyter_output><empty_output><jupyter_text>Memanggil API Covid19Rekapitulasi 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.<jupyter_code>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())<jupyter_output>country          last_update    cases  deaths  recovered
0      US  2020-08-16T23:27:50  5401167  170019    1833067
1      BR  2020-08-16T23:27:50  3340197  107852    2655017
2      IN  2020-08-16T23:27:50  2589682   49980    1862258
3      RU  2020-08-16T23:27:50   920719   15653     731444
4      ZA  2020-08-16T23:27:50   587345   11839     472377<jupyter_text>Merubah Format dateUbah 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.&nbsp;&nbsp;<jupyter_code>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())<jupyter_output><empty_output><jupyter_text>Mengambil Data CountriesBuatlah dataframe countries 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.Akhirnya cetaklah lima data teratas dari dataframe countries (df_countries).&nbsp;&nbsp;<jupyter_code>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())<jupyter_output>name country
0  Afghanistan      AF
1      Albania      AL
2      Algeria      DZ
3      Andorra      AD
4       Angola      AO<jupyter_text>Merge Covid19 Data dan CountriesSelanjutnya adalah mapping data covid19 dan data country. Gunakan fungsi merge pada pandas untuk menggabungkan df_covid_worldwide dan df_countries. Untuk merge, gunakan kolom country. Lalu print sample data dengan menggunakan head().&nbsp;&nbsp;<jupyter_code>df_covid_denormalized = pd.merge(df_covid_worldwide, df_countries, on='country')

print(df_covid_denormalized.head())<jupyter_output>country last_update    cases  deaths  recovered                      name
0      US  2020-08-16  5401167  170019    1833067  United States of America
1      BR  2020-08-16  3340197  107852    2655017                    Brazil
2      IN  2020-08-16  2589682   49980    1862258                     India
3      RU  2020-08-16   920719   15653     731444        Russian Federation
4      ZA  2020-08-16   587345   11839     472377              South Africa<jupyter_text>Menghitung Fatality RatioTambahkan satu kolom tambahan yaitu fatality_ratio, yang merupakan pembagian antara kolom deaths dan cases.&nbsp;&nbsp;<jupyter_code>df_covid_denormalized['fatality_ratio'] = df_covid_denormalized['deaths'] / df_covid_denormalized['cases']<jupyter_output><empty_output><jupyter_text>Negara-negara dengan Fatality Ratio TertinggiAmbil top 20 negara dengan value kolom fatality_ratio tertinggi dengan menggunakan fungsi sort_values.&nbsp;&nbsp;<jupyter_code>df_top_20_fatality_rate = df_covid_denormalized.sort_values(by='fatality_ratio', ascending=False).head(20)<jupyter_output><empty_output><jupyter_text>Import Library VisualisasiImportlah library matplotlib.pyplot sebagai aliasnya plt.&nbsp;&nbsp;<jupyter_code>import matplotlib.pyplot as plt<jupyter_output><empty_output><jupyter_text>Visualisasi Negara dengan Fatality Ratio TertinggiUntuk memvisualisasikan negara-negara dengan kasus fatality rate tertinggi akibat covid-19 ini dapat dilakukan dengan menggunakan bar chart.&nbsp; Di sini tentukan terlebih dahulu isi dari variable x axis dan y axis.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.&nbsp;&nbsp;<jupyter_code>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()<jupyter_output><empty_output><jupyter_text>Menggabungkan DataframeSelanjutnya adalah membandingkan kasus covid19 di Indonesia (ID) dengan negara-negara tetangga, yaitu:MY -&gt; Malaysia,SG -&gt; Singapure,TH -&gt; Thailand,VN -&gt; Vietnam.Untuk itu, api country dipanggil berkali-kali sebanyak negara yang akan kita bandingkan.Gunakan fungsi pd.io.json.json_normalize dan panggil function yang sudah dibuat sebelumnya, yaitu get_json().Gunakan fungsi datetime untuk merubah string ke bentuk datetime (YYYY-mm-dd HH:MM:SS) yang selanjutnya diubah ke format date.Cetaklah lima data teratas dari dataframe yang telah dibentuk.&nbsp;&nbsp;<jupyter_code>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())<jupyter_output>/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:5: FutureWarning: pandas.io.json.json_normalize is deprecated, use pandas.json_normalize instead
  """<jupyter_text>Merge Data Covid19 Dengan Data CountryLalu gabungkan df_covid_timeline_merged dengan df_countries dengan kolom country sebagai pivot.&nbsp;&nbsp;<jupyter_code>df_covid_timeline_denormalized = pd.merge(df_covid_timeline_merged, df_countries, on='country')<jupyter_output><empty_output><jupyter_text>Kasus Covid-19 di ASEAN pada Bulan Maret 2020Filter 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.&nbsp;&nbsp;<jupyter_code>import datetime
df_covid_timeline_denormalized = df_covid_timeline_denormalized[(df_covid_timeline_denormalized['last_update'] >= datetime.date(2020, 3, 1))]<jupyter_output><empty_output><jupyter_text>Visualisasi Kasus Covid-19 di ASEANBuat variable x dan y dimana x adalah tanggal (last_update) pada tiap-tiap negara dan y adalah jumlah kasus (cases) pada tiap-tiap negara. Lalu plot x dan y untuk menggambar line chart.&nbsp;&nbsp;<jupyter_code>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()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08632936291115725, 'fraction_numerical': 0.045787345645284666, 'mean_word_length': 5.991596638655462, 'pattern_counts': {'":': 0, '<': 53, '<?xml version=': 0, '>': 54, 'https://': 5, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '14', 'dir': 'jupyter-structured-clean-dedup', 'id': '475906', 'license': 'Apache-2.0', 'n_tokens_mistral': 3680, 'n_tokens_neox': 3294, 'n_words': 766, 'path': 'Analisis_Data_COVID19_di_Dunia_&_ASEAN.ipynb', 'repo_name': 'script000kiddies000/data-sience-with-python', 'size': '9151'}