
Simulasi random sampling perolehan suara pilpres 2019
Pilpres 2019 sudah usai. KPU sudah menetapkan pemenang. Waktunya tiba untuk dapat bereksperimen dengan data hasil pemilu tanpa perlu khawatir dituduh berpihak ke salah satu pasangan calon. Artikel ini mencontohkan cara melakukan random sampling perolehan suara kandidat pilpres 2019 dengan menggunakan data perolehan suara pada TPS yang dipilih secara acak.
Sumber data
Lantas datanya dari mana? Setidaknya ada dua sumber data yang bisa diakses publik dengan coverage TPS memadai. Pertama tentu situs resmi KPU, kedua adalah dari situs kawalpemilu. Setelah sedikit mengintip bagaimana data disajikan ke publik, Alza lebih memilih menggunakan data dari situs kawalpemilu karena dapat diakses via API dan dihost pada Google Cloud, sehingga pengambilan data jadi lebih sederhana dan reliable.
API kawalpemilu dapat diakses pada alamat https://kawal-c1.appspot.com/api/. Setiap request perlu dilengkapi dengan titik/node yang ingin diperiksa. Struktur data yang digunakan oleh kawalpemilu adalah struktur data tree dengan kedalaman hingga 5 tingkat untuk TPS dalam negeri.
Lihat data (JSON) yang menjadi output beberapa link berikut untuk lebih memahami struktur data yang dimaksud sebelumnya. Contoh yang dipilih adalah pada TPS no 24 di kelurahan Selong, kecamatan Selong, kabupaten Lombok Timur, provinsi NTB.
- Data rekapitulasi nasional pada node 0: https://kawal-c1.appspot.com/api/c/0
- Data rekapitulasi provinsi NTB pada node 54020: https://kawal-c1.appspot.com/api/c/54020
- Data rekapitulasi kabupaten Lombok Timur pada node 54260: https://kawal-c1.appspot.com/api/c/54260
- Data rekapitulasi kecamatan Selong pada node 54302: https://kawal-c1.appspot.com/api/c/54302
- Data rekapitulasi kelurahan Selong pada node 54304: https://kawal-c1.appspot.com/api/c/54304, sekaligus detail data pada tiap TPS termasuk TPS No. 24
Kode Program
Kode program untuk mengambil data TPS secara acak
Untuk mengambil data kita dapat menggunakan requests library. Untuk menghasilkan pilihan tps yang acak, pilihan node untuk tiap jenjang diacak dengan memanfaatkan modul random. Ini berarti untuk pengambilan satu tps, lokasinya dipilih secara acak mulai dari level provinsi hingga TPS tertentu.
Berikut adalah kodenya, jalankan berulang-ulang untuk melihat contoh pengambilan sampel TPS secara acak
Kode program untuk mengambil data sebanyak n kali
Kode sebelumnya mengambil hanya satu sampel TPS. Jika ingin mengambil sampel lebih dari itu, contoh kodenya dapat dilihat di bawah ini. Perhatikan variabel sample_size pada baris pertama yang merepresentasikan jumlah sampel yang harus diambil
sample_size = 100 sample_cnt = 0 samples = [] while sample_cnt < sample_size: rslt = getRandomTPSElectionData() if rslt: sample_cnt += 1 samples.append(rslt) print('sample # {}: {}'.format(sample_cnt,rslt[0]))
Kode program untuk menampilkan hasilnya
Setelah sampel diambil sejumlah yang diinginkan, maka langkah selanjutnya adalah mencetak hasilnya. Berikut adalah kode yang dibutuhkan untuk keperluan tersebut.
Catatan: baris pertama dan kedua menggunakan list comprehension, yang dapat dipelajari pada artikel ini.
pas01 = sum([tps[1] for tps in samples]) pas02 = sum([tps[2] for tps in samples]) tdk_sah = sum([tps[3] for tps in samples]) total = pas01 + pas02 pas01pct = round(pas01 / total * 100, 2) pas02pct = round(pas02 / total * 100, 2) print('Perolehan suara dari sampel {} tps'.format(sample_cnt)) print('Pasangan 01 {} / {}% suara'.format(pas01,pas01pct)) print('Pasangan 02 {} / {}% suara'.format(pas02,pas02pct)) print('Total suara={}, suara tidak sah={}'.format(total,tdk_sah))
Kode lengkap
Jika disatukan, maka kode untuk melakukan random sampling dari n TPS dari seluruh Indonesia dapat dilihat di bawah ini. Silahkan bereksperimen dengan jumlah sampel kecil (< 50) hingga sampel dalam jumlah besar (>500).
Ekstra, visualisasi grafis
Data yang dihasilkan dari kode di atas akan semakin menarik jika ditampilkan secara visual, seperti pada ilustrasi pada awal artikel. Kode untuk menghasilkan visualisasi tersebut dapat di akses pada alamat berikut: https://colab.research.google.com/drive/1QTc3rPrOz77q89aZbezCx56aZ4HWBzMG
Sekian, semoga bermanfaat
Salam