Anggri Yulio P
Web Developer, sekarang mulai jatuh hati pada Computer Vision.
February 6, 2020 8:40 pm

Python: Manipulation & Cleaning Data Source

Terkadang data yang kita dapatkan mempunyai pola yang acak atau tidak beraturan, sebelum melakukan pengolahan lebih lanjut maka harus dilakukan pembersihan data agar mempermudah dalam proses pengolahan nantinya. Pada artikel ini saya akan mencontohkan bagaimana melakukan pembersihan data dengan python.

Kasus :

Terdapat lebih dari 29000 data fasilitas kesehatan BPJS yang diambil melalui scraping pada situs web lovia.life. Data tersebut berupa alamat, nama faskes, latitude, longitude jenis faskes serta nomor telepon faskes tersebut.

Prerequisite:

  1. Data mentah yang dapat diunduh melalui kaggle.com (diunggah oleh Isra Nurul Habibi)
  2. Libary Pandas
  3. Library Numpy

 

Hal pertama yang harus dilakukan adalah melihat struktur data, berikut adalah contoh beberapa row data didalamnya.

NoLink Provinsi KotaKab Link TipeFaskes No KodeFaskes NamaFaskes LatLongFaskes AlamatFaskes TelpFaskes
0 0 Nanggroe Aceh Darussalam Kode Faskes dan Alamat Rumah Sakit BPJS di Kot… https://lovia.life/id/health/bpjs/area/kota-la… Rumah Sakit 1 0001R001 RSU Cut Nyak Dhien\r\n \r\n… http://maps.google.co.id/?q=4.488058,97.947963 Jl. Tm Bahrum No. 1 Langsa \r\n 0641-0621039\r\n
1 0 Nanggroe Aceh Darussalam Kode Faskes dan Alamat Rumah Sakit BPJS di Kot… https://lovia.life/id/health/bpjs/area/kota-la… Rumah Sakit 2 0001R004 RSU Cut Meutia Langsa\r\n \… http://maps.google.co.id/?q=4.488088,97.947781 Jl.Garuda Kebun Baru Langsa \r\n 0641- 4840076\r\n
2 0 Nanggroe Aceh Darussalam Kode Faskes dan Alamat Rumah Sakit BPJS di Kot… https://lovia.life/id/health/bpjs/area/kota-la… Rumah Sakit 3 0105R001 RSUD Langsa\r\n \r\n … http://maps.google.co.id/?q=4.472208,97.975533 Jln.A.Yani No. 1 Langsa \r\n 0641-22051\r\n
3 0 Nanggroe Aceh Darussalam Kode Faskes dan Alamat Rumah Sakit BPJS di Kot… https://lovia.life/id/health/bpjs/area/kota-la… Rumah Sakit 4 0105R013 RSU Ummi \r\n \r\n … http://maps.google.co.id/?q=4.470376,97.991915 Jln. Prof. A. Madjid Ibrahim \r\n 0641-22886\r\n
4 0 Nanggroe Aceh Darussalam Kode Faskes dan Alamat Rumah Sakit BPJS di Kot… https://lovia.life/id/health/bpjs/area/kota-la… Puskesmas 1 00010001 Langsa Lama\r\n \r\n … http://maps.google.co.id/?q=4.478172,97.949988 Gampong Meurandeh Dayah \r\n 0641-064121218\r\n
29152 513 Kalimantan Utara Kode Faskes dan Alamat Rumah Sakit BPJS di\r\n… https://lovia.life/id/health/bpjs/area/kab-tan… Dokter Praktik Perorangan
29153 513 Kalimantan Utara Kode Faskes dan Alamat Rumah Sakit BPJS di\r\n… https://lovia.life/id/health/bpjs/area/kab-tan… Dokter Gigi
29154 513 Kalimantan Utara Kode Faskes dan Alamat Rumah Sakit BPJS di\r\n… https://lovia.life/id/health/bpjs/area/kab-tan… Klinik Utama
29155 513 Kalimantan Utara Kode Faskes dan Alamat Rumah Sakit BPJS di\r\n… https://lovia.life/id/health/bpjs/area/kab-tan… Klinik Pratama 1 0472B001 RSUD Akhmad Berahim \r\n \r… Jl. Perintis Km I \r\n 0813-86928242\r\n
29156 513 Kalimantan Utara Kode Faskes dan Alamat Rumah Sakit BPJS di\r\n… https://lovia.life/id/health/bpjs/area/kab-tan… Apotek

Dari data diatas, berikut beberapa permasalahan yang ditemukan serta solusi permasalahan tersebut:

1. Adanya karakter \r \n

Karakter tersebut merupakan perintah untuk menambahkan baris baru pada teks. Untuk menghilangkan karakter tersebut dengan python menggunakan perintah:

2. Kabupaten/Kota Faskes

Jika diperhatikan pada kolom KotaKab penulisan nama Kota/Kabupaten perlu kita manipulasi karena adanya tambahan kata di awal nama kota yang sebenarnya tidak diperlukan. Contoh Kode Faskes dan Alamat Rumah Sakit BPJS di Kota Padang yang seharusnya cukup dengan nama Kota Padang saja.

2. Lokasi Faskes berupa URL

Untuk mempermudah pengolahan data, sebaiknya kita memparsing latitude dan longitude dari URL pada kolom LatLongFaskes. Langkah pertama adalah mendapatkan potongan latitude dan longitude, ada banyak cara yang bisa digunakan. Disini untuk menemukan potongan tersebut menggunakan pola regex (regular rexpression). Lalu memecah potongan koordinate menjadi latitude dan longitude dengan fungsi split() serta menambahkan kolom latitude dan longitude pada dataframe.

3. Mengubah format data yang kosong

Data yang tidak mempunyai nilai ditandai beragam, seperti tanda (-) atau null. Disini data tersebut saya seragamkan dengan nilai NaN

Setelah dirasa cukup, selanjutnya simpan kembali data yang sudah dibersihkan ke dalam bentuk CSV.

Sekarang data tersebut sudah mempunyai struktur yang lebih baik, berikut beberapa contoh hasilnya:

NoLink Provinsi KotaKab Link TipeFaskes No KodeFaskes NamaFaskes LatLongFaskes AlamatFaskes TelpFaskes Latitude Longitude
0 0 Nanggroe Aceh Darussalam Kota Langsa https://lovia.life/id/health/bpjs/area/kota-la… Rumah Sakit 1 0001R001 RSU Cut Nyak Dhien 4.488058,97.947963 Jl. Tm Bahrum No. 1 Langsa 0641-0621039 4.488058 97.947963
1 0 Nanggroe Aceh Darussalam Kota Langsa https://lovia.life/id/health/bpjs/area/kota-la… Rumah Sakit 2 0001R004 RSU Cut Meutia Langsa 4.488088,97.947781 Jl.Garuda Kebun Baru Langsa 0641- 4840076 4.488088 97.947781
2 0 Nanggroe Aceh Darussalam Kota Langsa https://lovia.life/id/health/bpjs/area/kota-la… Rumah Sakit 3 0105R001 RSUD Langsa 4.472208,97.975533 Jln.A.Yani No. 1 Langsa 0641-22051 4.472208 97.975533
3 0 Nanggroe Aceh Darussalam Kota Langsa https://lovia.life/id/health/bpjs/area/kota-la… Rumah Sakit 4 0105R013 RSU Ummi 4.470376,97.991915 Jln. Prof. A. Madjid Ibrahim 0641-22886 4.470376 97.991915
4 0 Nanggroe Aceh Darussalam Kota Langsa https://lovia.life/id/health/bpjs/area/kota-la… Puskesmas 1 00010001 Langsa Lama 4.478172,97.949988 Gampong Meurandeh Dayah 0641-064121218 4.478172 97.949988
29152 513 Kalimantan Utara Kab. Tana Tidung https://lovia.life/id/health/bpjs/area/kab-tan… Dokter Praktik Perorangan nan nan nan nan nan nan nan nan
29153 513 Kalimantan Utara Kab. Tana Tidung https://lovia.life/id/health/bpjs/area/kab-tan… Dokter Gigi nan nan nan nan nan nan nan nan
29154 513 Kalimantan Utara Kab. Tana Tidung https://lovia.life/id/health/bpjs/area/kab-tan… Klinik Utama nan nan nan nan nan nan nan nan
29155 513 Kalimantan Utara Kab. Tana Tidung https://lovia.life/id/health/bpjs/area/kab-tan… Klinik Pratama 1 0472B001 RSUD Akhmad Berahim nan Jl. Perintis Km I 0813-86928242 nan nan
29156 513 Kalimantan Utara Kab. Tana Tidung https://lovia.life/id/health/bpjs/area/kab-tan… Apotek nan nan nan nan nan nan nan nan