Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TPS data #2

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

TPS data #2

wants to merge 1 commit into from

Conversation

fajran
Copy link

@fajran fajran commented Jul 12, 2014

If I look at db/data file, it seems to me that the TPS data is still incomplete. Yesterday I scraped KPU website to get all locations (provinsi, kabupaten, kecamatan, kelurahan) and the number of TPS in each location.

Btw, I also found entries in TPS table which have the following kelurahan_id: NG 0087

@fikriauliya
Copy link
Owner

Can help to convert into this format?
('#{desa}', '#{kelurahan_id}' , '#{tps_id}')
I got the data from digger-soft.com/pemiluc1/csv2.php (which unfortunately incomplete). The parsing is in db/seeds.rb

@fajran
Copy link
Author

fajran commented Jul 12, 2014

Ngomong2, kalau saya coba jalankan seeds.rb, saya mendapatkan duplikasi di tps_id

('NAGASARIBU I', '0011148' , '4')
('NAGASARIBU I', '0011148' , '4')
('NAGASARIBU I', '0011148' , '4')
('NAGASARIBU I', '0011148' , '4')
('LIMBUR BARU', '0017125' , '3')
('LIMBUR BARU', '0017125' , '3')
('LIMBUR BARU', '0017125' , '3')
('GLEUNG', '0001574' , '1')
.. dst ..

apakah itu yang diharapkan?

@fajran
Copy link
Author

fajran commented Jul 12, 2014

Oya, saya bersedia membantu membersihkan data TPS. Tapi saya perlu tahu dulu seperti apa data yang ada di dalam tabel tps saat ini. Apakah masih sama dg hasil dari menjalankan rake db:seed?

@SeiryuZ
Copy link
Collaborator

SeiryuZ commented Jul 12, 2014

Hi Fajran, Saya juga sedang ngutak ngatik data TPS yang lebih komplit. Saya ikut nimbrung disini ya, mungkin saya bisa bantu

@rulimanurung
Copy link

Hi fajran -- saya dan SeiryuZ tadi lagi ngubek2 database TPS juga dan diskusi di forum lain. Kita pindah sini ya :-)

@fajran
Copy link
Author

fajran commented Jul 12, 2014

wah asik ada yang ngoprek data TPS juga :D

Andaikan isi tps_id itu selalu sama untuk setiap kelurahan yang ada, berarti cuma 1 TPS dari 1 kelurahan yang akan ditampilkan form-nya. TPS sisanya tidak akan pernah ditampilkan. Selain itu, berarti ada beberapa entries di tabel tps yang sebenarnya merujuk ke TPS yang sama.

@rulimanurung
Copy link

Iya, saya agak khawatir di tabel crowd_inputs itu hanya ada field tps_id. Menurut saya harusnya itu composite kel_id + tps_id (dengan asumsi tps_id itu hanya 1, 2, 3, dst., sejumlah TPS di kelurahan tersebut).

@fajran
Copy link
Author

fajran commented Jul 12, 2014

kalau ngelihat tabel database setelah menjalankan rake db:seed itu, isi tps_id itu selalu sama untuk masing2 kelurahan.

tps_id di tabel crowd_inputs kayanya akan menunjuk ke primary key id di tabel tps (tadi sekilas baca ini konvensi di RoR tuk bikin foreign key). Jadi tuk relasi antara crowd_input dan tps kayanya gak ada masalah.

@SeiryuZ
Copy link
Collaborator

SeiryuZ commented Jul 12, 2014

Ngomong2, kalau saya coba jalankan seeds.rb, saya mendapatkan duplikasi di tps_id

('NAGASARIBU I', '0011148' , '4')
('NAGASARIBU I', '0011148' , '4')
('NAGASARIBU I', '0011148' , '4')
('NAGASARIBU I', '0011148' , '4')
('LIMBUR BARU', '0017125' , '3')
('LIMBUR BARU', '0017125' , '3')
('LIMBUR BARU', '0017125' , '3')
('GLEUNG', '0001574' , '1')
.. dst ..

apakah itu yang diharapkan?

Untuk yang ini saya ngerasanya script nya salah, karena di file ini dia selalu import column 60-63 untuk tps_id

SQL statement yang dihasilkan bakalan duplicate. Mestinya

('LIMBUR BARU', '0017125' , '1')
('LIMBUR BARU', '0017125' , '2')
('LIMBUR BARU', '0017125' , '3')

@fajran
Copy link
Author

fajran commented Jul 12, 2014

Nah kolom 60-63 itu sama semua nilainya bukan tuk tiap kelurahan?

 1 2014-07-10 19:55:30 NAGASARIBU I              0011148   4  40 241   0                      - Lembar C1
 2 2014-07-10 19:55:30 NAGASARIBU I              0011148   4   7 285   1                      - Lembar C1
 3 2014-07-10 19:55:30 NAGASARIBU I              0011148   4  18 296   2                      - Lembar C1
 4 2014-07-10 19:55:30 NAGASARIBU I              0011148   4   0  88   0                      - Lembar C1
 5 2014-07-10 20:14:44 LIMBUR BARU               0017125   3 260  48  10                      - Lembar C1
 6 2014-07-10 20:14:44 LIMBUR BARU               0017125   3 256  37   2                      - Lembar C1
 7 2014-07-10 20:14:44 LIMBUR BARU               0017125   3 300  51   1                      - Lembar C1
 8 2014-07-10 20:15:16 GLEUNG                    0001574   1 116  93   8                      - Lembar C1
                                                        ^^^^

@SeiryuZ
Copy link
Collaborator

SeiryuZ commented Jul 12, 2014

Iah betul, saya juga tadi import masuk banyak yang duplicate.

@rulimanurung
Copy link

Hmm, ini data yang diperoleh dari http://digger-soft.com/pemiluc1/csv2.php -- menurut saya kurang valid deh. Harusnya kita ambil langsung dari API open data dapil.kpu.go.id dan tps.kpu.go.id.

Sepertinya justru nama file JPG-nya bisa jadi kunci untuk memperbaikinya. Tapi saya mau tanya dulu tps_id yang di tabel crowd_inputs itu apa ya? Auto-increment?

@SeiryuZ
Copy link
Collaborator

SeiryuZ commented Jul 12, 2014

betul

crowd_inputs.tps_id ===Foreign Key ===> Tps.id (auto increment)

@fajran
Copy link
Author

fajran commented Jul 12, 2014

tps_id di crowds_input itu FK ke id di tabel tps yang auto increment.

Saya kemarin nyedot website pilpres2014 tuk ngambil daftar semua kelurahan dan jumlah TPS yang ada di dalamnya. Datanya saya lampirkan di pull request saya ini fajran@84d4370 Mudah2an aja nomor TPS selalu berurut ngga ada yang loncat :D

@rulimanurung
Copy link

Ini bahaya ya kalau ada kel_id + tps_id yang duplicate...

Pertanyaan berikutnya: info filename JPG ada di mana di database?

@fajran
Copy link
Author

fajran commented Jul 12, 2014

file JPG digenerate dari kelurahan_id + tps_id

@SeiryuZ
Copy link
Collaborator

SeiryuZ commented Jul 12, 2014

Di line ini, Link JPG nya di generate https://github.com/fikriauliya/realcount/blob/master/app/models/tps.rb#L3

@fajran
Copy link
Author

fajran commented Jul 12, 2014

Bahanya itu berupa banyak TPS yang tidak akan ditampilkan formulirnya dan jumlah TPS yang ditampilkan itu salah.

@fajran
Copy link
Author

fajran commented Jul 12, 2014

Data yang sudah masuk bisa dikombinasikan sebagai bentuk "second opinion"

@rulimanurung
Copy link

I see. OK thanks.

Kalau kita mau update database dengan yang lengkap dari fajran, sementara tps_id di crowd_inputs itu auto_increment, piye?

@fajran
Copy link
Author

fajran commented Jul 12, 2014

Auto increment gak masalah. Gabung aja data yang terduplikasi dan masukin
data yang belum ada

Fajran Iman Rusadi-
http://fajran.web.id https://github.com/fajran
On 12 Jul 2014 18:08, "rulimanurung" [email protected] wrote:

I see. OK thanks.

Kalau kita mau update database dengan yang lengkap dari fajran, sementara
tps_id di crowd_inputs itu auto_increment, piye?


Reply to this email directly or view it on GitHub
#2 (comment).

@rulimanurung
Copy link

OK. BTW di komentar https://www.facebook.com/ruli.manurung/posts/10152249540131279 ini ada yang melaporkan total jendralnya agak aneh...

@SeiryuZ
Copy link
Collaborator

SeiryuZ commented Jul 12, 2014

Fajran, dari data yang di Pull request ini https://raw.githubusercontent.com/fajran/realcount/location-data/db/lokasi.csv

datanya kan ini masih dalam tree-like structure yah (i.e, row 1 itu "nasional", row 2 itu "aceh" yang merupakan subset dari row 1 di signify dengan column parent ke row 1).

Kita kayaknya harus convert ini jadi leaf-node only deh, karena yang di masukkan ke table tps cuman level TPS nya, tidak sampai level parentnya.

@fajran
Copy link
Author

fajran commented Jul 12, 2014

Leaf node tinggal cari yg level == 4 hehe

Fajran Iman Rusadi-
http://fajran.web.id https://github.com/fajran
On 12 Jul 2014 18:14, "Steven" [email protected] wrote:

Fajran, dari data yang di Pull request ini
https://raw.githubusercontent.com/fajran/realcount/location-data/db/lokasi.csv

datanya kan ini masih dalam tree-like structure yah (i.e, row 1 itu
"nasional", row 2 itu aceh yang merupakan subset dari row 1 di signify
dengan column parent ke row 1).

Kita kayaknya harus convert ini jadi leaf-node only deh, karena yang di
masukkan ke table tps cuman level TPS nya, tidak sampai level parentnya.


Reply to this email directly or view it on GitHub
#2 (comment).

@rulimanurung
Copy link

SeiryuZ bisa update tabelnya malam ini nggak? Animo lagi gede banget soalnya, dan kelihatannya semua user ternyata selama ini hanya mengedit TPS yang itu-itu juga untuk setiap kelurahan :-(

@SeiryuZ
Copy link
Collaborator

SeiryuZ commented Jul 12, 2014

@fajran Ok sip, kalo gitu saya coba bersihin .csv nya dulu yah

@rulimanurung Ga bisa langsung saya update yang di server. Saya ga ada credentials untuk langsung do live update ke server

@rulimanurung
Copy link

BTW, bisa hitung unique count kel_id yang ada sekarang? Artinya itu adalah jumlah TPS yang sekarang para crowdsourcer bisa edit ya...

@rulimanurung
Copy link

Sebaiknya tps_id yang auto_increment itu nggak pernah di-expose ke user ya. Sekarang masih ditunjukkan di http://realcount.herokuapp.com/crowd_inputs

@rulimanurung
Copy link

Menarik. Setelah saya perhatikan https://raw.githubusercontent.com/fikriauliya/realcount/master/db/data kelihatannya TPS_ID yang duplikat itu hanya terjadi sampai baris 1422. Setelah itu benar....

Saya jadi lega. Kirain 21rb entry salah semua :-)

@rulimanurung
Copy link

Kayaknya saya perlu belajar Rails nih :-)

@fajran
Copy link
Author

fajran commented Jul 13, 2014

Gak nyangka ada kelurahan dengan nama yang sama di dalam sebuah kecamatan :D

ini data yang baru https://raw.githubusercontent.com/fajran/realcount/c45f9714912c926bdb62abe65a12d4fe8f1b9275/db/lokasi.csv

@akiratosetiawan
Copy link

@fajran ini TPS id-nya dapetnya ngurut aja ya jadinya? Yang muncul duluan counting indexnya? Atau ada data yang udah ada TPS id-nya? :-)

@rulimanurung
Copy link

Thanks fajran untuk update-nya.

Iya, TPS id-nya memang begitu aja, ngurut 1 sampai n. Toh nama file JPG-nya di auto-generate berdasarkan format http://scanc1.kpu.go.id/view.php?f=00[kel_id][num_tps][num_scan].jpg (where num_scan itu halaman 1 s/d 4).

@fajran
Copy link
Author

fajran commented Jul 13, 2014

Tuk keperluan ngambil gambar formulir sih cukup pake nomor urut. Jadi kalau jumlah TPS ada 4, anggap aja nomor TPS nya itu 1, 2, 3, dan 4. Mudah2an ngga ada yang artinya 10, 20, 30, 40 :D

Kolom ID TPS yang ada di tabel di website KPU itu belum ketahuan dipakai di mana.

@rulimanurung
Copy link

@fajran and @SeiryuZ -- saat ini @akiratosetiawan sudah fork di https://github.com/akiratosetiawan/realcount dan sedang berusaha memperbaiki DB-nya, kalau tertarik bantu silahkan merapat ke TKP :-)

@akiratosetiawan
Copy link

Saya sudah tulis Seed yang baru. Silahkan dicek kalau ada input monggo :-) Ini diskusinya tidak apa-apa kan dilanjutkan disini?

@fajran
Copy link
Author

fajran commented Jul 13, 2014

@akiratosetiawan perlu loop sebanyak jumlah tps tuk masukin data ke var
inserts dg tps_id bernilai antara 1 sampai N (jumlah tps)

Ngomong2 apakah berencana tuk melanjutkan data yg sudah terkumpul
sebelumnya atau mulai dari kosong?

Fajran Iman Rusadi-
http://fajran.web.id https://github.com/fajran
On 13 Jul 2014 14:23, "akiratosetiawan" [email protected] wrote:

Saya sudah tulis Seed yang baru. Silahkan dicek kalau ada input monggo :-)
Ini diskusinya tidak apa-apa kan dilanjutkan disini?


Reply to this email directly or view it on GitHub
#2 (comment).

@akiratosetiawan
Copy link

@fajran yup tadi saya coba dengan 100 data di development, belum semuanya.

Jadi rencananya, akan melanjutkan data yang sudah ada dari sebelumnya.
Caranya, akan dilakukan merge dari untuk setiap kelurahan ID dan TPS ID yang sama.

@rulimanurung
Copy link

Merge maksudnya gimana ya? Saya pikir sebaiknya setiap crowd_input itu tetap dipertahankan, jadi untuk TPS yang sudah di-entry berkali-kali, kita simpan multiple input. Harapannya nanti ada modul untuk view input per TPS, nah kita bisa tampilkan semua input yang ada.

@fajran
Copy link
Author

fajran commented Jul 13, 2014

Merge data yang redundan. Misalnya rows 1, 2, 3, 4 di tabel tps itu kan menunjuk TPS yang sama. Empat rows itu punya PK 1, 2, 3, dan 4 yang ditunjuk dari tabel crowd_input. Nah perlu ada langkah berikut supaya datanya menjadi bersih

  • Putuskan kalau PK 2, 3, dan 4 perlu diubah menjadi 1
  • Update tabel crowd_input, setiap ada yg punya tps_id (FK ke id di tabel tps) bernilai 2, 3, atau 4, ubah nilainya menjadi 1
  • Hapus entries di tabel tps dg id (PK) bernilai 2, 3, atau 4
  • Masukkan data TPS yang belum masuk ke tabel tps

@fajran
Copy link
Author

fajran commented Jul 13, 2014

btw.. langkah2 di atas itu belum saya verifikasi lagi.. jadi CMIIW :P

@akiratosetiawan
Copy link

Ini yang kepikiran daritadi. Intinya memindahkan foreign key dari table tps yang lama ke tps yang baru.

Kira-kira begini tahapannya:

  1. Baca dari table crowd_input, lalu cek tps_id-nya berapa, lalu refer ke table tps
  2. Dari table tps ketemu kelurahan_id dan tps_id.
  3. Cari kelurahan_id dan tps_id ke table tps yang baru, untuk ketemu id yang baru
  4. Update tps_id dari row yang di (1) dengan id yang baru yang didapat dari (3)

Setelah selesai, table tps yang lama sudah bisa diganti seluruhnya oleh table tps yang baru.

@fajran
Copy link
Author

fajran commented Jul 13, 2014

sepertinya cara @akiratosetiawan lebih sederhana :D

@rulimanurung
Copy link

OK, approach @fajran dan @akiratosetiawan dua-duanya mustinya bisa. Tapi kalau menurut saya, kenapa tidak PK di tabel tps diganti menjadi composite kelurahan_id dan tps_id saja? Lalu dari tabel crowd_inputs FK-nya e composite key tersebut. Apa composite key itu tidak diperkenankan di sini?

@rulimanurung
Copy link

BTW, seharusnya kelurahan_id dan tps_id di tabel lama dari @fikriauliya dan tabel baru dari @fajran itu sama kok kodenya.

@fajran
Copy link
Author

fajran commented Jul 13, 2014

@rulimanurung pakai composite key kalau dari segi database sih mestinya bisa2 aja. Tapi kayanya ini supaya lebih ngikut dengan konvensi di Ruby on Rails :P namun berhubung saya sendiri ngga pernah make RoR jadi mohon dikoreksi kalau asumsi ini salah.

@akiratosetiawan
Copy link

Finally, selesai juga. Sekarang sudah up versi yang komplit TPS-nya. TPS sudah diupdate beserta referensinya. Tapi ini datanya cara ngeceknya bener apa enggak gimana yah @fajran? :-D Soalnya kalau pake http://scanc1.kpu.go.id/viewp.php?f=#{self.kelurahan_id.rjust(7, '0')}#{self.tps_id.rjust(3, '0')}04.jpg gak nemu. Walaupun beberapa memang belum masuk scan C1-nya.

Selanjutnya yang perlu dibenahi adalah, kalau gambarnya return Not Found maka akan langsung ganti sampai gambarnya ketemu.

@fajran
Copy link
Author

fajran commented Jul 13, 2014

ngecek bener atau ngga data yang mana? data tps dan crowd_input yang sudah dirapikan?

@wongiseng
Copy link

Ada yang agak kurang jelas buat saya di seeds.rb.

Kode kelurahannya dari data fajran itu di col[0], tapi yang disimpan di kelurahan_id sekarang dari col[1] Kayanya yang di link image sekarang kode kecamatan.

Terus satu lagi, jumlah tps yang di col[4] kok gak kepake ya pas seeding? Emang gak kepake?

@rulimanurung
Copy link

Setuju sama @wongiseng harusnya kelurahan_id diambil dari col[0]. Lalu untuk yang tps_id harusnya pake col[4]. Saya agak bingung maksudnya indexTPS itu untuk apa. Menurut saya tidak perlu, tapi di baris 20 perlu looping for i = 1 to col[4], lalu baris 23-25 menginsert value tps_id dengan i. Jadi IMHO baris 20-25 diganti dengan ini:

for tps_id in 1..col[4].to_i
sql = "INSERT INTO tps_barus(desa, kelurahan_id, tps_id) VALUES ('#{desa}', '#{kelurahan_id}', '#{tps_id}')"
CONN.execute(sql)
end

Moga2 Ruby-nya bener :-)

@rulimanurung
Copy link

Kalau mau verify, mustinya bisa langsung cek saja pas klik "Lihat Hasil" lalu klik salah satu result yang sudah dimasukkan sebelumnya. Harusnya me-load valid scan form dan hasilnya klop dengan data yang di-entry...

@akiratosetiawan
Copy link

Hehe bingung ya :-D Sepemahaman saya, data yang dari @fajran, col[0] itu ID dari masing-masing TPS, col[1] itu kelurahan_ID, col[4] jumlah_TPS.

Kalau pakai cara @rulimanurung, ada beberapa TPS yang lokasinya tidak persis setelah induknya (kelurahannya), jadi misah agak jauh dibawah. Jadi pakai indexTPS array itu sebagai counter untuk ngitung tps_id-nya.

@rulimanurung
Copy link

Nggak begitu. Data @fajran tidak ada entry untuk individual TPS. Level 0 nasional, level 1 propinsi, level 2 kabupaten, level 3 kecamatan, level 4 kelurahan. col[0] menyatakan ID dari wilayah tersebut. Jadi untuk entry yang level 4, ID tersebut adalah kode ID kelurahan, untuk entry level 3, ID tersebut adalah kode ID kecamatan, dst. Dengan menelusuri col[1], kita bisa tahu posisi wilayah tsb. Dalam struktur nasional.

Jumlah TPS, kolom terakhir, menyatakan jumlah TPS yang terdapat pada wilayah tersebut. Jadi untuk sebuah kecamatan, jumlah TPSnya adalah total jumlah TPS di semua kelurahan child-nya. Semoga mencerahkan :-)

@wongiseng
Copy link

Kira-kira begini kalo saya coba implement algonya @rulimanurung. Coba di cek lagi dulu tapi, kayanya dari heroku pg:psql bener jumlah tps yang diinsert.

@fikriauliya
Copy link
Owner

"@rulimanurung pakai composite key kalau dari segi database sih mestinya bisa2 aja. Tapi kayanya ini supaya lebih ngikut dengan konvensi di Ruby on Rails :P namun berhubung saya sendiri ngga pernah make RoR jadi mohon dikoreksi kalau asumsi ini salah."

Benar, itu karena convention Rails yang otomatis bikin column id yang by default dipakai untuk foreign key. Rails allows customized ini, tapi saat itu saya ambil cara praktis (yet not really correct) saja :D

*Btw animonya ternyata cukup besar ya. Mari mampir sebentar di sini #10 :)

@wongiseng
Copy link

Ada pull request di sini : akiratosetiawan#1 Perubahan utama di seeds.rb sama update_crowd_inputs, ngelanjutin @akiratosetiawan. Kalau bisa dicek dan bener silahkan di merge, kalo gak ya gak papa (bukan RoR developer, jadi kemungkinan ngawur besar) :)

Test deployment yang saya tulis di comment pull request itu gak permanen setelah selesai ngetes ya dishutdown lagi, soal animo sebaiknya ya tetep satu servernya nanti, menurut gw mereka gak berminat punya deployment sendiri-sendiri.

@akiratosetiawan
Copy link

thanks @wongiseng :-)

@saprizayyid
Copy link

Menarik sedang nyimak dulu

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants