Mudahnya Mengakses Data melalui WebAPI BPS
Badan Pusat Statistik (BPS) adalah lembaga resmi di Indonesia yang menyediakan berbagai jenis data statistik bagi pemerintah, swasta maupun pihak lainnya. Dengan status tersebut, BPS tentunya memiliki koleksi data yang sangat kaya serta menyediakan akses bagi pengguna untuk mendapatkan data tersebut. Berbagai upaya dilakukan oleh BPS untuk semakin memudahkan setiap pengguna data termasuk dengan memanfaatkan teknologi informasi.
Mungkin belum banyak yang tahu, bahwa sudah beberapa tahun terakhir, BPS melalui Bagian Layanan dan Promosi Statistik menyediakan akses layanan data melalui Web API. Layanan ini tentu saja sangat memudahkan pengguna data sehingga dapat mengurangi prosedur manual yang memakan waktu. Terlebih bagi siapapun yang memiliki basic pemahaman bahasa pemrograman, entah itu python, R atau lainnya maka proses ini tentu mejadi semakin mudah.
Mendaftar WebAPI BPS
Untuk dapat menggunakannya siapapun dapat mendaftar pada alamat https://webapi.bps.go.id. Prosesnya juga sangat mudah, cukup memasukkan alamat email selanjutnya akan mendapatkan link aktivasi yang dikirimkan ke alamat email tersebut. Jika sudah mendaftar dan melakukan aktivasi maka sudah bisa menikmati.
Setiap permintaan data melalui WebAPI ini memerlukan suatu API Key. Untuk mendapatkan API key tersebut dapat dilakukan melalui menu Profile – Applications – Add Application.
Melalui layanan ini, kita dapat mengkases berbagai produk BPS untuk berbagai subjek data, termasuk tabel dinamis, tabel statis, data sensus, publikasi, BRS, indikator strategis hingga infografis.
Informasi yang diperlukan untuk membuat aplikasi yaitu nama aplikasi, URL, jenis aplikasi serta informasi tambahan lainnya. Kemudian klik tombol Generate Key. Setelah selesai, daftar aplikasi yang telah dibuat akan muncul pada bagian Applications. API key terletak pada kolom App ID dan nantinya akan diperlukan setiap mengakses API.
Menambah Aplikasi pada WebAPI BPS
Tampilan Daftar Aplikasi
Dokumentasi WebAPI BPS (Contoh Data Ekspor Impor)
WebAPI BPS menyediakan dokumentasi yang sangat lengkap dan jelas. Dokumentasi ini dapat diakses melalui menu Docs (bagian kanan atas). Agar lebih jelas mengenai format url dari endpoint setiap API, kita dapat mencoba terlebih dahulu dengan klik pada tombol Try It! yang terdapat pada setiap penjelasan masing-masing API.
Contoh di bawah merupakan contoh endpoint untuk mengakses data foreign trade atau ekspor impor.
Contoh Dokumentasi WebAPI
Contoh Response WebAPI
Try It!
Mengakses WebAPI BPS Menggunakan Python
Pada bagian ini, kita akan mencoba untuk menarik data ekspor dan impor. Jika ingin mencoba API lainnya silahkan di eksplore terlebih dahulu pada menu Docs. Selanjutnya dapat mengikuti sintaks-sintaks di bawah ini tentunya dengan penyesuaian terhadap API yang digunakan.
Untuk melanjutkan proses ini diperlukan library requests
dan pandas
. Library requests
digunakan untuk berkomunikasi dengan API, sementara library pandas
nantinya akan digunakan untuk mengolah data hasil API.
Python
#!pip install pandas requests # memuat library yang diperlukan import requests import pandas as pd # API ENDPOINT untuk foreign trade data # Silahkan sesuaikan untuk ENDPOINT lainnya base_url = "https://webapi.bps.go.id/v1/api/dataexim" # app ID api_key = "THIS_IS_YOUR_API_KEY"
Format API Endpoint untuk data ekspor impor:
Python
# Format Lengkap API ENDPOINT untuk data ekspor impor https://webapi.bps.go.id/v1/api/dataexim/sumber/{sumber}/kodehs/{kodehs}/jenishs/{jenishs}/tahun/{tahun}/periode/{periode}/key/{key} # Format Lengkap API ENDPOINT untuk data ekspor impor
Python
# membuat fungsi untuk memudahkan API call def get_data_exim(sumber, kodehs, jenishs, tahun, periode, key): full_url = f"{base_url}/sumber/{sumber}" + \ f"/kodehs/{kodehs}/jenishs/{jenishs}" + \ f"/tahun/{tahun}/periode/{periode}/key/{key}" response = requests.get(full_url) data_resp = response.json() return data_resp
Contoh API Call 1
Mengakses data ekspor Indonesia tahun 2022 dalam periode tahunan untuk kode HS 01 dan 02 dan diagregasi dalam 2 digit:
Python
# testing 1 sumber = "1" # ekspor kodehs = "01;02" # HS 01, 02 jenishs = "1" # 2 digit HS Kode untuk (01, 02) tahun = "2022" periode = "2" # tahunan key = api_key # memanggil fungsi response = get_data_exim(sumber, kodehs, jenishs, tahun, periode, key) print(response["metadata"])
Output
{ 'source': 'Sumber : https://www.bps.go.id diakses pada 01-06-2023 23:33:33 WIB', 'value': 'Nilai Ekspor/Impor dalam US Dollar ($)', 'netweight': 'Berat Ekspor/Impor dalam Kilogram (KG)', 'kodehs': 'Kode dan Deskripsi dari HS', 'pod': 'Pelabuhan Masuk/Keluar di Indonesia', 'ctr': 'Negara Asal/Tujuan', 'tahun': 'Tahun Data' }
Selanjutnya untuk mengambil bagian response yang berisi data-data (sesuai dokumentasi API yaitu disimpan dengan key
-> "data"
).
Dari hasil pemanggilan API kita peroleh sebanyak 104 data. Dapat dilihat bahwa output yang diberikan sesuai dengan apa yang kita harapkan, yaitu data tahunan 2022 serta kode HS 2 digit 01 dan 02. Informasi yang diberikan cukup lengkap meliputi nilai ekspor (value
) , berat bersih (netweight
), kodehs
, pelabuhan muat (pod)
, negara tujuan (ctr
) dan tahun
.
Python
# mengambil data-data list_data = response["data"] print(f"Jumlah data pada response : {len(data)}\n") for dt in list_data: print(dt)
Output
Output yang dihasilkan di atas masih tersimpan dalam format JSON atau dalam python (tipe data dict
). Pada contoh selanjutnya kita akan menggunakan pandas
untuk memodifikasi output yang ada mmenjadi lebih rapi dan siap digunakan untuk pengolahan lebih lanjut.
Contoh API Call 2
Pada bagian ini, kita akan menarik data ekspor pada tahun 2022. Kode HS yang diambil adalah kode 01,02, sampai dengan 10. Selain itu data yang diambil adalah data rinci berdasarkan kode HS lengkap (bukan 2 digit) dan periode bulanan.
Jika sebelumnya data masih tersimpan dalam format JSON (tipe dict
) maka dapat kita konversi menjadi format DataFrame
menggunakan fungsi json_normalize
pada library pandas
.
Python
# testing 2 sumber = "1" # ekspor # kode has (01;02;...;10) kodehs = ';'.join([f"0{i}" if i < 10 else str(i) for i in range(1, 11)]) jenishs = "2" # Full digit HS Kode untuk (01**, 02**, dst) tahun = "2022" periode = "1" # bulanan key = api_key response_all = get_data_exim(sumber, kodehs, jenishs, tahun, periode, key) response_data = response_all["data"] # mengubah format json (dict) menjadi dataframe df_data = pd.json_normalize(response_data) df_data
Output
Output yang dihasilkan sudah lebih baik. Kode HS yang diberikan merupakan kode detail (bukan 2 digit saja) serta dalam periode bulanan.
Jika diperhatikan pada kolom kodehs
dan bulan
masih bercampur antara kode dan deskripsi. Oleh karena itu akan kita partisi dengan mengambil bagian-bagian yan sesuai untuk kode dan deskripsi. Hal ini dapat diperbaiki dengan mengubah text terkait menggunakan method str
.
Untuk lebih rapi lagi, kita juga dapat mengurutkan ulang kolom-kolom agar lebih mudah dipahami.
Python
# slicing untuk mendapatkan deskripsi HS df_data["deskhs"] = df_data["kodehs"].str[10:] # update kolom kodehs sehingga hanya berisi kode saja df_data["kodehs"] = df_data["kodehs"].str[1:9] # ambil nilai bulan 01-10 tanpa nama bulan df_data["bulan"] = df_data["bulan"].str[1:3] # mengatur ulang urutan kolom df_data = df_data[["kodehs", "deskhs", "tahun", "bulan", "pod", "ctr", "value", "netweight"]] df_data
Output
Sekarang kita sudah menghasilkan format data yang lebih rapi. Untuk pengolahan lebih lanjut data dapat disimpan ke dalam format CSV ataupun format lainnya.
Python
# menyimpan ke dalam format csv df_data.to_csv("ekspor_2022_hs_01-10.csv", index=False) # untuk menyimpa ke dalam Ms. Excel perlu tambahan library openpyxl #!pip install openpyxl df_data.to_excel("ekspor_2022_hs_01-10.xlsx", sheet_name="ekspor_2022")
Demikianlah tutorial singkat bagaimana memanfaatkan WebAPI BPS untuk memperoleh berbagai data yang tersedia. Silahkan rekan-rekan mencoba untuk data-data lainnya.
Jika ada pertanyaan mengenai lebih lanjut, dapat menghubungi bagian yang bertanggung jawab di BPS
Gedung 2 Lantai 3.
Subdirektorat Layanan dan Promosi Statistik. Badan Pusat Statistik.
Jl. Dr. Sutomo 6-8 Jakarta 10710 Indonesia